forked from AuroraMiddleware/gtk
css: Implement repeating linear gradients
This commit is contained in:
parent
5df9b0188a
commit
811e848832
@ -324,7 +324,8 @@ gtk_css_image_get_parser_type (GtkCssParser *parser)
|
|||||||
{ "url", _gtk_css_image_url_get_type },
|
{ "url", _gtk_css_image_url_get_type },
|
||||||
{ "-gtk-gradient", _gtk_css_image_gradient_get_type },
|
{ "-gtk-gradient", _gtk_css_image_gradient_get_type },
|
||||||
{ "-gtk-win32-theme-part", _gtk_css_image_win32_get_type },
|
{ "-gtk-win32-theme-part", _gtk_css_image_win32_get_type },
|
||||||
{ "linear-gradient", _gtk_css_image_linear_get_type }
|
{ "linear-gradient", _gtk_css_image_linear_get_type },
|
||||||
|
{ "repeating-linear-gradient", _gtk_css_image_linear_get_type }
|
||||||
};
|
};
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
|
@ -168,6 +168,9 @@ gtk_css_image_linear_draw (GtkCssImage *image,
|
|||||||
gtk_css_image_linear_get_start_end (linear, length, &start, &end);
|
gtk_css_image_linear_get_start_end (linear, length, &start, &end);
|
||||||
pattern = cairo_pattern_create_linear (x * (start - 0.5), y * (start - 0.5),
|
pattern = cairo_pattern_create_linear (x * (start - 0.5), y * (start - 0.5),
|
||||||
x * (end - 0.5), y * (end - 0.5));
|
x * (end - 0.5), y * (end - 0.5));
|
||||||
|
if (linear->repeating)
|
||||||
|
cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
|
||||||
|
else
|
||||||
cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD);
|
cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD);
|
||||||
|
|
||||||
offset = start;
|
offset = start;
|
||||||
@ -230,7 +233,11 @@ gtk_css_image_linear_parse (GtkCssImage *image,
|
|||||||
GtkCssImageLinear *linear = GTK_CSS_IMAGE_LINEAR (image);
|
GtkCssImageLinear *linear = GTK_CSS_IMAGE_LINEAR (image);
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
if (!_gtk_css_parser_try (parser, "linear-gradient(", TRUE))
|
if (_gtk_css_parser_try (parser, "repeating-linear-gradient(", TRUE))
|
||||||
|
linear->repeating = TRUE;
|
||||||
|
else if (_gtk_css_parser_try (parser, "linear-gradient(", TRUE))
|
||||||
|
linear->repeating = FALSE;
|
||||||
|
else
|
||||||
{
|
{
|
||||||
_gtk_css_parser_error (parser, "Not a linear gradient");
|
_gtk_css_parser_error (parser, "Not a linear gradient");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -356,7 +363,11 @@ gtk_css_image_linear_print (GtkCssImage *image,
|
|||||||
/* XXX: Do these need to be prinatable? */
|
/* XXX: Do these need to be prinatable? */
|
||||||
g_return_if_fail (!linear->is_computed);
|
g_return_if_fail (!linear->is_computed);
|
||||||
|
|
||||||
|
if (linear->repeating)
|
||||||
|
g_string_append (string, "repeating-linear-gradient(");
|
||||||
|
else
|
||||||
g_string_append (string, "linear-gradient(");
|
g_string_append (string, "linear-gradient(");
|
||||||
|
|
||||||
if (linear->angle.unit == GTK_CSS_NUMBER)
|
if (linear->angle.unit == GTK_CSS_NUMBER)
|
||||||
{
|
{
|
||||||
guint side = linear->angle.value;
|
guint side = linear->angle.value;
|
||||||
@ -421,6 +432,7 @@ gtk_css_image_linear_compute (GtkCssImage *image,
|
|||||||
|
|
||||||
copy = g_object_new (GTK_TYPE_CSS_IMAGE_LINEAR, NULL);
|
copy = g_object_new (GTK_TYPE_CSS_IMAGE_LINEAR, NULL);
|
||||||
copy->is_computed = TRUE;
|
copy->is_computed = TRUE;
|
||||||
|
copy->repeating = linear->repeating;
|
||||||
|
|
||||||
_gtk_css_number_compute (©->angle, &linear->angle, context);
|
_gtk_css_number_compute (©->angle, &linear->angle, context);
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@ struct _GtkCssImageLinear
|
|||||||
GtkCssNumber angle; /* warning: We use GTK_CSS_NUMBER as an enum for the corners */
|
GtkCssNumber angle; /* warning: We use GTK_CSS_NUMBER as an enum for the corners */
|
||||||
GArray *stops;
|
GArray *stops;
|
||||||
guint is_computed :1;
|
guint is_computed :1;
|
||||||
|
guint repeating :1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GtkCssImageLinearClass
|
struct _GtkCssImageLinearClass
|
||||||
|
Loading…
Reference in New Issue
Block a user