int drawonlyshapes=0;
int jpegquality=85;
int storeallcharacters=0;
+int enablezlib=0;
static int flag_protected = 0;
typedef unsigned char u8;
int CHARMIDX = 0;
int CHARMIDY = 0;
+char fillstylechanged = 0;
+
static void startshape(struct swfoutput* obj);
static void starttext(struct swfoutput* obj);
static void endshape();
{
int rx = (int)(p0.x*20);
int ry = (int)(p0.y*20);
- if(rx!=swflastx || ry!=swflasty) {
+ if(rx!=swflastx || ry!=swflasty || fillstylechanged) {
swf_ShapeSetMove (tag, shape, rx,ry);
+ fillstylechanged = 0;
}
swflastx=rx;
swflasty=ry;
int ey = ((int)(end.y*20)-swflasty);
swflastx += ex;
swflasty += ey;
- swf_ShapeSetCurve(tag, shape, cx,cy,ex,ey);
+ if(cx || cy || ex || ey)
+ swf_ShapeSetCurve(tag, shape, cx,cy,ex,ey);
}
/* write a line, given two points and the transformation
if(shapeid<0)
startshape(obj);
- if(!lastwasfill)
+ if(!lastwasfill) {
swf_ShapeSetStyle(tag,shape,0x8000,fillstyleid,0);
+ fillstylechanged = 1;
+ }
lastwasfill = 1;
int lf = fill;
{
if(textid>=0)
endtext();
+
+ /* Multiple polygons in one shape don't overlap correctly,
+ so we better start a new shape here if the polygon is filled
+ */
+ if(shapeid>=0 && fill && !ignoredraworder) {
+ endshape();
+ }
+
if(shapeid<0)
startshape(output);
if(lastwasfill && !fill)
{
swf_ShapeSetStyle(tag,shape,linestyleid,0x8000,0);
+ fillstylechanged = 1;
lastwasfill = 0;
}
if(!lastwasfill && fill)
{
swf_ShapeSetStyle(tag,shape,0x8000,fillstyleid,0);
+ fillstylechanged = 1;
lastwasfill = 1;
}
s.bits.fill = 1;
s.bits.line = 0;
swf_ShapeSetStyle(ftag,&s,0,1,0);
+ fillstylechanged = 1;
int lastfill = fill;
fill = 1;
storefont = 1;
tag = swf_InsertTag(tag,ST_END);
- if FAILED(swf_WriteSWF(fi,&swf))
- logf("<error> WriteSWF() failed.\n");
+ if(enablezlib) {
+ if FAILED(swf_WriteSWC(fi,&swf))
+ logf("<error> WriteSWC() failed.\n");
+ } else {
+ if FAILED(swf_WriteSWF(fi,&swf))
+ logf("<error> WriteSWF() failed.\n");
+ }
+
if(filename)
close(fi);
logf("<notice> SWF written\n");
obj->fillrgb.g == g &&
obj->fillrgb.b == b &&
obj->fillrgb.a == a) return;
-
if(shapeid>=0)
endshape();
+
obj->fillrgb.r = r;
obj->fillrgb.g = g;
obj->fillrgb.b = b;
int myshapeid2;
double xmin,ymin;
double xmax=xmin=points[0].x,ymax=ymin=points[0].y;
+ double posx = 0;
+ double posy = 0;
int t;
int buttonid = ++currentswfid;
for(t=1;t<4;t++)
if(points[t].x<xmin) xmin=points[t].x;
if(points[t].y<ymin) ymin=points[t].y;
}
+
p1.x=points[0].x; p1.y=points[0].y; p2.x=points[1].x; p2.y=points[1].y;
p3.x=points[2].x; p3.y=points[2].y; p4.x=points[3].x; p4.y=points[3].y;
+
+ /* the following code subtracts the upper left edge from all coordinates,
+ and set's posx,posy so that ST_PLACEOBJECT is used with a matrix.
+ Necessary for preprocessing with swfcombine. */
+ posx = xmin; posy = ymin;
+ p1.x-=posx;p2.x-=posx;p3.x-=posx;p4.x-=posx;
+ p1.y-=posy;p2.y-=posy;p3.y-=posy;p4.y-=posy;
+ xmin -= posx; ymin -= posy;
+ xmax -= posx; ymax -= posy;
/* shape */
myshapeid = ++currentswfid;
}
tag = swf_InsertTag(tag,ST_PLACEOBJECT2);
- swf_ObjectPlace(tag, buttonid, depth++,0,0,0);
+
+ if(posx!=0 || posy!=0) {
+ MATRIX m;
+ swf_GetMatrix(0,&m);
+ m.tx = (int)(posx*20);
+ m.ty = (int)(posy*20);
+ swf_ObjectPlace(tag, buttonid, depth++,&m,0,0);
+ }
+ else {
+ swf_ObjectPlace(tag, buttonid, depth++,0,0,0);
+ }
}
static void drawimage(struct swfoutput*obj, int bitid, int sizex,int sizey,