Commit 6c1b6aa9 authored by Christopher Grant's avatar Christopher Grant Committed by Commit Bot

VR: Move omnibox layout and sizing to UX spec

This change migrates the omnibox sizing, layout, text and colors to
match UX spec. Things like rounded corners are still missing.

Also, fix the UI testapp.

BUG=
R=bshe

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I96bc91c8c80d070dd3e09275d35eb61774468559
Reviewed-on: https://chromium-review.googlesource.com/801954Reviewed-by: default avatarBiao She <bshe@chromium.org>
Commit-Queue: Christopher Grant <cjgrant@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521049}
parent 28e9ac8b
......@@ -9,8 +9,7 @@
namespace vr {
Suggestion::Suggestion(base::Callback<void(GURL)> navigate_callback)
: LinearLayout(LinearLayout::kRight),
navigate_callback_(navigate_callback) {
: navigate_callback_(navigate_callback) {
EventHandlers event_handlers;
event_handlers.button_up =
base::Bind(&Suggestion::HandleButtonClick, base::Unretained(this));
......
......@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_VR_ELEMENTS_SUGGESTION_H_
#define CHROME_BROWSER_VR_ELEMENTS_SUGGESTION_H_
#include "chrome/browser/vr/elements/linear_layout.h"
#include "chrome/browser/vr/elements/ui_element.h"
#include "url/gurl.h"
namespace vr {
......@@ -15,7 +15,7 @@ namespace vr {
// to bind both necessitates lambda capture, which base::Bind cannot do. This
// workaround simplifies the problem. If UI elements gain the ability to use the
// VR UI to browser interface, we could eliminate this class.
class Suggestion : public LinearLayout {
class Suggestion : public UiElement {
public:
explicit Suggestion(base::Callback<void(GURL)> navigate_callback);
~Suggestion() override;
......
......@@ -17,6 +17,13 @@ static const char* g_ui_element_type_strings[] = {
"kTypeButtonForeground",
"kTypeButtonHitTarget",
"kTypeScaledDepthAdjuster",
"kTypeOmniboxSuggestionBackground",
"kTypeOmniboxSuggestionLayout",
"kTypeOmniboxSuggestionTextLayout",
"kTypeOmniboxSuggestionIconField",
"kTypeOmniboxSuggestionIcon",
"kTypeOmniboxSuggestionContentText",
"kTypeOmniboxSuggestionDescriptionText",
};
static_assert(
......
......@@ -17,6 +17,13 @@ enum UiElementType {
kTypeButtonForeground,
kTypeButtonHitTarget,
kTypeScaledDepthAdjuster,
kTypeOmniboxSuggestionBackground,
kTypeOmniboxSuggestionLayout,
kTypeOmniboxSuggestionTextLayout,
kTypeOmniboxSuggestionIconField,
kTypeOmniboxSuggestionIcon,
kTypeOmniboxSuggestionContentText,
kTypeOmniboxSuggestionDescriptionText,
// This must be last.
kNumUiElementTypes,
......
......@@ -111,6 +111,11 @@ void InitializeColorSchemes() {
normal_scheme.timeout_message_background = 0xFF444444;
normal_scheme.timeout_message_foreground = normal_scheme.spinner_color;
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_suggestion_content = 0xFF595959;
normal_scheme.omnibox_suggestion_description = 0xFF5595FE;
g_fullscreen_scheme.Get() = normal_scheme;
ColorScheme& fullscreen_scheme = g_fullscreen_scheme.Get();
......
......@@ -88,11 +88,9 @@ struct ColorScheme {
UrlBarColors url_bar;
// Screen dimmer colors.
SkColor dimmer_outer;
SkColor dimmer_inner;
// Splash screen colors.
SkColor splash_screen_background;
SkColor splash_screen_text_color;
......@@ -100,11 +98,16 @@ struct ColorScheme {
SkColor spinner_background;
SkColor spinner_color;
// Timeout UI colors
SkColor timeout_message_background;
SkColor timeout_message_foreground;
SkColor speech_recognition_circle_background;
SkColor omnibox_background;
SkColor omnibox_icon;
SkColor omnibox_text;
SkColor omnibox_suggestion_content;
SkColor omnibox_suggestion_description;
};
} // namespace vr
......
......@@ -316,9 +316,12 @@ void VrTestContext::CreateFakeOmniboxSuggestions() {
for (int i = 0; i < num_suggestions; i++) {
result->suggestions.emplace_back(OmniboxSuggestion(
base::UTF8ToUTF16("Suggestion ") + base::IntToString16(i + 1),
base::UTF8ToUTF16("Description text"),
base::UTF8ToUTF16(
"Very lengthy description of the suggestion that would wrap "
"if not truncated through some other means."),
AutocompleteMatch::Type::VOICE_SUGGEST, GURL("http://www.test.com/")));
}
model_->omnibox_input_active = true;
ui_->SetOmniboxSuggestions(std::move(result));
}
......
......@@ -184,19 +184,24 @@ static constexpr float kLaserWidth = 0.01f;
static constexpr float kReticleWidth = 0.025f;
static constexpr float kReticleHeight = 0.025f;
static constexpr float kOmniboxContainerWidth = 4.5;
static constexpr float kOmniboxContainerHeight = 12 * 0.02f;
static constexpr float kOmniboxContainerCornerRadius = 0.01;
static constexpr float kOmniboxContainerVeriticalOffset = 0.7;
static constexpr float kOmniboxTextHeight = 0.05;
static constexpr float kOmniboxCloseButtonVerticalOffset = -0.5;
static constexpr float kSuggestionGap = 0.01f;
static constexpr float kSuggestionLineGap = 0.01f;
static constexpr float kSuggestionIconGap = 0.01f;
static constexpr float kSuggestionIconSize = 0.1f;
static constexpr float kSuggestionTextFieldWidth = 0.3f;
static constexpr float kSuggestionContentTextHeight = 0.02f;
static constexpr float kSuggestionDescriptionTextHeight = 0.015f;
static constexpr float kOmniboxWidthDMM = 0.848f;
static constexpr float kOmniboxHeightDMM = 0.088f;
static constexpr float kOmniboxVerticalOffsetDMM = -0.1f;
static constexpr float kOmniboxTextHeightDMM = 0.032f;
static constexpr float kOmniboxTextMarginDMM = 0.024f;
static constexpr float kOmniboxCloseButtonDiameterDMM = 0.088f;
static constexpr float kOmniboxCloseButtonVerticalOffsetDMM = -0.5;
static constexpr float kSuggestionHeightDMM = 0.088f;
static constexpr float kSuggestionGapDMM = 0.008f;
static constexpr float kSuggestionLineGapDMM = 0.01f;
static constexpr float kSuggestionIconSizeDMM = 0.036f;
static constexpr float kSuggestionIconFieldWidthDMM = 0.104f;
static constexpr float kSuggestionRightMarginDMM = 0.024f;
static constexpr float kSuggestionTextFieldWidthDMM =
kOmniboxWidthDMM - kSuggestionIconFieldWidthDMM - kSuggestionRightMarginDMM;
static constexpr float kSuggestionContentTextHeightDMM = 0.024f;
static constexpr float kSuggestionDescriptionTextHeightDMM = 0.020f;
static constexpr int kControllerFadeInMs = 200;
static constexpr int kControllerFadeOutMs = 550;
......
......@@ -81,46 +81,76 @@ void OnSuggestionModelAdded(UiScene* scene,
Model* model,
SuggestionBinding* element_binding) {
auto icon = base::MakeUnique<VectorIcon>(100);
icon->SetVisible(true);
icon->SetSize(kSuggestionIconSize, kSuggestionIconSize);
icon->set_draw_phase(kPhaseForeground);
icon->set_type(kTypeOmniboxSuggestionIcon);
icon->set_hit_testable(false);
icon->SetSize(kSuggestionIconSizeDMM, kSuggestionIconSizeDMM);
BindColor(model, icon.get(), &ColorScheme::omnibox_icon,
&VectorIcon::SetColor);
VectorIcon* p_icon = icon.get();
auto content_text = base::MakeUnique<Text>(512, kSuggestionContentTextHeight);
auto icon_box = base::MakeUnique<UiElement>();
icon_box->set_draw_phase(kPhaseNone);
icon_box->set_type(kTypeOmniboxSuggestionIconField);
icon_box->SetSize(kSuggestionIconFieldWidthDMM, kSuggestionHeightDMM);
icon_box->AddChild(std::move(icon));
auto content_text =
base::MakeUnique<Text>(1024, kSuggestionContentTextHeightDMM);
content_text->set_draw_phase(kPhaseForeground);
content_text->SetVisible(true);
content_text->SetSize(kSuggestionTextFieldWidth, 0);
content_text->set_type(kTypeOmniboxSuggestionContentText);
content_text->SetSize(kSuggestionTextFieldWidthDMM, 0);
content_text->SetTextAlignment(UiTexture::kTextAlignmentLeft);
content_text->SetMultiLine(false);
BindColor(model, content_text.get(), &ColorScheme::omnibox_suggestion_content,
&Text::SetColor);
Text* p_content_text = content_text.get();
auto description_text =
base::MakeUnique<Text>(512, kSuggestionDescriptionTextHeight);
description_text->SetSize(kSuggestionTextFieldWidth, 0);
base::MakeUnique<Text>(1024, kSuggestionDescriptionTextHeightDMM);
description_text->set_draw_phase(kPhaseForeground);
description_text->SetVisible(true);
description_text->set_type(kTypeOmniboxSuggestionDescriptionText);
description_text->SetSize(kSuggestionTextFieldWidthDMM, 0);
description_text->SetTextAlignment(UiTexture::kTextAlignmentLeft);
description_text->SetMultiLine(false);
BindColor(model, description_text.get(),
&ColorScheme::omnibox_suggestion_description, &Text::SetColor);
Text* p_description_text = description_text.get();
auto text_layout = base::MakeUnique<LinearLayout>(LinearLayout::kDown);
text_layout->set_margin(kSuggestionLineGap);
text_layout->set_type(kTypeOmniboxSuggestionTextLayout);
text_layout->set_margin(kSuggestionLineGapDMM);
text_layout->AddChild(std::move(content_text));
text_layout->AddChild(std::move(description_text));
text_layout->SetVisible(true);
auto right_margin = base::MakeUnique<UiElement>();
right_margin->set_draw_phase(kPhaseNone);
right_margin->SetSize(kSuggestionRightMarginDMM, kSuggestionHeightDMM);
auto suggestion_layout = base::MakeUnique<LinearLayout>(LinearLayout::kRight);
suggestion_layout->set_type(kTypeOmniboxSuggestionLayout);
suggestion_layout->AddChild(std::move(icon_box));
suggestion_layout->AddChild(std::move(text_layout));
suggestion_layout->AddChild(std::move(right_margin));
auto background = base::MakeUnique<Rect>();
background->set_type(kTypeOmniboxSuggestionBackground);
background->set_draw_phase(kPhaseForeground);
background->set_bounds_contain_children(true);
background->SetColor(SK_ColorGREEN);
background->AddChild(std::move(suggestion_layout));
BindColor(model, background.get(), &ColorScheme::omnibox_background,
&Rect::SetColor);
auto suggestion = base::MakeUnique<Suggestion>(base::Bind(
[](UiBrowserInterface* browser, Model* m, GURL gurl) {
browser->Navigate(gurl);
m->omnibox_input_active = false;
},
base::Unretained(browser), base::Unretained(model)));
suggestion->set_margin(kSuggestionIconGap);
suggestion->SetVisible(true);
suggestion->AddChild(std::move(icon));
suggestion->AddChild(std::move(text_layout));
Suggestion* p_suggestion = suggestion.get();
element_binding->set_view(suggestion.get());
suggestion->set_bounds_contain_children(true);
suggestion->AddChild(std::move(background));
element_binding->bindings().push_back(
VR_BIND_FUNC(base::string16, SuggestionBinding, element_binding,
......@@ -134,8 +164,9 @@ void OnSuggestionModelAdded(UiScene* scene,
SetIcon(AutocompleteMatch::TypeToVectorIcon(value))));
element_binding->bindings().push_back(VR_BIND_FUNC(
GURL, SuggestionBinding, element_binding, model()->destination,
Suggestion, p_suggestion, set_destination));
Suggestion, suggestion.get(), set_destination));
element_binding->set_view(suggestion.get());
scene->AddUiElement(kOmniboxSuggestions, std::move(suggestion));
}
......@@ -1004,18 +1035,19 @@ void UiSceneCreator::CreateOmnibox() {
omnibox_root->set_draw_phase(kPhaseNone);
omnibox_root->SetVisible(false);
omnibox_root->set_hit_testable(false);
omnibox_root->SetTranslate(0, kUrlBarVerticalOffset, -kUrlBarDistance);
omnibox_root->SetTransitionedProperties({OPACITY});
omnibox_root->AddBinding(VR_BIND_FUNC(bool, Model, model_,
omnibox_input_active, UiElement,
omnibox_root.get(), SetVisible));
scene_->AddUiElement(k2dBrowsingRoot, std::move(omnibox_root));
auto scaler = base::MakeUnique<ScaledDepthAdjuster>(kUrlBarDistance);
scaler->AddChild(std::move(omnibox_root));
scene_->AddUiElement(k2dBrowsingRoot, std::move(scaler));
auto omnibox_container = base::MakeUnique<Rect>();
omnibox_container->set_name(kOmniboxContainer);
omnibox_container->set_draw_phase(kPhaseForeground);
omnibox_container->SetSize(kOmniboxContainerWidth, kOmniboxContainerHeight);
omnibox_container->set_corner_radius(kOmniboxContainerCornerRadius);
omnibox_container->SetSize(kOmniboxWidthDMM, kOmniboxHeightDMM);
omnibox_container->SetColor(SK_ColorWHITE);
omnibox_container->SetTransitionedProperties({TRANSFORM});
omnibox_container->AddBinding(base::MakeUnique<Binding<bool>>(
......@@ -1023,16 +1055,22 @@ void UiSceneCreator::CreateOmnibox() {
base::Unretained(model_)),
base::Bind(
[](UiElement* e, const bool& v) {
float y_offset = v ? kOmniboxContainerVeriticalOffset : 0;
float y_offset = v ? kOmniboxVerticalOffsetDMM : 0;
e->SetTranslate(0, y_offset, 0);
},
omnibox_container.get())));
scene_->AddUiElement(kOmniboxRoot, std::move(omnibox_container));
auto omnibox_text_field = base::MakeUnique<TextInput>(
512, kOmniboxTextHeight, kSuggestionTextFieldWidth);
float width = kOmniboxWidthDMM - 2 * kOmniboxTextMarginDMM;
auto omnibox_text_field =
base::MakeUnique<TextInput>(1024, kOmniboxTextHeightDMM, width);
omnibox_text_field->SetSize(width, 0);
omnibox_text_field->set_name(kOmniboxTextField);
omnibox_text_field->set_draw_phase(kPhaseForeground);
omnibox_text_field->set_x_anchoring(LEFT);
omnibox_text_field->set_x_centering(LEFT);
omnibox_text_field->SetTranslate(kOmniboxTextMarginDMM, 0, 0);
omnibox_text_field->SetTextChangedCallback(base::Bind(
&UiBrowserInterface::StartAutocomplete, base::Unretained(browser_)));
scene_->AddUiElement(kOmniboxContainer, std::move(omnibox_text_field));
......@@ -1042,10 +1080,10 @@ void UiSceneCreator::CreateOmnibox() {
base::Bind([](Model* m) { m->omnibox_input_active = false; },
base::Unretained(model_)),
vector_icons::kClose16Icon);
close_button->SetSize(kCloseButtonWidth, kCloseButtonHeight);
close_button->set_hover_offset(kButtonZOffsetHoverDMM * kCloseButtonDistance);
close_button->SetTranslate(0, kOmniboxCloseButtonVerticalOffset, 0);
close_button->SetSize(kCloseButtonWidth, kCloseButtonHeight);
close_button->SetSize(kOmniboxCloseButtonDiameterDMM,
kOmniboxCloseButtonDiameterDMM);
close_button->SetTranslate(0, kOmniboxCloseButtonVerticalOffsetDMM, 0);
close_button->set_hover_offset(kButtonZOffsetHoverDMM);
BindButtonColors(model_, close_button.get(), &ColorScheme::button_colors,
&Button::SetButtonColors);
scene_->AddUiElement(kOmniboxContainer, std::move(close_button));
......@@ -1060,11 +1098,13 @@ void UiSceneCreator::CreateOmnibox() {
auto suggestions_layout = base::MakeUnique<LinearLayout>(LinearLayout::kUp);
suggestions_layout->set_name(kOmniboxSuggestions);
suggestions_layout->set_draw_phase(kPhaseNone);
suggestions_layout->set_hit_testable(false);
suggestions_layout->set_y_anchoring(TOP);
suggestions_layout->set_y_centering(BOTTOM);
suggestions_layout->set_margin(kSuggestionGap);
suggestions_layout->SetTranslate(0, kSuggestionGapDMM, 0);
suggestions_layout->AddBinding(base::MakeUnique<SuggestionSetBinding>(
&model_->omnibox_suggestions, added_callback, removed_callback));
scene_->AddUiElement(kOmniboxContainer, std::move(suggestions_layout));
}
......
......@@ -39,7 +39,6 @@ class UiSceneCreator {
void CreateViewportAwareRoot();
void CreateUrlBar();
void CreateOmnibox();
void CreateSuggestionList();
void CreateWebVrUrlToast();
void CreateCloseButton();
void CreateExitPrompt();
......
......@@ -67,7 +67,6 @@ const std::set<UiElementName> kHitTestableElements = {
kUrlBar,
kOmniboxContainer,
kOmniboxTextField,
kOmniboxSuggestions,
kLoadingIndicator,
kWebVrTimeoutSpinner,
kWebVrTimeoutMessage,
......
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