Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(278)

Unified Diff: chrome/browser/ui/views/omnibox/omnibox_result_view.cc

Issue 2901953002: Omnibox UI Experiments: Add Vertical Layout experiment (title-on-top). (Closed)
Patch Set: swap text in some circumstances to match mobile Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/omnibox/omnibox_result_view.cc
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
index aff68fc9c801574b0e5d4e3d531f17d431fe392f..a81053079f92c85f6036ffc8a50ac6fed3d7c77b 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -17,6 +17,7 @@
#include <algorithm> // NOLINT
+#include "base/feature_list.h"
#include "base/i18n/bidi_line_iterator.h"
#include "base/metrics/field_trial_params.h"
#include "base/strings/string_number_conversions.h"
@@ -303,6 +304,8 @@ gfx::Size OmniboxResultView::GetPreferredSize() const {
int height = GetTextHeight() + (2 * GetVerticalMargin());
if (match_.answer)
height += GetAnswerHeight() + kVerticalPadding;
+ else if (base::FeatureList::IsEnabled(omnibox::kUIExperimentVerticalLayout))
+ height += GetTextHeight() + kVerticalPadding;
return gfx::Size(0, height);
}
@@ -361,32 +364,48 @@ void OmniboxResultView::PaintMatch(const AutocompleteMatch& match,
&contents_max_width,
&description_max_width);
- int after_contents_x = DrawRenderText(match, contents, CONTENTS, canvas,
- x, y, contents_max_width);
+ // Answers in Suggest results.
+ if (match.answer && description_max_width != 0) {
+ DrawRenderText(match, contents, CONTENTS, canvas, x, y, contents_max_width);
+ y += GetTextHeight() + kVerticalPadding;
+ if (!answer_image_.isNull()) {
+ int answer_icon_size = GetAnswerHeight();
+ canvas->DrawImageInt(answer_image_, 0, 0, answer_image_.width(),
+ answer_image_.height(), GetMirroredXInView(x), y,
+ answer_icon_size, answer_icon_size, true);
+ // TODO(dschuyler): Perhaps this should be based on the font size
+ // instead of hardcoded to 2 dp (e.g. by adding a space in an
+ // appropriate font to the beginning of the description, then reducing
+ // the additional padding here to zero).
+ const int kAnswerIconToTextPadding = 2;
+ x += answer_icon_size + kAnswerIconToTextPadding;
+ }
+ return;
+ }
- if (description_max_width != 0) {
- if (match.answer) {
- y += GetTextHeight() + kVerticalPadding;
- if (!answer_image_.isNull()) {
- int answer_icon_size = GetAnswerHeight();
- canvas->DrawImageInt(
- answer_image_,
- 0, 0, answer_image_.width(), answer_image_.height(),
- GetMirroredXInView(x), y, answer_icon_size, answer_icon_size, true);
- // TODO(dschuyler): Perhaps this should be based on the font size
- // instead of hardcoded to 2 dp (e.g. by adding a space in an
- // appropriate font to the beginning of the description, then reducing
- // the additional padding here to zero).
- const int kAnswerIconToTextPadding = 2;
- x += answer_icon_size + kAnswerIconToTextPadding;
- }
+ // Regular results.
+ if (base::FeatureList::IsEnabled(omnibox::kUIExperimentVerticalLayout)) {
+ if (description_max_width == 0) {
+ // For no description, shift down halfways to draw contents in middle.
+ y += (GetTextHeight() + kVerticalPadding) / 2;
+ DrawRenderText(match, contents, CONTENTS, canvas, x, y,
+ contents_max_width);
Peter Kasting 2017/05/25 20:24:39 Nit: I'd probably rework this to avoid the duplica
tommycli 2017/05/25 21:59:10 Done. I was not able to combine it with the old b
} else {
+ DrawRenderText(match, contents, CONTENTS, canvas, x, y,
+ contents_max_width);
+ y += GetTextHeight() + kVerticalPadding;
+ DrawRenderText(match, description, DESCRIPTION, canvas, x, y,
+ description_max_width);
+ }
+ } else {
+ x = DrawRenderText(match, contents, CONTENTS, canvas, x, y,
+ contents_max_width);
+ if (description_max_width != 0) {
x = DrawRenderText(match, separator_rendertext_.get(), SEPARATOR, canvas,
- after_contents_x, y, separator_width_);
+ x, y, separator_width_);
+ DrawRenderText(match, description, DESCRIPTION, canvas, x, y,
+ description_max_width);
}
-
- DrawRenderText(match, description, DESCRIPTION, canvas, x, y,
- description_max_width);
}
}
@@ -599,8 +618,15 @@ void OmniboxResultView::InitContentsRenderTextIfNecessary() const {
contents_rendertext_ =
CreateAnswerText(match_.answer->first_line(), font_list_);
} else {
+ bool swap_match_text =
Peter Kasting 2017/05/25 20:24:39 Don't we have an experiment somewhere that sometim
tommycli 2017/05/25 21:59:10 Hey Peter -- Looking at what ZeroSuggest does, the
+ base::FeatureList::IsEnabled(omnibox::kUIExperimentVerticalLayout) &&
+ !AutocompleteMatch::IsSearchType(match_.type) &&
+ !match_.description.empty();
+
contents_rendertext_ = CreateClassifiedRenderText(
- match_.contents, match_.contents_class, false);
+ swap_match_text ? match_.description : match_.contents,
+ swap_match_text ? match_.description_class : match_.contents_class,
+ false);
}
}
}
@@ -617,8 +643,12 @@ void OmniboxResultView::Layout() {
const int end_x = width() - start_x;
const gfx::ImageSkia icon = GetIcon();
- const int icon_y =
- GetVerticalMargin() + (GetTextHeight() - icon.height()) / 2;
+ int icon_y = GetVerticalMargin();
+ if (base::FeatureList::IsEnabled(omnibox::kUIExperimentVerticalLayout)) {
Peter Kasting 2017/05/25 20:24:39 Nit: {} not necessary Another way to write all th
tommycli 2017/05/25 21:59:09 Done. Thanks for the concrete suggestions!
+ icon_y += (2 * GetTextHeight() + kVerticalPadding - icon.height()) / 2;
+ } else {
+ icon_y += (GetTextHeight() - icon.height()) / 2;
+ }
icon_bounds_.SetRect(start_x, icon_y, icon.width(), icon.height());
const int text_x = start_x + LocationBarView::kIconWidth + horizontal_padding;
@@ -660,8 +690,16 @@ void OmniboxResultView::OnPaint(gfx::Canvas* canvas) {
description_rendertext_ =
CreateAnswerText(match_.answer->second_line(), GetAnswerFont());
} else if (!match_.description.empty()) {
+ // If the description is empty, we wouldn't swap with the contents --
+ // nor would we create the description RenderText object anyways.
+ bool swap_match_text = base::FeatureList::IsEnabled(
+ omnibox::kUIExperimentVerticalLayout) &&
+ !AutocompleteMatch::IsSearchType(match_.type);
+
description_rendertext_ = CreateClassifiedRenderText(
- match_.description, match_.description_class, true);
+ swap_match_text ? match_.contents : match_.description,
+ swap_match_text ? match_.contents_class : match_.description_class,
+ false);
}
}
PaintMatch(match_, contents_rendertext_.get(),

Powered by Google App Engine
This is Rietveld 408576698