Commit 56b69dba authored by Biao She's avatar Biao She Committed by Commit Bot

Fix issues related to rect elements

This CL fixes two issues:
1. transitioned based on edge_color_ for foreground animation. Previously, we
transition based on center_color_.
2. use alpha channel in the SkColor correctly. Previously, the alpha channel
in SkColor didn't apply to its RGB channel before blending.

Bug: NONE
Change-Id: I3533c062d632412cd181d0ed89c770910e6d56e3
Reviewed-on: https://chromium-review.googlesource.com/747444
Commit-Queue: Biao She <bshe@chromium.org>
Reviewed-by: default avatarIan Vollick <vollick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#513122}
parent 5e9e6956
......@@ -192,6 +192,7 @@ test("vr_common_unittests") {
"databinding/vector_binding_unittest.cc",
"elements/exit_prompt_unittest.cc",
"elements/linear_layout_unittest.cc",
"elements/rect_unittest.cc",
"elements/spinner_unittest.cc",
"elements/throbber_unittest.cc",
"elements/transient_element_unittest.cc",
......
......@@ -25,7 +25,7 @@ void Rect::SetCenterColor(SkColor color) {
void Rect::SetEdgeColor(SkColor color) {
animation_player().TransitionColorTo(last_frame_time(), FOREGROUND_COLOR,
center_color_, color);
edge_color_, color);
}
void Rect::NotifyClientColorAnimated(SkColor color,
......
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/vr/elements/rect.h"
#include "base/memory/ptr_util.h"
#include "chrome/browser/vr/target_property.h"
#include "chrome/browser/vr/test/animation_utils.h"
#include "chrome/browser/vr/test/constants.h"
#include "chrome/browser/vr/ui_scene.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkColor.h"
namespace vr {
TEST(Rect, SetColorCorrectly) {
auto rect = base::MakeUnique<Rect>();
EXPECT_NE(SK_ColorCYAN, rect->edge_color());
EXPECT_NE(SK_ColorCYAN, rect->center_color());
rect->SetColor(SK_ColorCYAN);
EXPECT_EQ(SK_ColorCYAN, rect->edge_color());
EXPECT_EQ(SK_ColorCYAN, rect->center_color());
rect->SetEdgeColor(SK_ColorRED);
rect->SetCenterColor(SK_ColorBLUE);
EXPECT_EQ(SK_ColorRED, rect->edge_color());
EXPECT_EQ(SK_ColorBLUE, rect->center_color());
}
TEST(Rect, AnimateColorCorrectly) {
UiScene scene;
auto element = base::MakeUnique<Rect>();
Rect* rect = element.get();
scene.AddUiElement(kRoot, std::move(element));
rect->SetEdgeColor(SK_ColorRED);
rect->SetCenterColor(SK_ColorBLUE);
rect->SetTransitionedProperties({BACKGROUND_COLOR, FOREGROUND_COLOR});
rect->SetColor(SK_ColorBLACK);
scene.OnBeginFrame(MsToTicks(1), kForwardVector);
EXPECT_EQ(SK_ColorRED, rect->edge_color());
EXPECT_EQ(SK_ColorBLUE, rect->center_color());
scene.OnBeginFrame(MsToTicks(5000), kForwardVector);
EXPECT_EQ(SK_ColorBLACK, rect->edge_color());
EXPECT_EQ(SK_ColorBLACK, rect->center_color());
}
} // namespace vr
......@@ -318,7 +318,10 @@ static constexpr char const* kGradientQuadFragmentShader = SHADER(
float mask = 1.0 - step(1.0, length(v_CornerPosition));
// Add some noise to prevent banding artifacts in the gradient.
float n = (fract(dot(v_Position.xy, vec2(12345.67, 456.7))) - 0.5) / 255.0;
gl_FragColor = (color + n) * u_Opacity * mask;
color = color + n;
color = vec4(color.rgb * color.a, color.a);
gl_FragColor = color * u_Opacity * mask;
}
);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment