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.
This commit is contained in:
Benjamin Otte
2016-12-26 17:04:56 +01:00
parent 5017c3be65
commit 599cc995f3

View File

@@ -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);