X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdevices%2Frender.c;h=01706211bfa59bb96a25d3c418089aaa5eb98758;hb=172b7b06fdb27cba6792711b1d2975f070a5575c;hp=d9cca51aeb7b0819706e4858cfeb304bc1c24d74;hpb=6ecf136135c7071ecac3f7dfabfc015f51098bc4;p=swftools.git diff --git a/lib/devices/render.c b/lib/devices/render.c index d9cca51..0170621 100644 --- a/lib/devices/render.c +++ b/lib/devices/render.c @@ -438,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); @@ -476,12 +477,13 @@ void newclip(struct _gfxdevice*dev) memset(c->data, 0, sizeof(U32)*i->bitwidth*i->height2); } -void endclip(struct _gfxdevice*dev) +void endclip(struct _gfxdevice*dev, char removelast) { internal_t*i = (internal_t*)dev->internal; - - if(!i->clipbuf) { - fprintf(stderr, "endclip without any active clip buffers"); + + /* test for at least one cliplevel (the one we created ourselves) */ + if(!i->clipbuf || (!i->clipbuf->next && !removelast)) { + fprintf(stderr, "endclip without any active clip buffers\n"); return; } @@ -566,7 +568,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++) { @@ -588,6 +590,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); @@ -597,7 +600,7 @@ void render_startclip(struct _gfxdevice*dev, gfxline_t*line) void render_endclip(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; - endclip(dev); + endclip(dev, 0); } void render_fill(struct _gfxdevice*dev, gfxline_t*line, gfxcolor_t*color) @@ -619,6 +622,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; @@ -730,6 +734,7 @@ void*render_result_get(gfxresult_t*r, const char*name) i = i->next; if(!i) return 0; + pagenr--; } return gfximage_asXPM(&i->img, 64); } else if(!strncmp(name,"page",4)) { @@ -740,6 +745,7 @@ void*render_result_get(gfxresult_t*r, const char*name) i = i->next; if(!i) return 0; + pagenr--; } return &i->img; } @@ -879,10 +885,10 @@ void render_endpage(struct _gfxdevice*dev) exit(1); } - endclip(dev); + endclip(dev, 1); while(i->clipbuf) { fprintf(stderr, "Warning: unclosed clip while processing endpage()\n"); - endclip(dev); + endclip(dev, 1); } internal_result_t*ir= (internal_result_t*)rfx_calloc(sizeof(internal_result_t));