diff options
author | Benjamin Otte <otte@redhat.com> | 2018-07-24 20:23:20 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2018-07-24 20:55:45 +0200 |
commit | 95a4eff6baddb174ef5ff8384250bd8c1e6e1f32 (patch) | |
tree | 2279daa8f3ecf558b11887fd99d76b9b82fda800 /gtk/gtkrendericon.c | |
parent | 9675c990435042236e5814442c62df7b1c2084aa (diff) | |
download | gtk+-95a4eff6baddb174ef5ff8384250bd8c1e6e1f32.tar.gz |
render: Make gtk_render_icon() use the snapshot API
This removes a lot of duplicated code.
Diffstat (limited to 'gtk/gtkrendericon.c')
-rw-r--r-- | gtk/gtkrendericon.c | 75 |
1 files changed, 0 insertions, 75 deletions
diff --git a/gtk/gtkrendericon.c b/gtk/gtkrendericon.c index 5a6be7510f..2d2dfa05f5 100644 --- a/gtk/gtkrendericon.c +++ b/gtk/gtkrendericon.c @@ -96,81 +96,6 @@ gtk_css_style_snapshot_icon (GtkCssStyle *style, gtk_snapshot_pop (snapshot); } -static gboolean -get_surface_extents (cairo_surface_t *surface, - GdkRectangle *out_extents) -{ - cairo_t *cr; - gboolean result; - - cr = cairo_create (surface); - result = gdk_cairo_get_clip_rectangle (cr, out_extents); - cairo_destroy (cr); - - return result; -} - -void -gtk_css_style_render_icon_surface (GtkCssStyle *style, - cairo_t *cr, - cairo_surface_t *surface, - double x, - double y) -{ - const GtkCssValue *shadows; - graphene_matrix_t graphene_matrix; - cairo_matrix_t matrix, transform_matrix, saved_matrix; - GdkRectangle extents; - - g_return_if_fail (GTK_IS_CSS_STYLE (style)); - g_return_if_fail (cr != NULL); - g_return_if_fail (surface != NULL); - - shadows = gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_SHADOW); - - if (!get_surface_extents (surface, &extents)) - { - /* weird infinite surface, no special magic for you */ - cairo_set_source_surface (cr, surface, x, y); - _gtk_css_shadows_value_paint_icon (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_SHADOW), cr); - cairo_paint (cr); - return; - } - - cairo_get_matrix (cr, &saved_matrix); - cairo_translate (cr, x + extents.x, y + extents.y); - - if (gtk_css_transform_value_get_matrix (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_TRANSFORM), &graphene_matrix) && - graphene_matrix_is_2d (&graphene_matrix)) - { - cairo_pattern_t *pattern; - - graphene_matrix_to_2d (&graphene_matrix, - &transform_matrix.xx, &transform_matrix.yx, - &transform_matrix.xy, &transform_matrix.yy, - &transform_matrix.x0, &transform_matrix.y0); - /* XXX: Implement -gtk-icon-transform-origin instead of hardcoding "50% 50%" here */ - cairo_matrix_init_translate (&matrix, extents.width / 2, extents.height / 2); - cairo_matrix_multiply (&matrix, &transform_matrix, &matrix); - cairo_matrix_translate (&matrix, - extents.width / 2, - extents.height / 2); - if (cairo_matrix_invert (&matrix) != CAIRO_STATUS_SUCCESS) - { - g_assert_not_reached (); - } - cairo_matrix_translate (&matrix, extents.x, extents.y); - - pattern = cairo_pattern_create_for_surface (surface); - cairo_pattern_set_matrix (pattern, &matrix); - cairo_set_source (cr, pattern); - cairo_pattern_destroy (pattern); - - _gtk_css_shadows_value_paint_icon (shadows, cr); - cairo_paint (cr); - } - - cairo_set_matrix (cr, &saved_matrix); -} - void gtk_css_style_snapshot_icon_paintable (GtkCssStyle *style, GtkSnapshot *snapshot, |