StThemeNodeDrawing: fill background behind translucent gradients

If a background gradient isn't fully opaque, then we need to first
fill in the background color so the border color doesn't leak into
the interior.

https://bugzilla.gnome.org/show_bug.cgi?id=640465
This commit is contained in:
Ray Strode 2011-01-24 16:00:51 -05:00
parent 0e23ec394e
commit b4ec342d06

View File

@ -452,7 +452,8 @@ st_theme_node_has_visible_outline (StThemeNode *node)
} }
static cairo_pattern_t * static cairo_pattern_t *
create_cairo_pattern_of_background_gradient (StThemeNode *node) create_cairo_pattern_of_background_gradient (StThemeNode *node,
gboolean *needs_background_fill)
{ {
cairo_pattern_t *pattern; cairo_pattern_t *pattern;
@ -482,6 +483,12 @@ create_cairo_pattern_of_background_gradient (StThemeNode *node)
node->background_gradient_end.green / 255., node->background_gradient_end.green / 255.,
node->background_gradient_end.blue / 255., node->background_gradient_end.blue / 255.,
node->background_gradient_end.alpha / 255.); node->background_gradient_end.alpha / 255.);
if (node->background_color.alpha > 0 ||
node->background_gradient_end.alpha > 0)
*needs_background_fill = TRUE;
else
*needs_background_fill = FALSE;
return pattern; return pattern;
} }
@ -787,8 +794,8 @@ st_theme_node_render_background_with_border (StThemeNode *node)
*/ */
if (node->background_gradient_type != ST_GRADIENT_NONE) if (node->background_gradient_type != ST_GRADIENT_NONE)
{ {
pattern = create_cairo_pattern_of_background_gradient (node); pattern = create_cairo_pattern_of_background_gradient (node,
draw_solid_background = FALSE; &draw_solid_background);
} }
else else
{ {