gfxline_t*start;
gfxline_t*next;
gfxcoord_t x0,y0;
+ char has_moveto;
} linedraw_internal_t;
static void linedraw_moveTo(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));
l->type = gfx_moveTo;
- if((int)((d->x * 5120) == (int)(x * 5120)) &&
- (int)((d->y * 5120) == (int)(y * 5120))) {
- /* never mind- we're already there */
- return;
-
- }
+ i->has_moveto = 1;
i->x0 = x;
i->y0 = y;
l->sx = l->sy = 0;
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->start) {
+ 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;
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->start) {
- fprintf(stderr, "Error: drawing startpoint is a spline\n");
+ 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;
if(!i->start)
i->start = l;
}
-static void* linedraw_close(gfxdrawer_t*d)
+static void linedraw_close(gfxdrawer_t*d)
{
linedraw_internal_t*i = (linedraw_internal_t*)d->internal;
+ if(!i->has_moveto)
+ return;
linedraw_lineTo(d, i->x0, i->y0);
+ i->has_moveto = 0;
+ i->x0 = 0;
+ i->y0 = 0;
}
static void* linedraw_result(gfxdrawer_t*d)
{
}
}
-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];