From 6de341392126e83e098a360b2d77f6259ee09a23 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sat, 14 Mar 2015 23:15:01 +0000 Subject: [PATCH] rectangle: Do not draw the border if bigger than the allocation If the rectangle is allocate a size smaller than the border, drawing the border will end up with negative coordinates, and will mess up the whole thing. Since rectangles don't have a minimum preferred size, we cannot rely on the allocation being big enough to contain the border and the background color. If the rectangle is smaller than the border width value, we just paint the border color as well. --- clutter/deprecated/clutter-rectangle.c | 30 +++++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/clutter/deprecated/clutter-rectangle.c b/clutter/deprecated/clutter-rectangle.c index da6567fd3..2ad99f5e1 100644 --- a/clutter/deprecated/clutter-rectangle.c +++ b/clutter/deprecated/clutter-rectangle.c @@ -92,10 +92,10 @@ clutter_rectangle_paint (ClutterActor *self) : "unknown"); clutter_actor_get_allocation_geometry (self, &geom); - /* parent paint call will have translated us into position so - * paint from 0, 0 - */ - if (priv->has_border) + /* We paint the border if the rectangle is big enough to show it */ + if (priv->has_border && + priv->border_width < geom.width && + priv->border_width < geom.height) { /* compute the composited opacity of the actor taking into * account the opacity of the color set by the user @@ -151,10 +151,24 @@ clutter_rectangle_paint (ClutterActor *self) * priv->color.alpha / 255; - cogl_set_source_color4ub (priv->color.red, - priv->color.green, - priv->color.blue, - tmp_alpha); + if (priv->border_width < geom.width && + priv->border_width < geom.height) + { + cogl_set_source_color4ub (priv->color.red, + priv->color.green, + priv->color.blue, + tmp_alpha); + } + else + { + /* If the rectangle is as big as the border, we + * use the border color to draw + */ + cogl_set_source_color4ub (priv->border_color.red, + priv->border_color.green, + priv->border_color.blue, + tmp_alpha); + } cogl_rectangle (0, 0, geom.width, geom.height); }