From: Matthias Kramm Date: Thu, 21 Jan 2010 01:07:56 +0000 (-0800) Subject: kerning table fixes X-Git-Tag: version-0-9-1~181 X-Git-Url: http://git.asbjorn.it/?a=commitdiff_plain;h=62f28906ebae10fa325af43bf19315260c344303;p=swftools.git kerning table fixes --- diff --git a/lib/pdf/InfoOutputDev.cc b/lib/pdf/InfoOutputDev.cc index 3c65bd8..ba151a1 100644 --- a/lib/pdf/InfoOutputDev.cc +++ b/lib/pdf/InfoOutputDev.cc @@ -67,7 +67,6 @@ void FontInfo::grow(int size) FontInfo::FontInfo(char*id) { this->id = strdup(id); - this->charid2glyph = 0; this->seen = 0; this->num_glyphs = 0; this->glyphs = 0; @@ -83,10 +82,6 @@ FontInfo::~FontInfo() { if(this->id) {free(this->id);this->id=0;} this->font = 0; - if(this->charid2glyph) { - free(this->charid2glyph); - this->charid2glyph = 0; - } int t; for(t=0;tnum_glyphs;t++) { + for(t=0;tnum_glyphs;t++) { dict_t* d = src->kerning[t]; if(!d) continue; DICT_ITERATE_ITEMS(d,void*,key,mtf_t*,m) { @@ -244,14 +239,18 @@ static gfxfont_t* createGfxFont(FontInfo*src) font->kerning_size = kerning_size; font->kerning = (gfxkerning_t*)malloc(sizeof(gfxkerning_t)*kerning_size); int pos = 0; - for(t=0;tnum_glyphs;t++) { + for(t=0;tnum_glyphs;t++) { dict_t* d = src->kerning[t]; if(!d) continue; DICT_ITERATE_ITEMS(d,void*,key,mtf_t*,m) { if(m) { - font->kerning[pos].c1 = t; - font->kerning[pos].c2 = (int)(ptroff_t)key; + font->kerning[pos].c1 = src->glyphs[t]->glyphid; + font->kerning[pos].c2 = src->glyphs[(int)(ptroff_t)key]->glyphid; font->kerning[pos].advance = (int)(ptroff_t)m->first->key; + printf("kerning[%d] = (%d,%d,%d)\n", pos, + font->kerning[pos].c1, + font->kerning[pos].c2, + font->kerning[pos].advance); pos++; } } diff --git a/lib/pdf/InfoOutputDev.h b/lib/pdf/InfoOutputDev.h index e5ea3c6..66958da 100644 --- a/lib/pdf/InfoOutputDev.h +++ b/lib/pdf/InfoOutputDev.h @@ -85,7 +85,6 @@ public: GlyphInfo**glyphs; dict_t**kerning; - int*charid2glyph; SplashFont*splash_font; char seen; int space_char; diff --git a/lib/q.c b/lib/q.c index 8971616..a16d1b3 100644 --- a/lib/q.c +++ b/lib/q.c @@ -1340,10 +1340,12 @@ void mtf_increase(mtf_t*m, const void*key) while(item) { if(m->type->equals(item->key, key)) { item->num++; - if(last) last->next = item->next; - else m->first = item->next; - item->next = m->first; - m->first = item; + if(item->num>m->first->num) { + if(last) last->next = item->next; + else m->first = item->next; + item->next = m->first; + m->first = item; + } return; } last = item;