qt5/src/ArthurOutputDev.cc | 48 ++++++++++++++++----------------------------- qt5/src/ArthurOutputDev.h | 4 --- 2 files changed, 18 insertions(+), 34 deletions(-)
New commits: commit ebf6d1ca736fecad49fbf543875c794770bd4d57 Author: Oliver Sander <[email protected]> Date: Fri Sep 15 11:18:58 2017 +0200 Clean up the remaining Splash code in Arthur backend - remove some goto-style error handling - use nullptr - use std::unique_ptr (fixes a leak) - remove unused data member m_currentFont - remove some unused forward declarations Bug #103117 diff --git a/qt5/src/ArthurOutputDev.cc b/qt5/src/ArthurOutputDev.cc index f31e6a5f..f199e656 100644 --- a/qt5/src/ArthurOutputDev.cc +++ b/qt5/src/ArthurOutputDev.cc @@ -296,14 +296,14 @@ void ArthurOutputDev::updateStrokeOpacity(GfxState *state) void ArthurOutputDev::updateFont(GfxState *state) { - GfxFont *font = state->getFont(); - if (!font) + GfxFont *gfxFont = state->getFont(); + if (!gfxFont) { return; } // is the font in the cache? - ArthurFontID fontID = {*font->getID(), state->getFontSize()}; + ArthurFontID fontID = {*gfxFont->getID(), state->getFontSize()}; auto cacheEntry = m_rawFontCache.find(fontID); if (cacheEntry!=m_rawFontCache.end()) { @@ -316,14 +316,14 @@ void ArthurOutputDev::updateFont(GfxState *state) // New font: load it into the cache float fontSize = state->getFontSize(); - GfxFontLoc* fontLoc = font->locateFont(xref, nullptr); + std::unique_ptr<GfxFontLoc> fontLoc(gfxFont->locateFont(xref, nullptr)); if (fontLoc) { // load the font from respective location switch (fontLoc->locType) { case gfxFontLocEmbedded: {// if there is an embedded font, read it to memory int fontDataLen; - const char* fontData = font->readEmbFontFile(xref, &fontDataLen); + const char* fontData = gfxFont->readEmbFontFile(xref, &fontDataLen); m_rawFont = new QRawFont(QByteArray(fontData, fontDataLen), fontSize); m_rawFontCache.insert(std::make_pair(fontID,std::unique_ptr<QRawFont>(m_rawFont))); @@ -362,12 +362,9 @@ void ArthurOutputDev::updateFont(GfxState *state) // ***************************************************************************** #ifdef HAVE_SPLASH - GfxFont *gfxFont; - GfxFontLoc *fontLoc; GfxFontType fontType; - SplashOutFontFileID *id; SplashFontFile *fontFile; - SplashFontSrc *fontsrc = NULL; + SplashFontSrc *fontsrc = nullptr; FoFiTrueType *ff; Object refObj, strObj; GooString *fileName; @@ -381,29 +378,26 @@ void ArthurOutputDev::updateFont(GfxState *state) SplashFTFontFile* ftFontFile; m_needFontUpdate = false; - fileName = NULL; - tmpBuf = NULL; - fontLoc = NULL; + fileName = nullptr; + tmpBuf = nullptr; - if (!(gfxFont = state->getFont())) { - goto err1; - } fontType = gfxFont->getType(); if (fontType == fontType3) { - goto err1; + return; } // Default: no codeToGID table m_codeToGID = nullptr; // check the font file cache - id = new SplashOutFontFileID(gfxFont->getID()); + SplashOutFontFileID *id = new SplashOutFontFileID(gfxFont->getID()); if ((fontFile = m_fontEngine->getFontFile(id))) { delete id; } else { - if (!(fontLoc = gfxFont->locateFont(xref, NULL))) { + std::unique_ptr<GfxFontLoc> fontLoc(gfxFont->locateFont(xref, nullptr)); + if (!fontLoc) { error(errSyntaxError, -1, "Couldn't find a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); @@ -475,7 +469,7 @@ void ArthurOutputDev::updateFont(GfxState *state) n = 256; delete ff; } else { - codeToGID = NULL; + codeToGID = nullptr; n = 0; } if (!(fontFile = m_fontEngine->loadTrueTypeFont( @@ -506,7 +500,7 @@ void ArthurOutputDev::updateFont(GfxState *state) memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), n * sizeof(int)); } else { - codeToGID = NULL; + codeToGID = nullptr; n = 0; } if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont( @@ -521,7 +515,7 @@ void ArthurOutputDev::updateFont(GfxState *state) break; case fontCIDType2: case fontCIDType2OT: - codeToGID = NULL; + codeToGID = nullptr; n = 0; if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); @@ -566,18 +560,12 @@ void ArthurOutputDev::updateFont(GfxState *state) // font in the Splash font cache. Otherwise we'd load it again and again. m_fontEngine->getFont(fontFile, mat, matrix); - delete fontLoc; if (fontsrc && !fontsrc->isFile) fontsrc->unref(); return; err2: delete id; - delete fontLoc; - err1: - if (fontsrc && !fontsrc->isFile) - fontsrc->unref(); - return; #endif } @@ -753,7 +741,7 @@ void ArthurOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, row_stride = (width + 3) & ~3; buffer = (unsigned char *) malloc (height * row_stride); - if (buffer == NULL) { + if (buffer == nullptr) { error(-1, "Unable to allocate memory for image."); return; } @@ -778,10 +766,10 @@ void ArthurOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, image = cairo_image_surface_create_for_data (buffer, CAIRO_FORMAT_A8, width, height, row_stride); - if (image == NULL) + if (image == nullptr) return; pattern = cairo_pattern_create_for_surface (image); - if (pattern == NULL) + if (pattern == nullptr) return; ctm = state->getCTM(); diff --git a/qt5/src/ArthurOutputDev.h b/qt5/src/ArthurOutputDev.h index 9ebdcec1..496f5a72 100644 --- a/qt5/src/ArthurOutputDev.h +++ b/qt5/src/ArthurOutputDev.h @@ -44,9 +44,6 @@ #include <QtGui/QPainter> class GfxState; -class GfxPath; -class Gfx8BitFont; -struct GfxRGB; class SplashFontEngine; @@ -175,7 +172,6 @@ public: private: QPainter *m_painter; FontHinting m_fontHinting; - QFont m_currentFont; QPen m_currentPen; QBrush m_currentBrush; GBool m_needFontUpdate; // set when the font needs to be updated _______________________________________________ poppler mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/poppler
