colorscale: Draw gradient using render nodes

Don't use Cairo when it's not needed.
This commit is contained in:
Benjamin Otte 2018-03-26 00:29:52 +02:00
parent 438b4b6b5c
commit 8c43f22e3e

View File

@ -110,6 +110,7 @@ gtk_color_scale_snapshot_trough (GtkColorScale *scale,
else if (scale->priv->type == GTK_COLOR_SCALE_ALPHA)
{
cairo_t *cr;
graphene_point_t start, end;
cr = gtk_snapshot_append_cairo (snapshot,
&GRAPHENE_RECT_INIT(x, y, width, height),
@ -121,6 +122,13 @@ gtk_color_scale_snapshot_trough (GtkColorScale *scale,
{
cairo_translate (cr, width, 0);
cairo_scale (cr, -1, 1);
graphene_point_init (&start, x + width, y);
graphene_point_init (&end, x, y);
}
else
{
graphene_point_init (&start, x, y);
graphene_point_init (&end, x + width, y);
}
cairo_pattern_t *pattern;
@ -137,16 +145,20 @@ gtk_color_scale_snapshot_trough (GtkColorScale *scale,
cairo_mask (cr, pattern);
cairo_pattern_destroy (pattern);
color = &scale->priv->color;
pattern = cairo_pattern_create_linear (0, 0, width, 0);
cairo_pattern_add_color_stop_rgba (pattern, 0, color->red, color->green, color->blue, 0);
cairo_pattern_add_color_stop_rgba (pattern, width, color->red, color->green, color->blue, 1);
cairo_set_source (cr, pattern);
cairo_paint (cr);
cairo_pattern_destroy (pattern);
cairo_destroy (cr);
color = &scale->priv->color;
gtk_snapshot_append_linear_gradient (snapshot,
&GRAPHENE_RECT_INIT(x, y, width, height),
&start,
&end,
(GskColorStop[2]) {
{ 0, { color->red, color->green, color->blue, 0 } },
{ 1, { color->red, color->green, color->blue, 1 } },
},
2,
"ColorAlphaGradient");
}
}