added missing pdf2swf objects
[swftools.git] / src / swfcombine.c
index 13ff224..16589b1 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) {
@@ -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
@@ -1034,6 +1056,9 @@ void combine(SWF*master, char*slave_name, SWF*slave, SWF*newswf)
     slaveid = -1;
     slaveframe = -1;
 
+    if(!master->fileVersion && slave)
+       master->fileVersion = slave->fileVersion;
+
     swf_FoldAll(master);
     swf_FoldAll(slave);
 
@@ -1045,16 +1070,19 @@ void combine(SWF*master, char*slave_name, SWF*slave, SWF*newswf)
 
     if(config.isframe)
     {
-       int tmp;
-       if(slavename && slavename[0]!='#' && (sscanf(slavename, "%d", &tmp) ==
-               strlen(slavename))) {
-       /* if the name the slave should replace 
-          consists only of digits and the -f
-          option is given, it probably is not
-          a frame name but a frame number.
-        */
-           slaveid = tmp;
-           slavename = 0;
+       if(slavename && slavename[0]!='#') {
+           int tmp;
+           int len;
+           sscanf(slavename, "%d%n", &tmp, &len);
+           if(len == strlen(slavename)) {
+           /* if the name the slave should replace 
+              consists only of digits and the -f
+              option is given, it probably is not
+              a frame name but a frame number.
+            */
+               slaveid = tmp;
+               slavename = 0;
+           }
        }
 
        if(slaveid>=0) {
@@ -1125,6 +1153,11 @@ int main(int argn, char *argv[])
        msg("<error> Can't combine --cat and --merge");
        exit(1);
     }
+    
+    if(config.stack && config.cat) {
+       msg("<error> Can't combine --cat and --stack");
+       exit(1);
+    }
 
     if(config.stack) {
        if(config.overlay) {
@@ -1227,7 +1260,7 @@ int main(int argn, char *argv[])
                memset(&slave, 0, sizeof(slave));
                slave.firstTag = swf_InsertTag(0, ST_END);
                slave.frameRate = 0;
-               slave.fileVersion = 4;
+               slave.fileVersion = 0;
                slave.frameCount = 0;
            }
 
@@ -1242,6 +1275,9 @@ int main(int argn, char *argv[])
        }
     }
 
+    if(!newswf.fileVersion)
+       newswf.fileVersion = 4;
+
     fi = open(outputname, O_BINARY|O_RDWR|O_TRUNC|O_CREAT, 0777);
 
     if(config.zlib) {