summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2019-07-06 12:57:36 +0200
committerTimm Bäder <mail@baedert.org>2019-07-07 07:24:00 +0200
commit95f30fee87ed91d6702aabf2689758030e8702af (patch)
tree3e8e5f6b76323b6bca4b67a1118ba33bc594775a
parentdbc49e7742d4c6606a16d7b620729a4a4506166e (diff)
downloadgtk+-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.
-rw-r--r--gtk/gtkiconhelper.c61
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;
}