git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
test function member assignment
[swftools.git]
/
lib
/
pdf
/
InfoOutputDev.cc
diff --git
a/lib/pdf/InfoOutputDev.cc
b/lib/pdf/InfoOutputDev.cc
index
fd33452
..
d9336b2
100644
(file)
--- a/
lib/pdf/InfoOutputDev.cc
+++ b/
lib/pdf/InfoOutputDev.cc
@@
-1,9
+1,18
@@
+#include "config.h"
#include "Object.h"
#include "Object.h"
-#include "SplashTypes.h"
+#include "InfoOutputDev.h"
#include "SplashOutputDev.h"
#include "SplashOutputDev.h"
+#ifdef HAVE_POPPLER
+#include <splash/SplashTypes.h>
+#include <splash/SplashPath.h>
+#include <splash/SplashFont.h>
+#include <splash/SplashFontFile.h>
+#else
+#include "SplashTypes.h"
#include "SplashPath.h"
#include "SplashPath.h"
+#include "SplashFont.h"
#include "SplashFontFile.h"
#include "SplashFontFile.h"
-#include "InfoOutputDev.h"
+#endif
#include "GfxState.h"
#include "../log.h"
#include <math.h>
#include "GfxState.h"
#include "../log.h"
#include <math.h>
@@
-13,6
+22,7
@@
InfoOutputDev::InfoOutputDev(XRef*xref)
num_links = 0;
num_images = 0;
num_fonts = 0;
num_links = 0;
num_images = 0;
num_fonts = 0;
+ num_polygons= 0;
currentfont = 0;
currentglyph = 0;
id2font = new GHash(1);
currentfont = 0;
currentglyph = 0;
id2font = new GHash(1);
@@
-31,8
+41,8
@@
InfoOutputDev::~InfoOutputDev()
}
id2font->killIter(&i);
}
id2font->killIter(&i);
- delete id2font;
- delete splash;
+ delete id2font;id2font=0;
+ delete splash;splash=0;
}
void FontInfo::grow(int size)
{
}
void FontInfo::grow(int size)
{
@@
-49,6
+59,9
@@
FontInfo::FontInfo()
this->num_glyphs = 0;
this->glyphs = 0;
this->splash_font = 0;
this->num_glyphs = 0;
this->glyphs = 0;
this->splash_font = 0;
+ this->lastchar = -1;
+ this->lastx = 0;
+ this->lasty = 0;
}
FontInfo::~FontInfo()
{
}
FontInfo::~FontInfo()
{
@@
-65,6
+78,7
@@
FontInfo::~FontInfo()
glyphs[t]=0;
}
}
glyphs[t]=0;
}
}
+ free(glyphs);glyphs=0;
}
GBool InfoOutputDev::upsideDown() {return gTrue;}
GBool InfoOutputDev::useDrawChar() {return gTrue;}
}
GBool InfoOutputDev::upsideDown() {return gTrue;}
GBool InfoOutputDev::useDrawChar() {return gTrue;}
@@
-151,8
+165,25
@@
void InfoOutputDev::updateFont(GfxState *state)
state->setFont(font, 1024.0);
splash->doUpdateFont(state);
currentfont->splash_font = splash->getCurrentFont();
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);
}
free(id);
}
+
+void InfoOutputDev::fill(GfxState *state)
+{
+ num_polygons++;
+}
+
+void InfoOutputDev::eoFill(GfxState *state)
+{
+ num_polygons++;
+}
+
FontInfo* InfoOutputDev::getFont(char*id)
{
return (FontInfo*)id2font->lookup(id);
FontInfo* InfoOutputDev::getFont(char*id)
{
return (FontInfo*)id2font->lookup(id);
@@
-180,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();
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->path = currentfont->splash_font->getGlyphPath(code);
+ g->advance = currentfont->splash_font->last_advance;
g->unicode = 0;
}
if(uLen && (u[0]>=32 && u[0]<g->unicode || !g->unicode)) {
g->unicode = u[0];
}
g->unicode = 0;
}
if(uLen && (u[0]>=32 && u[0]<g->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)
}
GBool InfoOutputDev::beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen)