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

Side by Side Diff: chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc

Issue 10829370: Make search icon in omnibox results hidpi (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.h" 5 #include "chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <string> 10 #include <string>
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 // Stop listening to our signals before we destroy the model. I suspect that 329 // Stop listening to our signals before we destroy the model. I suspect that
330 // we can race window destruction, otherwise. 330 // we can race window destruction, otherwise.
331 signal_registrar_.reset(); 331 signal_registrar_.reset();
332 332
333 // Explicitly destroy our model here, before we destroy our GTK widgets. 333 // Explicitly destroy our model here, before we destroy our GTK widgets.
334 // This is because the model destructor can call back into us, and we need 334 // This is because the model destructor can call back into us, and we need
335 // to make sure everything is still valid when it does. 335 // to make sure everything is still valid when it does.
336 model_.reset(); 336 model_.reset();
337 g_object_unref(layout_); 337 g_object_unref(layout_);
338 gtk_widget_destroy(window_); 338 gtk_widget_destroy(window_);
339
340 for (ImageMap::iterator it = images_.begin(); it != images_.end(); ++it)
341 delete it->second;
342 } 339 }
343 340
344 bool OmniboxPopupViewGtk::IsOpen() const { 341 bool OmniboxPopupViewGtk::IsOpen() const {
345 return opened_; 342 return opened_;
346 } 343 }
347 344
348 void OmniboxPopupViewGtk::InvalidateLine(size_t line) { 345 void OmniboxPopupViewGtk::InvalidateLine(size_t line) {
349 // TODO(deanm): Is it possible to use some constant for the width, instead 346 // TODO(deanm): Is it possible to use some constant for the width, instead
350 // of having to query the width of the window? 347 // of having to query the width of the window?
351 GdkWindow* gdk_window = gtk_widget_get_window(GTK_WIDGET(window_)); 348 GdkWindow* gdk_window = gtk_widget_get_window(GTK_WIDGET(window_));
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 473
477 void OmniboxPopupViewGtk::AcceptLine(size_t line, 474 void OmniboxPopupViewGtk::AcceptLine(size_t line,
478 WindowOpenDisposition disposition) { 475 WindowOpenDisposition disposition) {
479 // OpenMatch() may close the popup, which will clear the result set and, by 476 // OpenMatch() may close the popup, which will clear the result set and, by
480 // extension, |match| and its contents. So copy the relevant match out to 477 // extension, |match| and its contents. So copy the relevant match out to
481 // make sure it stays alive until the call completes. 478 // make sure it stays alive until the call completes.
482 AutocompleteMatch match = model_->result().match_at(line); 479 AutocompleteMatch match = model_->result().match_at(line);
483 omnibox_view_->OpenMatch(match, disposition, GURL(), line); 480 omnibox_view_->OpenMatch(match, disposition, GURL(), line);
484 } 481 }
485 482
486 const gfx::Image* OmniboxPopupViewGtk::IconForMatch( 483 gfx::Image OmniboxPopupViewGtk::IconForMatch(
487 const AutocompleteMatch& match, 484 const AutocompleteMatch& match,
488 bool selected, 485 bool selected,
489 bool is_selected_keyword) { 486 bool is_selected_keyword) {
490 const SkBitmap* bitmap = model_->GetIconIfExtensionMatch(match); 487 const gfx::Image image = model_->GetIconIfExtensionMatch(match);
491 if (bitmap) { 488 if (!image.IsEmpty())
492 if (!ContainsKey(images_, bitmap)) { 489 return image;
493 // gfx::Image wants ownership of bitmaps given to it, and we might as
494 // well make the bitmap copy a format that will be used.
495 images_[bitmap] = new gfx::Image(gfx::GdkPixbufFromSkBitmap(*bitmap));
496 }
497 return images_[bitmap];
498 }
499 490
500 int icon; 491 int icon;
501 if (is_selected_keyword) 492 if (is_selected_keyword)
502 icon = IDR_OMNIBOX_TTS; 493 icon = IDR_OMNIBOX_TTS;
503 else if (match.starred) 494 else if (match.starred)
504 icon = IDR_OMNIBOX_STAR; 495 icon = IDR_OMNIBOX_STAR;
505 else 496 else
506 icon = AutocompleteMatch::TypeToIcon(match.type); 497 icon = AutocompleteMatch::TypeToIcon(match.type);
507 498
508 if (selected) { 499 if (selected) {
(...skipping 12 matching lines...) Expand all
521 break; 512 break;
522 case IDR_OMNIBOX_TTS: 513 case IDR_OMNIBOX_TTS:
523 icon = IDR_OMNIBOX_TTS_DARK; 514 icon = IDR_OMNIBOX_TTS_DARK;
524 break; 515 break;
525 default: 516 default:
526 NOTREACHED(); 517 NOTREACHED();
527 break; 518 break;
528 } 519 }
529 } 520 }
530 521
531 return theme_service_->GetImageNamed(icon); 522 return *theme_service_->GetImageNamed(icon);
532 } 523 }
533 524
534 void OmniboxPopupViewGtk::GetVisibleMatchForInput( 525 void OmniboxPopupViewGtk::GetVisibleMatchForInput(
535 size_t index, 526 size_t index,
536 const AutocompleteMatch** match, 527 const AutocompleteMatch** match,
537 bool* is_selected_keyword) { 528 bool* is_selected_keyword) {
538 const AutocompleteResult& result = model_->result(); 529 const AutocompleteResult& result = model_->result();
539 530
540 if (result.match_at(index).associated_keyword.get() && 531 if (result.match_at(index).associated_keyword.get() &&
541 model_->selected_line() == index && 532 model_->selected_line() == index &&
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 cairo_restore(cr); 711 cairo_restore(cr);
721 } 712 }
722 713
723 if (match->associated_keyword.get()) { 714 if (match->associated_keyword.get()) {
724 // If this entry has an associated keyword, draw the arrow at the extreme 715 // If this entry has an associated keyword, draw the arrow at the extreme
725 // other side of the omnibox. 716 // other side of the omnibox.
726 icon_start_x = ltr ? (line_rect.width() - kIconLeftPadding - kIconWidth) : 717 icon_start_x = ltr ? (line_rect.width() - kIconLeftPadding - kIconWidth) :
727 kIconLeftPadding; 718 kIconLeftPadding;
728 // Draw the icon for this result. 719 // Draw the icon for this result.
729 gtk_util::DrawFullImage(cr, widget, 720 gtk_util::DrawFullImage(cr, widget,
730 theme_service_->GetImageNamed( 721 *theme_service_->GetImageNamed(
731 is_selected ? IDR_OMNIBOX_TTS_DARK : 722 is_selected ? IDR_OMNIBOX_TTS_DARK :
732 IDR_OMNIBOX_TTS), 723 IDR_OMNIBOX_TTS),
733 icon_start_x, line_rect.y() + kIconTopPadding); 724 icon_start_x, line_rect.y() + kIconTopPadding);
734 } 725 }
735 } 726 }
736 727
737 cairo_destroy(cr); 728 cairo_destroy(cr);
738 return TRUE; 729 return TRUE;
739 } 730 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698