| Index: chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc
|
| ===================================================================
|
| --- chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc (revision 112901)
|
| +++ chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc (working copy)
|
| @@ -34,8 +34,6 @@
|
| #include "ui/gfx/color_utils.h"
|
| #include "ui/gfx/font.h"
|
| #include "ui/gfx/gtk_util.h"
|
| -#include "ui/gfx/image/image.h"
|
| -#include "ui/gfx/image/cairo_cached_surface.h"
|
| #include "ui/gfx/rect.h"
|
| #include "ui/gfx/skia_utils_gtk.h"
|
|
|
| @@ -106,13 +104,13 @@
|
| }
|
|
|
| // Helper for drawing an entire pixbuf without dithering.
|
| -void DrawFullImage(cairo_t* cr, GtkWidget* widget, const gfx::Image* image,
|
| - gint dest_x, gint dest_y) {
|
| - gfx::CairoCachedSurface* surface = image->ToCairo();
|
| - surface->SetSource(cr, widget, dest_x, dest_y);
|
| - cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT);
|
| - cairo_rectangle(cr, dest_x, dest_y, surface->Width(), surface->Height());
|
| - cairo_fill(cr);
|
| +void DrawFullPixbuf(GdkDrawable* drawable, GdkGC* gc, GdkPixbuf* pixbuf,
|
| + gint dest_x, gint dest_y) {
|
| + gdk_draw_pixbuf(drawable, gc, pixbuf,
|
| + 0, 0, // Source.
|
| + dest_x, dest_y, // Dest.
|
| + -1, -1, // Width/height (auto).
|
| + GDK_RGB_DITHER_NONE, 0, 0); // Don't dither.
|
| }
|
|
|
| // TODO(deanm): Find some better home for this, and make it more efficient.
|
| @@ -340,8 +338,8 @@
|
| g_object_unref(layout_);
|
| gtk_widget_destroy(window_);
|
|
|
| - for (ImageMap::iterator it = images_.begin(); it != images_.end(); ++it)
|
| - delete it->second;
|
| + for (PixbufMap::iterator it = pixbufs_.begin(); it != pixbufs_.end(); ++it)
|
| + g_object_unref(it->second);
|
| }
|
|
|
| bool OmniboxPopupViewGtk::IsOpen() const {
|
| @@ -485,13 +483,13 @@
|
| is_keyword_hint ? string16() : keyword);
|
| }
|
|
|
| -const gfx::Image* OmniboxPopupViewGtk::IconForMatch(
|
| - const AutocompleteMatch& match, bool selected) {
|
| +GdkPixbuf* OmniboxPopupViewGtk::IconForMatch(const AutocompleteMatch& match,
|
| + bool selected) {
|
| const SkBitmap* bitmap = model_->GetIconIfExtensionMatch(match);
|
| if (bitmap) {
|
| - if (!ContainsKey(images_, bitmap))
|
| - images_[bitmap] = new gfx::Image(bitmap);
|
| - return images_[bitmap];
|
| + if (!ContainsKey(pixbufs_, bitmap))
|
| + pixbufs_[bitmap] = gfx::GdkPixbufFromSkBitmap(bitmap);
|
| + return pixbufs_[bitmap];
|
| }
|
|
|
| int icon = match.starred ?
|
| @@ -519,7 +517,8 @@
|
| }
|
| }
|
|
|
| - return theme_service_->GetImageNamed(icon);
|
| + // TODO(estade): Do we want to flip these for RTL? (Windows doesn't).
|
| + return theme_service_->GetPixbufNamed(icon);
|
| }
|
|
|
| gboolean OmniboxPopupViewGtk::HandleMotion(GtkWidget* widget,
|
| @@ -584,18 +583,20 @@
|
| if (window_rect.width() < (kIconAreaWidth * 3))
|
| return TRUE;
|
|
|
| - cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(widget->window));
|
| - gdk_cairo_rectangle(cr, &event->area);
|
| - cairo_clip(cr);
|
| + GdkDrawable* drawable = GDK_DRAWABLE(event->window);
|
| + GdkGC* gc = gdk_gc_new(drawable);
|
|
|
| + // kBorderColor is unallocated, so use the GdkRGB routine.
|
| + gdk_gc_set_rgb_fg_color(gc, &border_color_);
|
| +
|
| // This assert is kinda ugly, but it would be more currently unneeded work
|
| // to support painting a border that isn't 1 pixel thick. There is no point
|
| // in writing that code now, and explode if that day ever comes.
|
| COMPILE_ASSERT(kBorderThickness == 1, border_1px_implied);
|
| // Draw the 1px border around the entire window.
|
| - gdk_cairo_set_source_color(cr, &border_color_);
|
| - cairo_rectangle(cr, 0, 0, window_rect.width(), window_rect.height());
|
| - cairo_stroke(cr);
|
| + gdk_draw_rectangle(drawable, gc, FALSE,
|
| + 0, 0,
|
| + window_rect.width() - 1, window_rect.height() - 1);
|
|
|
| pango_layout_set_height(layout_, kHeightPerResult * PANGO_SCALE);
|
|
|
| @@ -609,20 +610,20 @@
|
| bool is_selected = (model_->selected_line() == i);
|
| bool is_hovered = (model_->hovered_line() == i);
|
| if (is_selected || is_hovered) {
|
| - gdk_cairo_set_source_color(cr, is_selected ? &selected_background_color_ :
|
| - &hovered_background_color_);
|
| + gdk_gc_set_rgb_fg_color(gc, is_selected ? &selected_background_color_ :
|
| + &hovered_background_color_);
|
| // This entry is selected or hovered, fill a rect with the color.
|
| - cairo_rectangle(cr, line_rect.x(), line_rect.y(),
|
| - line_rect.width(), line_rect.height());
|
| - cairo_fill(cr);
|
| + gdk_draw_rectangle(drawable, gc, TRUE,
|
| + line_rect.x(), line_rect.y(),
|
| + line_rect.width(), line_rect.height());
|
| }
|
|
|
| int icon_start_x = ltr ? kIconLeftPadding :
|
| (line_rect.width() - kIconLeftPadding - kIconWidth);
|
| // Draw the icon for this result.
|
| - DrawFullImage(cr, widget,
|
| - IconForMatch(match, is_selected),
|
| - icon_start_x, line_rect.y() + kIconTopPadding);
|
| + DrawFullPixbuf(drawable, gc,
|
| + IconForMatch(match, is_selected),
|
| + 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
|
| @@ -654,13 +655,10 @@
|
| int content_y = std::max(line_rect.y(),
|
| line_rect.y() + ((kHeightPerResult - actual_content_height) / 2));
|
|
|
| - cairo_save(cr);
|
| - cairo_move_to(cr,
|
| - ltr ? kIconAreaWidth :
|
| + gdk_draw_layout(drawable, gc,
|
| + ltr ? kIconAreaWidth :
|
| (text_width - actual_content_width),
|
| - content_y);
|
| - pango_cairo_show_layout(cr, layout_);
|
| - cairo_restore(cr);
|
| + content_y, layout_);
|
|
|
| if (has_description) {
|
| pango_layout_set_width(layout_,
|
| @@ -679,18 +677,15 @@
|
| std::string(" - "));
|
| gint actual_description_width;
|
| pango_layout_get_size(layout_, &actual_description_width, NULL);
|
| -
|
| - cairo_save(cr);
|
| - cairo_move_to(cr, ltr ?
|
| - (kIconAreaWidth + actual_content_width) :
|
| - (text_width - actual_content_width -
|
| - (actual_description_width / PANGO_SCALE)),
|
| - content_y);
|
| - pango_cairo_show_layout(cr, layout_);
|
| - cairo_restore(cr);
|
| + gdk_draw_layout(drawable, gc, ltr ?
|
| + (kIconAreaWidth + actual_content_width) :
|
| + (text_width - actual_content_width -
|
| + (actual_description_width / PANGO_SCALE)),
|
| + content_y, layout_);
|
| }
|
| }
|
|
|
| - cairo_destroy(cr);
|
| + g_object_unref(gc);
|
| +
|
| return TRUE;
|
| }
|
|
|
| Property changes on: chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc
|
| ___________________________________________________________________
|
| Deleted: svn:mergeinfo
|
|
|
|
|