[poppler] poppler/CairoOutputDev.cc poppler/CairoOutputDev.h
Adrian Johnson
ajohnson at kemper.freedesktop.org
Thu Jan 19 03:57:02 PST 2012
poppler/CairoOutputDev.cc | 8 ++++++--
poppler/CairoOutputDev.h | 1 +
2 files changed, 7 insertions(+), 2 deletions(-)
New commits:
commit e8e42988c5cebab2ffa5fe020f30a3a645e90b5f
Author: Adrian Johnson <ajohnson at redneon.com>
Date: Mon Jan 16 21:25:19 2012 +1030
cairo: ensure paintTransparencyGroup uses same ctm as beginTransparencyGroup
Bug 29968
diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc
index db7e654..051f5d0 100644
--- a/poppler/CairoOutputDev.cc
+++ b/poppler/CairoOutputDev.cc
@@ -1396,6 +1396,7 @@ void CairoOutputDev::beginTransparencyGroup(GfxState * /*state*/, double * /*bbo
ColorSpaceStack* css = new ColorSpaceStack;
css->cs = blendingColorSpace;
css->knockout = knockout;
+ cairo_get_matrix(cairo, &css->group_matrix);
css->next = groupColorSpaceStack;
groupColorSpaceStack = css;
@@ -1452,10 +1453,12 @@ void CairoOutputDev::endTransparencyGroup(GfxState * /*state*/) {
}
void CairoOutputDev::paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/) {
- cairo_set_source (cairo, group);
-
LOG(printf ("paint transparency group\n"));
+ cairo_save (cairo);
+ cairo_set_matrix (cairo, &groupColorSpaceStack->group_matrix);
+ cairo_set_source (cairo, group);
+
if (!mask) {
//XXX: deal with mask && shape case
if (shape) {
@@ -1495,6 +1498,7 @@ void CairoOutputDev::paintTransparencyGroup(GfxState * /*state*/, double * /*bbo
}
popTransparencyGroup();
+ cairo_restore(cairo);
}
static int luminocity(uint32_t x)
diff --git a/poppler/CairoOutputDev.h b/poppler/CairoOutputDev.h
index 949d459..b2e6fb2 100644
--- a/poppler/CairoOutputDev.h
+++ b/poppler/CairoOutputDev.h
@@ -348,6 +348,7 @@ protected:
struct ColorSpaceStack {
GBool knockout;
GfxColorSpace *cs;
+ cairo_matrix_t group_matrix;
struct ColorSpaceStack *next;
} * groupColorSpaceStack;
More information about the poppler
mailing list