X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2FInfoOutputDev.cc;h=d9336b23e86b5fa1e5ee86750dc50b77e265b8e8;hb=82c9bb9acf3487e02eddd93c20828cb899cd4113;hp=165397803793ac9ad0f8dbe9b280e13791e28ef4;hpb=5e85f2318e021b29590ae201311350842122d1e8;p=swftools.git diff --git a/lib/pdf/InfoOutputDev.cc b/lib/pdf/InfoOutputDev.cc index 1653978..d9336b2 100644 --- a/lib/pdf/InfoOutputDev.cc +++ b/lib/pdf/InfoOutputDev.cc @@ -59,6 +59,9 @@ FontInfo::FontInfo() this->num_glyphs = 0; this->glyphs = 0; this->splash_font = 0; + this->lastchar = -1; + this->lastx = 0; + this->lasty = 0; } FontInfo::~FontInfo() { @@ -162,6 +165,12 @@ void InfoOutputDev::updateFont(GfxState *state) state->setFont(font, 1024.0); splash->doUpdateFont(state); currentfont->splash_font = splash->getCurrentFont(); + if(currentfont->splash_font) { + currentfont->ascender = currentfont->splash_font->ascender; + currentfont->descender = currentfont->splash_font->descender; + } else { + currentfont->ascender = currentfont->descender = 0; + } free(id); } @@ -202,13 +211,25 @@ void InfoOutputDev::drawChar(GfxState *state, double x, double y, GlyphInfo*g = currentfont->glyphs[code]; if(!g) { g = currentfont->glyphs[code] = new GlyphInfo(); + g->advance_max = 0; + currentfont->splash_font->last_advance = -1; g->path = currentfont->splash_font->getGlyphPath(code); + g->advance = currentfont->splash_font->last_advance; g->unicode = 0; } if(uLen && (u[0]>=32 && u[0]unicode || !g->unicode)) { g->unicode = u[0]; } + if(currentfont->lastchar>=0 && currentfont->lasty == y) { + double xshift = x - currentfont->lastx; + if(xshift>=0 && xshift > g->advance_max) { + g->advance_max = xshift; + } + } + currentfont->lastx = x; + currentfont->lasty = y; + currentfont->lastchar = code; } GBool InfoOutputDev::beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen)