X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswffont.c;h=876c139cb695a5c140c60923c55dd97424af4fe0;hb=8bda02e5a0c1b989185e02b56aa3312ecff24e3d;hp=3366e542f546635cb2f06c670737b8e237f6a9db;hpb=0c14fe25556ee2416451e65cac8caaa7ebfce15d;p=swftools.git diff --git a/lib/modules/swffont.c b/lib/modules/swffont.c index 3366e54..876c139 100644 --- a/lib/modules/swffont.c +++ b/lib/modules/swffont.c @@ -256,15 +256,24 @@ SWFFONT* swf_LoadTrueTypeFont(char*filename) error = FT_Load_Glyph(face, t, FT_LOAD_NO_BITMAP); if(error) { fprintf(stderr, "Couldn't load glyph %d, error:%d\n", t, error); - continue; - } - error = FT_Get_Glyph(face->glyph, &glyph); - if(error) { - fprintf(stderr, "Couldn't get glyph %d, error:%d\n", t, error); - continue; + glyph=0; + if(skip_unused) + continue; + } else { + error = FT_Get_Glyph(face->glyph, &glyph); + if(error) { + fprintf(stderr, "Couldn't get glyph %d, error:%d\n", t, error); + glyph=0; + if(skip_unused) + continue; + } } - FT_Glyph_Get_CBox(glyph, ft_glyph_bbox_unscaled, &bbox); + if(glyph) + FT_Glyph_Get_CBox(glyph, ft_glyph_bbox_unscaled, &bbox); + else + memset(&bbox, 0, sizeof(bbox)); + bbox.yMin = -bbox.yMin; bbox.yMax = -bbox.yMax; if(bbox.xMax < bbox.xMin) { @@ -283,7 +292,10 @@ SWFFONT* swf_LoadTrueTypeFont(char*filename) swf_Shape01DrawerInit(&draw, 0); //error = FT_Outline_Decompose(&face->glyph->outline, &outline_functions, &draw); - error = FT_Outline_Decompose(&face->glyph->outline, &outline_functions, &draw); + if(glyph) + error = FT_Outline_Decompose(&face->glyph->outline, &outline_functions, &draw); + else + error = 0; draw.finish(&draw); if(error) { @@ -294,12 +306,15 @@ SWFFONT* swf_LoadTrueTypeFont(char*filename) #if 0 if(bbox.xMin > 0) { - font->glyph[font->numchars].advance = (bbox.xMax*FT_SCALE)/FT_SUBPIXELS; + font->glyph[font->numchars].advance = (bbox.xMax*20*FT_SCALE)/FT_SUBPIXELS; } else { - font->glyph[font->numchars].advance = ((bbox.xMax - bbox.xMin)*FT_SCALE)/FT_SUBPIXELS; + font->glyph[font->numchars].advance = ((bbox.xMax - bbox.xMin)*20*FT_SCALE)/FT_SUBPIXELS; } #else - font->glyph[font->numchars].advance = glyph->advance.x*20/65536; + if(glyph) + font->glyph[font->numchars].advance = glyph->advance.x*20/65536; + else + font->glyph[font->numchars].advance = 0; #endif font->glyph[font->numchars].shape = swf_ShapeDrawerToShape(&draw); @@ -311,7 +326,8 @@ SWFFONT* swf_LoadTrueTypeFont(char*filename) draw.dealloc(&draw); - FT_Done_Glyph(glyph); + if(glyph) + FT_Done_Glyph(glyph); font->glyph2ascii[font->numchars] = font->glyph2ascii[t]; glyph2glyph[t] = font->numchars; font->numchars++; @@ -476,7 +492,7 @@ SWFFONT* swf_LoadT1Font(char*filename) } last = pos; outline = outline->link; - printf("(%f,%f) ", pos.x, pos.y); + printf("t1lib: (%f,%f) ", pos.x, pos.y); } printf("\n");