Commit ebf6d1ca authored by Oliver Sander's avatar Oliver Sander Committed by Albert Astals Cid
Browse files

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
parent 0a817494
......@@ -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();
......
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment