gfxline_t* swfline_to_gfxline(SHAPELINE*line, int linestyle, int fillstyle0)
{
gfxdrawer_t d;
- SCOORD x=0,y=0;
+ SCOORD x=0,y=0,xx=0,yy=0;
gfxline_t*l;
gfxdrawer_target_gfxline(&d);
if(line && line->type != moveTo) {
fprintf(stderr, "Warning: Shape doesn't start with a moveTo\n");
}
+ xx = line?line->x+1:0;
while(line) {
- if(line->fillstyle0 == fillstyle0 || line->fillstyle1 == fillstyle0 ||
+ if(line->fillstyle0 == fillstyle0 ||
+ line->fillstyle1 == fillstyle0 ||
line->linestyle == linestyle) {
if(line->type == lineTo) {
- d.moveTo(&d, x/20.0,y/20.0);
+ if(xx!=x || yy!=y) d.moveTo(&d, x/20.0,y/20.0);
d.lineTo(&d, line->x/20.0,line->y/20.0);
+ xx = line->x;
+ yy = line->y;
} else if(line->type == splineTo) {
- d.moveTo(&d, x/20.0,y/20.0);
+ if(xx!=x || yy!=y) d.moveTo(&d, x/20.0,y/20.0);
d.splineTo(&d, line->sx/20.0, line->sy/20.0, line->x/20.0,line->y/20.0);
+ xx = line->x;
+ yy = line->y;
}
}
x = line->x;
} else if(f->type == FILL_LINEAR || f->type == FILL_RADIAL) {
gfxmatrix_t m;
gfxgradient_t* g;
- convertMatrix(&f->m, &m);
+ MATRIX* m2 = &f->m;
+ //swf_MatrixJoin(&m2, po_m, &f->m);
+
+ double z = f->type==FILL_RADIAL?4:4;
+ m.m00 = m2->sx/z/20.0; m.m10 = m2->r1/z/20.0;
+ m.m01 = m2->r0/z/20.0; m.m11 = m2->sy/z/20.0;
+ m.tx = m2->tx/20.0;
+ m.ty = m2->ty/20.0;
+
g = convertGradient(&f->gradient);
r->device->fillgradient(r->device, line, g, f->type == FILL_LINEAR ? gfxgradient_linear : gfxgradient_radial, &m);
free(g);
int t;
for(t=0;t<65536;t++) {
+ if(depths->ids[t]) {
+ placeObject(&r, t, depths->ids[t]);
+ }
int i;
-
for(i=0; i<r.clips_waiting[t]; i++) {
output->endclip(output);
}
-
- if(depths->ids[t]) {
- placeObject(&r, t, depths->ids[t]);
- }
}
free(r.clips_waiting);
}