diff options
author | Timm Bäder <mail@baedert.org> | 2019-07-06 12:57:36 +0200 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2019-07-07 07:24:00 +0200 |
commit | 95f30fee87ed91d6702aabf2689758030e8702af (patch) | |
tree | 3e8e5f6b76323b6bca4b67a1118ba33bc594775a /gtk/gtkiconhelper.c | |
parent | dbc49e7742d4c6606a16d7b620729a4a4506166e (diff) | |
download | gtk+-95f30fee87ed91d6702aabf2689758030e8702af.tar.gz |
iconhelper: Try to avoid some save/restore calls
GtkImage already does something similar so we often end up with 0/0
here. Avoid the save()/restore() calls in GtkSnapshot in that case.
Diffstat (limited to 'gtk/gtkiconhelper.c')
-rw-r--r-- | gtk/gtkiconhelper.c | 61 |
1 files changed, 44 insertions, 17 deletions
diff --git a/gtk/gtkiconhelper.c b/gtk/gtkiconhelper.c index 5698b2bdbc..a7cf18220f 100644 --- a/gtk/gtkiconhelper.c +++ b/gtk/gtkiconhelper.c @@ -227,19 +227,35 @@ gtk_icon_helper_paintable_snapshot (GdkPaintable *paintable, h = MIN (h, height); x = (width - w) / 2; y = (height - h) / 2; - gtk_snapshot_save (snapshot); - gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); - gtk_css_style_snapshot_icon_paintable (style, - snapshot, - self->paintable, - w, h, - self->texture_is_symbolic); - gtk_snapshot_restore (snapshot); + + if (x != 0 || y != 0) + { + gtk_snapshot_save (snapshot); + gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); + gtk_css_style_snapshot_icon_paintable (style, + snapshot, + self->paintable, + w, h, + self->texture_is_symbolic); + gtk_snapshot_restore (snapshot); + } + else + { + gtk_css_style_snapshot_icon_paintable (style, + snapshot, + self->paintable, + w, h, + self->texture_is_symbolic); + + } + } break; - case GTK_IMAGE_PAINTABLE: case GTK_IMAGE_EMPTY: + break; + + case GTK_IMAGE_PAINTABLE: default: { double image_ratio = (double) width / height; @@ -269,14 +285,25 @@ gtk_icon_helper_paintable_snapshot (GdkPaintable *paintable, x = floor (width - ceil (w)) / 2; y = floor (height - ceil (h)) / 2; - gtk_snapshot_save (snapshot); - gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); - gtk_css_style_snapshot_icon_paintable (style, - snapshot, - self->paintable, - w, h, - self->texture_is_symbolic); - gtk_snapshot_restore (snapshot); + if (x != 0 || y != 0) + { + gtk_snapshot_save (snapshot); + gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); + gtk_css_style_snapshot_icon_paintable (style, + snapshot, + self->paintable, + w, h, + self->texture_is_symbolic); + gtk_snapshot_restore (snapshot); + } + else + { + gtk_css_style_snapshot_icon_paintable (style, + snapshot, + self->paintable, + w, h, + self->texture_is_symbolic); + } } break; } |