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);
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;
}
xx=x1;
yy=y1;
- parts = (int)(sqrt(c)/3);
+ parts = (int)(sqrt(c));
if(!parts) parts = 1;
for(t=1;t<=parts;t++) {
{
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);
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)
draw_line(dev, line);
fillinfo_t info;
+ memset(&info, 0, sizeof(info));
info.type = filltype_bitmap;
info.image = img;
info.matrix = &m2;
i = i->next;
if(!i)
return 0;
+ pagenr--;
}
return gfximage_asXPM(&i->img, 64);
} else if(!strncmp(name,"page",4)) {
i = i->next;
if(!i)
return 0;
+ pagenr--;
}
return &i->img;
}
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)
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));