[gtk/path-stroke: 14/18] Special-case rects for strokes
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/path-stroke: 14/18] Special-case rects for strokes
- Date: Sun, 13 Dec 2020 16:13:13 +0000 (UTC)
commit 33f12bc82cc68f634b58070b820cd41d9b836451
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Dec 5 14:20:17 2020 -0500
Special-case rects for strokes
In many cases, the outline of a rectangle is just
two rectangles.
gsk/gskcontour.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
---
diff --git a/gsk/gskcontour.c b/gsk/gskcontour.c
index 0a290e7d67..2ac0f5e880 100644
--- a/gsk/gskcontour.c
+++ b/gsk/gskcontour.c
@@ -25,6 +25,7 @@
#include "gskpathbuilder.h"
#include "gskpathprivate.h"
#include "gsksplineprivate.h"
+#include "gskstrokeprivate.h"
typedef struct _GskContourClass GskContourClass;
@@ -472,11 +473,43 @@ gsk_rect_contour_get_winding (const GskContour *contour,
return 0;
}
+static gboolean
+stroke_is_simple (GskStroke *stroke)
+{
+ if (stroke->line_join != GSK_LINE_JOIN_MITER &&
+ stroke->line_join != GSK_LINE_JOIN_MITER_CLIP)
+ return FALSE;
+
+ if (stroke->miter_limit < 1.5)
+ return FALSE;
+
+ if (stroke->n_dash != 0)
+ return FALSE;
+
+ return TRUE;
+}
+
static void
gsk_rect_contour_add_stroke (const GskContour *contour,
GskPathBuilder *builder,
GskStroke *stroke)
{
+ const GskRectContour *self = (const GskRectContour *) contour;
+
+ if (stroke_is_simple (stroke))
+ {
+ graphene_rect_t rect;
+
+ graphene_rect_init (&rect, self->x, self->y, self->width, self->height);
+
+ graphene_rect_inset (&rect, stroke->line_width / 2, stroke->line_width / 2);
+ gsk_path_builder_add_rect (builder, &rect);
+
+ graphene_rect_inset (&rect, - stroke->line_width, - stroke->line_width);
+ rect.origin.x += rect.size.width;
+ rect.size.width = - rect.size.width;
+ gsk_path_builder_add_rect (builder, &rect);
+ }
}
static const GskContourClass GSK_RECT_CONTOUR_CLASS =
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]