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 |