X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswffont.c;h=c8c3efa58b57d80fa4296e7a70a4b35178bdcf70;hb=6c3ab5574d31504d24710c2756899d49275c1a37;hp=876c139cb695a5c140c60923c55dd97424af4fe0;hpb=338fe5380bbfab8828826ae7b81b7bbbcc29cf50;p=swftools.git diff --git a/lib/modules/swffont.c b/lib/modules/swffont.c index 876c139..c8c3efa 100644 --- a/lib/modules/swffont.c +++ b/lib/modules/swffont.c @@ -59,7 +59,7 @@ void swf_SetLoadFontParameters(int _scale, int _skip_unused, int _full_unicode) #define FT_SCALE 1 #define FT_SUBPIXELS 64 -static int ft_move_to(FT_Vector* _to, void* user) +static int ft_move_to(const FT_Vector* _to, void* user) { drawer_t* draw = (drawer_t*)user; FPOINT to; @@ -68,7 +68,7 @@ static int ft_move_to(FT_Vector* _to, void* user) draw->moveTo(draw, &to); return 0; } -static int ft_line_to(FT_Vector* _to, void* user) +static int ft_line_to(const FT_Vector* _to, void* user) { drawer_t* draw = (drawer_t*)user; FPOINT to; @@ -77,28 +77,28 @@ static int ft_line_to(FT_Vector* _to, void* user) draw->lineTo(draw, &to); return 0; } -static int ft_cubic_to(FT_Vector* _c1, FT_Vector* _c2, FT_Vector* _to, void* user) +static int ft_conic_to(const FT_Vector* _c, const FT_Vector* _to, void* user) { drawer_t* draw = (drawer_t*)user; - FPOINT c1,c2,to; + FPOINT c,to; to.x = _to->x*FT_SCALE/(float)FT_SUBPIXELS; to.y = -_to->y*FT_SCALE/(float)FT_SUBPIXELS; - c1.x = _c1->x*FT_SCALE/(float)FT_SUBPIXELS; - c1.y = -_c1->y*FT_SCALE/(float)FT_SUBPIXELS; - c2.x = _c2->x*FT_SCALE/(float)FT_SUBPIXELS; - c2.y = -_c2->y*FT_SCALE/(float)FT_SUBPIXELS; - draw_cubicTo(draw, &c1, &c2, &to); + c.x = _c->x*FT_SCALE/(float)FT_SUBPIXELS; + c.y = -_c->y*FT_SCALE/(float)FT_SUBPIXELS; + draw_conicTo(draw, &c, &to); return 0; } -static int ft_conic_to(FT_Vector* _c, FT_Vector* _to, void* user) +static int ft_cubic_to(const FT_Vector* _c1, const FT_Vector* _c2, const FT_Vector* _to, void* user) { drawer_t* draw = (drawer_t*)user; - FPOINT c,to; + FPOINT c1,c2,to; to.x = _to->x*FT_SCALE/(float)FT_SUBPIXELS; to.y = -_to->y*FT_SCALE/(float)FT_SUBPIXELS; - c.x = _c->x*FT_SCALE/(float)FT_SUBPIXELS; - c.y = -_c->y*FT_SCALE/(float)FT_SUBPIXELS; - draw_conicTo(draw, &c, &to); + c1.x = _c1->x*FT_SCALE/(float)FT_SUBPIXELS; + c1.y = -_c1->y*FT_SCALE/(float)FT_SUBPIXELS; + c2.x = _c2->x*FT_SCALE/(float)FT_SUBPIXELS; + c2.y = -_c2->y*FT_SCALE/(float)FT_SUBPIXELS; + draw_cubicTo(draw, &c1, &c2, &to); return 0; } static FT_Outline_Funcs outline_functions = @@ -125,7 +125,7 @@ SWFFONT* swf_LoadTrueTypeFont(char*filename) FT_Size size; int max_unicode = 0; int charmap = -1; - + if(ftlibrary == 0) { if(FT_Init_FreeType(&ftlibrary)) { fprintf(stderr, "Couldn't init freetype library!\n"); @@ -133,30 +133,32 @@ SWFFONT* swf_LoadTrueTypeFont(char*filename) } } error = FT_New_Face(ftlibrary, filename, 0, &face); - FT_Set_Pixel_Sizes (face, 16*loadfont_scale, 16*loadfont_scale); - if(error) { + if(error || !face) { fprintf(stderr, "Couldn't load file %s- not a TTF file?\n", filename); return 0; } + + FT_Set_Pixel_Sizes (face, 16*loadfont_scale, 16*loadfont_scale); + if(face->num_glyphs <= 0) { fprintf(stderr, "File %s contains %d glyphs\n", face->num_glyphs); return 0; } - font = rfx_calloc(sizeof(SWFFONT)); + font = (SWFFONT*)rfx_calloc(sizeof(SWFFONT)); font->id = -1; font->version = 2; - font->layout = rfx_calloc(sizeof(SWFLAYOUT)); - font->layout->bounds = rfx_calloc(face->num_glyphs*sizeof(SRECT)); + font->layout = (SWFLAYOUT*)rfx_calloc(sizeof(SWFLAYOUT)); + font->layout->bounds = (SRECT*)rfx_calloc(face->num_glyphs*sizeof(SRECT)); font->style = ((face->style_flags&FT_STYLE_FLAG_ITALIC)?FONT_STYLE_ITALIC:0) |((face->style_flags&FT_STYLE_FLAG_BOLD)?FONT_STYLE_BOLD:0); font->encoding = FONT_ENCODING_UNICODE; - font->glyph2ascii = rfx_calloc(face->num_glyphs*sizeof(U16)); + font->glyph2ascii = (U16*)rfx_calloc(face->num_glyphs*sizeof(U16)); font->maxascii = 0; - font->glyph = rfx_calloc(face->num_glyphs*sizeof(SWFGLYPH)); + font->glyph = (SWFGLYPH*)rfx_calloc(face->num_glyphs*sizeof(SWFGLYPH)); if(FT_HAS_GLYPH_NAMES(face)) { - font->glyphnames = rfx_calloc(face->num_glyphs*sizeof(char*)); + font->glyphnames = (char**)rfx_calloc(face->num_glyphs*sizeof(char*)); } font->layout->ascent = abs(face->ascender)*FT_SCALE*loadfont_scale*20/FT_SUBPIXELS/2; //face->bbox.xMin; @@ -214,7 +216,7 @@ SWFFONT* swf_LoadTrueTypeFont(char*filename) if(full_unicode) font->maxascii = 65535; - font->ascii2glyph = rfx_calloc(font->maxascii*sizeof(int)); + font->ascii2glyph = (int*)rfx_calloc(font->maxascii*sizeof(int)); for(t=0;tmaxascii;t++) { int g = FT_Get_Char_Index(face, t); @@ -255,7 +257,8 @@ 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); + //tends to happen with some pdfs + fprintf(stderr, "Warning: Glyph %d has return code %d\n", t, error); glyph=0; if(skip_unused) continue; @@ -492,9 +495,7 @@ SWFFONT* swf_LoadT1Font(char*filename) } last = pos; outline = outline->link; - printf("t1lib: (%f,%f) ", pos.x, pos.y); } - printf("\n"); draw.finish(&draw);