X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fgfxtools.c;h=d8aef3f099c7341af079b6f6d6a1d84782897c28;hb=0e9d27093c3e6e8e316fbc08bb9d422d74da2fd1;hp=0862fd6372803b2b4d4c8939c309a921b67828c4;hpb=be6d3cbb485c5f7e9dd6fe22bf54245c79b10b71;p=swftools.git diff --git a/lib/gfxtools.c b/lib/gfxtools.c index 0862fd6..d8aef3f 100644 --- a/lib/gfxtools.c +++ b/lib/gfxtools.c @@ -28,6 +28,7 @@ #include #include "gfxtools.h" #include "gfxfont.h" +#include "jpeg.h" typedef struct _linedraw_internal { @@ -58,15 +59,14 @@ static void linedraw_moveTo(gfxdrawer_t*d, gfxcoord_t x, gfxcoord_t y) static void linedraw_lineTo(gfxdrawer_t*d, gfxcoord_t x, gfxcoord_t y) { linedraw_internal_t*i = (linedraw_internal_t*)d->internal; - gfxline_t*l = (gfxline_t*)rfx_alloc(sizeof(gfxline_t)); - if(!i->has_moveto) { /* starts with a line, not with a moveto. As this is the first entry in the list, this is probably *meant* to be a moveto */ linedraw_moveTo(d, x, y); return; } - + + gfxline_t*l = (gfxline_t*)rfx_alloc(sizeof(gfxline_t)); l->type = gfx_lineTo; d->x = l->x = x; d->y = l->y = y; @@ -81,13 +81,12 @@ static void linedraw_lineTo(gfxdrawer_t*d, gfxcoord_t x, gfxcoord_t y) static void linedraw_splineTo(gfxdrawer_t*d, gfxcoord_t sx, gfxcoord_t sy, gfxcoord_t x, gfxcoord_t y) { linedraw_internal_t*i = (linedraw_internal_t*)d->internal; - gfxline_t*l = (gfxline_t*)rfx_alloc(sizeof(gfxline_t)); - if(!i->has_moveto) { linedraw_moveTo(d, x, y); return; } + gfxline_t*l = (gfxline_t*)rfx_alloc(sizeof(gfxline_t)); l->type = gfx_splineTo; d->x = l->x = x; d->y = l->y = y; @@ -796,7 +795,18 @@ char gfxfontlist_hasfont(gfxfontlist_t*list, gfxfont_t*font) } return 0; } -gfxfontlist_t*gfxfontlist_addfont(gfxfontlist_t*list, gfxfont_t*font) +void*gfxfontlist_getuserdata(gfxfontlist_t*list, const char*id) +{ + gfxfontlist_t*l = list; + while(l) { + if(!strcmp((char*)l->font->id, id)) { + return l->user; + } + l = l->next; + } + return 0; +} +gfxfontlist_t*gfxfontlist_addfont2(gfxfontlist_t*list, gfxfont_t*font, void*user) { gfxfontlist_t*last=0,*l = list; while(l) { @@ -811,6 +821,7 @@ gfxfontlist_t*gfxfontlist_addfont(gfxfontlist_t*list, gfxfont_t*font) } l = (gfxfontlist_t*)rfx_calloc(sizeof(gfxfontlist_t)); l->font = font; + l->user = user; l->next = 0; if(last) { last->next = l; @@ -819,6 +830,10 @@ gfxfontlist_t*gfxfontlist_addfont(gfxfontlist_t*list, gfxfont_t*font) return l; } } +gfxfontlist_t*gfxfontlist_addfont(gfxfontlist_t*list, gfxfont_t*font) +{ + return gfxfontlist_addfont2(list, font, 0); +} void gfxfontlist_free(gfxfontlist_t*list, char deletefonts) { gfxfontlist_t*l = list; @@ -833,7 +848,7 @@ void gfxfontlist_free(gfxfontlist_t*list, char deletefonts) } } -gfxline_t*gfxline_makerectangle(int x1,int y1,int x2, int y2) +gfxline_t*gfxline_makerectangle(double x1,double y1,double x2, double y2) { gfxline_t* line = (gfxline_t*)rfx_calloc(sizeof(gfxline_t)*5); line[0].x = x1;line[0].y = y1;line[0].type = gfx_moveTo;line[0].next = &line[1]; @@ -989,3 +1004,18 @@ void gfxline_dump(gfxline_t*line, FILE*fi, char*prefix) } } +void gfximage_save_jpeg(gfximage_t*img, char*filename, int quality) +{ + unsigned char*data = malloc(img->width*img->height*3); + int t; + int size = img->width*img->height; + int s = 0; + for(t=0;tdata[t].r; + data[s+1] = img->data[t].g; + data[s+2] = img->data[t].b; + s+=3; + } + jpeg_save(data, img->width, img->height, quality, filename); +} +