[gimp] app: port GimpTagPopup drawing to cairo
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: port GimpTagPopup drawing to cairo
- Date: Thu, 29 Jul 2010 12:42:11 +0000 (UTC)
commit 900fd00c0080041dff626358578e53333ff5bd03
Author: Michael Natterer <mitch gimp org>
Date: Thu Jul 29 14:41:50 2010 +0200
app: port GimpTagPopup drawing to cairo
app/widgets/gimptagpopup.c | 47 +++++++++++++++++++++++++++++---------------
1 files changed, 31 insertions(+), 16 deletions(-)
---
diff --git a/app/widgets/gimptagpopup.c b/app/widgets/gimptagpopup.c
index 1b4e1c8..7e2e03d 100644
--- a/app/widgets/gimptagpopup.c
+++ b/app/widgets/gimptagpopup.c
@@ -749,20 +749,26 @@ gimp_tag_popup_list_expose (GtkWidget *widget,
{
GdkWindow *window = gtk_widget_get_window (widget);
GtkStyle *style = gtk_widget_get_style (widget);
- GdkGC *gc;
+ cairo_t *cr;
PangoRenderer *renderer;
PangoAttribute *attribute;
PangoAttrList *attributes;
gint i;
+ cr = gdk_cairo_create (event->window);
+
+ gdk_cairo_region (cr, event->region);
+ cairo_clip (cr);
+
+ cairo_set_line_width (cr, 1.0);
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
+ gdk_cairo_set_source_color (cr, &popup->combo_entry->selected_item_color);
+
renderer = gdk_pango_renderer_get_default (gtk_widget_get_screen (widget));
gdk_pango_renderer_set_gc (GDK_PANGO_RENDERER (renderer),
style->black_gc);
gdk_pango_renderer_set_drawable (GDK_PANGO_RENDERER (renderer), window);
- gc = gdk_gc_new (GDK_DRAWABLE (window));
- gdk_gc_set_rgb_fg_color (gc, &popup->combo_entry->selected_item_color);
-
for (i = 0; i < popup->tag_count; i++)
{
PopupTagData *tag_data = &popup->tag_data[i];
@@ -797,23 +803,32 @@ gimp_tag_popup_list_expose (GtkWidget *widget,
if (tag_data->state == GTK_STATE_SELECTED)
{
- gdk_draw_line (window, gc,
+ cairo_rectangle (cr,
+ tag_data->bounds.x - 1,
+ tag_data->bounds.y - popup->scroll_y,
+ tag_data->bounds.width + 2,
+ tag_data->bounds.height);
+ cairo_fill (cr);
+
+ cairo_translate (cr, 0.5, 0.5);
+
+ cairo_move_to (cr,
tag_data->bounds.x,
- tag_data->bounds.y - popup->scroll_y - 1,
+ tag_data->bounds.y - popup->scroll_y - 1);
+ cairo_line_to (cr,
tag_data->bounds.x + tag_data->bounds.width - 1,
tag_data->bounds.y - popup->scroll_y - 1);
- gdk_draw_rectangle (window, gc, TRUE,
- tag_data->bounds.x - 1,
- tag_data->bounds.y - popup->scroll_y,
- tag_data->bounds.width + 2,
- tag_data->bounds.height);
-
- gdk_draw_line (window, gc,
+ cairo_move_to (cr,
tag_data->bounds.x,
- tag_data->bounds.y - popup->scroll_y + tag_data->bounds.height,
+ tag_data->bounds.y - popup->scroll_y + tag_data->bounds.height);
+ cairo_line_to (cr,
tag_data->bounds.x + tag_data->bounds.width - 1,
tag_data->bounds.y - popup->scroll_y + tag_data->bounds.height);
+
+ cairo_stroke (cr);
+
+ cairo_translate (cr, -0.5, -0.5);
}
pango_renderer_draw_layout (renderer, popup->layout,
@@ -848,11 +863,11 @@ gimp_tag_popup_list_expose (GtkWidget *widget,
}
}
- g_object_unref (gc);
-
gdk_pango_renderer_set_drawable (GDK_PANGO_RENDERER (renderer), NULL);
gdk_pango_renderer_set_gc (GDK_PANGO_RENDERER (renderer), NULL);
+ cairo_destroy (cr);
+
return FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]