Commit 9f454719 authored by Christopher Grant's avatar Christopher Grant Committed by Commit Bot

VR: Omnibox color and layout refactoring.

This change restructures URL bar and omnibox code in several ways:

- Change all buttons to have transparent backgrounds, such that the
  UX-specified hover colors look correct.
- Enable background color animation on ALL buttons.
- Simplify the omnibox into a layout of transparent-background elements,
  with a single backblane (one element with rounded corners, background
  color and shadow).
- Make better use of layouts to remove instances of anchoring.
- Introduce helper functions to translate UX spec colors to constants.

BUG=821946

Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_vr;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I0dd6c9064cdec520ba45f0ad62aedf8fb4ad1364
Reviewed-on: https://chromium-review.googlesource.com/981050
Commit-Queue: Christopher Grant <cjgrant@chromium.org>
Reviewed-by: default avatarIan Vollick <vollick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#545957}
parent bb3fe724
......@@ -30,7 +30,9 @@ Button::Button(base::RepeatingCallback<void()> click_handler,
background->SetType(kTypeButtonBackground);
background->set_bubble_events(true);
background->set_contributes_to_parent_bounds(false);
background->SetTransitionedProperties({TRANSFORM});
background->SetColor(colors_.background);
background->SetTransitionedProperties(
{TRANSFORM, BACKGROUND_COLOR, FOREGROUND_COLOR});
background_ = background.get();
AddChild(std::move(background));
......
......@@ -16,7 +16,7 @@ TextFormatting ConvertClassification(
size_t text_length,
const ColorScheme& color_scheme) {
TextFormatting formatting;
formatting.push_back(TextFormattingAttribute(color_scheme.suggestion_text,
formatting.push_back(TextFormattingAttribute(color_scheme.url_bar_text,
gfx::Range(0, text_length)));
for (size_t i = 0; i < classifications.size(); ++i) {
......@@ -41,11 +41,8 @@ TextFormatting ConvertClassification(
}
if (classifications[i].style & ACMatchClassification::URL) {
formatting.push_back(TextFormattingAttribute(
color_scheme.suggestion_url_text, current_range));
} else if (classifications[i].style & ACMatchClassification::DIM) {
formatting.push_back(TextFormattingAttribute(
color_scheme.suggestion_dim_text, current_range));
formatting.push_back(
TextFormattingAttribute(color_scheme.hyperlink, current_range));
} else if (classifications[i].style & ACMatchClassification::INVISIBLE) {
formatting.push_back(
TextFormattingAttribute(SK_ColorTRANSPARENT, current_range));
......
......@@ -16,7 +16,6 @@ namespace vr {
namespace {
constexpr SkColor kDefaultColor = 0xFF000001;
constexpr SkColor kDimColor = 0xFF000002;
constexpr SkColor kUrlColor = 0xFF000003;
constexpr bool kNoOffset = false;
......@@ -29,21 +28,19 @@ TEST(OmniboxFormatting, MultiLine) {
ACMatchClassification(0, ACMatchClassification::NONE),
ACMatchClassification(1, ACMatchClassification::URL),
ACMatchClassification(2, ACMatchClassification::MATCH),
ACMatchClassification(3, ACMatchClassification::DIM),
ACMatchClassification(4, ACMatchClassification::INVISIBLE),
ACMatchClassification(3, ACMatchClassification::INVISIBLE),
};
size_t string_length = classifications.size();
ColorScheme color_scheme;
memset(&color_scheme, 0, sizeof(color_scheme));
color_scheme.suggestion_text = kDefaultColor;
color_scheme.suggestion_dim_text = kDimColor;
color_scheme.suggestion_url_text = kUrlColor;
color_scheme.url_bar_text = kDefaultColor;
color_scheme.hyperlink = kUrlColor;
TextFormatting formatting =
ConvertClassification(classifications, string_length, color_scheme);
ASSERT_EQ(formatting.size(), 6u);
ASSERT_EQ(formatting.size(), 5u);
EXPECT_EQ(formatting[0].type(), TextFormattingAttribute::COLOR);
EXPECT_EQ(formatting[0].color(), kDefaultColor);
......@@ -62,12 +59,8 @@ TEST(OmniboxFormatting, MultiLine) {
EXPECT_EQ(formatting[3].range(), gfx::Range(2, 3));
EXPECT_EQ(formatting[4].type(), TextFormattingAttribute::COLOR);
EXPECT_EQ(formatting[4].color(), kDimColor);
EXPECT_EQ(formatting[4].color(), SK_ColorTRANSPARENT);
EXPECT_EQ(formatting[4].range(), gfx::Range(3, 4));
EXPECT_EQ(formatting[5].type(), TextFormattingAttribute::COLOR);
EXPECT_EQ(formatting[5].color(), SK_ColorTRANSPARENT);
EXPECT_EQ(formatting[5].range(), gfx::Range(4, 5));
}
struct ElisionTestcase {
......
......@@ -68,7 +68,7 @@ static const char* g_ui_element_name_strings[] = {
"kOmniboxVisibilityControlForAudioPermissionPrompt",
"kOmniboxDmmRoot",
"kOmniboxRoot",
"kOmniboxContainer",
"kOmniboxBackground",
"kOmniboxTextField",
"kOmniboxTextFieldLayout",
"kOmniboxVoiceSearchButton",
......@@ -76,7 +76,6 @@ static const char* g_ui_element_name_strings[] = {
"kOmniboxSuggestions",
"kOmniboxSuggestionsOuterLayout",
"kOmniboxOuterLayout",
"kOmniboxOuterLayoutSpacer",
"kOmniboxShadow",
"k2dBrowsingVisibiltyControlForVoice",
"k2dBrowsingVisibilityControlForPrompt",
......
......@@ -67,7 +67,7 @@ enum UiElementName {
kOmniboxVisibilityControlForAudioPermissionPrompt,
kOmniboxDmmRoot,
kOmniboxRoot,
kOmniboxContainer,
kOmniboxBackground,
kOmniboxTextField,
kOmniboxTextFieldLayout,
kOmniboxVoiceSearchButton,
......@@ -75,7 +75,6 @@ enum UiElementName {
kOmniboxSuggestions,
kOmniboxSuggestionsOuterLayout,
kOmniboxOuterLayout,
kOmniboxOuterLayoutSpacer,
kOmniboxShadow,
k2dBrowsingVisibiltyControlForVoice,
k2dBrowsingVisibilityControlForPrompt,
......
......@@ -25,7 +25,7 @@ void UrlBar::SetToolbarState(const ToolbarState& state) {
texture_->SetToolbarState(state);
}
void UrlBar::SetColors(const UrlBarColors& colors) {
void UrlBar::SetColors(const UrlTextColors& colors) {
texture_->SetColors(colors);
}
......
......@@ -19,7 +19,7 @@ namespace vr {
class UrlBarTexture;
struct ToolbarState;
struct UrlBarColors;
struct UrlTextColors;
class UrlBar : public TexturedElement {
public:
......@@ -29,7 +29,7 @@ class UrlBar : public TexturedElement {
~UrlBar() override;
void SetToolbarState(const ToolbarState& state);
void SetColors(const UrlBarColors& colors);
void SetColors(const UrlTextColors& colors);
private:
UiTexture* GetTexture() const override;
......
......@@ -35,7 +35,7 @@ constexpr float kHeight = kUrlBarHeightDMM;
void SetEmphasis(RenderTextWrapper* render_text,
bool emphasis,
const gfx::Range& range,
const UrlBarColors& colors) {
const UrlTextColors& colors) {
SkColor color = emphasis ? colors.emphasized : colors.deemphasized;
if (range.IsValid()) {
render_text->ApplyColor(color, range);
......@@ -99,7 +99,7 @@ float UrlBarTexture::ToMeters(float pixels) const {
return pixels * kWidth / size_.width();
}
void UrlBarTexture::SetColors(const UrlBarColors& colors) {
void UrlBarTexture::SetColors(const UrlTextColors& colors) {
SetAndDirty(&colors_, colors);
}
......@@ -148,11 +148,10 @@ void UrlBarTexture::Draw(SkCanvas* canvas, const gfx::Size& texture_size) {
// static
// This method replicates behavior in OmniboxView::UpdateTextStyle().
void UrlBarTexture::ApplyUrlStyling(
const base::string16& formatted_url,
void UrlBarTexture::ApplyUrlStyling(const base::string16& formatted_url,
const url::Parsed& parsed,
RenderTextWrapper* render_text,
const UrlBarColors& colors) {
const UrlTextColors& colors) {
const url::Component& scheme = parsed.scheme;
const url::Component& host = parsed.host;
......
......@@ -31,14 +31,14 @@ class UrlBarTexture : public UiTexture {
gfx::Size GetPreferredTextureSize(int width) const override;
gfx::SizeF GetDrawnSize() const override;
void SetColors(const UrlBarColors& colors);
void SetColors(const UrlTextColors& colors);
void SetToolbarState(const ToolbarState& state);
protected:
static void ApplyUrlStyling(const base::string16& formatted_url,
const url::Parsed& parsed,
RenderTextWrapper* render_text,
const UrlBarColors& colors);
const UrlTextColors& colors);
private:
void Draw(SkCanvas* canvas, const gfx::Size& texture_size) override;
......@@ -47,7 +47,7 @@ class UrlBarTexture : public UiTexture {
gfx::SizeF size_;
ToolbarState state_;
UrlBarColors colors_;
UrlTextColors colors_;
base::Callback<void(UiUnsupportedMode)> failure_callback_;
......
......@@ -27,15 +27,10 @@ using security_state::SecurityLevel;
namespace vr {
// TODO(cjgrant): Use ColorScheme instead of hardcoded values
// where it makes sense.
static const SkColor kEmphasizedColor = SK_ColorBLACK;
static const SkColor kDeemphasizedColor = 0xFF5A5A5A;
constexpr SkColor kEmphasizedColor = 0x01010101;
constexpr SkColor kDeemphasizedColor = 0x02020202;
static const SkColor kIncognitoDeemphasizedColor = 0xCCFFFFFF;
static const SkColor kIncognitoEmphasizedColor = 0xFFFFFFFF;
static constexpr int kUrlWidthPixels = 1024;
constexpr int kUrlWidthPixels = 1024;
class TestUrlBarTexture : public UrlBarTexture {
public:
......@@ -62,8 +57,10 @@ class TestUrlBarTexture : public UrlBarTexture {
static void TestUrlStyling(const base::string16& formatted_url,
const url::Parsed& parsed,
security_state::SecurityLevel security_level,
vr::RenderTextWrapper* render_text,
const UrlBarColors& colors) {
vr::RenderTextWrapper* render_text) {
UrlTextColors colors;
colors.deemphasized = kDeemphasizedColor;
colors.emphasized = kEmphasizedColor;
ApplyUrlStyling(formatted_url, parsed, render_text, colors);
}
......@@ -102,7 +99,11 @@ TestUrlBarTexture::TestUrlBarTexture()
base::BindRepeating(&TestUrlBarTexture::OnUnsupportedFeature,
base::Unretained(this))) {
gfx::FontList::SetDefaultFontDescription("Arial, Times New Roman, 15px");
SetColors(ColorScheme::GetColorScheme(ColorScheme::kModeNormal).url_bar);
UrlTextColors colors;
colors.deemphasized = kDeemphasizedColor;
colors.emphasized = kEmphasizedColor;
SetColors(colors);
SetBackgroundColor(SK_ColorBLACK);
SetForegroundColor(SK_ColorWHITE);
}
......@@ -118,12 +119,7 @@ class UrlEmphasisTest : public testing::Test {
url, GetVrFormatUrlTypes(), net::UnescapeRule::NORMAL, &parsed, nullptr,
nullptr);
EXPECT_EQ(formatted_url, base::UTF8ToUTF16(expected_string));
TestUrlBarTexture::TestUrlStyling(
formatted_url, parsed, level, &mock_,
ColorScheme::GetColorScheme(ColorScheme::kModeNormal).url_bar);
TestUrlBarTexture::TestUrlStyling(
formatted_url, parsed, level, &mock_,
ColorScheme::GetColorScheme(ColorScheme::kModeIncognito).url_bar);
TestUrlBarTexture::TestUrlStyling(formatted_url, parsed, level, &mock_);
}
testing::InSequence in_sequence_;
......@@ -143,16 +139,12 @@ TEST(UrlBarTextureTest, WillNotFailOnNonAsciiURLs) {
TEST_F(UrlEmphasisTest, SecureHttpsHost) {
EXPECT_CALL(mock_, SetColor(kDeemphasizedColor));
EXPECT_CALL(mock_, ApplyColor(kEmphasizedColor, gfx::Range(0, 8)));
EXPECT_CALL(mock_, SetColor(kIncognitoDeemphasizedColor));
EXPECT_CALL(mock_, ApplyColor(kIncognitoEmphasizedColor, gfx::Range(0, 8)));
Verify("https://host.com/page", SecurityLevel::SECURE, "host.com/page");
}
TEST_F(UrlEmphasisTest, NotSecureHttpsHost) {
EXPECT_CALL(mock_, SetColor(kDeemphasizedColor));
EXPECT_CALL(mock_, ApplyColor(kEmphasizedColor, gfx::Range(0, 8)));
EXPECT_CALL(mock_, SetColor(kIncognitoDeemphasizedColor));
EXPECT_CALL(mock_, ApplyColor(kIncognitoEmphasizedColor, gfx::Range(0, 8)));
Verify("https://host.com/page", SecurityLevel::HTTP_SHOW_WARNING,
"host.com/page");
}
......@@ -160,8 +152,6 @@ TEST_F(UrlEmphasisTest, NotSecureHttpsHost) {
TEST_F(UrlEmphasisTest, NotSecureHttpHost) {
EXPECT_CALL(mock_, SetColor(kDeemphasizedColor));
EXPECT_CALL(mock_, ApplyColor(kEmphasizedColor, gfx::Range(0, 8)));
EXPECT_CALL(mock_, SetColor(kIncognitoDeemphasizedColor));
EXPECT_CALL(mock_, ApplyColor(kIncognitoEmphasizedColor, gfx::Range(0, 8)));
Verify("http://host.com/page", SecurityLevel::HTTP_SHOW_WARNING,
"host.com/page");
}
......@@ -169,8 +159,6 @@ TEST_F(UrlEmphasisTest, NotSecureHttpHost) {
TEST_F(UrlEmphasisTest, Data) {
EXPECT_CALL(mock_, SetColor(kDeemphasizedColor));
EXPECT_CALL(mock_, ApplyColor(kEmphasizedColor, gfx::Range(0, 4)));
EXPECT_CALL(mock_, SetColor(kIncognitoDeemphasizedColor));
EXPECT_CALL(mock_, ApplyColor(kIncognitoEmphasizedColor, gfx::Range(0, 4)));
Verify("data:text/html,lots of data", SecurityLevel::NONE,
"data:text/html,lots of data");
}
......
......@@ -13,6 +13,25 @@ namespace vr {
namespace {
SkColor BuildColor(uint32_t color, int percentage) {
DCHECK_GE(percentage, 0);
DCHECK_LE(percentage, 100);
return (static_cast<uint8_t>((2.55f * percentage + 0.5)) << 24) | color;
}
SkColor MakeColor(uint32_t color, int percentage) {
DCHECK(!(color & 0xFF000000));
return BuildColor(color, percentage);
}
SkColor MakeBlack(int percentage) {
return BuildColor(0, percentage);
}
SkColor MakeWhite(int percentage) {
return BuildColor(0xFFFFFF, percentage);
}
base::LazyInstance<ColorScheme>::Leaky g_normal_scheme =
LAZY_INSTANCE_INITIALIZER;
base::LazyInstance<ColorScheme>::Leaky g_fullscreen_scheme =
......@@ -31,17 +50,11 @@ void InitializeColorSchemes() {
normal_scheme.ceiling = normal_scheme.floor;
normal_scheme.floor_grid = 0x26FFFFFF;
normal_scheme.web_vr_background = SK_ColorBLACK;
normal_scheme.element_foreground = 0xFF333333;
normal_scheme.element_background = 0xCCB3B3B3;
normal_scheme.element_background_hover = 0xCCE3E3E3;
normal_scheme.element_background_down = 0xCCF3F3F3;
normal_scheme.button_colors.foreground = 0x87000000;
normal_scheme.button_colors.background = normal_scheme.element_background;
normal_scheme.button_colors.background_hover =
normal_scheme.element_background_hover;
normal_scheme.button_colors.background_down =
normal_scheme.element_background_down;
normal_scheme.button_colors.foreground_disabled = 0x33333333;
normal_scheme.disc_button_colors.foreground = 0x87000000;
normal_scheme.disc_button_colors.foreground_disabled = 0x33333333;
normal_scheme.disc_button_colors.background = 0xCCB3B3B3;
normal_scheme.disc_button_colors.background_hover = 0xCCE3E3E3;
normal_scheme.disc_button_colors.background_down = 0xCCF3F3F3;
normal_scheme.loading_indicator_foreground = 0xFF2979FF;
normal_scheme.loading_indicator_background = 0xFF454545;
normal_scheme.exit_warning_foreground = SK_ColorWHITE;
......@@ -50,14 +63,12 @@ void InitializeColorSchemes() {
normal_scheme.web_vr_transient_toast_background = SK_ColorBLACK;
normal_scheme.exclusive_screen_toast_foreground = 0xCCFFFFFF;
normal_scheme.exclusive_screen_toast_background = 0xCC2F2F2F;
normal_scheme.system_indicator_foreground = SK_ColorWHITE;
normal_scheme.system_indicator_background = 0x99212121;
normal_scheme.modal_prompt_icon_foreground = 0xFF4285F4;
normal_scheme.modal_prompt_background = 0xFFF5F5F5;
normal_scheme.modal_prompt_foreground = 0xFF333333;
normal_scheme.modal_prompt_secondary_button_colors.foreground = 0xFF4285F4;
normal_scheme.modal_prompt_secondary_button_colors.foreground_disabled =
normal_scheme.button_colors.foreground_disabled;
normal_scheme.disc_button_colors.foreground_disabled;
normal_scheme.modal_prompt_secondary_button_colors.background =
normal_scheme.modal_prompt_background;
normal_scheme.modal_prompt_secondary_button_colors.background_hover =
......@@ -67,24 +78,11 @@ void InitializeColorSchemes() {
normal_scheme.modal_prompt_primary_button_colors.foreground =
normal_scheme.modal_prompt_background;
normal_scheme.modal_prompt_secondary_button_colors.foreground_disabled =
normal_scheme.button_colors.foreground_disabled;
normal_scheme.disc_button_colors.foreground_disabled;
normal_scheme.modal_prompt_primary_button_colors.background = 0xFF4285F4;
normal_scheme.modal_prompt_primary_button_colors.background_hover =
0xFF3E7DE6;
normal_scheme.modal_prompt_primary_button_colors.background_down = 0xFF3E7DE6;
normal_scheme.url_bar_button.background = SK_ColorTRANSPARENT;
normal_scheme.url_bar_button.background_down =
normal_scheme.element_background_down;
normal_scheme.url_bar_button.background_hover =
normal_scheme.element_background_hover;
normal_scheme.url_bar_button.foreground = normal_scheme.element_foreground;
normal_scheme.url_bar_button.foreground_disabled = 0x33333333;
normal_scheme.url_bar_separator = 0xFF9E9E9E;
normal_scheme.url_bar_hint_text = 0xFF5A5A5A;
normal_scheme.url_bar_default_icon = 0xFF535353;
normal_scheme.url_bar_dangerous_icon = gfx::kGoogleRed700;
normal_scheme.url_bar.deemphasized = 0xFF5A5A5A;
normal_scheme.url_bar.emphasized = SK_ColorBLACK;
normal_scheme.prompt_foreground = 0xCC000000;
normal_scheme.prompt_primary_button_colors.foreground = 0xA6000000;
normal_scheme.prompt_primary_button_colors.foreground_disabled = 0xA6000000;
......@@ -96,6 +94,25 @@ void InitializeColorSchemes() {
normal_scheme.prompt_secondary_button_colors.background = 0x66FFFFFF;
normal_scheme.prompt_secondary_button_colors.background_hover = 0xFFFFFFFF;
normal_scheme.prompt_secondary_button_colors.background_down = 0xE6FFFFFF;
normal_scheme.url_bar_background = 0xCCB3B3B3;
normal_scheme.url_bar_separator = MakeBlack(12);
normal_scheme.url_bar_text = MakeBlack(65);
normal_scheme.url_bar_hint_text = MakeBlack(50);
normal_scheme.url_bar_dangerous_icon = gfx::kGoogleRed700;
normal_scheme.url_bar_button.background = SK_ColorTRANSPARENT;
normal_scheme.url_bar_button.background_hover = MakeBlack(8);
normal_scheme.url_bar_button.background_down = MakeBlack(8);
normal_scheme.url_bar_button.foreground = MakeBlack(65);
normal_scheme.url_bar_button.foreground_disabled = MakeBlack(24);
normal_scheme.url_text.deemphasized = MakeBlack(30);
normal_scheme.url_text.emphasized = MakeBlack(80);
normal_scheme.omnibox_background = 0xFFEEEEEE;
normal_scheme.omnibox_text_selection.cursor = 0xFF5595FE; // TODO
normal_scheme.omnibox_text_selection.background = 0xFFC6DAFC; // TODO
normal_scheme.omnibox_text_selection.foreground = normal_scheme.url_bar_text;
normal_scheme.hyperlink = MakeColor(0x4285F4, 100);
normal_scheme.dimmer_inner = 0xCC0D0D0D;
normal_scheme.dimmer_outer = 0xE6000000;
normal_scheme.splash_screen_background = SK_ColorBLACK;
......@@ -105,30 +122,6 @@ void InitializeColorSchemes() {
normal_scheme.web_vr_timeout_message_foreground =
normal_scheme.web_vr_timeout_spinner;
normal_scheme.speech_recognition_circle_background = 0xFF4285F4;
normal_scheme.omnibox_background = 0xFFEEEEEE;
normal_scheme.omnibox_icon = 0xA6000000;
normal_scheme.omnibox_text = 0xFF595959;
normal_scheme.omnibox_hint = 0xFF999999;
normal_scheme.omnibox_text_selection.cursor = 0xFF5595FE;
normal_scheme.omnibox_text_selection.background = 0xFFC6DAFC;
normal_scheme.omnibox_text_selection.foreground = normal_scheme.omnibox_text;
normal_scheme.suggestion_text = 0xFF595959;
normal_scheme.suggestion_dim_text = 0xFF999999;
normal_scheme.suggestion_url_text = 0xFF5595FE;
normal_scheme.suggestion_button_colors.foreground =
normal_scheme.suggestion_text;
normal_scheme.suggestion_button_colors.background =
normal_scheme.omnibox_background;
normal_scheme.suggestion_button_colors.background_hover = 0xFFE0E0E0;
normal_scheme.suggestion_button_colors.background_down = 0xFFE0E0E0;
normal_scheme.omnibox_voice_search_button_colors.foreground =
normal_scheme.suggestion_text;
normal_scheme.omnibox_voice_search_button_colors.background =
normal_scheme.omnibox_background;
normal_scheme.omnibox_voice_search_button_colors.background_hover =
0x14000000;
normal_scheme.omnibox_voice_search_button_colors.background_down = 0x14000000;
normal_scheme.snackbar_foreground = 0xFFEEEEEE;
normal_scheme.snackbar_background = 0xDD212121;
normal_scheme.snackbar_button_colors.background =
......@@ -169,26 +162,12 @@ void InitializeColorSchemes() {
fullscreen_scheme.floor = 0xFF070F1C;
fullscreen_scheme.ceiling = 0xFF04080F;
fullscreen_scheme.floor_grid = 0x40A3E0FF;
fullscreen_scheme.element_foreground = 0x80FFFFFF;
fullscreen_scheme.element_background = 0xCC2B3E48;
fullscreen_scheme.element_background_hover = 0xCC536B77;
fullscreen_scheme.element_background_down = 0xCC96AFBB;
fullscreen_scheme.button_colors.foreground =
fullscreen_scheme.element_foreground;
fullscreen_scheme.button_colors.foreground_disabled =
fullscreen_scheme.element_foreground;
fullscreen_scheme.button_colors.background =
fullscreen_scheme.element_background;
fullscreen_scheme.button_colors.background_hover =
fullscreen_scheme.element_background_hover;
fullscreen_scheme.button_colors.background_down =
fullscreen_scheme.element_background_down;
fullscreen_scheme.system_indicator_foreground =
fullscreen_scheme.element_foreground;
fullscreen_scheme.system_indicator_background =
fullscreen_scheme.element_background;
fullscreen_scheme.disc_button_colors.foreground = 0x80FFFFFF;
fullscreen_scheme.disc_button_colors.foreground_disabled = 0x80FFFFFF;
fullscreen_scheme.disc_button_colors.background = 0xCC2B3E48;
fullscreen_scheme.disc_button_colors.background_hover = 0xCC536B77;
fullscreen_scheme.disc_button_colors.background_down = 0xCC96AFBB;
fullscreen_scheme.normal_factor = 0.0f;
fullscreen_scheme.incognito_factor = 0.0f;
......@@ -200,41 +179,13 @@ void InitializeColorSchemes() {
incognito_scheme.floor = 0xFF282828;
incognito_scheme.ceiling = 0xFF2F2F2F;
incognito_scheme.floor_grid = 0xCC595959;
incognito_scheme.element_foreground = 0xFFFFFFFF;
incognito_scheme.element_background = 0xFF454545;
incognito_scheme.element_background_hover = 0xCC505050;
incognito_scheme.element_background_down = 0xCC888888;
incognito_scheme.button_colors.foreground =
fullscreen_scheme.element_foreground;
incognito_scheme.button_colors.foreground_disabled = 0x33E6E6E6;
incognito_scheme.button_colors.background =
fullscreen_scheme.element_background;
incognito_scheme.button_colors.background_hover =
fullscreen_scheme.element_background_hover;
incognito_scheme.button_colors.background_down =
fullscreen_scheme.element_background_down;
incognito_scheme.system_indicator_foreground =
incognito_scheme.element_foreground;
incognito_scheme.system_indicator_background =
incognito_scheme.element_background;
incognito_scheme.url_bar_button.background =
incognito_scheme.element_background;
incognito_scheme.url_bar_button.background_down =
incognito_scheme.element_background_down;
incognito_scheme.url_bar_button.background_hover =
incognito_scheme.element_background_hover;
incognito_scheme.url_bar_button.foreground =
incognito_scheme.element_foreground;
incognito_scheme.url_bar_button.foreground_disabled = 0x33E6E6E6;
incognito_scheme.url_bar_separator = 0x1FFFFFFF;
incognito_scheme.url_bar_hint_text = 0xCCFFFFFF;
incognito_scheme.url_bar_default_icon = SK_ColorWHITE;
incognito_scheme.url_bar_dangerous_icon = SK_ColorWHITE;
incognito_scheme.url_bar_separator = incognito_scheme.url_bar_separator;
incognito_scheme.url_bar.deemphasized = 0xCCFFFFFF;
incognito_scheme.url_bar.emphasized = SK_ColorWHITE;
incognito_scheme.disc_button_colors.foreground = 0x80FFFFFF;
incognito_scheme.disc_button_colors.foreground_disabled = 0x33E6E6E6;
incognito_scheme.disc_button_colors.background = 0xCC2B3E48;
incognito_scheme.disc_button_colors.background_hover = 0xCC505050;
incognito_scheme.disc_button_colors.background_down = 0xCC888888;
incognito_scheme.prompt_foreground = 0xCCFFFFFF;
incognito_scheme.prompt_primary_button_colors.foreground = 0xD9000000;
incognito_scheme.prompt_primary_button_colors.foreground_disabled =
......@@ -248,23 +199,22 @@ void InitializeColorSchemes() {
incognito_scheme.prompt_secondary_button_colors.background = 0x80FFFFFF;
incognito_scheme.prompt_secondary_button_colors.background_hover = 0xFF8C8C8C;
incognito_scheme.prompt_secondary_button_colors.background_down = 0xE6FFFFFF;
incognito_scheme.omnibox_background = 0xFF454545;
incognito_scheme.omnibox_icon = 0xCCFFFFFF;
incognito_scheme.omnibox_text = 0xCCFFFFFF;
incognito_scheme.omnibox_hint = 0x80FFFFFF;
incognito_scheme.url_bar_background = 0xFF454545;
incognito_scheme.url_bar_separator = MakeWhite(12);
incognito_scheme.url_bar_text = MakeWhite(65);
incognito_scheme.url_bar_hint_text = MakeWhite(50);
incognito_scheme.url_bar_dangerous_icon = SK_ColorWHITE;
incognito_scheme.url_bar_button.background_hover = MakeWhite(8);
incognito_scheme.url_bar_button.background_down = MakeWhite(8);
incognito_scheme.url_bar_button.foreground = MakeWhite(65);
incognito_scheme.url_bar_button.foreground_disabled = MakeWhite(24);
incognito_scheme.url_text.deemphasized = MakeWhite(30);
incognito_scheme.url_text.emphasized = MakeWhite(80);
incognito_scheme.omnibox_background = incognito_scheme.url_bar_background;
incognito_scheme.omnibox_text_selection.foreground =
incognito_scheme.omnibox_text;
incognito_scheme.omnibox_text_selection.background =
incognito_scheme.omnibox_text_selection.cursor;
incognito_scheme.suggestion_text = 0xCCFFFFFF;
incognito_scheme.suggestion_dim_text = 0x88FFFFFF;
incognito_scheme.suggestion_url_text = 0xFF5595FE;
incognito_scheme.suggestion_button_colors.foreground =
incognito_scheme.suggestion_text;
incognito_scheme.suggestion_button_colors.background =
incognito_scheme.omnibox_background;
incognito_scheme.suggestion_button_colors.background_hover = 0xFF656565;
incognito_scheme.suggestion_button_colors.background_down = 0xFF656565;
incognito_scheme.url_bar_text;
incognito_scheme.omnibox_text_selection.background = MakeWhite(8);
incognito_scheme.normal_factor = 0.0f;
incognito_scheme.incognito_factor = 1.0f;
......@@ -274,7 +224,7 @@ void InitializeColorSchemes() {
}
static constexpr size_t kButtonColorsSize = 20;
static constexpr size_t kUrlBarColorsSize = 8;
static constexpr size_t kUrlTextColorsSize = 8;
} // namespace
......@@ -311,15 +261,16 @@ SkColor ButtonColors::GetForegroundColor(bool disabled) const {
return disabled ? foreground_disabled : foreground;
}
static_assert(kUrlBarColorsSize == sizeof(UrlBarColors),
"If the new colors are added to UrlBarColors, we must explicitly "
static_assert(
kUrlTextColorsSize == sizeof(UrlTextColors),
"If the new colors are added to UrlTextColors, we must explicitly "
"bump this size and update operator== below");
bool UrlBarColors::operator==(const UrlBarColors& other) const {
bool UrlTextColors::operator==(const UrlTextColors& other) const {
return deemphasized == other.deemphasized && emphasized == other.emphasized;
}
bool UrlBarColors::operator!=(const UrlBarColors& other) const {
bool UrlTextColors::operator!=(const UrlTextColors& other) const {
return !(*this == other);
}
......@@ -344,73 +295,23 @@ const ColorScheme& ColorScheme::GetColorScheme(ColorScheme::Mode mode) {
void ColorScheme::UpdateForComponent(const base::Version& component_version) {
if (component_version >= AssetsLoader::MinVersionWithGradients()) {
ColorScheme& normal_scheme = g_normal_scheme.Get();
normal_scheme.element_background = 0xFFEEEEEE;
normal_scheme.element_background_hover = 0xFFFFFFFF;
normal_scheme.button_colors.foreground = 0xA6000000;
normal_scheme.button_colors.background = 0xCCEEEEEE;
normal_scheme.button_colors.foreground_disabled = 0x33000000;
normal_scheme.url_bar_separator = 0xFFD0D0D0;
normal_scheme.url_bar_hint_text = 0x61333333;
normal_scheme.url_bar_button.background_down =
normal_scheme.element_background_down;
normal_scheme.url_bar_button.background_hover =
normal_scheme.element_background_hover;
normal_scheme.url_bar_button.foreground = normal_scheme.element_foreground;
normal_scheme.url_bar_button.foreground_disabled = 0x33333333;
normal_scheme.url_bar.deemphasized = 0x61333333;
normal_scheme.url_bar.emphasized = 0xFF333333;
normal_scheme.button_colors.background = normal_scheme.element_background;
normal_scheme.button_colors.background_hover =
normal_scheme.element_background_hover;
normal_scheme.button_colors.background_down =
normal_scheme.element_background_down;
normal_scheme.system_indicator_foreground =
normal_scheme.element_foreground;
normal_scheme.system_indicator_background =
normal_scheme.element_background;
normal_scheme.disc_button_colors.foreground = 0xA6000000;
normal_scheme.disc_button_colors.foreground_disabled = 0x33000000;
normal_scheme.disc_button_colors.background = 0xFFEEEEEE;
normal_scheme.disc_button_colors.background_hover = SK_ColorWHITE;
normal_scheme.modal_prompt_secondary_button_colors.foreground_disabled =
normal_scheme.button_colors.foreground_disabled;
normal_scheme.disc_button_colors.foreground_disabled;
normal_scheme.modal_prompt_secondary_button_colors.background =
normal_scheme.modal_prompt_background;
normal_scheme.url_bar_background = MakeColor(0xEEEEEE, 87);
normal_scheme.omnibox_background = MakeColor(0xEEEEEE, 100);
ColorScheme& incognito_scheme = g_incognito_scheme.Get();
incognito_scheme.element_foreground = 0xA6FFFFFF;
incognito_scheme.element_background = 0xFF263238;
incognito_scheme.element_background_hover = 0xCC404A50;
incognito_scheme.element_background_down = 0xCC212B31;
incognito_scheme.url_bar_separator = 0xFF445056;
incognito_scheme.url_bar_hint_text = 0x80FFFFFF;
incognito_scheme.url_bar_default_icon = 0xA7FFFFFF;
incognito_scheme.url_bar_dangerous_icon = 0xA7FFFFFF;
incognito_scheme.url_bar.deemphasized = 0x80FFFFFF;
incognito_scheme.url_bar.emphasized = 0xCCFFFFFF;
incognito_scheme.omnibox_background = incognito_scheme.element_background;
incognito_scheme.omnibox_icon = 0xA7FFFFFF;
incognito_scheme.button_colors.background =
incognito_scheme.element_background;
incognito_scheme.button_colors.background_hover =
incognito_scheme.element_background_hover;
incognito_scheme.button_colors.background_down =
incognito_scheme.element_background_down;
incognito_scheme.system_indicator_foreground =
incognito_scheme.element_foreground;
incognito_scheme.system_indicator_background =
incognito_scheme.element_background;
incognito_scheme.url_bar_button.background_down =
incognito_scheme.element_background_down;
incognito_scheme.url_bar_button.background_hover = 0xFF445056;
incognito_scheme.url_bar_button.foreground =
incognito_scheme.element_foreground;
incognito_scheme.suggestion_button_colors.foreground =
incognito_scheme.suggestion_text;
incognito_scheme.suggestion_button_colors.background =
incognito_scheme.omnibox_background;
incognito_scheme.suggestion_button_colors.background_hover = 0xFF3A464C;
incognito_scheme.suggestion_button_colors.background_down = 0xFF3A464C;
incognito_scheme.disc_button_colors.background = MakeColor(0x263238, 100);
incognito_scheme.disc_button_colors.background_hover = 0xCC404A50;
incognito_scheme.disc_button_colors.background_down = 0xCC212B31;
incognito_scheme.url_bar_background = MakeColor(0x263238, 87);
incognito_scheme.omnibox_background = MakeColor(0x263238, 100);
}
}
......
......@@ -17,16 +17,16 @@ struct ButtonColors {
SkColor GetBackgroundColor(bool hovered, bool pressed) const;
SkColor GetForegroundColor(bool disabled) const;
SkColor background = SK_ColorBLACK;
SkColor background_hover = SK_ColorBLACK;
SkColor background_down = SK_ColorBLACK;
SkColor background = SK_ColorTRANSPARENT;
SkColor background_hover = SK_ColorTRANSPARENT;
SkColor background_down = SK_ColorTRANSPARENT;
SkColor foreground = SK_ColorBLACK;
SkColor foreground_disabled = SK_ColorBLACK;
};
struct UrlBarColors {
bool operator==(const UrlBarColors& other) const;
bool operator!=(const UrlBarColors& other) const;
struct UrlTextColors {
bool operator==(const UrlTextColors& other) const;
bool operator!=(const UrlTextColors& other) const;
SkColor deemphasized = SK_ColorBLACK;
SkColor emphasized = SK_ColorBLACK;
};
......@@ -61,16 +61,9 @@ struct ColorScheme {
SkColor floor_grid;
SkColor web_vr_background;
// The foreground color is used for text and sometimes for icons.
SkColor element_foreground;
// The background color is used behind text or icons in the foreground color.
// The related hover and down colors are to be used for buttons.
SkColor element_background;
SkColor element_background_hover;
SkColor element_background_down;
ButtonColors disc_button_colors;
// Specific element background and foregrounds
ButtonColors button_colors;
SkColor loading_indicator_foreground;
SkColor loading_indicator_background;
SkColor exit_warning_foreground;
......@@ -79,8 +72,6 @@ struct ColorScheme {
SkColor web_vr_transient_toast_background;
SkColor exclusive_screen_toast_foreground;
SkColor exclusive_screen_toast_background;
SkColor system_indicator_foreground;
SkColor system_indicator_background;
SkColor modal_prompt_icon_foreground;
SkColor modal_prompt_background;
SkColor modal_prompt_foreground;
......@@ -92,12 +83,16 @@ struct ColorScheme {
ButtonColors prompt_secondary_button_colors;
ButtonColors prompt_primary_button_colors;
ButtonColors url_bar_button;
SkColor url_bar_background;
SkColor url_bar_separator;
SkColor url_bar_text;
SkColor url_bar_hint_text;
SkColor url_bar_default_icon;
SkColor url_bar_dangerous_icon;
UrlBarColors url_bar;
ButtonColors url_bar_button;
UrlTextColors url_text;
SkColor omnibox_background;
TextSelectionColors omnibox_text_selection;
SkColor hyperlink;
ButtonColors indicator;
......@@ -113,17 +108,6 @@ struct ColorScheme {
SkColor speech_recognition_circle_background;
SkColor omnibox_background;
SkColor omnibox_icon;
SkColor omnibox_text;
SkColor omnibox_hint;
TextSelectionColors omnibox_text_selection;
SkColor suggestion_text;
SkColor suggestion_dim_text;
SkColor suggestion_url_text;
ButtonColors omnibox_voice_search_button_colors;
ButtonColors suggestion_button_colors;
SkColor snackbar_background;
SkColor snackbar_foreground;
ButtonColors snackbar_button_colors;
......
......@@ -84,9 +84,6 @@ VrTestContext::VrTestContext() : view_scale_factor_(kDefaultViewScaleFactor) {
base::i18n::InitializeICU();
// TODO(cjgrant): Remove this when the keyboard is enabled by default.
base::FeatureList::InitializeInstance("VrBrowserKeyboard", "");
text_input_delegate_ = std::make_unique<TextInputDelegate>();
keyboard_delegate_ = std::make_unique<TestKeyboardDelegate>();
......@@ -527,6 +524,11 @@ void VrTestContext::OnContentScreenBoundsChanged(const gfx::SizeF& bounds) {}
void VrTestContext::StartAutocomplete(const AutocompleteRequest& request) {
auto result = std::make_unique<OmniboxSuggestions>();
if (request.text.empty()) {
ui_->SetOmniboxSuggestions(std::move(result));
return;
}
// Supply an in-line match if the input matches a canned URL.
base::string16 full_string = base::UTF8ToUTF16("wikipedia.org");
if (!request.prevent_inline_autocomplete && request.text.size() >= 2 &&
......
......@@ -199,7 +199,7 @@ static constexpr float kOmniboxShadowIntensity = 0.4f;
static constexpr int kOmniboxTransitionMs = 300;
static constexpr float kOmniboxTextFieldIconButtonSizeDMM = 0.064f;
static constexpr float kOmniboxTextFieldIconButtonHoverOffsetDMM = 0.012f;
static constexpr float kUrlBarButtonHoverOffsetDMM = 0.012f;
static constexpr float kOmniboxTextFieldRightMargin =
((kOmniboxHeightDMM - kOmniboxTextFieldIconButtonSizeDMM) / 2);
......
......@@ -146,8 +146,9 @@ void OnSuggestionModelAdded(UiScene* scene,
icon->SetDrawPhase(kPhaseForeground);
icon->SetType(kTypeOmniboxSuggestionIcon);
icon->SetSize(kSuggestionIconSizeDMM, kSuggestionIconSizeDMM);
VR_BIND_COLOR(model, icon.get(), &ColorScheme::omnibox_icon,
&VectorIcon::SetColor);
icon->AddBinding(VR_BIND_FUNC(SkColor, Model, model,
model->color_scheme().url_bar_button.foreground,
VectorIcon, icon.get(), SetColor));
VectorIcon* p_icon = icon.get();
auto icon_box = std::make_unique<UiElement>();
......@@ -208,8 +209,7 @@ void OnSuggestionModelAdded(UiScene* scene,
background->set_bubble_events(true);
background->set_bounds_contain_children(true);
background->set_hover_offset(0.0);
VR_BIND_BUTTON_COLORS(model, background.get(),
&ColorScheme::suggestion_button_colors,
VR_BIND_BUTTON_COLORS(model, background.get(), &ColorScheme::url_bar_button,
&Button::SetButtonColors);
background->AddChild(std::move(suggestion_layout));
......@@ -285,26 +285,6 @@ std::unique_ptr<TransientElement> CreateTransientParent(UiElementName name,
return element;
}
std::unique_ptr<Rect> CreateOmniboxSpacer(Model* model) {
auto spacer = Create<Rect>(kNone, kPhaseForeground);
spacer->SetType(kTypeSpacer);
spacer->SetSize(kOmniboxWidthDMM, kSuggestionVerticalPaddingDMM);
spacer->set_focusable(false);
spacer->set_hit_testable(true);
spacer->AddBinding(std::make_unique<Binding<bool>>(
VR_BIND_LAMBDA([](Model* m) { return !m->omnibox_suggestions.empty(); },
base::Unretained(model)),
VR_BIND_LAMBDA(
[](UiElement* e, const bool& v) {
e->SetVisible(v);
e->set_requires_layout(v);
},
base::Unretained(spacer.get()))));
VR_BIND_COLOR(model, spacer.get(), &ColorScheme::omnibox_background,
&Rect::SetColor);
return spacer;
}
// Util to bind the visibility of the given control element to the given
// property in the model and the visibility of the voice search UI root.
#define BIND_VISIBILITY_CONTROL_FOR_VOICE(control_element, model, property) \
......@@ -323,6 +303,7 @@ std::unique_ptr<Rect> CreateOmniboxSpacer(Model* model) {
std::unique_ptr<UiElement> CreateSpacer(float width, float height) {
auto spacer = Create<UiElement>(kNone, kPhaseNone);
spacer->SetType(kTypeSpacer);
spacer->SetSize(width, height);
return spacer;
}
......@@ -1337,7 +1318,7 @@ void UiSceneCreator::CreateWebVrTimeoutScreen() {
button->SetSize(kWebVrTimeoutMessageButtonDiameterDMM,
kWebVrTimeoutMessageButtonDiameterDMM);
VR_BIND_VISIBILITY(button, model->web_vr.state == kWebVrTimedOut);
VR_BIND_BUTTON_COLORS(model_, button.get(), &ColorScheme::button_colors,
VR_BIND_BUTTON_COLORS(model_, button.get(), &ColorScheme::disc_button_colors,
&DiscButton::SetButtonColors);
auto timeout_button_text =
......@@ -1611,7 +1592,8 @@ void UiSceneCreator::CreateVoiceSearchUiGroup() {
close_button->SetTranslate(0, -kVoiceSearchCloseButtonYOffset, 0);
close_button->SetRotate(
1, 0, 0, atan(-kVoiceSearchCloseButtonYOffset / kContentDistance));
VR_BIND_BUTTON_COLORS(model_, close_button.get(), &ColorScheme::button_colors,
VR_BIND_BUTTON_COLORS(model_, close_button.get(),
&ColorScheme::disc_button_colors,
&DiscButton::SetButtonColors);
scene_->AddUiElement(kSpeechRecognitionListening, std::move(close_button));
......@@ -1848,7 +1830,7 @@ void UiSceneCreator::CreateUrlBar() {
url_bar->set_bounds_contain_children(true);
url_bar->set_corner_radius(kUrlBarHeightDMM / 2);
VR_BIND_VISIBILITY(url_bar, !model->fullscreen_enabled());
VR_BIND_COLOR(model_, url_bar.get(), &ColorScheme::element_background,
VR_BIND_COLOR(model_, url_bar.get(), &ColorScheme::url_bar_background,
&Rect::SetColor);
scene_->AddUiElement(kUrlBarDmmRoot, std::move(url_bar));
......@@ -1962,7 +1944,7 @@ void UiSceneCreator::CreateUrlBar() {
security_button->SetIconScaleFactor(kUrlBarButtonIconScaleFactor);
security_button->SetSize(kUrlBarButtonSizeDMM, kUrlBarButtonSizeDMM);
security_button->set_corner_radius(kUrlBarItemCornerRadiusDMM);
security_button->set_hover_offset(kOmniboxTextFieldIconButtonHoverOffsetDMM);
security_button->set_hover_offset(kUrlBarButtonHoverOffsetDMM);
VR_BIND_VISIBILITY(security_button, model->toolbar_state.should_display_url);
VR_BIND_BUTTON_COLORS(model_, security_button.get(),
&ColorScheme::url_bar_button, &Button::SetButtonColors);
......@@ -1983,8 +1965,6 @@ void UiSceneCreator::CreateUrlBar() {
if (m->toolbar_state.security_level ==
security_state::SecurityLevel::DANGEROUS) {
colors.foreground = m->color_scheme().url_bar_dangerous_icon;
} else {
colors.foreground = m->color_scheme().url_bar_default_icon;
}
return colors;
},
......@@ -2005,11 +1985,9 @@ void UiSceneCreator::CreateUrlBar() {
url_text->AddBinding(VR_BIND_FUNC(ToolbarState, Model, model_,
model->toolbar_state, UrlBar,
url_text.get(), SetToolbarState));
url_text->AddBinding(VR_BIND_FUNC(UrlBarColors, Model, model_,
model->color_scheme().url_bar, UrlBar,
url_text->AddBinding(VR_BIND_FUNC(UrlTextColors, Model, model_,
model->color_scheme().url_text, UrlBar,
url_text.get(), SetColors));
VR_BIND_COLOR(model_, url_text.get(), &ColorScheme::element_background,
&TexturedElement::SetBackgroundColor);
scene_->AddUiElement(kUrlBarOriginLayout, std::move(url_text));
auto right_margin = Create<Rect>(kNone, kPhaseNone);
......@@ -2076,7 +2054,7 @@ void UiSceneCreator::CreateOverflowMenu() {
overflow_menu->set_bounds_contain_children(true);
overflow_menu->SetTranslate(0, kOverflowMenuOffset, 0);
overflow_menu->set_corner_radius(kUrlBarItemCornerRadiusDMM);
VR_BIND_COLOR(model_, overflow_menu.get(), &ColorScheme::element_background,
VR_BIND_COLOR(model_, overflow_menu.get(), &ColorScheme::omnibox_background,
&Rect::SetColor);
auto overflow_layout =
......@@ -2101,7 +2079,7 @@ void UiSceneCreator::CreateOverflowMenu() {
button->SetDrawPhase(kPhaseForeground);
button->SetSize(kUrlBarButtonSizeDMM, kUrlBarButtonSizeDMM);
button->SetIconScaleFactor(kUrlBarButtonIconScaleFactor);
button->set_hover_offset(kOmniboxTextFieldIconButtonHoverOffsetDMM);
button->set_hover_offset(kUrlBarButtonHoverOffsetDMM);
button->set_corner_radius(kUrlBarItemCornerRadiusDMM);
button->set_requires_layout(false);
button->set_contributes_to_parent_bounds(false);
......@@ -2168,8 +2146,9 @@ void UiSceneCreator::CreateOverflowMenu() {
text->SetText(l10n_util::GetStringUTF16(std::get<1>(item)));
text->SetLayoutMode(TextLayoutMode::kSingleLineFixedHeight);
text->SetAlignment(UiTexture::kTextAlignmentLeft);
VR_BIND_COLOR(model_, text.get(), &ColorScheme::element_foreground,
&Text::SetColor);
text->AddBinding(VR_BIND_FUNC(
SkColor, Model, model_, model->color_scheme().url_bar_button.foreground,
Text, text.get(), SetColor));
layout->AddChild(std::move(text));
auto spacer = Create<Rect>(kNone, kPhaseNone);
......@@ -2184,7 +2163,8 @@ void UiSceneCreator::CreateOverflowMenu() {
background->set_bounds_contain_children(true);
background->set_hover_offset(0);
background->set_padding(kOverflowMenuItemXPadding, 0);
VR_BIND_BUTTON_COLORS(model_, background.get(), &ColorScheme::button_colors,
VR_BIND_BUTTON_COLORS(model_, background.get(),
&ColorScheme::url_bar_button,
&Button::SetButtonColors);
background->AddChild(std::move(layout));
......@@ -2242,8 +2222,8 @@ void UiSceneCreator::CreateOmnibox() {
Create<UiElement>(kOmniboxVisibiltyControlForVoice, kPhaseNone);
visibility_control_root->set_contributes_to_parent_bounds(false);
auto scaler = std::make_unique<ScaledDepthAdjuster>(kUrlBarDistance);
scaler->SetName(kOmniboxDmmRoot);
auto scaler =
Create<ScaledDepthAdjuster>(kOmniboxDmmRoot, kPhaseNone, kUrlBarDistance);
auto visibility_toggle_for_audio_permission = Create<UiElement>(
kOmniboxVisibilityControlForAudioPermissionPrompt, kPhaseNone);
......@@ -2256,27 +2236,22 @@ void UiSceneCreator::CreateOmnibox() {
kModalPromptTypeExitVRForVoiceSearchRecordAudioOsPermission,
UiElement, visibility_toggle_for_audio_permission.get(), SetVisible));
auto omnibox_root = std::make_unique<UiElement>();
omnibox_root->SetName(kOmniboxRoot);
omnibox_root->SetDrawPhase(kPhaseNone);
omnibox_root->SetVisible(false);
auto omnibox_root = Create<UiElement>(kOmniboxRoot, kPhaseNone);
omnibox_root->SetTransitionedProperties({OPACITY});
omnibox_root->SetTransitionDuration(
base::TimeDelta::FromMilliseconds(kOmniboxTransitionMs));
VR_BIND_VISIBILITY(omnibox_root, model->omnibox_editing_enabled());
auto shadow = std::make_unique<Shadow>();
shadow->SetName(kOmniboxShadow);
shadow->SetDrawPhase(kPhaseForeground);
// The shadow also controls omnibox Y offset.
auto shadow = Create<Shadow>(kOmniboxShadow, kPhaseForeground);
shadow->set_intensity(kOmniboxShadowIntensity);
shadow->set_y_anchoring(TOP);
shadow->set_y_centering(BOTTOM);
shadow->set_corner_radius(kOmniboxCornerRadiusDMM);
auto omnibox_outer_layout = std::make_unique<LinearLayout>(LinearLayout::kUp);
omnibox_outer_layout->SetName(kOmniboxOuterLayout);
omnibox_outer_layout->SetTranslate(
0, kUrlBarVerticalOffsetDMM - 0.5f * kOmniboxHeightDMM,
kOmniboxShadowOffset);
omnibox_outer_layout->AddBinding(std::make_unique<Binding<bool>>(
shadow->SetTransitionedProperties({TRANSFORM});
shadow->SetTransitionDuration(
base::TimeDelta::FromMilliseconds(kOmniboxTransitionMs));
shadow->AddBinding(std::make_unique<Binding<bool>>(
VR_BIND_LAMBDA([](Model* m) { return m->omnibox_editing_enabled(); },
base::Unretained(model_)),
VR_BIND_LAMBDA(
......@@ -2286,44 +2261,16 @@ void UiSceneCreator::CreateOmnibox() {
y_offset -= 0.5 * kOmniboxHeightDMM;
e->SetTranslate(0, y_offset, kOmniboxShadowOffset);
},
omnibox_outer_layout.get())));
auto omnibox_outer_layout_spacer =
Create<Rect>(kOmniboxOuterLayoutSpacer, kPhaseForeground);
omnibox_outer_layout_spacer->set_hit_testable(true);
omnibox_outer_layout_spacer->SetSize(kOmniboxWidthDMM, kSuggestionGapDMM);
omnibox_outer_layout_spacer->set_hit_testable(true);
VR_BIND_COLOR(model_, omnibox_outer_layout_spacer.get(),
&ColorScheme::url_bar_separator, &Rect::SetColor);
VR_BIND_VISIBILITY(omnibox_outer_layout_spacer,
!model->omnibox_suggestions.empty());
shadow.get())));
auto omnibox_container = std::make_unique<Rect>();
omnibox_container->SetName(kOmniboxContainer);
omnibox_container->SetDrawPhase(kPhaseForeground);
omnibox_container->SetSize(kOmniboxWidthDMM, kOmniboxHeightDMM);
omnibox_container->SetTransitionedProperties({TRANSFORM, OPACITY});
omnibox_container->SetTransitionDuration(
base::TimeDelta::FromMilliseconds(kOmniboxTransitionMs));
omnibox_container->set_focusable(false);
omnibox_container->set_hit_testable(true);
omnibox_container->AddBinding(std::make_unique<Binding<bool>>(
VR_BIND_LAMBDA([](Model* m) { return m->omnibox_suggestions.empty(); },
base::Unretained(model_)),
VR_BIND_LAMBDA(
[](Rect* r, const bool& v) {
if (v) {
r->SetCornerRadii(
{kOmniboxCornerRadiusDMM, kOmniboxCornerRadiusDMM,
kOmniboxCornerRadiusDMM, kOmniboxCornerRadiusDMM});
} else {
r->SetCornerRadii(
{0, 0, kOmniboxCornerRadiusDMM, kOmniboxCornerRadiusDMM});
}
},
omnibox_container.get())));
VR_BIND_COLOR(model_, omnibox_container.get(),
&ColorScheme::omnibox_background, &Rect::SetColor);
auto omnibox_outer_layout =
Create<LinearLayout>(kOmniboxOuterLayout, kPhaseNone, LinearLayout::kUp);
auto omnibox_suggestion_divider = Create<Rect>(kNone, kPhaseForeground);
omnibox_suggestion_divider->SetType(kTypeSpacer);
omnibox_suggestion_divider->SetSize(kOmniboxWidthDMM, kSuggestionGapDMM);
VR_BIND_COLOR(model_, omnibox_suggestion_divider.get(),
&ColorScheme::url_bar_separator, &Rect::SetColor);
auto omnibox_text_field = Create<OmniboxTextField>(
kOmniboxTextField, kPhaseNone, kOmniboxTextHeightDMM,
......@@ -2340,7 +2287,6 @@ void UiSceneCreator::CreateOmnibox() {
base::BindRepeating(
[](UiBrowserInterface* browser) { browser->StopAutocomplete(); },
base::Unretained(browser_)));
omnibox_text_field->SetTextInputDelegate(text_input_delegate_);
omnibox_text_field->set_hit_testable(false);
omnibox_text_field->SetHintText(
......@@ -2428,10 +2374,10 @@ void UiSceneCreator::CreateOmnibox() {
bool, Model, model_, model->supports_selection, OmniboxTextField,
omnibox_text_field.get(), set_allow_inline_autocomplete));
VR_BIND_COLOR(model_, omnibox_text_field.get(), &ColorScheme::omnibox_text,
VR_BIND_COLOR(model_, omnibox_text_field.get(), &ColorScheme::url_bar_text,
&TextInput::SetTextColor);
VR_BIND_COLOR(model_, omnibox_text_field.get(), &ColorScheme::omnibox_hint,
&TextInput::SetHintColor);
VR_BIND_COLOR(model_, omnibox_text_field.get(),
&ColorScheme::url_bar_hint_text, &TextInput::SetHintColor);
omnibox_text_field->AddBinding(std::make_unique<Binding<TextSelectionColors>>(
VR_BIND_LAMBDA(
[](Model* m) { return m->color_scheme().omnibox_text_selection; },
......@@ -2448,38 +2394,27 @@ void UiSceneCreator::CreateOmnibox() {
[](UiBrowserInterface* b, Ui* ui) { b->SetVoiceSearchActive(true); },
base::Unretained(browser_), base::Unretained(ui_)),
vector_icons::kMicIcon, audio_delegate_);
mic_button->SetIconScaleFactor(kVoiceSearchIconScaleFactor);
mic_button->SetSize(kOmniboxTextFieldIconButtonSizeDMM,
kOmniboxTextFieldIconButtonSizeDMM);
mic_button->set_hover_offset(kOmniboxTextFieldIconButtonHoverOffsetDMM);
mic_button->SetSize(kUrlBarButtonSizeDMM, kUrlBarButtonSizeDMM);
mic_button->SetIconScaleFactor(kUrlBarButtonIconScaleFactor);
mic_button->set_hover_offset(kUrlBarButtonHoverOffsetDMM);
mic_button->set_corner_radius(kUrlBarItemCornerRadiusDMM);
VR_BIND_VISIBILITY(mic_button,
model->speech.has_or_can_request_audio_permission &&
!model->incognito &&
!model->capturing_state.audio_capture_enabled);
VR_BIND_BUTTON_COLORS(model_, mic_button.get(),
&ColorScheme::omnibox_voice_search_button_colors,
VR_BIND_BUTTON_COLORS(model_, mic_button.get(), &ColorScheme::url_bar_button,
&Button::SetButtonColors);
auto left_spacer = Create<Rect>(kNone, kPhaseNone);
left_spacer->SetSize(kOmniboxTextMarginDMM, kOmniboxTextHeightDMM);
left_spacer->SetType(kTypeSpacer);
auto middle_spacer = Create<Rect>(kNone, kPhaseNone);
middle_spacer->SetType(kTypeSpacer);
middle_spacer->SetSize(kOmniboxTextMarginDMM, kOmniboxTextHeightDMM);
auto right_spacer = Create<Rect>(kNone, kPhaseNone);
right_spacer->SetSize(kOmniboxTextFieldRightMargin, kOmniboxTextHeightDMM);
right_spacer->SetType(kTypeSpacer);
auto text_field_layout = Create<LinearLayout>(
kOmniboxTextFieldLayout, kPhaseNone, LinearLayout::kRight);
text_field_layout->AddChild(std::move(left_spacer));
text_field_layout->AddChild(
CreateSpacer(kOmniboxTextMarginDMM, kOmniboxHeightDMM));
text_field_layout->AddChild(std::move(omnibox_text_field));
text_field_layout->AddChild(std::move(middle_spacer));
text_field_layout->AddChild(
CreateSpacer(kOmniboxTextMarginDMM, kOmniboxHeightDMM));
text_field_layout->AddChild(std::move(mic_button));
text_field_layout->AddChild(std::move(right_spacer));
text_field_layout->AddChild(
CreateSpacer(kOmniboxTextFieldRightMargin, kOmniboxHeightDMM));
// Set up the vector binding to manage suggestions dynamically.
SuggestionSetBinding::ModelAddedCallback added_callback = base::BindRepeating(
......@@ -2489,18 +2424,13 @@ void UiSceneCreator::CreateOmnibox() {
SuggestionSetBinding::ModelRemovedCallback removed_callback =
base::BindRepeating(&OnSuggestionModelRemoved, base::Unretained(scene_));
auto suggestions_outer_layout =
std::make_unique<LinearLayout>(LinearLayout::kDown);
suggestions_outer_layout->SetName(kOmniboxSuggestionsOuterLayout);
auto suggestions_layout = std::make_unique<LinearLayout>(LinearLayout::kUp);
suggestions_layout->SetName(kOmniboxSuggestions);
suggestions_layout->SetDrawPhase(kPhaseNone);
auto suggestions_layout =
Create<LinearLayout>(kOmniboxSuggestions, kPhaseNone, LinearLayout::kUp);
suggestions_layout->AddBinding(std::make_unique<SuggestionSetBinding>(
&model_->omnibox_suggestions, added_callback, removed_callback));
auto button_scaler =
std::make_unique<ScaledDepthAdjuster>(kOmniboxCloseButtonDepthOffset);
auto button_scaler = Create<ScaledDepthAdjuster>(
kNone, kPhaseNone, kOmniboxCloseButtonDepthOffset);
auto close_button = Create<DiscButton>(
kOmniboxCloseButton, kPhaseForeground,
......@@ -2513,23 +2443,38 @@ void UiSceneCreator::CreateOmnibox() {
close_button->SetTranslate(0, kOmniboxCloseButtonVerticalOffsetDMM, 0);
close_button->SetRotate(1, 0, 0, atan(kOmniboxCloseButtonVerticalOffsetDMM));
close_button->set_hover_offset(kButtonZOffsetHoverDMM);
VR_BIND_BUTTON_COLORS(model_, close_button.get(), &ColorScheme::button_colors,
VR_BIND_BUTTON_COLORS(model_, close_button.get(),
&ColorScheme::disc_button_colors,
&DiscButton::SetButtonColors);
auto spacer = CreateOmniboxSpacer(model_);
spacer->SetCornerRadii(
{kOmniboxCornerRadiusDMM, kOmniboxCornerRadiusDMM, 0, 0});
suggestions_outer_layout->AddChild(std::move(spacer));
auto suggestions_outer_layout = Create<LinearLayout>(
kOmniboxSuggestionsOuterLayout, kPhaseNone, LinearLayout::kUp);
VR_BIND_VISIBILITY(suggestions_outer_layout,
!model->omnibox_suggestions.empty());
suggestions_outer_layout->AddBinding(VR_BIND_FUNC(
bool, Model, model_, !model->omnibox_suggestions.empty(), LinearLayout,
suggestions_outer_layout.get(), set_requires_layout));
suggestions_outer_layout->AddChild(std::move(omnibox_suggestion_divider));
suggestions_outer_layout->AddChild(
CreateSpacer(kOmniboxWidthDMM, kSuggestionVerticalPaddingDMM));
suggestions_outer_layout->AddChild(std::move(suggestions_layout));
suggestions_outer_layout->AddChild(CreateOmniboxSpacer(model_));
omnibox_container->AddChild(std::move(text_field_layout));
suggestions_outer_layout->AddChild(
CreateSpacer(kOmniboxWidthDMM, kSuggestionVerticalPaddingDMM));
omnibox_outer_layout->AddChild(std::move(omnibox_container));
omnibox_outer_layout->AddChild(std::move(omnibox_outer_layout_spacer));
omnibox_outer_layout->AddChild(std::move(text_field_layout));
omnibox_outer_layout->AddChild(std::move(suggestions_outer_layout));
shadow->AddChild(std::move(omnibox_outer_layout));
// Rounded-corner background of all omnibox and suggestion elements.
auto omnibox_background = Create<Rect>(kOmniboxBackground, kPhaseForeground);
omnibox_background->set_bounds_contain_children(true);
omnibox_background->set_hit_testable(true);
omnibox_background->set_focusable(false);
omnibox_background->set_corner_radius(kOmniboxCornerRadiusDMM);
VR_BIND_COLOR(model_, omnibox_background.get(),
&ColorScheme::omnibox_background, &Rect::SetColor);
omnibox_background->AddChild(std::move(omnibox_outer_layout));
shadow->AddChild(std::move(omnibox_background));
button_scaler->AddChild(std::move(close_button));
......@@ -2564,7 +2509,7 @@ void UiSceneCreator::CreateCloseButton() {
element->set_hover_offset(kButtonZOffsetHoverDMM * kCloseButtonDistance);
element->set_y_anchoring(BOTTOM);
element->SetTranslate(0, kCloseButtonRelativeOffset, -kCloseButtonDistance);
VR_BIND_BUTTON_COLORS(model_, element.get(), &ColorScheme::button_colors,
VR_BIND_BUTTON_COLORS(model_, element.get(), &ColorScheme::disc_button_colors,
&DiscButton::SetButtonColors);
// Close button is a special control element that needs to be hidden when
......
......@@ -97,8 +97,9 @@ const std::set<UiElementName> kElementsVisibleWithVoiceSearchResult = {
kSpeechRecognitionResult, kSpeechRecognitionCircle,
kSpeechRecognitionMicrophoneIcon, kSpeechRecognitionResultBackplane};
static constexpr float kTolerance = 1e-5f;
static constexpr float kSmallDelaySeconds = 0.1f;
constexpr float kTolerance = 1e-5f;
constexpr float kSmallDelaySeconds = 0.1f;
constexpr float kAnimationTimeMs = 300;
MATCHER_P2(SizeFsAreApproximatelyEqual, other, tolerance, "") {
return base::IsApproximatelyEqual(arg.width(), other.width(), tolerance) &&
......@@ -1017,7 +1018,7 @@ TEST_F(UiTest, OmniboxSuggestionBindings) {
model_->push_mode(kModeEditingOmnibox);
OnBeginFrame();
EXPECT_EQ(container->children().size(), 0u);
EXPECT_EQ(NumVisibleInTree(kOmniboxSuggestions), 1);
EXPECT_EQ(NumVisibleInTree(kOmniboxSuggestions), 0);
model_->omnibox_suggestions.emplace_back(OmniboxSuggestion(
base::string16(), base::string16(), ACMatchClassifications(),
......@@ -1030,7 +1031,7 @@ TEST_F(UiTest, OmniboxSuggestionBindings) {
model_->omnibox_suggestions.clear();
OnBeginFrame();
EXPECT_EQ(container->children().size(), 0u);
EXPECT_EQ(NumVisibleInTree(kOmniboxSuggestions), 1);
EXPECT_EQ(NumVisibleInTree(kOmniboxSuggestions), 0);
}
TEST_F(UiTest, OmniboxSuggestionNavigates) {
......@@ -1094,25 +1095,25 @@ TEST_F(UiTest, CloseButtonColorBindings) {
ui_->SetFullscreen(true);
}
ColorScheme scheme = ColorScheme::GetColorScheme(mode);
EXPECT_TRUE(OnBeginFrame());
VerifyButtonColor(button, scheme.button_colors.foreground,
scheme.button_colors.background, "normal");
RunFor(MsToDelta(kAnimationTimeMs));
VerifyButtonColor(button, scheme.disc_button_colors.foreground,
scheme.disc_button_colors.background, "normal");
button->hit_plane()->OnHoverEnter(gfx::PointF(0.5f, 0.5f));
EXPECT_TRUE(OnBeginFrame());
VerifyButtonColor(button, scheme.button_colors.foreground,
scheme.button_colors.background_hover, "hover");
RunFor(MsToDelta(kAnimationTimeMs));
VerifyButtonColor(button, scheme.disc_button_colors.foreground,
scheme.disc_button_colors.background_hover, "hover");
button->hit_plane()->OnButtonDown(gfx::PointF(0.5f, 0.5f));
EXPECT_TRUE(OnBeginFrame());
VerifyButtonColor(button, scheme.button_colors.foreground,
scheme.button_colors.background_down, "down");
RunFor(MsToDelta(kAnimationTimeMs));
VerifyButtonColor(button, scheme.disc_button_colors.foreground,
scheme.disc_button_colors.background_down, "down");
button->hit_plane()->OnMove(gfx::PointF());
EXPECT_TRUE(OnBeginFrame());
VerifyButtonColor(button, scheme.button_colors.foreground,
scheme.button_colors.background, "move");
RunFor(MsToDelta(kAnimationTimeMs));
VerifyButtonColor(button, scheme.disc_button_colors.foreground,
scheme.disc_button_colors.background, "move");
button->hit_plane()->OnButtonUp(gfx::PointF());
EXPECT_TRUE(OnBeginFrame());
VerifyButtonColor(button, scheme.button_colors.foreground,
scheme.button_colors.background, "up");
RunFor(MsToDelta(kAnimationTimeMs));
VerifyButtonColor(button, scheme.disc_button_colors.foreground,
scheme.disc_button_colors.background, "up");
}
}
......
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