i->tag = i->swf->firstTag;
RGBA rgb;
rgb.a = rgb.r = rgb.g = rgb.b = 0xff;
- rgb.r = 0;
+ //rgb.r = 0;
swf_SetRGB(i->tag,&rgb);
i->startdepth = i->depth = 0;
/* delete old shape tag */
TAG*todel = i->tag;
i->tag = i->tag->prev;
- swf_DeleteTag(todel);
+ swf_DeleteTag(0, todel);
if(i->shape) {swf_ShapeFree(i->shape);i->shape=0;}
i->shapeid = -1;
i->bboxrectpos = -1;
tag->id != ST_END &&
tag->id != ST_DOACTION &&
tag->id != ST_SHOWFRAME) {
- swf_DeleteTag(tag);
+ swf_DeleteTag(swf, tag);
}
tag = next;
}
and the ST_END- they confuse the flash player */
while(tag->id == ST_REMOVEOBJECT2) {
TAG* prev = tag->prev;
- swf_DeleteTag(tag);
+ swf_DeleteTag(i->swf, tag);
tag = prev;
}
for(t=0;t<font->max_unicode;t++) {
swffont->ascii2glyph[t] = font->unicode2glyph[t];
}
+ SRECT max = {0,0,0,0};
for(t=0;t<font->num_glyphs;t++) {
drawer_t draw;
gfxline_t*line;
}
draw.finish(&draw);
swffont->glyph[t].shape = swf_ShapeDrawerToShape(&draw);
- swffont->layout->bounds[t] = swf_ShapeDrawerGetBBox(&draw);
- 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;
- }
+ SRECT bbox = swf_ShapeDrawerGetBBox(&draw);
+ swf_ExpandRect2(&max, &bbox);
+
+ swffont->layout->bounds[t] = bbox;
if(advance<32768/20) {
swffont->glyph[t].advance = advance*20;
swf_ExpandRect2(&bounds, &swffont->layout->bounds[t]);
}
+ for(t=0;t<font->num_glyphs;t++) {
+ SRECT bbox = swffont->layout->bounds[t];
+
+ /* if the glyph doesn't have a bounding box, use the
+ combined bounding box (necessary e.g. for space characters) */
+ if(!(bbox.xmin|bbox.ymin|bbox.xmax|bbox.ymax)) {
+ swffont->layout->bounds[t] = bbox = max;
+ }
+
+ /* check that the advance value is reasonable, by comparing it
+ with the bounding box */
+ if(bbox.xmax>0 && (bbox.xmax*2 < swffont->glyph[t].advance || !swffont->glyph[t].advance)) {
+ if(swffont->glyph[t].advance)
+ msg("<warning> fix bad advance value: bbox=%.2f, advance=%.2f\n", bbox.xmax/20.0, swffont->glyph[t].advance/20.0);
+ swffont->glyph[t].advance = bbox.xmax;
+ }
+ }
/* Flash player will use the advance value from the char, and the ascent/descent values