[gtk+] css: Handle repeating gradients with only one offset



commit 599cc995f3532ba85a96d2409ef5589508785faf
Author: Benjamin Otte <otte redhat com>
Date:   Mon Dec 26 17:04:56 2016 +0100

    css: Handle repeating gradients with only one offset
    
    Example:
      repeating-linear-gradient(red 50%, blue 50%)
    
    Those gradients in Firefox draw a solid image of the last color, so do
    the same here.

 gtk/gtkcssimagelinear.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkcssimagelinear.c b/gtk/gtkcssimagelinear.c
index 17318ca..5841e15 100644
--- a/gtk/gtkcssimagelinear.c
+++ b/gtk/gtkcssimagelinear.c
@@ -181,6 +181,19 @@ gtk_css_image_linear_snapshot (GtkCssImage        *image,
   length = sqrt (x * x + y * y);
   gtk_css_image_linear_get_start_end (linear, length, &start, &end);
 
+  if (start == end)
+    {
+      /* repeating gradients with all color stops sharing the same offset
+       * get the color of the last color stop */
+      GtkCssImageLinearColorStop *stop = &g_array_index (linear->stops, GtkCssImageLinearColorStop, 
linear->stops->len - 1);
+
+      gtk_snapshot_append_color_node (snapshot,
+                                      _gtk_css_rgba_value_get_rgba (stop->color),
+                                      &GRAPHENE_RECT_INIT (0, 0, width, height),
+                                      "RepeatingLinearGradient<degenerate>");
+      return;
+    }
+
   offset = start;
   last = -1;
   stops = g_newa (GskColorStop, linear->stops->len);


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