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

Unified Diff: chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc

Issue 9562029: GTK: Draw the correct omnibox state with new tab-to-traverse behavior. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: pkasting nits Created 8 years, 10 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
« no previous file with comments | « chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.h ('k') | chrome/browser/ui/gtk/theme_service_gtk.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc
diff --git a/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc b/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc
index 35f413fe146348f08c630c82eca17f5500a295e1..1dbb500ffbdbab008c543722ff14196af83a0621 100644
--- a/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc
+++ b/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc
@@ -488,7 +488,9 @@ void OmniboxPopupViewGtk::AcceptLine(size_t line,
}
const gfx::Image* OmniboxPopupViewGtk::IconForMatch(
- const AutocompleteMatch& match, bool selected) {
+ const AutocompleteMatch& match,
+ bool selected,
+ bool is_selected_keyword) {
const SkBitmap* bitmap = model_->GetIconIfExtensionMatch(match);
if (bitmap) {
if (!ContainsKey(images_, bitmap)) {
@@ -499,8 +501,14 @@ const gfx::Image* OmniboxPopupViewGtk::IconForMatch(
return images_[bitmap];
}
- int icon = match.starred ?
- IDR_OMNIBOX_STAR : AutocompleteMatch::TypeToIcon(match.type);
+ int icon;
+ if (is_selected_keyword)
+ icon = IDR_OMNIBOX_TTS;
+ else if (match.starred)
+ icon = IDR_OMNIBOX_STAR;
+ else
+ icon = AutocompleteMatch::TypeToIcon(match.type);
+
if (selected) {
switch (icon) {
case IDR_OMNIBOX_EXTENSION_APP:
@@ -518,6 +526,9 @@ const gfx::Image* OmniboxPopupViewGtk::IconForMatch(
case IDR_OMNIBOX_STAR:
icon = IDR_OMNIBOX_STAR_DARK;
break;
+ case IDR_OMNIBOX_TTS:
+ icon = IDR_OMNIBOX_TTS_DARK;
+ break;
default:
NOTREACHED();
break;
@@ -527,6 +538,24 @@ const gfx::Image* OmniboxPopupViewGtk::IconForMatch(
return theme_service_->GetImageNamed(icon);
}
+void OmniboxPopupViewGtk::GetVisibleMatchForInput(
+ size_t index,
+ const AutocompleteMatch** match,
+ bool* is_selected_keyword) {
+ const AutocompleteResult& result = model_->result();
+
+ if (result.match_at(index).associated_keyword.get() &&
+ model_->selected_line() == index &&
+ model_->selected_line_state() == AutocompletePopupModel::KEYWORD) {
+ *match = result.match_at(index).associated_keyword.get();
+ *is_selected_keyword = true;
+ return;
+ }
+
+ *match = &result.match_at(index);
+ *is_selected_keyword = false;
+}
+
gboolean OmniboxPopupViewGtk::HandleMotion(GtkWidget* widget,
GdkEventMotion* event) {
// TODO(deanm): Windows has a bunch of complicated logic here.
@@ -610,7 +639,9 @@ gboolean OmniboxPopupViewGtk::HandleExpose(GtkWidget* widget,
if (!line_rect.Intersects(damage_rect))
continue;
- const AutocompleteMatch& match = result.match_at(i);
+ const AutocompleteMatch* match = NULL;
+ bool is_selected_keyword = false;
+ GetVisibleMatchForInput(i, &match, &is_selected_keyword);
bool is_selected = (model_->selected_line() == i);
bool is_hovered = (model_->hovered_line() == i);
if (is_selected || is_hovered) {
@@ -626,20 +657,20 @@ gboolean OmniboxPopupViewGtk::HandleExpose(GtkWidget* widget,
(line_rect.width() - kIconLeftPadding - kIconWidth);
// Draw the icon for this result.
DrawFullImage(cr, widget,
- IconForMatch(match, is_selected),
+ IconForMatch(*match, is_selected, is_selected_keyword),
icon_start_x, line_rect.y() + kIconTopPadding);
// Draw the results text vertically centered in the results space.
// First draw the contents / url, but don't let it take up the whole width
// if there is also a description to be shown.
- bool has_description = !match.description.empty();
+ bool has_description = !match->description.empty();
int text_width = window_rect.width() - (kIconAreaWidth + kRightPadding);
int allocated_content_width = has_description ?
static_cast<int>(text_width * kContentWidthPercentage) : text_width;
pango_layout_set_width(layout_, allocated_content_width * PANGO_SCALE);
// Note: We force to URL to LTR for all text directions.
- SetupLayoutForMatch(layout_, match.contents, match.contents_class,
+ SetupLayoutForMatch(layout_, match->contents, match->contents_class,
is_selected ? &selected_content_text_color_ :
&content_text_color_,
is_selected ? &selected_content_dim_text_color_ :
@@ -674,7 +705,7 @@ gboolean OmniboxPopupViewGtk::HandleExpose(GtkWidget* widget,
// In Windows, a boolean "force_dim" is passed as true for the
// description. Here, we pass the dim text color for both normal and dim,
// to accomplish the same thing.
- SetupLayoutForMatch(layout_, match.description, match.description_class,
+ SetupLayoutForMatch(layout_, match->description, match->description_class,
is_selected ? &selected_content_dim_text_color_ :
&content_dim_text_color_,
is_selected ? &selected_content_dim_text_color_ :
@@ -694,6 +725,18 @@ gboolean OmniboxPopupViewGtk::HandleExpose(GtkWidget* widget,
pango_cairo_show_layout(cr, layout_);
cairo_restore(cr);
}
+
+ if (match->associated_keyword.get()) {
+ // If this entry has an associated keyword, draw the arrow at the extreme
+ // other side of the omnibox.
+ icon_start_x = ltr ? (line_rect.width() - kIconLeftPadding - kIconWidth) :
+ kIconLeftPadding;
+ // Draw the icon for this result.
+ DrawFullImage(cr, widget,
+ theme_service_->GetImageNamed(
+ is_selected ? IDR_OMNIBOX_TTS_DARK : IDR_OMNIBOX_TTS),
+ icon_start_x, line_rect.y() + kIconTopPadding);
+ }
}
cairo_destroy(cr);
« no previous file with comments | « chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.h ('k') | chrome/browser/ui/gtk/theme_service_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698