made advance value fixing less picky
[swftools.git] / lib / devices / swf.c
index 24b090a..cf9b655 100644 (file)
@@ -694,7 +694,7 @@ static int drawchar(gfxdevice_t*dev, SWFFONT *swffont, int charid, float x, floa
     }
 
     if(charid<0 || charid>=swffont->numchars) {
-       msg("<warning> No character %d in font %s ", charid, FIXNULL((char*)swffont->name));
+       msg("<warning> No character %d in font %s (%d chars)", charid, FIXNULL((char*)swffont->name), swffont->numchars);
        return 0;
     }
     /*if(swffont->glyph[charid].shape->bitlen <= 16) {
@@ -733,7 +733,7 @@ static void endtext(gfxdevice_t*dev)
     if(i->textid<0)
         return;
 
-    i->tag = swf_InsertTag(i->tag,ST_DEFINETEXT);
+    i->tag = swf_InsertTag(i->tag,ST_DEFINETEXT2);
     swf_SetU16(i->tag, i->textid);
 
     SRECT r;
@@ -962,9 +962,8 @@ static void startshape(gfxdevice_t*dev)
 
     if(i->shapeid>=0)
        return;
-
-    if(i->textid>=0)
-        endtext(dev);
+    //if(i->chardatapos && i->chardata[i->chardatapos-1].color.a)
+    endtext(dev);
 
     i->tag = swf_InsertTag(i->tag,ST_DEFINESHAPE3);
 
@@ -2342,7 +2341,9 @@ static void swf_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color)
     gfxbbox_t r = gfxline_getbbox(line);
     int is_outside_page = !is_inside_page(dev, r.xmin, r.ymin) || !is_inside_page(dev, r.xmax, r.ymax);
 
+    //if(i->chardatapos && i->chardata[i->chardatapos-1].color.a) {
     endtext(dev);
+
     if(!i->config_ignoredraworder)
        endshape(dev);
 
@@ -2437,9 +2438,10 @@ static SWFFONT* gfxfont_to_swffont(gfxfont_t*font, const char* id)
        swffont->glyph[t].shape = swf_ShapeDrawerToShape(&draw);
        swffont->layout->bounds[t] = swf_ShapeDrawerGetBBox(&draw);
 
-       if(swffont->layout->bounds[t].xmax && swffont->layout->bounds[t].xmax*2 < advance) {
-           printf("fix bad advance value: bbox=%d, advance=%d (%f)\n", swffont->layout->bounds[t].xmax, advance, font->glyphs[t].advance);
-           advance = swffont->layout->bounds[t].xmax;
+       int xmax = swffont->layout->bounds[t].xmax / 20;
+       if(xmax>0 && xmax*2 < advance) {
+           printf("fix bad advance value: bbox=%d, advance=%d (%f)\n", xmax, advance, font->glyphs[t].advance);
+           advance = xmax;
        }
            
        if(advance<32768) {