made rfxswf actionscript routines threadsafe. ;)
[swftools.git] / lib / example / buttontest.c
index 99ad495..a596404 100644 (file)
@@ -1,4 +1,4 @@
-/* shape1.c
+/* buttontest.c
 
    Example implementation for creating a button with rfxswf
    
 
 TAG* t;
 
+#define ID_BUTTON 31
+
 int useDefineButton2 = 0; // set this to 1 to use DefineButton2 Tags
-                         // instead of DefineButton1
+                          // instead of DefineButton1
                
 int main (int argc,char ** argv)
 { SWF swf;
@@ -46,7 +48,7 @@ int main (int argc,char ** argv)
   rgb.b = 0xff;
   swf_SetRGB(t,&rgb);
 
-  for(count=0;count<4;count++)
+  for(count=1;count<4;count++)
   {
       t = swf_InsertTag(t,ST_DEFINESHAPE);
       swf_ShapeNew(&s);               // create new shape instance
@@ -67,24 +69,18 @@ int main (int argc,char ** argv)
       swf_ShapeFree(s);                   // clean shape structure (which isn't needed anymore after writing the tag)
   }
 
-  a1 = swf_ActionStart(t);
-    action_SetTarget("movie");
-    action_NextFrame();
-    action_SetTarget("");
-    action_End();
-  swf_ActionEnd();
+  a1 = action_SetTarget(0, "movie");
+  a1 = action_NextFrame(a1);
+  a1 = action_SetTarget(a1, "");
+  a1 = action_End(a1);
  
-  a2 = swf_ActionStart(t);
-    //action_GetUrl("test.swf","_level0"); // load a swf
-    //action_GetUrl("index.html","_this"); // load html in new window
-    action_GetUrl("http://www.quiss.org/swftools/index.html","_parent"); // load html in this window
-    action_End();
-  swf_ActionEnd();
-
-  a3 = swf_ActionStart(t);
-    action_GotoFrame(33);
-    action_End();
-  swf_ActionEnd();
+    //a2 = action_GetUrl(a2, "test.swf","_level0"); // load a swf
+    //a2 = action_GetUrl(a2, "index.html","_this"); // load html in new window
+    a2 = action_GetUrl(0, "http://www.quiss.org/swftools/index.html","_parent"); // load html in this window
+    a2 = action_End(a2);
+
+    a3 = action_GotoFrame(0,33);
+    a3 = action_End(a3);
 
   actiontoset = a2;  
 
@@ -92,45 +88,40 @@ int main (int argc,char ** argv)
   {
       t = swf_InsertTag(t,ST_DEFINEBUTTON);
       swf_SetU16(t,31); //id
-      swf_ButtonSetFlags(t, 0); //menu=no
-      swf_ButtonSetRecord(t,0x01,33,1,0,0);
-      swf_ButtonSetRecord(t,0x02,34,1,0,0);
-      swf_ButtonSetRecord(t,0x04,35,1,0,0);
-      swf_ButtonSetRecord(t,0x08,36,1,0,0);
-      swf_SetU8(t,0);
-      swf_SetActions(t,actiontoset);
-      swf_SetU8(t,0);
+      swf_ButtonSetRecord(t,BS_UP|BS_HIT,34,1,NULL,NULL);
+      swf_ButtonSetRecord(t,BS_OVER,35,1,NULL,NULL);
+      swf_ButtonSetRecord(t,BS_DOWN,36,1,NULL,NULL);
+      swf_SetU8(t,0); // end of button records
+      
+      swf_ActionSet(t,actiontoset);
   }
   else
   {
       t = swf_InsertTag(t,ST_DEFINEBUTTON2);
-      swf_SetU16(t,31); //id
+      swf_SetU16(t,ID_BUTTON); //id
       swf_ButtonSetFlags(t, 0); //menu=no
-      swf_ButtonSetRecord(t,0x01,33,1,0,0);
-      swf_ButtonSetRecord(t,0x02,34,1,0,0);
-      swf_ButtonSetRecord(t,0x04,35,1,0,0);
-      swf_ButtonSetRecord(t,0x08,36,1,0,0);
-      swf_SetU8(t,0);
-
-      swf_ButtonSetCondition(t, 4);
-       swf_SetActions(t,actiontoset);
-       swf_SetU8(t,0);
-
-      swf_ButtonSetCondition(t, 0);
-       swf_SetU8(t,0);
-
-      swf_SetU8(t,0);
-
-      swf_ButtonPostProcess(t, 2);
+      swf_ButtonSetRecord(t,BS_UP|BS_HIT,34,1,NULL,NULL);
+      swf_ButtonSetRecord(t,BS_OVER,35,1,NULL,NULL);
+      swf_ButtonSetRecord(t,BS_DOWN,36,1,NULL,NULL);
+      swf_SetU8(t,0); // end of button records
+
+      swf_ButtonSetCondition(t, BC_OVERDOWN_OVERUP);
+       swf_ActionSet(t,actiontoset);
+       
+      swf_ButtonPostProcess(t, 1); // don't forget!
   }
 
+  swf_ActionFree(a1);
+  swf_ActionFree(a2);
+  swf_ActionFree(a3);
+
   t = swf_InsertTag(t,ST_PLACEOBJECT2);
-  swf_ObjectPlace(t, 31, 2,0,0,0);
+  swf_ObjectPlace(t, ID_BUTTON, 2,0,0,0);
 
   t = swf_InsertTag(t,ST_SHOWFRAME);
   t = swf_InsertTag(t,ST_END);
 
-  f = open("button.swf",O_WRONLY|O_CREAT, 0644);
+  f = open("buttontest.swf",O_WRONLY|O_CREAT, 0644);
   if FAILED(swf_WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n");
   close(f);