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

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

Issue 8789016: Revert 112839 (it probably caused http://crbug.com/106299 ) - GTK: Port omnibox drawing from GdkG... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years 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') | no next file » | 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
===================================================================
--- 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
« no previous file with comments | « chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698