themingengine: background applies to full border
The code was attempting to only apply it to half of the border. But according to CSS, the background area by default is the full border box.
This commit is contained in:
@ -1511,12 +1511,9 @@ render_background_internal (GtkThemingEngine *engine,
|
|||||||
GtkStateFlags flags;
|
GtkStateFlags flags;
|
||||||
gboolean running;
|
gboolean running;
|
||||||
gdouble progress, alpha = 1;
|
gdouble progress, alpha = 1;
|
||||||
GtkBorder border;
|
|
||||||
GtkCssBorderCornerRadius *top_left_radius, *top_right_radius;
|
GtkCssBorderCornerRadius *top_left_radius, *top_right_radius;
|
||||||
GtkCssBorderCornerRadius *bottom_left_radius, *bottom_right_radius;
|
GtkCssBorderCornerRadius *bottom_left_radius, *bottom_right_radius;
|
||||||
GtkCssBorderRadius border_radius = { { 0, }, };
|
GtkCssBorderRadius border_radius = { { 0, }, };
|
||||||
gint border_width;
|
|
||||||
GtkBorderStyle border_style;
|
|
||||||
gdouble mat_w, mat_h;
|
gdouble mat_w, mat_h;
|
||||||
|
|
||||||
/* Use unmodified size for pattern scaling */
|
/* Use unmodified size for pattern scaling */
|
||||||
@ -1526,7 +1523,6 @@ render_background_internal (GtkThemingEngine *engine,
|
|||||||
flags = gtk_theming_engine_get_state (engine);
|
flags = gtk_theming_engine_get_state (engine);
|
||||||
|
|
||||||
gtk_theming_engine_get_background_color (engine, flags, &bg_color);
|
gtk_theming_engine_get_background_color (engine, flags, &bg_color);
|
||||||
gtk_theming_engine_get_border (engine, flags, &border);
|
|
||||||
|
|
||||||
gtk_theming_engine_get (engine, flags,
|
gtk_theming_engine_get (engine, flags,
|
||||||
"background-image", &pattern,
|
"background-image", &pattern,
|
||||||
@ -1536,7 +1532,6 @@ render_background_internal (GtkThemingEngine *engine,
|
|||||||
"border-top-right-radius", &top_right_radius,
|
"border-top-right-radius", &top_right_radius,
|
||||||
"border-bottom-right-radius", &bottom_right_radius,
|
"border-bottom-right-radius", &bottom_right_radius,
|
||||||
"border-bottom-left-radius", &bottom_left_radius,
|
"border-bottom-left-radius", &bottom_left_radius,
|
||||||
"border-style", &border_style,
|
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (top_left_radius)
|
if (top_left_radius)
|
||||||
@ -1552,30 +1547,7 @@ render_background_internal (GtkThemingEngine *engine,
|
|||||||
border_radius.bottom_left = *bottom_left_radius;
|
border_radius.bottom_left = *bottom_left_radius;
|
||||||
g_free (bottom_left_radius);
|
g_free (bottom_left_radius);
|
||||||
|
|
||||||
border_width = MIN (MIN (border.top, border.bottom),
|
|
||||||
MIN (border.left, border.right));
|
|
||||||
|
|
||||||
if (border_width > 1 &&
|
|
||||||
border_style == GTK_BORDER_STYLE_NONE)
|
|
||||||
{
|
|
||||||
x += (gdouble) border_width / 2;
|
|
||||||
y += (gdouble) border_width / 2;
|
|
||||||
width -= border_width;
|
|
||||||
height -= border_width;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
x += border.left;
|
|
||||||
y += border.top;
|
|
||||||
width -= border.left + border.right;
|
|
||||||
height -= border.top + border.bottom;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (width <= 0 || height <= 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
cairo_save (cr);
|
cairo_save (cr);
|
||||||
cairo_set_line_width (cr, border_width);
|
|
||||||
cairo_translate (cr, x, y);
|
cairo_translate (cr, x, y);
|
||||||
|
|
||||||
running = gtk_theming_engine_state_is_running (engine, GTK_STATE_PRELIGHT, &progress);
|
running = gtk_theming_engine_state_is_running (engine, GTK_STATE_PRELIGHT, &progress);
|
||||||
@ -1775,31 +1747,13 @@ render_background_internal (GtkThemingEngine *engine,
|
|||||||
|
|
||||||
if (alpha == 1)
|
if (alpha == 1)
|
||||||
{
|
{
|
||||||
if (border_width > 1 &&
|
cairo_fill (cr);
|
||||||
border_style != GTK_BORDER_STYLE_NONE)
|
|
||||||
{
|
|
||||||
/* stroke with the same source, so the background
|
|
||||||
* has exactly the shape than the frame, this
|
|
||||||
* is important so gtk_render_background() and
|
|
||||||
* gtk_render_frame() fit perfectly with round
|
|
||||||
* borders.
|
|
||||||
*/
|
|
||||||
cairo_fill_preserve (cr);
|
|
||||||
cairo_stroke (cr);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
cairo_fill (cr);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cairo_save (cr);
|
cairo_save (cr);
|
||||||
_cairo_round_rectangle_sides (cr, &border_radius,
|
|
||||||
0, 0, width, height,
|
|
||||||
SIDE_ALL);
|
|
||||||
cairo_clip (cr);
|
cairo_clip (cr);
|
||||||
|
|
||||||
cairo_paint_with_alpha (cr, alpha);
|
cairo_paint_with_alpha (cr, alpha);
|
||||||
|
|
||||||
cairo_restore (cr);
|
cairo_restore (cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user