From: Timm Bäder Date: Tue, 17 Dec 2019 16:15:17 +0000 (+0100) Subject: Avoid a few state changes X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~20^2~415 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6a9bc5daef85d0f9153e6cd0355a7fd2c733a232;p=gtk4.git Avoid a few state changes We can't optimize the save/restore calls away in the snapshot code, so do it from the caller side. --- diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index 751ae9de23..8a415750e9 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -1136,10 +1136,17 @@ gtk_image_snapshot (GtkWidget *widget, else y = CLAMP (baseline - h * gtk_image_get_baseline_align (image), 0, height - ceil (h)); - gtk_snapshot_save (snapshot); - gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); - gdk_paintable_snapshot (GDK_PAINTABLE (priv->icon_helper), snapshot, w, h); - gtk_snapshot_restore (snapshot); + if (x != 0 || y != 0) + { + gtk_snapshot_save (snapshot); + gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); + gdk_paintable_snapshot (GDK_PAINTABLE (priv->icon_helper), snapshot, w, h); + gtk_snapshot_restore (snapshot); + } + else + { + gdk_paintable_snapshot (GDK_PAINTABLE (priv->icon_helper), snapshot, w, h); + } } } diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 8119b06fd4..2a67391479 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -13085,12 +13085,19 @@ gtk_widget_snapshot_child (GtkWidget *widget, if (GTK_IS_NATIVE (child)) return; - gtk_snapshot_save (snapshot); - gtk_snapshot_transform (snapshot, priv->transform); + if (priv->transform) + { + gtk_snapshot_save (snapshot); + gtk_snapshot_transform (snapshot, priv->transform); - gtk_widget_snapshot (child, snapshot); + gtk_widget_snapshot (child, snapshot); - gtk_snapshot_restore (snapshot); + gtk_snapshot_restore (snapshot); + } + else + { + gtk_widget_snapshot (child, snapshot); + } } /**