diff options
author | Adrian Johnson <ajohnson@redneon.com> | 2008-03-16 17:29:48 +1030 |
---|---|---|
committer | Adrian Johnson <ajohnson@redneon.com> | 2008-03-17 22:04:05 +1030 |
commit | e4f087b8b944a26d688afeef4b9ea7a0d0a6e9ec (patch) | |
tree | 7813c3778e9010d84a6d761f7891381dba26b4ea /src/cairo-pdf-operators.c | |
parent | 8238a9fd4fa672299fd99aa95f5fcec03647f7c8 (diff) |
Factor out common stroke code in pdf-operators
Diffstat (limited to 'src/cairo-pdf-operators.c')
-rw-r--r-- | src/cairo-pdf-operators.c | 68 |
1 files changed, 32 insertions, 36 deletions
diff --git a/src/cairo-pdf-operators.c b/src/cairo-pdf-operators.c index b92ed187..c0a8a9ca 100644 --- a/src/cairo-pdf-operators.c +++ b/src/cairo-pdf-operators.c @@ -583,12 +583,13 @@ _cairo_pdf_operators_emit_stroke_style (cairo_pdf_operators_t *pdf_operators, } -cairo_int_status_t -_cairo_pdf_operators_stroke (cairo_pdf_operators_t *pdf_operators, - cairo_path_fixed_t *path, - cairo_stroke_style_t *style, - cairo_matrix_t *ctm, - cairo_matrix_t *ctm_inverse) +static cairo_int_status_t +_cairo_pdf_operators_emit_stroke (cairo_pdf_operators_t *pdf_operators, + cairo_path_fixed_t *path, + cairo_stroke_style_t *style, + cairo_matrix_t *ctm, + cairo_matrix_t *ctm_inverse, + const char *pdf_operator) { cairo_status_t status; cairo_matrix_t m, path_transform; @@ -628,7 +629,7 @@ _cairo_pdf_operators_stroke (cairo_pdf_operators_t *pdf_operators, if (status) return status; - _cairo_output_stream_printf (pdf_operators->stream, "S"); + _cairo_output_stream_printf (pdf_operators->stream, "%s", pdf_operator); if (has_ctm) _cairo_output_stream_printf (pdf_operators->stream, " Q"); @@ -638,6 +639,21 @@ _cairo_pdf_operators_stroke (cairo_pdf_operators_t *pdf_operators, } cairo_int_status_t +_cairo_pdf_operators_stroke (cairo_pdf_operators_t *pdf_operators, + cairo_path_fixed_t *path, + cairo_stroke_style_t *style, + cairo_matrix_t *ctm, + cairo_matrix_t *ctm_inverse) +{ + return _cairo_pdf_operators_emit_stroke (pdf_operators, + path, + style, + ctm, + ctm_inverse, + "S"); +} + +cairo_int_status_t _cairo_pdf_operators_fill (cairo_pdf_operators_t *pdf_operators, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule) @@ -678,45 +694,25 @@ _cairo_pdf_operators_fill_stroke (cairo_pdf_operators_t *pdf_operators, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse) { - const char *pdf_operator; - cairo_status_t status; - cairo_matrix_t m; - - status = _cairo_pdf_operators_emit_stroke_style (pdf_operators, style); - if (status == CAIRO_INT_STATUS_NOTHING_TO_DO) - return CAIRO_STATUS_SUCCESS; - if (status) - return status; - - cairo_matrix_multiply (&m, ctm, &pdf_operators->cairo_to_pdf); - _cairo_output_stream_printf (pdf_operators->stream, - "q %f %f %f %f %f %f cm\n", - m.xx, m.yx, m.xy, m.yy, - m.x0, m.y0); - - status = _cairo_pdf_operators_emit_path (pdf_operators, - path, - ctm_inverse, - style->line_cap); - if (status) - return status; + const char *operator; switch (fill_rule) { case CAIRO_FILL_RULE_WINDING: - pdf_operator = "B"; + operator = "B"; break; case CAIRO_FILL_RULE_EVEN_ODD: - pdf_operator = "B*"; + operator = "B*"; break; default: ASSERT_NOT_REACHED; } - _cairo_output_stream_printf (pdf_operators->stream, - "%s Q\n", - pdf_operator); - - return _cairo_output_stream_get_status (pdf_operators->stream); + return _cairo_pdf_operators_emit_stroke (pdf_operators, + path, + style, + ctm, + ctm_inverse, + operator); } #define GLYPH_POSITION_TOLERANCE 0.001 |