[gtk/wip/baedert/for-master: 33/34] snapshot: Try to avoid some linear gradient nodes



commit 62d7fefd90d5ce6590e333ed15af7e1314530a3b
Author: Timm Bäder <mail baedert org>
Date:   Wed Sep 25 17:07:45 2019 +0200

    snapshot: Try to avoid some linear gradient nodes

 gtk/gtksnapshot.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)
---
diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c
index 46a8cecfdc..ab38d09f3c 100644
--- a/gtk/gtksnapshot.c
+++ b/gtk/gtksnapshot.c
@@ -1745,6 +1745,9 @@ gtk_snapshot_append_linear_gradient (GtkSnapshot            *snapshot,
   graphene_point_t real_start_point;
   graphene_point_t real_end_point;
   float scale_x, scale_y, dx, dy;
+  const GdkRGBA *first_color;
+  gboolean need_gradient = FALSE;
+  int i;
 
   g_return_if_fail (snapshot != NULL);
   g_return_if_fail (start_point != NULL);
@@ -1759,11 +1762,24 @@ gtk_snapshot_append_linear_gradient (GtkSnapshot            *snapshot,
   real_end_point.x = scale_x * end_point->x + dx;
   real_end_point.y = scale_y * end_point->y + dy;
 
-  node = gsk_linear_gradient_node_new (&real_bounds,
-                                       &real_start_point,
-                                       &real_end_point,
-                                       stops,
-                                       n_stops);
+  first_color = &stops[0].color;
+  for (i = 0; i < n_stops; i ++)
+    {
+      if (!gdk_rgba_equal (first_color, &stops[i].color))
+        {
+          need_gradient = TRUE;
+          break;
+        }
+    }
+
+  if (need_gradient)
+    node = gsk_linear_gradient_node_new (&real_bounds,
+                                         &real_start_point,
+                                         &real_end_point,
+                                         stops,
+                                         n_stops);
+  else
+    node = gsk_color_node_new (first_color, &real_bounds);
 
   gtk_snapshot_append_node_internal (snapshot, node);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]