X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdevices%2Frender.c;h=c73b2676917987f7ce01144aa224f85214021ee7;hb=d57bc01b36b45dc310937683d045924698155b17;hp=1865e882d67bc84ed193e49d20212c3d5581151a;hpb=f60898a8d00e47d4811bffb36b2cc114167ed9e7;p=swftools.git diff --git a/lib/devices/render.c b/lib/devices/render.c index 1865e88..c73b267 100644 --- a/lib/devices/render.c +++ b/lib/devices/render.c @@ -20,6 +20,7 @@ #include #include +#include #include #include "../gfxdevice.h" #include "../gfxtools.h" @@ -56,13 +57,6 @@ typedef struct _clipbuffer { struct _clipbuffer*prev; } clipbuffer_t; -typedef struct _fontlist -{ - gfxfont_t*font; - char*id; - struct _fontlist*next; -} fontlist_t; - typedef struct _internal { int width; int height; @@ -80,8 +74,6 @@ typedef struct _internal { gfxfont_t*font; char*fontid; - fontlist_t* fontlist; - clipbuffer_t*clipbufs; clipbuffer_t*clipbuf; @@ -634,54 +626,15 @@ void render_fillgradient(struct _gfxdevice*dev, gfxline_t*line, gfxgradient_t*gr fill_solid(dev, &black); } -void render_addfont(struct _gfxdevice*dev, char*fontid, gfxfont_t*font) +void render_addfont(struct _gfxdevice*dev, gfxfont_t*font) { - internal_t*i = (internal_t*)dev->internal; - - fontlist_t*last=0,*l = i->fontlist; - while(l) { - last = l; - if(!strcmp((char*)l->id, fontid)) { - return; // we already know this font - } - l = l->next; - } - l = (fontlist_t*)rfx_calloc(sizeof(fontlist_t)); - l->font = font; - l->next = 0; - if(last) { - last->next = l; - } else { - i->fontlist = l; - } } -void render_drawchar(struct _gfxdevice*dev, char*fontid, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) +void render_drawchar(struct _gfxdevice*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; - if(i->font && i->fontid && !strcmp(fontid, i->fontid)) { - // current font is correct - } else { - fontlist_t*l = i->fontlist; - i->font = 0; - i->fontid = 0; - while(l) { - if(!strcmp((char*)l->id, i->fontid)) { - i->font = l->font; - i->fontid = l->id; - break; - } - l = l->next; - } - if(i->font == 0) { - fprintf(stderr, "Unknown font id: %s", fontid); - return; - } - } - - gfxglyph_t*glyph = &i->font->glyphs[glyphnr]; - + gfxglyph_t*glyph = &font->glyphs[glyphnr]; gfxline_t*line2 = gfxline_clone(glyph->line); gfxline_transform(line2, matrix); draw_line(dev, line2); @@ -707,6 +660,7 @@ int render_result_save(gfxresult_t*r, char*filename) } else { writePNG(filename, (unsigned char*)i->img, i->width, i->height); } + return 1; } void*render_result_get(gfxresult_t*r, char*name) { @@ -733,6 +687,9 @@ gfxresult_t* render_finish(struct _gfxdevice*dev) res->destroy = render_result_destroy; free(dev->internal); dev->internal = 0; i = 0; + + /* TODO: free fonts */ + return res; }