+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;
+}
+static void swf_ShapeDrawerFinish(drawer_t*draw)
+{
+ SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal;
+ if(sdraw->isfinished)
+ return;
+
+ fixEndPoint(draw);
+
+ if(sdraw->bbox.xmin == SCOORD_MAX) {
+ /* no points at all -> empty bounding box */
+ sdraw->bbox.xmin = sdraw->bbox.ymin =
+ sdraw->bbox.xmax = sdraw->bbox.ymax = 0;
+ }
+ sdraw->isfinished = 1;
+ swf_ShapeSetEnd(sdraw->tag);
+}
+
+static void swf_ShapeDrawerClear(drawer_t*draw)
+{
+ SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal;
+ if(sdraw->tagfree) {
+ swf_DeleteTag(0, sdraw->tag);
+ sdraw->tag = 0;
+ }
+ swf_ShapeFree(sdraw->shape);
+ sdraw->shape = 0;
+
+ rfx_free(draw->internal);
+ draw->internal = 0;
+}
+
+SRECT swf_ShapeDrawerGetBBox(drawer_t*draw)
+{
+ SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal;
+ return sdraw->bbox;
+}
+
+SHAPE* swf_ShapeDrawerToShape(drawer_t*draw)