poppler/CairoFontEngine.cc | 19 ++----------------- poppler/CairoOutputDev.cc | 16 +++++++++++++--- poppler/CairoOutputDev.h | 1 + 3 files changed, 16 insertions(+), 20 deletions(-)
New commits: commit 15752b7cd5c94620e3ad3b6afd9c70ccc754c9b3 Author: Carlos Garcia Campos <[email protected]> Date: Mon Aug 10 20:02:13 2009 +0200 [cairo] Add empty updateBlendMode to CairoImageOutputDev Fixes a crash when using CairoImageOutputDev with a document with blend modes. diff --git a/poppler/CairoOutputDev.h b/poppler/CairoOutputDev.h index 071c171..e0e1813 100644 --- a/poppler/CairoOutputDev.h +++ b/poppler/CairoOutputDev.h @@ -366,6 +366,7 @@ public: virtual void updateStrokeColor(GfxState *state) { } virtual void updateFillOpacity(GfxState *state) { } virtual void updateStrokeOpacity(GfxState *state) { } + virtual void updateBlendMode(GfxState *state) { } //----- update text state virtual void updateFont(GfxState *state) { } commit 45dae4e66b2b833f95656850b5f1b0ffd1d96f1d Author: Carlos Garcia Campos <[email protected]> Date: Mon Aug 10 20:00:04 2009 +0200 [cairo] Use current fill_opacity when drawing images Fixes launchpad bug #342282 (page 2 of the attached document) diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc index 6e9874e..af92776 100644 --- a/poppler/CairoOutputDev.cc +++ b/poppler/CairoOutputDev.cc @@ -1885,7 +1885,7 @@ void CairoOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int *maskColors, GBool inlineImg) { cairo_surface_t *image; - cairo_pattern_t *pattern; + cairo_pattern_t *pattern, *maskPattern; ImageStream *imgStr; cairo_matrix_t matrix; unsigned char *buffer; @@ -1988,17 +1988,27 @@ void CairoOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, cairo_matrix_scale (&matrix, width, -height); cairo_pattern_set_matrix (pattern, &matrix); + if (!mask && fill_opacity != 1.0) { + maskPattern = cairo_pattern_create_rgba (1., 1., 1., fill_opacity); + } else if (mask) { + maskPattern = cairo_pattern_reference (mask); + } else { + maskPattern = NULL; + } + cairo_save (cairo); cairo_set_source (cairo, pattern); cairo_rectangle (cairo, 0., 0., 1., 1.); - if (mask) { + if (maskPattern) { cairo_clip (cairo); - cairo_mask (cairo, mask); + cairo_mask (cairo, maskPattern); } else { cairo_fill (cairo); } cairo_restore (cairo); + cairo_pattern_destroy (maskPattern); + if (cairo_shape) { cairo_save (cairo_shape); cairo_set_source (cairo_shape, pattern); commit b1cd54546844f2f7cd6bf7cc14b7584c84c3fc14 Author: Carlos Garcia Campos <[email protected]> Date: Mon Aug 10 19:55:44 2009 +0200 [cairo] Do not save the font file twice for FreeType fonts Fixes bug #20491. diff --git a/poppler/CairoFontEngine.cc b/poppler/CairoFontEngine.cc index 6490235..329ff42 100644 --- a/poppler/CairoFontEngine.cc +++ b/poppler/CairoFontEngine.cc @@ -154,10 +154,6 @@ CairoFont::getSubstitutionCorrection(GfxFont *gfxFont) static cairo_user_data_key_t _ft_cairo_key; -static void fileWrite(void *stream, char *data, int len) { - fwrite(data, 1, len, (FILE *)stream); -} - static void _ft_done_face_uncached (void *closure) { @@ -367,7 +363,7 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Library lib, GBool useCIDs) { Ref embRef; Object refObj, strObj; - GooString *tmpFileName, *fileName,*tmpFileName2; + GooString *tmpFileName, *fileName; DisplayFontParam *dfp; FILE *tmpFile; int c, i, n; @@ -493,21 +489,10 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, codeToGID = ((Gfx8BitFont *)gfxFont)->getCodeToGIDMap(ff); codeToGIDLen = 256; } - if (!openTempFile(&tmpFileName2, &tmpFile, "wb")) { - delete ff; - error(-1, "failed to open truetype tempfile\n"); - goto err2; - } - ff->writeTTF(&fileWrite, tmpFile); - fclose(tmpFile); - delete ff; - - if (! _ft_new_face (lib, tmpFileName2->getCString(), &face, &font_face)) { + if (! _ft_new_face (lib, fileName->getCString(), &face, &font_face)) { error(-1, "could not create truetype face\n"); goto err2; } - unlink (tmpFileName2->getCString()); - delete tmpFileName2; break; case fontCIDType0: _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
