diff options
author | Rick Yorgason <rick@firefang.com> | 2021-08-15 06:58:54 +0000 |
---|---|---|
committer | Adrian Johnson <ajohnson@redneon.com> | 2021-08-15 06:58:54 +0000 |
commit | ecec0419f8e178d71e449b52acfdfe9ac03aed37 (patch) | |
tree | e6ede3cdc9a0ae02a6f56dfec38ff8b05cdcf9bb /src/cairo-gstate.c | |
parent | 4dd48f0979f693dfc515eb3eff266ec6429f8b33 (diff) | |
download | cairo-ecec0419f8e178d71e449b52acfdfe9ac03aed37.tar.gz |
Added hairline support to cairo
Diffstat (limited to 'src/cairo-gstate.c')
-rw-r--r-- | src/cairo-gstate.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c index 64060c4fc..a8c67e718 100644 --- a/src/cairo-gstate.c +++ b/src/cairo-gstate.c @@ -470,7 +470,10 @@ _cairo_gstate_get_fill_rule (cairo_gstate_t *gstate) cairo_status_t _cairo_gstate_set_line_width (cairo_gstate_t *gstate, double width) { - gstate->stroke_style.line_width = width; + if (gstate->stroke_style.is_hairline) + gstate->stroke_style.pre_hairline_line_width = width; + else + gstate->stroke_style.line_width = width; return CAIRO_STATUS_SUCCESS; } @@ -482,6 +485,29 @@ _cairo_gstate_get_line_width (cairo_gstate_t *gstate) } cairo_status_t +_cairo_gstate_set_hairline (cairo_gstate_t *gstate, cairo_bool_t set_hairline) +{ + if (gstate->stroke_style.is_hairline != set_hairline) { + gstate->stroke_style.is_hairline = set_hairline; + + if (set_hairline) { + gstate->stroke_style.pre_hairline_line_width = gstate->stroke_style.line_width; + gstate->stroke_style.line_width = 0.0; + } else { + gstate->stroke_style.line_width = gstate->stroke_style.pre_hairline_line_width; + } + } + + return CAIRO_STATUS_SUCCESS; +} + +cairo_bool_t +_cairo_gstate_get_hairline (cairo_gstate_t *gstate) +{ + return gstate->stroke_style.is_hairline; +} + +cairo_status_t _cairo_gstate_set_line_cap (cairo_gstate_t *gstate, cairo_line_cap_t line_cap) { gstate->stroke_style.line_cap = line_cap; @@ -1172,7 +1198,7 @@ _cairo_gstate_stroke (cairo_gstate_t *gstate, cairo_path_fixed_t *path) if (gstate->op == CAIRO_OPERATOR_DEST) return CAIRO_STATUS_SUCCESS; - if (gstate->stroke_style.line_width <= 0.0) + if (gstate->stroke_style.line_width <= 0.0 && !gstate->stroke_style.is_hairline) return CAIRO_STATUS_SUCCESS; if (_cairo_clip_is_all_clipped (gstate->clip)) |