[gtk+] GskRenderNode: Fix fallback border drawing
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GskRenderNode: Fix fallback border drawing
- Date: Tue, 29 Aug 2017 09:55:48 +0000 (UTC)
commit c18d2872f292607c921c959e6e97c4d6635bdfd2
Author: Timm Bäder <mail baedert org>
Date: Tue Aug 29 11:48:13 2017 +0200
GskRenderNode: Fix fallback border drawing
gsk/gskrendernodeimpl.c | 90 ++++++++++++++++++++++------------------------
1 files changed, 43 insertions(+), 47 deletions(-)
---
diff --git a/gsk/gskrendernodeimpl.c b/gsk/gskrendernodeimpl.c
index cbdcb8f..214025b 100644
--- a/gsk/gskrendernodeimpl.c
+++ b/gsk/gskrendernodeimpl.c
@@ -464,56 +464,52 @@ gsk_border_node_draw (GskRenderNode *node,
else
{
const graphene_rect_t *bounds = &self->outline.bounds;
- /* distance to center "line":
- * +-------------------------+
- * | |
- * | |
- * | ---this-line--- |
- * | |
- * | |
- * +-------------------------+
- * That line is equidistant from all sides. It's either horiontal
- * or vertical, depending on if the rect is wider or taller.
- * We use the 4 sides spanned up by connecting the line to the corner
- * points to color the regions of the rectangle differently.
- * Note that the call to cairo_fill() will add the potential final
- * segment by closing the path, so we don't have to care.
- */
- float dst = MIN (bounds->size.width, bounds->size.height) / 2.0;
cairo_clip (cr);
- /* top */
- cairo_move_to (cr, bounds->origin.x + dst, bounds->origin.y + dst);
- cairo_rel_line_to (cr, - dst, - dst);
- cairo_rel_line_to (cr, bounds->size.width, 0);
- cairo_rel_line_to (cr, - dst, dst);
- gdk_cairo_set_source_rgba (cr, &self->border_color[0]);
- cairo_fill (cr);
+ /* Top */
+ if (self->border_width[0] > 0)
+ {
+ cairo_move_to (cr, bounds->origin.x, bounds->origin.y);
+ cairo_rel_line_to (cr, self->border_width[3], self->border_width[0]);
+ cairo_rel_line_to (cr, bounds->size.width - self->border_width[3] - self->border_width[1], 0);
+ cairo_rel_line_to (cr, self->border_width[1], - self->border_width[0]);
+ gdk_cairo_set_source_rgba (cr, &self->border_color[0]);
+ cairo_fill (cr);
+ }
- /* right */
- cairo_move_to (cr, bounds->origin.x + bounds->size.width - dst, bounds->origin.y + dst);
- cairo_rel_line_to (cr, dst, - dst);
- cairo_rel_line_to (cr, 0, bounds->size.height);
- cairo_rel_line_to (cr, - dst, - dst);
- gdk_cairo_set_source_rgba (cr, &self->border_color[1]);
- cairo_fill (cr);
+ /* Right */
+ if (self->border_width[1] > 0)
+ {
+ cairo_move_to (cr, bounds->origin.x + bounds->size.width, bounds->origin.y);
+ cairo_rel_line_to (cr, - self->border_width[1], self->border_width[0]);
+ cairo_rel_line_to (cr, 0, bounds->size.height - self->border_width[0] - self->border_width[2]);
+ cairo_rel_line_to (cr, self->border_width[1], self->border_width[2]);
+ gdk_cairo_set_source_rgba (cr, &self->border_color[1]);
+ cairo_fill (cr);
+ }
- /* bottom */
- cairo_move_to (cr, bounds->origin.x + bounds->size.width - dst, bounds->origin.y + bounds->size.height
- dst);
- cairo_rel_line_to (cr, dst, dst);
- cairo_rel_line_to (cr, - bounds->size.width, 0);
- cairo_rel_line_to (cr, dst, - dst);
- gdk_cairo_set_source_rgba (cr, &self->border_color[2]);
- cairo_fill (cr);
+ /* Bottom */
+ if (self->border_width[2] > 0)
+ {
+ cairo_move_to (cr, bounds->origin.x, bounds->origin.y + bounds->size.height);
+ cairo_rel_line_to (cr, self->border_width[3], - self->border_width[2]);
+ cairo_rel_line_to (cr, bounds->size.width - self->border_width[3] - self->border_width[1], 0);
+ cairo_rel_line_to (cr, self->border_width[1], self->border_width[2]);
+ gdk_cairo_set_source_rgba (cr, &self->border_color[2]);
+ cairo_fill (cr);
+ }
- /* left */
- cairo_move_to (cr, bounds->origin.x + dst, bounds->origin.y + bounds->size.height - dst);
- cairo_rel_line_to (cr, - dst, dst);
- cairo_rel_line_to (cr, 0, - bounds->size.height);
- cairo_rel_line_to (cr, dst, dst);
- gdk_cairo_set_source_rgba (cr, &self->border_color[3]);
- cairo_fill (cr);
+ /* Left */
+ if (self->border_width[3] > 0)
+ {
+ cairo_move_to (cr, bounds->origin.x, bounds->origin.y);
+ cairo_rel_line_to (cr, self->border_width[3], self->border_width[0]);
+ cairo_rel_line_to (cr, 0, bounds->size.height - self->border_width[0] - self->border_width[2]);
+ cairo_rel_line_to (cr, - self->border_width[3], self->border_width[2]);
+ gdk_cairo_set_source_rgba (cr, &self->border_color[3]);
+ cairo_fill (cr);
+ }
}
cairo_restore (cr);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]