summaryrefslogtreecommitdiff
path: root/rsvg-cairo-draw.c
diff options
context:
space:
mode:
authorDom Lachowicz <domlachowicz@gmail.com>2007-08-20 19:07:14 +0000
committerDom Lachowicz <doml@src.gnome.org>2007-08-20 19:07:14 +0000
commita759d44f384dfc1d50d1680eddba97c32cb7468f (patch)
tree7389179089ba0d66a6f7f8b39463fdaea2ecae48 /rsvg-cairo-draw.c
parent731dc4d5ffe979970bce1c3dc33e05ff98cfd3fa (diff)
downloadlibrsvg-a759d44f384dfc1d50d1680eddba97c32cb7468f.tar.gz
Basic support for SVG 1.1's text-rendering and shape-rendering properties
2007-08-20 Dom Lachowicz <domlachowicz@gmail.com> * rsvg-styles.c: Basic support for SVG 1.1's text-rendering and shape-rendering properties (#464599) http://www.w3.org/TR/SVG/painting.html#ShapeRenderingProperty * rsvg-styles.h: Ditto * rsvg-cairo-draw.c: Ditto svn path=/trunk/; revision=1131
Diffstat (limited to 'rsvg-cairo-draw.c')
-rw-r--r--rsvg-cairo-draw.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/rsvg-cairo-draw.c b/rsvg-cairo-draw.c
index a3275dfe..89c49c6e 100644
--- a/rsvg-cairo-draw.c
+++ b/rsvg-cairo-draw.c
@@ -42,6 +42,32 @@
#include <pango/pangocairo.h>
static void
+_rsvg_cairo_set_shape_antialias (cairo_t * cr, ShapeRenderingProperty aa)
+{
+ if (SHAPE_RENDERING_AUTO == aa)
+ cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
+ else if (SHAPE_RENDERING_OPTIMIZE_SPEED == aa)
+ cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
+ else if (SHAPE_RENDERING_CRISP_EDGES == aa)
+ cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
+ else if (SHAPE_RENDERING_GEOMETRIC_PRECISION == aa)
+ cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
+}
+
+static void
+_rsvg_cairo_set_text_antialias (cairo_t * cr, TextRenderingProperty aa)
+{
+ if (TEXT_RENDERING_AUTO == aa)
+ cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
+ else if (TEXT_RENDERING_OPTIMIZE_SPEED == aa)
+ cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
+ else if (TEXT_RENDERING_OPTIMIZE_LEGIBILITY == aa)
+ cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
+ else if (TEXT_RENDERING_GEOMETRIC_PRECISION == aa)
+ cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
+}
+
+static void
_rsvg_cairo_set_operator (cairo_t * cr, RsvgCompOpType comp_op)
{
cairo_operator_t op;
@@ -446,6 +472,9 @@ rsvg_cairo_render_pango_layout (RsvgDrawingCtx * ctx, PangoLayout * layout, doub
RsvgBbox bbox;
cairo_save (render->cr);
+
+ _rsvg_cairo_set_text_antialias (render->cr, state->text_rendering_type);
+
_set_rsvg_affine (render->cr, state->affine);
cairo_set_line_width (render->cr, _rsvg_css_normalize_length (&state->stroke_width, ctx, 'h'));
@@ -513,6 +542,8 @@ rsvg_cairo_render_path (RsvgDrawingCtx * ctx, const RsvgBpathDef * bpath_def)
cairo_save (cr);
+ _rsvg_cairo_set_shape_antialias (cr, state->shape_rendering_type);
+
_set_rsvg_affine (cr, state->affine);
cairo_set_line_width (cr, _rsvg_css_normalize_length (&state->stroke_width, ctx, 'h'));
@@ -710,7 +741,7 @@ rsvg_cairo_render_image (RsvgDrawingCtx * ctx, const GdkPixbuf * pixbuf,
_rsvg_cairo_set_operator (render->cr, state->comp_op);
-#if 0
+#if 1
cairo_set_source_surface (render->cr, surface, pixbuf_x, pixbuf_y);
#else
{