CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 07/05/10 13:50:44
Modified files: . : ChangeLog testsuite/misc-ming.all: Makefile.am Added files: testsuite/misc-ming.all: SpriteButtonEventsTest-Runner.cpp SpriteButtonEventsTest.c Log message: * testsuite/misc-ming.all/: Makefile.am, SpriteButtonEventsTest-Runner.cpp, SpriteButtonEventsTest.c: Produced a MovieClip versio of the ButtonEventTest.swf movie. Seems to work fine, test automated. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3154&r2=1.3155 http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/Makefile.am?cvsroot=gnash&r1=1.105&r2=1.106 http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/SpriteButtonEventsTest-Runner.cpp?cvsroot=gnash&rev=1.1 http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/SpriteButtonEventsTest.c?cvsroot=gnash&rev=1.1 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.3154 retrieving revision 1.3155 diff -u -b -r1.3154 -r1.3155 --- ChangeLog 10 May 2007 13:14:41 -0000 1.3154 +++ ChangeLog 10 May 2007 13:50:44 -0000 1.3155 @@ -1,5 +1,12 @@ 2007-05-10 Sandro Santilli <[EMAIL PROTECTED]> + * testsuite/misc-ming.all/: Makefile.am, + SpriteButtonEventsTest-Runner.cpp, SpriteButtonEventsTest.c: + Produced a MovieClip versio of the ButtonEventTest.swf movie. + Seems to work fine, test automated. + +2007-05-10 Sandro Santilli <[EMAIL PROTECTED]> + * server/event_id.h, server/vm/action.cpp: add event_id::is_button_event() method * server/sprite_instance.{cpp,h}: add isEnabled() method, Index: testsuite/misc-ming.all/Makefile.am =================================================================== RCS file: /sources/gnash/gnash/testsuite/misc-ming.all/Makefile.am,v retrieving revision 1.105 retrieving revision 1.106 diff -u -b -r1.105 -r1.106 --- testsuite/misc-ming.all/Makefile.am 9 May 2007 22:02:42 -0000 1.105 +++ testsuite/misc-ming.all/Makefile.am 10 May 2007 13:50:44 -0000 1.106 @@ -55,6 +55,8 @@ check_PROGRAMS = \ ButtonEventsTest \ ButtonEventsTest-Runner \ + SpriteButtonEventsTest \ + SpriteButtonEventsTest-Runner \ DefineEditTextTest \ DefineEditTextVariableNameTest \ DefineEditTextVariableNameTest-Runner \ @@ -908,6 +910,28 @@ -DTGTDIR='"$(abs_builddir)"' \ $(NULL) +SpriteButtonEventsTest_SOURCES = \ + SpriteButtonEventsTest.c \ + ming_utils.h \ + ming_utils.c \ + $(NULL) +SpriteButtonEventsTest_LDADD = $(MING_LIBS) +SpriteButtonEventsTest.swf: SpriteButtonEventsTest + ./SpriteButtonEventsTest $(top_srcdir)/testsuite/media +SpriteButtonEventsTest_Runner_SOURCES = \ + SpriteButtonEventsTest-Runner.cpp \ + $(NULL) +SpriteButtonEventsTest_Runner_LDADD = \ + $(top_builddir)/testsuite/libtestsuite.la \ + $(NULL) +SpriteButtonEventsTest_Runner_DEPENDENCIES = \ + $(top_builddir)/testsuite/libtestsuite.la \ + SpriteButtonEventsTest.swf \ + $(NULL) +SpriteButtonEventsTest_Runner_CXXFLAGS = \ + -DTGTDIR='"$(abs_builddir)"' \ + $(NULL) + loadMovieTest_SOURCES = \ loadMovieTest.c \ ming_utils.h \ @@ -1084,6 +1108,7 @@ DefineEditTextVariableNameTest-Runner \ RollOverOutTest-Runner \ ButtonEventsTest-Runner \ + SpriteButtonEventsTest-Runner \ timeline_var_test-Runner \ root_stop_testrunner \ loop_test-Runner \ Index: testsuite/misc-ming.all/SpriteButtonEventsTest-Runner.cpp =================================================================== RCS file: testsuite/misc-ming.all/SpriteButtonEventsTest-Runner.cpp diff -N testsuite/misc-ming.all/SpriteButtonEventsTest-Runner.cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ testsuite/misc-ming.all/SpriteButtonEventsTest-Runner.cpp 10 May 2007 13:50:44 -0000 1.1 @@ -0,0 +1,257 @@ +/* + * Copyright (C) 2005, 2006 Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * + */ + +#define INPUT_FILENAME "ButtonEventsTest.swf" + +#include "MovieTester.h" +#include "sprite_instance.h" +#include "character.h" +#include "dlist.h" +#include "container.h" +#include "log.h" + +#include "check.h" +#include <string> +#include <cassert> + +using namespace gnash; +using namespace std; + +void +test_mouse_activity(MovieTester& tester, const character* text, const character* text2, bool covered, bool enabled) +{ + rgba red(255,0,0,255); + rgba covered_red(127,126,0,255); // red, covered by 50% black + rgba yellow(255,255,0,255); + rgba covered_yellow(128,255,0,255); // yellow, covered by 50% black + rgba green(0,255,0,255); + + // roll over the middle of the square, this should change + // the textfield value, if enabled + tester.movePointerTo(60, 60); + if ( enabled ) { + check_equals(string(text->get_text_value()), string("MouseOver")); + check_equals(string(text2->get_text_value()), string("RollOver")); + check(tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is yellow ! + if ( covered ) { check_pixel(60, 60, 2, covered_yellow, 2); } + else { check_pixel(60, 60, 2, yellow, 2); } + } else { + check_equals(string(text->get_text_value()), string("MouseOut")); + check_equals(string(text2->get_text_value()), string("RollOut")); + check(!tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is red ! + if ( covered ) { check_pixel(60, 60, 2, covered_red, 2); } + else { check_pixel(60, 60, 2, red, 2); } + } + + // press the mouse button, this should change + // the textfield value, if enabled. + tester.pressMouseButton(); + if ( enabled ) { + check_equals(string(text->get_text_value()), string("MouseDown")); + check_equals(string(text2->get_text_value()), string("Press")); + check(tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is green ! + check_pixel(60, 60, 2, green, 2); + } else { + check_equals(string(text->get_text_value()), string("MouseOut")); + check_equals(string(text2->get_text_value()), string("RollOut")); + check(!tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is red ! + if ( covered ) { check_pixel(60, 60, 2, covered_red, 2); } + else { check_pixel(60, 60, 2, red, 2); } + } + + // depress the mouse button, this should change + // the textfield value, if enabled + tester.depressMouseButton(); + if ( enabled ) { + check_equals(string(text->get_text_value()), string("MouseUp")); + check_equals(string(text2->get_text_value()), string("Release")); + check(tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is yellow ! + if ( covered ) { check_pixel(60, 60, 2, covered_yellow, 2); } + else { check_pixel(60, 60, 2, yellow, 2); } + } else { + check_equals(string(text->get_text_value()), string("MouseOut")); + check_equals(string(text2->get_text_value()), string("RollOut")); + check(!tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is red ! + if ( covered ) { check_pixel(60, 60, 2, covered_red, 2); } + else { check_pixel(60, 60, 2, red, 2); } + } + + // roll off the square, this should change + // the textfield value, if enabled + tester.movePointerTo(39, 60); + check_equals(string(text->get_text_value()), string("MouseOut")); + check_equals(string(text2->get_text_value()), string("RollOut")); + check(!tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is red ! + if ( covered ) { check_pixel(60, 60, 2, covered_red, 2); } + else { check_pixel(60, 60, 2, red, 2); } + + // press the mouse button, this should not change anything + // as we're outside of the button. + tester.pressMouseButton(); + check_equals(string(text->get_text_value()), string("MouseOut")); + check_equals(string(text2->get_text_value()), string("RollOut")); + check(!tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is red ! + if ( covered ) { check_pixel(60, 60, 2, covered_red, 2); } + else { check_pixel(60, 60, 2, red, 2); } + + // depress the mouse button, this should not change anything + // as we're outside of the button. + tester.depressMouseButton(); + check_equals(string(text->get_text_value()), string("MouseOut")); + check_equals(string(text2->get_text_value()), string("RollOut")); + check(!tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is red ! + if ( covered ) { check_pixel(60, 60, 2, covered_red, 2); } + else { check_pixel(60, 60, 2, red, 2); } + + // Now press the mouse inside and release outside + + tester.movePointerTo(60, 60); + + if ( enabled ) { + check_equals(string(text->get_text_value()), string("MouseOver")); + check_equals(string(text2->get_text_value()), string("RollOver")); + check(tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is yellow ! + if ( covered ) { check_pixel(60, 60, 2, covered_yellow, 2); } + else { check_pixel(60, 60, 2, yellow, 2); } + } else { + check_equals(string(text->get_text_value()), string("MouseOut")); + check_equals(string(text2->get_text_value()), string("RollOut")); + check(!tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is red ! + if ( covered ) { check_pixel(60, 60, 2, covered_red, 2); } + else { check_pixel(60, 60, 2, red, 2); } + } + + tester.pressMouseButton(); + + if ( enabled ) { + check_equals(string(text->get_text_value()), string("MouseDown")); + check_equals(string(text2->get_text_value()), string("Press")); + check(tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is green ! + check_pixel(60, 60, 2, rgba(0,255,0,255), 2); + } else { + check_equals(string(text->get_text_value()), string("MouseOut")); + check_equals(string(text2->get_text_value()), string("RollOut")); + check(!tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is red ! + if ( covered ) { check_pixel(60, 60, 2, covered_red, 2); } + else { check_pixel(60, 60, 2, red, 2); } + } + + tester.movePointerTo(39, 60); + + // The following might be correct, as the character still catches releaseOutside events + //check(tester.isMouseOverMouseEntity()); + tester.depressMouseButton(); + + if ( enabled ) { + xcheck_equals(string(text->get_text_value()), string("MouseUpOutside")); + xcheck_equals(string(text2->get_text_value()), string("ReleaseOutside")); + } else { + check_equals(string(text->get_text_value()), string("MouseOut")); + check_equals(string(text2->get_text_value()), string("RollOut")); + } +} + +int +main(int /*argc*/, char** /*argv*/) +{ + //string filename = INPUT_FILENAME; + string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME); + MovieTester tester(filename); + + std::string idleString = "Idle"; + + sprite_instance* root = tester.getRootMovie(); + assert(root); + + check_equals(root->get_frame_count(), 4); + + check_equals(root->get_current_frame(), 0); + + const character* mc1 = tester.findDisplayItemByName(*root, "square1"); + check(mc1); + check_equals(mc1->get_depth(), 2+character::staticDepthOffset); + + const character* text = tester.findDisplayItemByName(*root, "textfield"); + check(text); + + const character* text2 = tester.findDisplayItemByName(*root, "textfield2"); + check(text2); + + const character* text3 = tester.findDisplayItemByName(*root, "textfield3"); + check(text3); + + check_equals(string(text->get_text_value()), idleString); + check_equals(string(text2->get_text_value()), idleString); + check_equals(string(text3->get_text_value()), idleString); + check(!tester.isMouseOverMouseEntity()); + // check that pixel @ 60,60 is red ! + rgba red(255,0,0,255); + check_pixel(60, 60, 2, red, 2); + + for (size_t fno=0; fno<root->get_frame_count(); fno++) + { + const character* square_back = tester.findDisplayItemByDepth(*root, 1+character::staticDepthOffset); + const character* square_front = tester.findDisplayItemByDepth(*root, 3+character::staticDepthOffset); + + switch (fno) + { + case 0: + check(!square_back); + check(!square_front); + break; + case 1: + check(square_back); + check(!square_front); + break; + case 2: + check(square_back); + check(square_front); + break; + } + + check_equals(root->get_current_frame(), fno); + + info (("testing mouse activity in frame %d", root->get_current_frame())); + test_mouse_activity(tester, text, text2, square_front!=NULL, fno != root->get_frame_count()-1); + + // TODO: test key presses ! + // They seem NOT to trigger immediate redraw + + tester.advance(); + + } + + // last advance should restart the loop... + check_equals(root->get_current_frame(), 0); + +} + Index: testsuite/misc-ming.all/SpriteButtonEventsTest.c =================================================================== RCS file: testsuite/misc-ming.all/SpriteButtonEventsTest.c diff -N testsuite/misc-ming.all/SpriteButtonEventsTest.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ testsuite/misc-ming.all/SpriteButtonEventsTest.c 10 May 2007 13:50:44 -0000 1.1 @@ -0,0 +1,289 @@ +/*********************************************************************** + * + * Copyright (C) 2005, 2006 Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * + *********************************************************************** + * + * Test case for mouse events. + * + * In a movie of 120x120 pixels, it places a movieclip containing a squared + * sprite-button in the middle of the stage, and a text area on top. + * + * The movie has 3 frames, with the second adding a shape at a lower depth + * and the third one at an higher depth respect to the button. + * + * The following events print the event name in the text area + * (called _root.textfield) and change the color of the button: + * + * MouseOut : red button (initial state) + * MouseOver : yellow button + * MouseDown : green button + * MouseUp : yellow button (same as MouseOver, but the label on top changes) + * + ***********************************************************************/ + +#include "ming_utils.h" + +#include <ming.h> +#include <stdio.h> +#include <stdlib.h> + +#define OUTPUT_VERSION 6 +#define OUTPUT_FILENAME "SpriteButtonEventsTest.swf" + +SWFFont font; + +void add_event(SWFMovie mo, const char* name, const char* event, const char* action); +void add_code(SWFMovie mo, const char* code); +void add_text_field(SWFMovie mo, const char* name, const char* varname, const char* initial_label, int depth, int x, int y); +void set_text(SWFMovie mo, const char* text); +SWFDisplayItem add_square(SWFMovie mo, byte r, byte g, byte b, int depth); + +void +add_event(SWFMovie mo, const char* name, const char* event, const char* action) +{ + SWFAction ac; + char buf[1024]; + + sprintf(buf, + "event=undefined;" + "%s.on%s=function() { %s; };" + , name, event, action + ); + ac = compileSWFActionCode(buf); + + SWFMovie_add(mo, (SWFBlock)ac); +} + +void +add_code(SWFMovie mo, const char* code) +{ + SWFAction ac; + + ac = compileSWFActionCode(code); + + SWFMovie_add(mo, (SWFBlock)ac); +} + +SWFDisplayItem add_button(SWFMovie mo); +SWFDisplayItem +add_button(SWFMovie mo) +{ + SWFDisplayItem it; + SWFMovieClip mc; + SWFShape sh1, sh2, sh3, sh4; + SWFMovieClip bu = newSWFMovieClip(); + + mc = newSWFMovieClip(); + + sh1 = make_fill_square(0, 0, 40, 40, 0, 0, 0, 0, 0, 0); // black + sh2 = make_fill_square(0, 0, 40, 40, 255, 0, 0, 255, 0, 0); // red + sh3 = make_fill_square(0, 0, 40, 40, 0, 255, 0, 0, 255, 0); // green + sh4 = make_fill_square(0, 0, 40, 40, 255, 255, 0, 255, 255, 0); // yellow + + SWFMovieClip_add(bu, (SWFBlock)sh2); // red when idle + SWFMovieClip_add(bu, (SWFBlock)compileSWFActionCode( + "onRollOut = function() { _root.msg='MouseOut'; _root.msg2='RollOver'; gotoAndStop(1); };" + "onRollOver = function() { _root.msg='MouseOver'; _root.msg2='RollOut'; gotoAndStop(3); };" + "onMouseDown = function() { _root.msg='MouseDown'; gotoAndStop(2); };" + "onRelease = function() { _root.msg='MouseUp'; _root.msg2='Release'; gotoAndStop(1); };" + "onReleaseOutside = function() { _root.msg='MouseUpOutside'; _root.msg2='ReleaseOutside'; gotoAndStop(1); };" + "stop();" + )); + SWFMovieClip_nextFrame(bu); + + SWFMovieClip_add(bu, (SWFBlock)sh3); // green on button press + SWFMovieClip_add(bu, (SWFBlock)newSWFAction("stop();")); + SWFMovieClip_nextFrame(bu); + + SWFMovieClip_add(bu, (SWFBlock)sh4); // yellow on mouse over + SWFMovieClip_add(bu, (SWFBlock)newSWFAction("stop();")); + SWFMovieClip_nextFrame(bu); + + it = SWFMovieClip_add(mc, (SWFBlock)bu); + SWFDisplayItem_setName(it, "button"); + SWFMovieClip_nextFrame(mc); /* showFrame */ + + it = SWFMovie_add(mo, (SWFBlock)mc); + return it; +} + +void +add_text_field(SWFMovie mo, const char* name, const char* varname, const char* initial_label, int depth, int x, int y) +{ + SWFDisplayItem it; + SWFTextField tf = newSWFTextField(); + SWFTextField_setFont(tf, (void*)font); + SWFTextField_addChars(tf, " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345689:.,/[EMAIL PROTECTED]"); + SWFTextField_setVariableName(tf, varname); + SWFTextField_addString(tf, "Idle"); + SWFTextField_setBounds(tf, 120, 12); + SWFTextField_setFlags(tf, SWFTEXTFIELD_DRAWBOX|SWFTEXTFIELD_NOEDIT); + + it = SWFMovie_add(mo, (SWFBlock)tf); + SWFDisplayItem_moveTo(it, x, y+2); + SWFDisplayItem_setDepth(it, depth); + SWFDisplayItem_setName(it, name); // "textfield"); + + // Label + tf = newSWFTextField(); + SWFTextField_setFont(tf, (void*)font); + SWFTextField_addString(tf, initial_label); + SWFTextField_setFlags(tf, SWFTEXTFIELD_DRAWBOX|SWFTEXTFIELD_NOEDIT); + it = SWFMovie_add(mo, (SWFBlock)tf); + SWFDisplayItem_scale(it, 0.3, 0.3); + SWFDisplayItem_setDepth(it, depth*10); + SWFDisplayItem_moveTo(it, x, y); +} + +void +set_text(SWFMovie mo, const char* text) +{ + char buf[1024]; + sprintf(buf, "_root.msg=\"%s\";", text); + add_code(mo, buf); +} + +int +main(int argc, char **argv) +{ + SWFMovie mo; + SWFDisplayItem it; + const char *srcdir="."; + char fdbfont[256]; + + /********************************************* + * + * Initialization + * + *********************************************/ + + puts("Setting things up"); + + Ming_init(); + Ming_useSWFVersion (OUTPUT_VERSION); + Ming_setScale(20.0); + + mo = newSWFMovie(); + SWFMovie_setDimension(mo, 120, 120); + SWFMovie_setRate(mo, 1); + + if ( argc>1 ) srcdir=argv[1]; + else + { + fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); + return 1; + } + + sprintf(fdbfont, "%s/Bitstream Vera Sans.fdb", srcdir); + FILE *font_file = fopen(fdbfont, "r"); + if ( font_file == NULL ) + { + perror(fdbfont); + exit(1); + } + /*SWFBrowserFont bfont = newSWFBrowserFont("_sans");*/ + font = loadSWFFontFromFile(font_file); + + add_text_field(mo, "textfield", "_root.msg", "Button events", 10, 0, 5); + add_text_field(mo, "textfield2", "_root.msg2", "Mouse events", 11, 0, 100); + add_text_field(mo, "textfield3", "_root.msg3", "Key events", 12, 0, 80); + + /***************************************************** + * + * Add button + * + *****************************************************/ + + it = add_button(mo); + SWFDisplayItem_moveTo(it, 40, 30); + SWFDisplayItem_setName(it, "square1"); + SWFDisplayItem_setDepth(it, 2); + + // Mouse pointer events + //add_actions(mo, "square1.button.onRollOver = function() { _root.msg2 = 'RollOver'; };"); + //add_actions(mo, "square1.button.onRollOut = function() { _root.msg2 = 'RollOut'; };"); + + // Mouse buttons events + add_actions(mo, "square1.button.onPress = function() { _root.msg2 = 'Press'; };"); + //add_actions(mo, "square1.button.onRelease = function() { _root.msg2 = 'Release'; gotoAndStop(1); };"); + //add_actions(mo, "square1.button.onReleaseOutside = function() { _root.msg2 = 'ReleaseOutside'; };"); + + // Focus events + add_actions(mo, "square1.button.onSetFocus = function() { _root.msg3 = 'SetFocus'; };"); + + // Key events - button needs focus for these to work + add_actions(mo, "square1.button.onKeyDown = function() { _root.msg3 = 'KeyDown'; };"); + add_actions(mo, "square1.button.onKeyUp = function() { _root.msg3 = 'KeyUp'; };"); + + + SWFMovie_nextFrame(mo); /* showFrame */ + + /***************************************************** + * + * On second frame, add a shape at lower depth + * + *****************************************************/ + + { + SWFShape sh = make_fill_square(0, 0, 120, 120, 0, 0, 0, 0, 255, 0); + SWFDisplayItem itsh = SWFMovie_add(mo, (SWFBlock)sh); + SWFDisplayItem_setDepth(itsh, 1); + + SWFMovie_nextFrame(mo); /* showFrame */ + } + + /***************************************************** + * + * On third frame, add a shape at higher depth + * + *****************************************************/ + + { + SWFShape sh = make_fill_square(0, 0, 120, 120, 0, 0, 0, 0, 255, 0); + SWFDisplayItem itsh = SWFMovie_add(mo, (SWFBlock)sh); + SWFDisplayItem_setDepth(itsh, 3); + SWFDisplayItem_setColorAdd(itsh, 0, 0, 0, -128); + + SWFMovie_nextFrame(mo); /* showFrame */ + } + + /***************************************************** + * + * On third frame, add a shape at higher depth + * + *****************************************************/ + + { + + add_actions(mo, "square1.button.enabled = false;"); + SWFMovie_nextFrame(mo); /* showFrame */ + } + + /***************************************************** + * + * Save it... + * + *****************************************************/ + + puts("Saving " OUTPUT_FILENAME ); + + SWFMovie_save(mo, OUTPUT_FILENAME); + + return 0; +} _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit