snapshot: don't create offset nodes inside offset nodes
authorTimm Bäder <mail@baedert.org>
Thu, 12 Apr 2018 08:06:16 +0000 (10:06 +0200)
committerTimm Bäder <mail@baedert.org>
Sat, 14 Apr 2018 09:47:02 +0000 (11:47 +0200)
It's pretty easy to make that one offset node.

gtk/gtksnapshot.c

index ad7b2d358a792a9a838e6942915747ee0c24b8df..0166660e906196314cfb6db577d1b1b9c7b94064 100644 (file)
@@ -430,9 +430,22 @@ gtk_snapshot_collect_offset (GtkSnapshot       *snapshot,
       previous_state->translate_y == 0.0)
     return node;
 
-  offset_node = gsk_offset_node_new (node,
-                                     previous_state->translate_x,
-                                     previous_state->translate_y);
+  if (gsk_render_node_get_node_type (node) == GSK_OFFSET_NODE)
+    {
+      const float dx = previous_state->translate_x;
+      const float dy = previous_state->translate_y;
+
+      offset_node = gsk_offset_node_new (gsk_offset_node_get_child (node),
+                                         gsk_offset_node_get_x_offset (node) + dx,
+                                         gsk_offset_node_get_y_offset (node) + dy);
+    }
+  else
+    {
+      offset_node = gsk_offset_node_new (node,
+                                         previous_state->translate_x,
+                                         previous_state->translate_y);
+    }
+
   if (name)
     gsk_render_node_set_name (offset_node, name);