summaryrefslogtreecommitdiff
path: root/source/fitz/svg-device.c
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2013-10-11 19:48:50 +0100
committerRobin Watts <robin.watts@artifex.com>2013-10-11 19:50:49 +0100
commit67cc9edf0cc0dc8ccf6ef419c96ab5087c914cae (patch)
tree2704cd7cfb34cb729a1af1fa6877d0c4320e4f78 /source/fitz/svg-device.c
parenta0712d442fa13c6fd775239b2a661c93fc99ed54 (diff)
downloadmupdf-67cc9edf0cc0dc8ccf6ef419c96ab5087c914cae.tar.xz
SVG: Fix alpha issues.
While looking at fts_09_0921, I spotted that the alpha values on images and fills aren't being sent. Fix that here, together with broken colors being sent for masks. fts_09_0921 still renders badly due to the lack of support for blend modes.
Diffstat (limited to 'source/fitz/svg-device.c')
-rw-r--r--source/fitz/svg-device.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/source/fitz/svg-device.c b/source/fitz/svg-device.c
index ddf4031c..7e980133 100644
--- a/source/fitz/svg-device.c
+++ b/source/fitz/svg-device.c
@@ -525,7 +525,7 @@ svg_dev_clip_stroke_path(fz_device *dev, fz_path *path, const fz_rect *rect, fz_
fz_context *ctx = dev->ctx;
fz_rect bounds;
int num = sdev->id++;
- float white[3] = { 255, 255, 255 };
+ float white[3] = { 1, 1, 1 };
fz_bound_path(ctx, path, stroke, ctm, &bounds);
@@ -580,7 +580,7 @@ svg_dev_clip_text(fz_device *dev, fz_text *text, const fz_matrix *ctm, int accum
fz_context *ctx = dev->ctx;
fz_rect bounds;
int num = sdev->id++;
- float white[3] = { 255, 255, 255 };
+ float white[3] = { 1, 1, 1 };
font *fnt;
fz_bound_text(ctx, text, NULL, ctm, &bounds);
@@ -685,6 +685,8 @@ svg_dev_fill_image(fz_device *dev, fz_image *image, const fz_matrix *ctm, float
fz_matrix scale = { 1.0f/image->w, 0, 0, 1.0f/image->h, 0, 0};
fz_concat(&local_ctm, &scale, ctm);
+ if (alpha != 1.0f)
+ fz_printf(out, "<g opacity=\"%g\">", alpha);
fz_printf(out, "<image");
svg_dev_ctm(sdev, &local_ctm);
fz_printf(out, " width=\"%dpx\" height=\"%dpx\" xlink:href=\"data:", image->w, image->h);
@@ -708,6 +710,8 @@ svg_dev_fill_image(fz_device *dev, fz_image *image, const fz_matrix *ctm, float
}
}
fz_printf(out, "\"/>\n");
+ if (alpha != 1.0f)
+ fz_printf(out, "</g>");
}
static void
@@ -736,11 +740,13 @@ svg_dev_fill_shade(fz_device *dev, fz_shade *shade, const fz_matrix *ctm, float
{
fz_paint_shade(ctx, shade, ctm, pix, &bbox);
buf = fz_new_png_from_pixmap(ctx, pix);
- fz_printf(out, "<image");
- fz_printf(out, " x=\"%dpx\" y=\"%dpx\" width=\"%dpx\" height=\"%dpx\" xlink:href=\"data:", pix->x, pix->y, pix->w, pix->h);
- fz_printf(out, "image/png;base64,");
+ if (alpha != 1.0f)
+ fz_printf(out, "<g opacity=\"%g\">", alpha);
+ fz_printf(out, "<image x=\"%dpx\" y=\"%dpx\" width=\"%dpx\" height=\"%dpx\" xlink:href=\"data:image/png;base64,", pix->x, pix->y, pix->w, pix->h);
send_data_base64(out, buf);
fz_printf(out, "\"/>\n");
+ if (alpha != 1.0f)
+ fz_printf(out, "</g>");
}
fz_always(ctx)
{