added swf_ShapeAddFillStyle2().
[swftools.git] / lib / modules / swfshape.c
index 183ef72..3c6c4b6 100644 (file)
@@ -297,6 +297,10 @@ int swf_ShapeAddFillStyle(SHAPE * s,U8 type,MATRIX * m,RGBA * color,U16 id_bitma
           
   return (++s->fillstyle.n);
 }
+int swf_ShapeAddFillStyle2(SHAPE * s,FILLSTYLE*fs)
+{
+    return swf_ShapeAddFillStyle(s, fs->type, &fs->m, &fs->color, fs->id_bitmap, &fs->gradient);
+}
 
 int swf_ShapeAddSolidFillStyle(SHAPE * s,RGBA * color)
 { return swf_ShapeAddFillStyle(s,FILL_SOLID,NULL,color,0,0);
@@ -416,7 +420,7 @@ int swf_ShapeSetLine(TAG * t,SHAPE * s,S32 x,S32 y)
     if(b >= 18) {
         if(b >= 18 + 4) {
             /* do not split into more than 16 segments. If the line is *that* long, something's broken */
-            fprintf(stderr, "Warning: Line to %.2f,%.2f is too long", (double)x,(double)y);
+            fprintf(stderr, "Warning: Line to %.2f,%.2f is too long\n", (double)x,(double)y);
             return -1;
         } else {
             /* split line */
@@ -661,6 +665,35 @@ void swf_Shape2Free(SHAPE2 * s)
        rfx_free(s->bbox);
 }
 
+SHAPE2* swf_Shape2Clone(SHAPE2 * s)
+{
+    SHAPELINE*line = s->lines;
+    SHAPELINE*prev = 0;
+    SHAPE2*s2 = rfx_alloc(sizeof(SHAPE2));
+    memcpy(s2,s,sizeof(SHAPE2));
+    s2->linestyles = rfx_alloc(sizeof(LINESTYLE)*s->numlinestyles);
+    memcpy(s2->linestyles, s->linestyles, sizeof(LINESTYLE)*s->numlinestyles);
+    s2->fillstyles = rfx_alloc(sizeof(FILLSTYLE)*s->numfillstyles);
+    memcpy(s2->fillstyles, s->fillstyles, sizeof(FILLSTYLE)*s->numfillstyles);
+
+    while(line) {
+       SHAPELINE*line2 = rfx_alloc(sizeof(SHAPELINE));
+        memcpy(line2, line, sizeof(SHAPELINE));
+        line2->next = 0;
+        if(prev)
+            prev->next = line2;
+        else
+            s2->lines = line2;
+        prev = line2;
+       line = line->next;
+    }
+    if(s->bbox) {
+        s2->bbox = rfx_alloc(sizeof(SRECT));
+        memcpy(s2->bbox, s->bbox, sizeof(SRECT));
+    }
+    return s2;
+}
+
 SHAPE2* swf_ShapeToShape2(SHAPE*shape) {
 
     SHAPE2*shape2 = (SHAPE2*)rfx_calloc(sizeof(SHAPE2));
@@ -883,6 +916,7 @@ void swf_ParseDefineShape(TAG*tag, SHAPE2*shape)
     else {
        fprintf(stderr, "parseDefineShape must be called with a shape tag");
     }
+    swf_SetTagPos(tag, 0);
 
     id = swf_GetU16(tag); //id
     memset(shape, 0, sizeof(SHAPE2));