[poppler] 2 commits - poppler/CairoOutputDev.cc

Carlos Garcia Campos carlosgc at kemper.freedesktop.org
Tue Jan 26 12:51:05 PST 2010


 poppler/CairoOutputDev.cc |   25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

New commits:
commit 0af1ae75fd4c8031343f668bed5d8ca6588ee652
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date:   Tue Jan 26 20:49:17 2010 +0100

    [cairo] Use the right matrix for the mask in drawMaskedImage()
    
    Fixes bug #16906.

diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc
index 331b5ac..5ca86b8 100644
--- a/poppler/CairoOutputDev.cc
+++ b/poppler/CairoOutputDev.cc
@@ -1850,6 +1850,7 @@ void CairoOutputDev::drawMaskedImage(GfxState *state, Object *ref,
   cairo_surface_t *maskImage, *image;
   cairo_pattern_t *maskPattern, *pattern;
   cairo_matrix_t matrix;
+  cairo_matrix_t maskMatrix;
   Guchar *pix;
   int x, y;
   int invert_bit;
@@ -1933,9 +1934,11 @@ void CairoOutputDev::drawMaskedImage(GfxState *state, Object *ref,
 
   cairo_matrix_init_translate (&matrix, 0, height);
   cairo_matrix_scale (&matrix, width, -height);
-
   cairo_pattern_set_matrix (pattern, &matrix);
-  cairo_pattern_set_matrix (maskPattern, &matrix);
+
+  cairo_matrix_init_translate (&maskMatrix, 0, maskHeight);
+  cairo_matrix_scale (&maskMatrix, maskWidth, -maskHeight);
+  cairo_pattern_set_matrix (maskPattern, &maskMatrix);
 
   cairo_save (cairo);
   cairo_set_source (cairo, pattern);
commit d8ceaff39f5b80624b6bdc703c2a180dfc3d73ee
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date:   Tue Jan 26 11:57:06 2010 +0100

    [cairo] Add some more LOG messages

diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc
index 5658df0..331b5ac 100644
--- a/poppler/CairoOutputDev.cc
+++ b/poppler/CairoOutputDev.cc
@@ -774,6 +774,8 @@ GBool CairoOutputDev::axialShadedFill(GfxState *state, GfxAxialShading *shading,
   else
     cairo_pattern_set_extend (fill_pattern, CAIRO_EXTEND_PAD);
 
+  LOG (printf ("axial-sh\n"));
+
   // TODO: use the actual stops in the shading in the case
   // of linear interpolation (Type 2 Exponential functions with N=1)
   return gFalse;
@@ -804,6 +806,8 @@ GBool CairoOutputDev::radialShadedFill(GfxState *state, GfxRadialShading *shadin
   else
     cairo_pattern_set_extend (fill_pattern, CAIRO_EXTEND_NONE);
 
+  LOG (printf ("radial-sh\n"));
+
   return gFalse;
 }
 
@@ -1105,6 +1109,9 @@ void CairoOutputDev::beginTransparencyGroup(GfxState * /*state*/, double * /*bbo
   css->knockout = knockout;
   css->next = groupColorSpaceStack;
   groupColorSpaceStack = css;
+
+  LOG(printf ("begin transparency group. knockout: %s\n", knockout ? "yes":"no"));
+
   if (knockout) {
     knockoutCount++;
     if (!cairo_shape) {
@@ -1142,11 +1149,12 @@ void CairoOutputDev::beginTransparencyGroup(GfxState * /*state*/, double * /*bbo
 }
 
 void CairoOutputDev::endTransparencyGroup(GfxState * /*state*/) {
-
   if (group)
     cairo_pattern_destroy(group);
   group = cairo_pop_group (cairo);
 
+  LOG(printf ("end transparency group\n"));
+
   if (groupColorSpaceStack->next && groupColorSpaceStack->next->knockout) {
     if (shape)
       cairo_pattern_destroy(shape);
@@ -1157,6 +1165,8 @@ void CairoOutputDev::endTransparencyGroup(GfxState * /*state*/) {
 void CairoOutputDev::paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/) {
   cairo_set_source (cairo, group);
 
+  LOG(printf ("paint transparency group\n"));
+
   if (!mask) {
     //XXX: deal with mask && shape case
     if (shape) {
@@ -1213,6 +1223,8 @@ void CairoOutputDev::setSoftMask(GfxState * state, double * bbox, GBool alpha,
                                  Function * transferFunc, GfxColor * backdropColor) {
   cairo_pattern_destroy(mask);
 
+  LOG(printf ("set softMask\n"));
+
   if (alpha == false) {
     /* We need to mask according to the luminocity of the group.
      * So we paint the group to an image surface convert it to a luminocity map
@@ -2171,6 +2183,8 @@ void CairoOutputDev::drawImage(GfxState *state, Object *ref, Stream *str,
   }
   gfree(lookup);
 
+  LOG (printf ("drawImage %dx%d\n", width, height));
+
   cairo_surface_t *scaled_surface;
 
   scaled_surface = downscaleSurface (image);
@@ -2189,8 +2203,6 @@ void CairoOutputDev::drawImage(GfxState *state, Object *ref, Stream *str,
   if (cairo_pattern_status (pattern))
     goto cleanup;
 
-  LOG (printf ("drawImage %dx%d\n", width, height));
-
   cairo_pattern_set_filter (pattern,
 			    interpolate ?
 			    CAIRO_FILTER_BILINEAR : CAIRO_FILTER_FAST);


More information about the poppler mailing list