summaryrefslogtreecommitdiff
path: root/src/cairo-pdf-operators.c
diff options
context:
space:
mode:
authorAdrian Johnson <ajohnson@redneon.com>2008-03-16 17:29:48 +1030
committerAdrian Johnson <ajohnson@redneon.com>2008-03-17 22:04:05 +1030
commite4f087b8b944a26d688afeef4b9ea7a0d0a6e9ec (patch)
tree7813c3778e9010d84a6d761f7891381dba26b4ea /src/cairo-pdf-operators.c
parent8238a9fd4fa672299fd99aa95f5fcec03647f7c8 (diff)
Factor out common stroke code in pdf-operators
Diffstat (limited to 'src/cairo-pdf-operators.c')
-rw-r--r--src/cairo-pdf-operators.c68
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