summaryrefslogtreecommitdiffstats
path: root/gfx/cairo/cairo/src/cairo-compositor.c
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/cairo/cairo/src/cairo-compositor.c')
-rw-r--r--gfx/cairo/cairo/src/cairo-compositor.c66
1 files changed, 54 insertions, 12 deletions
diff --git a/gfx/cairo/cairo/src/cairo-compositor.c b/gfx/cairo/cairo/src/cairo-compositor.c
index 6f35ee04f9..606043cdf9 100644
--- a/gfx/cairo/cairo/src/cairo-compositor.c
+++ b/gfx/cairo/cairo/src/cairo-compositor.c
@@ -122,18 +122,18 @@ _cairo_compositor_mask (const cairo_compositor_t *compositor,
return status;
}
-cairo_int_status_t
-_cairo_compositor_stroke (const cairo_compositor_t *compositor,
- cairo_surface_t *surface,
- cairo_operator_t op,
- const cairo_pattern_t *source,
- const cairo_path_fixed_t *path,
- const cairo_stroke_style_t *style,
- const cairo_matrix_t *ctm,
- const cairo_matrix_t *ctm_inverse,
- double tolerance,
- cairo_antialias_t antialias,
- const cairo_clip_t *clip)
+static cairo_int_status_t
+_cairo_compositor_stroke_impl (const cairo_compositor_t *compositor,
+ cairo_surface_t *surface,
+ cairo_operator_t op,
+ const cairo_pattern_t *source,
+ const cairo_path_fixed_t *path,
+ const cairo_stroke_style_t *style,
+ const cairo_matrix_t *ctm,
+ const cairo_matrix_t *ctm_inverse,
+ double tolerance,
+ cairo_antialias_t antialias,
+ const cairo_clip_t *clip)
{
cairo_composite_rectangles_t extents;
cairo_int_status_t status;
@@ -176,6 +176,48 @@ _cairo_compositor_stroke (const cairo_compositor_t *compositor,
}
cairo_int_status_t
+_cairo_compositor_stroke (const cairo_compositor_t *compositor,
+ cairo_surface_t *surface,
+ cairo_operator_t op,
+ const cairo_pattern_t *source,
+ const cairo_path_fixed_t *path,
+ const cairo_stroke_style_t *style,
+ const cairo_matrix_t *ctm,
+ const cairo_matrix_t *ctm_inverse,
+ double tolerance,
+ cairo_antialias_t antialias,
+ const cairo_clip_t *clip)
+{
+ if (!style->is_hairline)
+ return _cairo_compositor_stroke_impl (compositor, surface,
+ op, source, path,
+ style, ctm, ctm_inverse,
+ tolerance, antialias, clip);
+ else {
+ cairo_stroke_style_t hairline_style;
+ cairo_status_t status;
+ cairo_matrix_t identity;
+
+ status = _cairo_stroke_style_init_copy (&hairline_style, style);
+ if (unlikely (status))
+ return status;
+
+ hairline_style.line_width = 1.0;
+
+ cairo_matrix_init_identity (&identity);
+
+ status = _cairo_compositor_stroke_impl (compositor, surface,
+ op, source, path,
+ &hairline_style, &identity, &identity,
+ tolerance, antialias, clip);
+
+ _cairo_stroke_style_fini (&hairline_style);
+
+ return status;
+ }
+}
+
+cairo_int_status_t
_cairo_compositor_fill (const cairo_compositor_t *compositor,
cairo_surface_t *surface,
cairo_operator_t op,