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:
Benjamin Otte 2011-06-11 02:02:45 +02:00
parent 06642cab56
commit c56700ca30

View File

@ -1511,12 +1511,9 @@ render_background_internal (GtkThemingEngine *engine,
GtkStateFlags flags;
gboolean running;
gdouble progress, alpha = 1;
GtkBorder border;
GtkCssBorderCornerRadius *top_left_radius, *top_right_radius;
GtkCssBorderCornerRadius *bottom_left_radius, *bottom_right_radius;
GtkCssBorderRadius border_radius = { { 0, }, };
gint border_width;
GtkBorderStyle border_style;
gdouble mat_w, mat_h;
/* Use unmodified size for pattern scaling */
@ -1526,7 +1523,6 @@ render_background_internal (GtkThemingEngine *engine,
flags = gtk_theming_engine_get_state (engine);
gtk_theming_engine_get_background_color (engine, flags, &bg_color);
gtk_theming_engine_get_border (engine, flags, &border);
gtk_theming_engine_get (engine, flags,
"background-image", &pattern,
@ -1536,7 +1532,6 @@ render_background_internal (GtkThemingEngine *engine,
"border-top-right-radius", &top_right_radius,
"border-bottom-right-radius", &bottom_right_radius,
"border-bottom-left-radius", &bottom_left_radius,
"border-style", &border_style,
NULL);
if (top_left_radius)
@ -1552,30 +1547,7 @@ render_background_internal (GtkThemingEngine *engine,
border_radius.bottom_left = *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_set_line_width (cr, border_width);
cairo_translate (cr, x, y);
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 (border_width > 1 &&
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);
cairo_fill (cr);
}
else
{
cairo_save (cr);
_cairo_round_rectangle_sides (cr, &border_radius,
0, 0, width, height,
SIDE_ALL);
cairo_clip (cr);
cairo_paint_with_alpha (cr, alpha);
cairo_restore (cr);
}