cut frames *after* writing instances, only cut non-define tags
[swftools.git] / src / swfcombine.c
index b1b0d69..b4dbfb9 100644 (file)
@@ -161,6 +161,16 @@ int args_callback_option(char*name,char*val) {
        config.scalex = config.scaley = atoi(val)/100.0;
        return 1;
     }
+    else if (!strcmp(name, "w"))
+    {
+       config.scalex = atoi(val)/100.0;
+       return 1;
+    }
+    else if (!strcmp(name, "h"))
+    {
+       config.scaley = atoi(val)/100.0;
+       return 1;
+    }
     else if (!strcmp(name, "t") || !strcmp(name, "T"))
     {
        if(master_filename) {
@@ -275,7 +285,7 @@ void args_callback_usage(char *name)
     printf("-f , --frame                   The following identifier is a frame or framelabel, not an id or objectname\n");
     printf("-x , --movex <xpos>            x Adjust position of slave by <xpos> pixels\n");
     printf("-y , --movey <ypos>            y Adjust position of slave by <ypos> pixels\n");
-    printf("-s , --scale <scale>           Adjust size of slave by <scale> percent (e.g. 100% = original size)\n");
+    printf("-s , --scale <scale>           Adjust size of slave by <scale> percent (e.g. 100%% = original size)\n");
     printf("-r , --rate <fps>              Set movie framerate to <fps> (frames/sec)\n");
     printf("-X , --width <width>           Force movie bbox width to <width> (default: use master width (not with -t))\n");
     printf("-Y , --height <height>          Force movie bbox height to <height> (default: use master height (not with -t))\n");
@@ -687,7 +697,7 @@ TAG* write_master(TAG*tag, SWF*master, SWF*slave, int spriteid, int replaceddefi
                }
                if(tag_ok_for_slave(stag->id)) {
                    tag = swf_InsertTag(tag, stag->id);
-                   swf_SetBlock(tag, stag->data, stag->len);
+                   write_changepos(tag, stag, config.movex, config.movey, config.scalex, config.scaley, 0);
                }
                stag = stag->next;
            }
@@ -718,17 +728,19 @@ TAG* write_master(TAG*tag, SWF*master, SWF*slave, int spriteid, int replaceddefi
                    swf_SetDefineID(tag, replaceddefine);
                } else {
                    /* don't write this tag */
-                   msg("<verbose> replacing tag %d id %d with sprite", rtag->id
-                           ,spriteid);
+                   msg("<verbose> replacing tag %d ID %d with sprite", rtag->id ,spriteid);
                }
 
                if(flags&FLAGS_WRITESPRITE)
                {
+                   msg("<debug> writing sprite defines");
                    tag = write_sprite_defines(tag, slave);
+                   msg("<debug> writing sprite");
                    tag = write_sprite(tag, slave, spriteid, replaceddefine);
                }
                if(flags&FLAGS_WRITESLAVE)
                {
+                   msg("<debug> writing slave");
                    outputslave = 1;
                }
            } else { 
@@ -797,8 +809,9 @@ TAG* write_master(TAG*tag, SWF*master, SWF*slave, int spriteid, int replaceddefi
     while(stag && stag->id!=ST_END)
     {
            if(tag_ok_for_slave(stag->id)) {
+               msg("<debug> [slave] write tag %02x (%d bytes in body), %.2f %.2f", rtag->id, rtag->len, config.movex /20.0, config.movey /20.0);
                tag = swf_InsertTag(tag, stag->id);
-               swf_SetBlock(tag, stag->data, stag->len);
+               write_changepos(tag, stag, config.movex, config.movey, config.scalex, config.scaley, 0);
            }
            stag = stag->next;
     }
@@ -955,6 +968,15 @@ void normalcombine(SWF*master, char*slave_name, SWF*slave, SWF*newswf)
            char * name = swf_GetName(tag);
            int id = swf_GetPlaceID(tag);
 
+           {
+               SWFPLACEOBJECT obj;
+               swf_GetPlaceObject(tag, &obj);
+               swf_PlaceObjectFree(&obj);
+               if(obj.clipdepth) {
+                   depthbitmap[obj.clipdepth] = 1;
+               }
+           }
+
            if(name)
              msg("<verbose> tagid %02x places object %d named \"%s\"", tag->id, id, name);
            else
@@ -1261,9 +1283,10 @@ int main(int argn, char *argv[])
     if(config.zlib) {
        if(newswf.fileVersion < 6)
            newswf.fileVersion = 6;
-       swf_WriteSWC(fi, &newswf);
+        newswf.compressed = 1;
+       swf_WriteSWF(fi, &newswf);
     } else {
-       newswf.compressed = 0;
+       newswf.compressed = -1; // don't compress
        swf_WriteSWF(fi, &newswf);
     }
     close(fi);