- SHAPE* shape = malloc(sizeof(SHAPE));
- if(!draw->isfinished) {
- fprintf(stderr, "Warning: you should Finish() your drawer before calling DrawerToShape");
- swf_DrawerFinish(draw);
- }
- memcpy(shape, draw->shape, sizeof(SHAPE));
- shape->bitlen = (draw->tag->len-1)*8;
- shape->data = (U8*)malloc(draw->tag->len-1);
- memcpy(shape->data, &draw->tag->data[1], draw->tag->len-1);
- return shape;
+ SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal;
+ int x = to->x*20+0.001;
+ int y = to->y*20+0.001;
+
+ /* we need to write moveto always- it
+ might be that it signals the end of a polygon, otherwise
+ we would end up connecting two polygons which should
+ be seperate
+ TODO: check if the last operation was a moveTo- if
+ yes we *can* skip it.
+ */
+
+ //if(sdraw->lastx != x || sdraw->lasty != y) {
+ fixEndPoint(draw);
+ swf_ShapeSetMove(sdraw->tag,sdraw->shape,x,y);
+ sdraw->firstx = sdraw->lastx = x;
+ sdraw->firsty = sdraw->lasty = y;
+ draw->pos = *to;
+ //}
+}
+static void swf_ShapeDrawerLineTo(drawer_t*draw, FPOINT * to)
+{
+ SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal;
+ int x = to->x*20+0.001;
+ int y = to->y*20+0.001;
+ if(sdraw->lastx < sdraw->bbox.xmin) sdraw->bbox.xmin = sdraw->lastx;
+ if(sdraw->lasty < sdraw->bbox.ymin) sdraw->bbox.ymin = sdraw->lasty;
+ if(sdraw->lastx > sdraw->bbox.xmax) sdraw->bbox.xmax = sdraw->lastx;
+ if(sdraw->lasty > sdraw->bbox.ymax) sdraw->bbox.ymax = sdraw->lasty;
+ if(x < sdraw->bbox.xmin) sdraw->bbox.xmin = x;
+ if(y < sdraw->bbox.ymin) sdraw->bbox.ymin = y;
+ if(x > sdraw->bbox.xmax) sdraw->bbox.xmax = x;
+ if(y > sdraw->bbox.ymax) sdraw->bbox.ymax = y;
+ swf_ShapeSetLine(sdraw->tag,sdraw->shape,x-sdraw->lastx,y-sdraw->lasty);
+ sdraw->lastx = x;
+ sdraw->lasty = y;
+ draw->pos = *to;
+}
+static void swf_ShapeDrawerSplineTo(drawer_t*draw, FPOINT * c1, FPOINT* to)
+{
+ SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal;
+ int tx = c1->x*20+0.001;
+ int ty = c1->y*20+0.001;
+ int x = to->x*20+0.001;
+ int y = to->y*20+0.001;
+ if(sdraw->lastx < sdraw->bbox.xmin) sdraw->bbox.xmin = sdraw->lastx;
+ if(sdraw->lasty < sdraw->bbox.ymin) sdraw->bbox.ymin = sdraw->lasty;
+ if(sdraw->lastx > sdraw->bbox.xmax) sdraw->bbox.xmax = sdraw->lastx;
+ if(sdraw->lasty > sdraw->bbox.ymax) sdraw->bbox.ymax = sdraw->lasty;
+ if(x < sdraw->bbox.xmin) sdraw->bbox.xmin = x;
+ if(y < sdraw->bbox.ymin) sdraw->bbox.ymin = y;
+ if(x > sdraw->bbox.xmax) sdraw->bbox.xmax = x;
+ if(y > sdraw->bbox.ymax) sdraw->bbox.ymax = y;
+ if(tx < sdraw->bbox.xmin) sdraw->bbox.xmin = tx;
+ if(ty < sdraw->bbox.ymin) sdraw->bbox.ymin = ty;
+ if(tx > sdraw->bbox.xmax) sdraw->bbox.xmax = tx;
+ if(ty > sdraw->bbox.ymax) sdraw->bbox.ymax = ty;
+ swf_ShapeSetCurve(sdraw->tag,sdraw->shape, tx-sdraw->lastx,ty-sdraw->lasty, x-tx,y-ty);
+ sdraw->lastx = x;
+ sdraw->lasty = y;
+ draw->pos = *to;