[poppler] poppler/CairoOutputDev.cc
Carlos Garcia Campos
carlosgc at kemper.freedesktop.org
Thu Jul 24 03:19:23 PDT 2014
poppler/CairoOutputDev.cc | 64 ++++++++++++++++++++++------------------------
1 file changed, 31 insertions(+), 33 deletions(-)
New commits:
commit 02c127b355bb8a98684a5d0af063c60b8bfd09dd
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date: Thu Jul 24 10:46:17 2014 +0200
cairo: Make sure we always push a transparency group in setSoftMaskFromImageMask()
Because that's what unsetSoftMaskFromImageMask() assumes.
https://bugs.freedesktop.org/show_bug.cgi?id=81624
diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc
index f31b46b..c2827c6 100644
--- a/poppler/CairoOutputDev.cc
+++ b/poppler/CairoOutputDev.cc
@@ -1880,46 +1880,44 @@ void CairoOutputDev::setSoftMaskFromImageMask(GfxState *state, Object *ref, Stre
delete imgStr;
invert_bit = invert ? 1 : 0;
- if (pix ^ invert_bit)
- return;
-
- cairo_save (cairo);
- cairo_rectangle (cairo, 0., 0., width, height);
- cairo_fill (cairo);
- cairo_restore (cairo);
- if (cairo_shape) {
- cairo_save (cairo_shape);
- cairo_rectangle (cairo_shape, 0., 0., width, height);
- cairo_fill (cairo_shape);
- cairo_restore (cairo_shape);
+ if (!(pix ^ invert_bit)) {
+ cairo_save (cairo);
+ cairo_rectangle (cairo, 0., 0., width, height);
+ cairo_fill (cairo);
+ cairo_restore (cairo);
+ if (cairo_shape) {
+ cairo_save (cairo_shape);
+ cairo_rectangle (cairo_shape, 0., 0., width, height);
+ cairo_fill (cairo_shape);
+ cairo_restore (cairo_shape);
+ }
}
- return;
- }
+ } else {
+ cairo_push_group_with_content (cairo, CAIRO_CONTENT_ALPHA);
- cairo_push_group_with_content (cairo, CAIRO_CONTENT_ALPHA);
+ /* shape is 1.0 for painted areas, 0.0 for unpainted ones */
- /* shape is 1.0 for painted areas, 0.0 for unpainted ones */
+ cairo_matrix_t matrix;
+ cairo_get_matrix (cairo, &matrix);
+ //XXX: it is possible that we should only do sub pixel positioning if
+ // we are rendering fonts */
+ if (!printing && prescaleImages && matrix.xy == 0.0 && matrix.yx == 0.0) {
+ drawImageMaskPrescaled(state, ref, str, width, height, invert, gFalse, inlineImg);
+ } else {
+ drawImageMaskRegular(state, ref, str, width, height, invert, gFalse, inlineImg);
+ }
- cairo_matrix_t matrix;
- cairo_get_matrix (cairo, &matrix);
- //XXX: it is possible that we should only do sub pixel positioning if
- // we are rendering fonts */
- if (!printing && prescaleImages && matrix.xy == 0.0 && matrix.yx == 0.0) {
- drawImageMaskPrescaled(state, ref, str, width, height, invert, gFalse, inlineImg);
- } else {
- drawImageMaskRegular(state, ref, str, width, height, invert, gFalse, inlineImg);
- }
+ if (state->getFillColorSpace()->getMode() == csPattern) {
+ cairo_set_source_rgb (cairo, 1, 1, 1);
+ cairo_set_matrix (cairo, &mask_matrix);
+ cairo_mask (cairo, mask);
+ }
- if (state->getFillColorSpace()->getMode() == csPattern) {
- cairo_set_source_rgb (cairo, 1, 1, 1);
- cairo_set_matrix (cairo, &mask_matrix);
- cairo_mask (cairo, mask);
+ if (mask)
+ cairo_pattern_destroy (mask);
+ mask = cairo_pop_group (cairo);
}
- if (mask)
- cairo_pattern_destroy (mask);
- mask = cairo_pop_group (cairo);
-
saveState(state);
double bbox[4] = {0,0,1,1}; // dummy
beginTransparencyGroup(state, bbox, state->getFillColorSpace(),
More information about the poppler
mailing list