X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdevices%2Frender.c;h=cf6c056f5c1deeaf70e05e17758e88a52ed31251;hb=cf209c8c9faa374746ac865ea7cecd356dcc41c8;hp=bb71bed5b7194a53a808c4a0abe6ee140cc5b3a9;hpb=d3fb559b6b8ca9c122b310cae1a3e8b0805f97ad;p=swftools.git diff --git a/lib/devices/render.c b/lib/devices/render.c index bb71bed..cf6c056 100644 --- a/lib/devices/render.c +++ b/lib/devices/render.c @@ -28,6 +28,7 @@ #define PNG_INLINE_EXPORTS #include "../types.h" #include "../png.c" +#include "render.h" typedef gfxcolor_t RGBA; @@ -437,6 +438,7 @@ void fill(gfxdevice_t*dev, fillinfo_t*fill) void fill_solid(gfxdevice_t*dev, gfxcolor_t* color) { fillinfo_t info; + memset(&info, 0, sizeof(info)); info.type = filltype_solid; info.color = color; fill(dev, &info); @@ -465,8 +467,8 @@ void newclip(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; - clipbuffer_t*c = rfx_calloc(sizeof(clipbuffer_t)); - c->data = rfx_calloc(sizeof(U32) * i->bitwidth * i->height2); + clipbuffer_t*c = (clipbuffer_t*)rfx_calloc(sizeof(clipbuffer_t)); + c->data = (U32*)rfx_calloc(sizeof(U32) * i->bitwidth * i->height2); c->next = i->clipbuf; i->clipbuf = c; if(c->next) @@ -501,8 +503,6 @@ void render_stroke(struct _gfxdevice*dev, gfxline_t*line, gfxcoord_t width, gfxc }*/ while(line) { - int x1,y1,x2,y2,x3,y3; - if(line->type == gfx_moveTo) { } else if(line->type == gfx_lineTo) { double x1=x*i->zoom,y1=y*i->zoom; @@ -510,14 +510,14 @@ void render_stroke(struct _gfxdevice*dev, gfxline_t*line, gfxcoord_t width, gfxc add_solidline(dev, x1, y1, x3, y3, width * i->multiply); fill_solid(dev, color); } else if(line->type == gfx_splineTo) { - int c,t,parts,qparts; + int t,parts; double xx,yy; double x1=x*i->zoom,y1=y*i->zoom; double x2=line->sx*i->zoom,y2=line->sy*i->zoom; double x3=line->x*i->zoom,y3=line->y*i->zoom; - c = abs(x3-2*x2+x1) + abs(y3-2*y2+y1); + double c = abs(x3-2*x2+x1) + abs(y3-2*y2+y1); xx=x1; yy=y1; @@ -567,7 +567,7 @@ static void draw_line(gfxdevice_t*dev, gfxline_t*line) xx=x1; yy=y1; - parts = (int)(sqrt(c)/3); + parts = (int)(sqrt(c)); if(!parts) parts = 1; for(t=1;t<=parts;t++) { @@ -589,6 +589,7 @@ void render_startclip(struct _gfxdevice*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; fillinfo_t info; + memset(&info, 0, sizeof(info)); newclip(dev); info.type = filltype_clip; draw_line(dev, line); @@ -620,6 +621,7 @@ void render_fillbitmap(struct _gfxdevice*dev, gfxline_t*line, gfximage_t*img, gf draw_line(dev, line); fillinfo_t info; + memset(&info, 0, sizeof(info)); info.type = filltype_bitmap; info.image = img; info.matrix = &m2; @@ -669,7 +671,7 @@ void render_result_write(gfxresult_t*r, int filedesc) { internal_result_t*i= (internal_result_t*)r->internal; } -int render_result_save(gfxresult_t*r, char*filename) +int render_result_save(gfxresult_t*r, const char*filename) { internal_result_t*i= (internal_result_t*)r->internal; if(!i) { @@ -720,7 +722,7 @@ char*gfximage_asXPM(gfximage_t*img, int depth) *p = 0; return p; } -void*render_result_get(gfxresult_t*r, char*name) +void*render_result_get(gfxresult_t*r, const char*name) { internal_result_t*i= (internal_result_t*)r->internal; if(!strncmp(name,"xpm",3)) { @@ -731,6 +733,7 @@ void*render_result_get(gfxresult_t*r, char*name) i = i->next; if(!i) return 0; + pagenr--; } return gfximage_asXPM(&i->img, 64); } else if(!strncmp(name,"page",4)) { @@ -741,6 +744,7 @@ void*render_result_get(gfxresult_t*r, char*name) i = i->next; if(!i) return 0; + pagenr--; } return &i->img; } @@ -753,10 +757,15 @@ void render_result_destroy(gfxresult_t*r) while(i) { internal_result_t*next = i->next; free(i->img.data);i->img.data = 0; - free(i); + + /* FIXME memleak + the following rfx_free causes a segfault on WIN32 machines, + if executed */ + //rfx_free(i); + i = next; } - free(r); + rfx_free(r); } gfxresult_t* render_finish(struct _gfxdevice*dev) @@ -814,7 +823,7 @@ void render_startpage(struct _gfxdevice*dev, int width, int height) static void store_image(internal_t*i, internal_result_t*ir) { - ir->img.data = malloc(i->width*i->height*sizeof(RGBA)); + ir->img.data = (gfxcolor_t*)malloc(i->width*i->height*sizeof(gfxcolor_t)); ir->img.width = i->width; ir->img.height = i->height; @@ -907,7 +916,7 @@ void render_endpage(struct _gfxdevice*dev) i->height2 = 0; } -void render_drawlink(struct _gfxdevice*dev, gfxline_t*line, char*action) +void render_drawlink(struct _gfxdevice*dev, gfxline_t*line, const char*action) { /* not supported for this output device */ } @@ -915,7 +924,6 @@ void render_drawlink(struct _gfxdevice*dev, gfxline_t*line, char*action) void gfxdevice_render_init(gfxdevice_t*dev) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); - int y; memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "render";