X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdevices%2Fswf.c;h=a3f57e9add05d376726f8c2eec7a7bab57d96b65;hb=e633c982297e1728e8373f80d25533776a9b92b0;hp=6d66409c6c75a206843a28b0fe3aff5aac3f79d4;hpb=62ca2479fa44d1d6c7c8b840f7368fd438fd537b;p=swftools.git diff --git a/lib/devices/swf.c b/lib/devices/swf.c index 6d66409..a3f57e9 100644 --- a/lib/devices/swf.c +++ b/lib/devices/swf.c @@ -623,6 +623,7 @@ static void chararray_writetotag(chararray_t*_chardata, TAG*tag) int lastx; int lasty; int lastsize; + int lastchar; int charids[128]; int charadvance[128]; int charstorepos; @@ -646,6 +647,7 @@ static void chararray_writetotag(chararray_t*_chardata, TAG*tag) lastx = CHARMIDX; lasty = CHARMIDY; lastsize = -1; + lastchar = -1; if(pass==1) { @@ -670,9 +672,9 @@ static void chararray_writetotag(chararray_t*_chardata, TAG*tag) charatposition_t*chr = &chardata->chr[t]; - if(lastfont != chardata->chr[t].font || - lastx!=chardata->chr[t].x || - lasty!=chardata->chr[t].y || + if(lastfont != chr->font || + lastx!=chr->x || + lasty!=chr->y || !colorcompare(&color, &chardata->chr[t].color) || charstorepos==127 || lastsize != chardata->chr[t].size || @@ -736,6 +738,12 @@ static void chararray_writetotag(chararray_t*_chardata, TAG*tag) lastx = chr->x; lasty = chr->y; lastsize = chr->size; + } else { + assert(lastchar>=0); + if(pass==1 && lastchar!=chr->charid) { + swf_FontUsePair(chr->font, lastchar, chr->charid); + swf_FontUsePair(chr->font, chr->charid, lastchar); + } } if(islast) @@ -745,7 +753,7 @@ static void chararray_writetotag(chararray_t*_chardata, TAG*tag) if(tpos-1) nextx = chardata->chr[t+1].x; if(t==chardata->pos-1 && chardata->next) nextx = chardata->next->chr[0].x; int dx = nextx-chr->x; - + int advance; if(dx>=0 && (dx<(1<<(advancebits-1)) || pass==0)) { advance = dx; @@ -754,8 +762,10 @@ static void chararray_writetotag(chararray_t*_chardata, TAG*tag) advance = 0; lastx=chr->x; } + charids[charstorepos] = chr->charid; charadvance[charstorepos] = advance; + lastchar = chr->charid; charstorepos ++; } chardata = chardata->next; @@ -1465,25 +1475,26 @@ void swfoutput_finalize(gfxdevice_t*dev) endpage(dev); fontlist_t *iterator = i->fontlist; + char use_font3 = i->config_flashversion>=8 && !NO_FONT3; while(iterator) { TAG*mtag = i->swf->firstTag; if(iterator->swffont) { + if(use_font3) { + // needs to be done before the reduce + swf_FontCreateAlignZones(iterator->swffont); + } if(!i->config_storeallcharacters) { msg(" Reducing font %s", iterator->swffont->name); swf_FontReduce(iterator->swffont); } int used = iterator->swffont->use && iterator->swffont->use->used_glyphs; if(used) { - if(i->config_flashversion<8 || NO_FONT3) { + if(!use_font3) { mtag = swf_InsertTag(mtag, ST_DEFINEFONT2); swf_FontSetDefine2(mtag, iterator->swffont); } else { mtag = swf_InsertTag(mtag, ST_DEFINEFONT3); swf_FontSetDefine2(mtag, iterator->swffont); - - if(i->config_flashversion>=10) - swf_FontCreateAlignZones(iterator->swffont); - if(iterator->swffont->alignzones) { mtag = swf_InsertTag(mtag, ST_DEFINEFONTALIGNZONES); swf_FontSetAlignZones(mtag, iterator->swffont); @@ -3116,6 +3127,6 @@ static void swf_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t* } else { i->chardata = charbuffer_append(i->chardata, i->swffont, glyph, x, y, i->current_font_size, *(RGBA*)color, &i->fontmatrix); } - swf_FontUseGlyph(i->swffont, glyph); + swf_FontUseGlyph(i->swffont, glyph, i->current_font_size); return; }