From: kramm Date: Mon, 6 Oct 2008 12:56:11 +0000 (+0000) Subject: replaced advance sample median by maximum X-Git-Tag: buttons-working~20 X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=commitdiff_plain;h=fa4fec76390c6ff0fc041a83bff0edb475ea7d78 replaced advance sample median by maximum --- diff --git a/lib/pdf/InfoOutputDev.cc b/lib/pdf/InfoOutputDev.cc index c2accf2..a10f4bd 100644 --- a/lib/pdf/InfoOutputDev.cc +++ b/lib/pdf/InfoOutputDev.cc @@ -207,7 +207,7 @@ void InfoOutputDev::drawChar(GfxState *state, double x, double y, GlyphInfo*g = currentfont->glyphs[code]; if(!g) { g = currentfont->glyphs[code] = new GlyphInfo(); - g->advance_samples = 0; + g->advance_max = 0; currentfont->splash_font->last_advance = -1; g->path = currentfont->splash_font->getGlyphPath(code); g->advance = currentfont->splash_font->last_advance; @@ -218,11 +218,8 @@ void InfoOutputDev::drawChar(GfxState *state, double x, double y, } if(currentfont->lastchar>=0 && currentfont->lasty == y) { double xshift = x - currentfont->lastx; - if(xshift>=0) { - AdvanceSample* old = g->advance_samples; - g->advance_samples = new AdvanceSample(); - g->advance_samples->next = old; - g->advance_samples->advance = xshift; + if(xshift>=0 && xshift > g->advance_max) { + g->advance_max = xshift; } } @@ -231,41 +228,6 @@ void InfoOutputDev::drawChar(GfxState *state, double x, double y, currentfont->lastchar = code; } -static int compare_double(const void *_a, const void *_b) -{ - const double*a = (const double*)_a; - const double*b = (const double*)_b; - if(*a < *b) - return -1; - if(*a > *b) - return 1; - return 0; -} - -double GlyphInfo::estimateAdvance() -{ - AdvanceSample*a = advance_samples; - int n=0; - while(a) { - n++; - a = a->next; - } - if(!n) - return -1; - double*list = (double*)malloc(sizeof(double)*n); - n = 0; - a = advance_samples; - while(a) { - list[n++] = a->advance; - a = a->next; - } - // FIXME: a true median algorithm would be faster - qsort(list, n, sizeof(double), compare_double); - double median = list[n/2]; - free(list); - return median; -} - GBool InfoOutputDev::beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen) { GfxFont*font = state->getFont(); diff --git a/lib/pdf/InfoOutputDev.h b/lib/pdf/InfoOutputDev.h index 699c4c7..07b2b67 100644 --- a/lib/pdf/InfoOutputDev.h +++ b/lib/pdf/InfoOutputDev.h @@ -42,12 +42,6 @@ #include "GHash.h" #endif -struct AdvanceSample -{ - double advance; - struct AdvanceSample*next; -}; - struct GlyphInfo { SplashPath*path; @@ -56,9 +50,7 @@ struct GlyphInfo double advance; double x1,y1,x2,y2; - double estimateAdvance(); - - AdvanceSample*advance_samples; + double advance_max; }; struct FontInfo