diff options
author | Benjamin Otte <otte@redhat.com> | 2010-08-17 04:43:11 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2010-09-26 15:02:57 +0200 |
commit | e08d4258bb39f4b0fb420a468c9b4d2ec5b656b6 (patch) | |
tree | 3d74308bb49157dc3f44324e865bef6216e10975 /modules/engines | |
parent | 507f37b536e1bab4371b97a53609f4654b33c6b7 (diff) | |
download | gtk+-e08d4258bb39f4b0fb420a468c9b4d2ec5b656b6.tar.gz |
pixbuf-engine: Add Cairo version for draw_simple_image()
Diffstat (limited to 'modules/engines')
-rw-r--r-- | modules/engines/pixbuf/pixbuf-draw.c | 88 |
1 files changed, 59 insertions, 29 deletions
diff --git a/modules/engines/pixbuf/pixbuf-draw.c b/modules/engines/pixbuf/pixbuf-draw.c index 6c940ae409..fb7c3483cf 100644 --- a/modules/engines/pixbuf/pixbuf-draw.c +++ b/modules/engines/pixbuf/pixbuf-draw.c @@ -95,8 +95,7 @@ match_theme_image (GtkStyle *style, static gboolean draw_simple_image(GtkStyle *style, - GdkWindow *window, - GdkRectangle *area, + cairo_t *cr, GtkWidget *widget, ThemeMatchData *match_data, gboolean draw_center, @@ -106,15 +105,9 @@ draw_simple_image(GtkStyle *style, gint width, gint height) { + ThemeImage *image; - if ((width == -1) && (height == -1)) - gdk_drawable_get_size(window, &width, &height); - else if (width == -1) - gdk_drawable_get_size(window, &width, NULL); - else if (height == -1) - gdk_drawable_get_size(window, NULL, &height); - if (!(match_data->flags & THEME_MATCH_ORIENTATION)) { match_data->flags |= THEME_MATCH_ORIENTATION; @@ -130,16 +123,14 @@ draw_simple_image(GtkStyle *style, { if (image->background) { - theme_pixbuf_render_no_cairo (image->background, - window, area, + theme_pixbuf_render (image->background, cr, draw_center ? COMPONENT_ALL : COMPONENT_ALL | COMPONENT_CENTER, FALSE, x, y, width, height); } if (image->overlay && draw_center) - theme_pixbuf_render_no_cairo (image->overlay, - window, area, COMPONENT_ALL, + theme_pixbuf_render (image->overlay, cr, COMPONENT_ALL, TRUE, x, y, width, height); @@ -150,6 +141,45 @@ draw_simple_image(GtkStyle *style, } static gboolean +draw_simple_image_no_cairo(GtkStyle *style, + GdkWindow *window, + GdkRectangle *area, + GtkWidget *widget, + ThemeMatchData *match_data, + gboolean draw_center, + gboolean allow_setbg, + gint x, + gint y, + gint width, + gint height) +{ + gboolean result; + cairo_t *cr; + + if ((width == -1) && (height == -1)) + gdk_drawable_get_size(window, &width, &height); + else if (width == -1) + gdk_drawable_get_size(window, &width, NULL); + else if (height == -1) + gdk_drawable_get_size(window, NULL, &height); + + cr = gdk_cairo_create (window); + if (area) + { + gdk_cairo_rectangle (cr, area); + cairo_clip (cr); + } + + result = draw_simple_image (style, cr, widget, match_data, + draw_center, allow_setbg, + x, y, width, height); + + cairo_destroy (cr); + + return result; +} + +static gboolean draw_gap_image(GtkStyle *style, GdkWindow *window, GdkRectangle *area, @@ -417,7 +447,7 @@ draw_shadow(GtkStyle *style, match_data.shadow = shadow; match_data.state = state; - if (!draw_simple_image (style, window, area, widget, &match_data, FALSE, FALSE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, FALSE, FALSE, x, y, width, height)) parent_class->draw_shadow (style, window, state, shadow, area, widget, detail, x, y, width, height); @@ -517,7 +547,7 @@ draw_arrow (GtkStyle *style, match_data.state = state; match_data.arrow_direction = arrow_direction; - if (draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, box_x, box_y, box_width, box_height)) { /* The theme included stepper images, we're done */ @@ -532,7 +562,7 @@ draw_arrow (GtkStyle *style, match_data.shadow = shadow; match_data.state = state; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, box_x, box_y, box_width, box_height)) parent_class->draw_box (style, window, state, shadow, area, widget, detail, box_x, box_y, box_width, box_height); @@ -548,7 +578,7 @@ draw_arrow (GtkStyle *style, match_data.state = state; match_data.arrow_direction = arrow_direction; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x, y, width, height)) parent_class->draw_arrow (style, window, state, shadow, area, widget, detail, arrow_direction, fill, x, y, width, height); @@ -578,7 +608,7 @@ draw_diamond (GtkStyle *style, match_data.shadow = shadow; match_data.state = state; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x, y, width, height)) parent_class->draw_diamond (style, window, state, shadow, area, widget, detail, x, y, width, height); @@ -615,7 +645,7 @@ draw_box (GtkStyle *style, match_data.shadow = shadow; match_data.state = state; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x, y, width, height)) { parent_class->draw_box (style, window, state, shadow, area, widget, detail, x, y, width, height); @@ -646,7 +676,7 @@ draw_flat_box (GtkStyle *style, match_data.shadow = shadow; match_data.state = state; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x, y, width, height)) parent_class->draw_flat_box (style, window, state, shadow, area, widget, detail, x, y, width, height); @@ -676,7 +706,7 @@ draw_check (GtkStyle *style, match_data.shadow = shadow; match_data.state = state; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x, y, width, height)) parent_class->draw_check (style, window, state, shadow, area, widget, detail, x, y, width, height); @@ -706,7 +736,7 @@ draw_option (GtkStyle *style, match_data.shadow = shadow; match_data.state = state; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x, y, width, height)) parent_class->draw_option (style, window, state, shadow, area, widget, detail, x, y, width, height); @@ -736,7 +766,7 @@ draw_tab (GtkStyle *style, match_data.shadow = shadow; match_data.state = state; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x, y, width, height)) parent_class->draw_tab (style, window, state, shadow, area, widget, detail, x, y, width, height); @@ -834,7 +864,7 @@ draw_extension (GtkStyle *style, match_data.state = state; match_data.gap_side = gap_side; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x, y, width, height)) parent_class->draw_extension (style, window, state, shadow, area, widget, detail, x, y, width, height, gap_side); @@ -861,7 +891,7 @@ draw_focus (GtkStyle *style, match_data.detail = (gchar *)detail; match_data.flags = 0; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, FALSE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, FALSE, x, y, width, height)) parent_class->draw_focus (style, window, state_type, area, widget, detail, x, y, width, height); @@ -895,7 +925,7 @@ draw_slider (GtkStyle *style, match_data.state = state; match_data.orientation = orientation; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x, y, width, height)) parent_class->draw_slider (style, window, state, shadow, area, widget, detail, x, y, width, height, orientation); @@ -930,7 +960,7 @@ draw_handle (GtkStyle *style, match_data.state = state; match_data.orientation = orientation; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x, y, width, height)) parent_class->draw_handle (style, window, state, shadow, area, widget, detail, x, y, width, height, orientation); @@ -976,7 +1006,7 @@ draw_expander (GtkStyle *style, match_data.state = state; match_data.expander_style = expander_style; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x - radius, y - radius, expander_size, expander_size)) parent_class->draw_expander (style, window, state, area, widget, detail, x, y, expander_style); @@ -1007,7 +1037,7 @@ draw_resize_grip (GtkStyle *style, match_data.state = state; match_data.window_edge = edge; - if (!draw_simple_image (style, window, area, widget, &match_data, TRUE, TRUE, + if (!draw_simple_image_no_cairo (style, window, area, widget, &match_data, TRUE, TRUE, x, y, width, height)) parent_class->draw_resize_grip (style, window, state, area, widget, detail, edge, x, y, width, height); |