/* The file doaction-after-placeobject.swf was created from * doaction-before-placeobject.swf by manually swapping the DoAction and * PlaceObject2 tags in the file with a hex editor */ int main (int argc, char **argv) { SWFMovie movie; SWFMovieClip clip; SWFDisplayItem item; if (Ming_init ()) return 1; Ming_useSWFVersion (7); movie = newSWFMovie(); SWFMovie_setRate (movie, 1); SWFMovie_setDimension (movie, 200, 150); clip = newSWFMovieClip (); item = SWFMovie_add (movie, (SWFBlock) clip); SWFDisplayItem_setName (item, "m"); SWFDisplayItem_addAction (item, compileSWFActionCode ("" " trace (\"clipEvent (load)\");" " trace (this);" ""), SWFACTION_ONLOAD); SWFMovie_add (movie, (SWFBlock) compileSWFActionCode ("" "trace (\"Frame 0\");" "")); SWFMovie_save (movie, "doaction-before-placeobject.swf"); return 0; }
int main(int argc, char *argv[]) { SWFMovie movie; SWFShape shape1; SWFGradient grad_1; SWFFill fill1; SWFDisplayItem timeline; SWFShape shape2; SWFGradient grad_2; SWFFill fill2; Ming_init(argc, argv); Ming_useSWFVersion(5); movie= newSWFMovie(); SWFMovie_setDimension(movie, 320, 240); shape1= newSWFShape(); /* first gradient- black to white */ grad_1= newSWFGradient(); SWFGradient_addEntry(grad_1, 0, 0x00, 0x00, 0x00, 0xFF); SWFGradient_addEntry(grad_1, 1, 0xFF, 0xFF, 0xFF, 0xFF); fill1= SWFShape_addGradientFill(shape1, grad_1, SWFFILL_LINEAR_GRADIENT); SWFFill_scaleTo(fill1, 0.170, 0.170); SWFFill_moveTo(fill1, 160.00, 120.00); SWFShape_setRightFill(shape1, fill1); SWFShape_drawLineTo(shape1, 320.00, 0.00); SWFShape_drawLineTo(shape1, 320.00, 240.00); SWFShape_drawLineTo(shape1, 0.00, 240.00); SWFShape_drawLineTo(shape1, 0.00, 0.00); timeline= SWFMovie_add(movie, (SWFBlock) shape1); /* SWFDisplayItem_moveTo(timeline, 0.00, 0.00);*/ shape2= newSWFShape(); /* second gradient- radial gradient from white to red to transparent */ grad_2= newSWFGradient(); SWFGradient_addEntry(grad_2, 0, 0xFF, 0x00, 0x00, 0xFF); SWFGradient_addEntry(grad_2, 1, 0xFF, 0x00, 0x00, 0x00); fill2= SWFShape_addGradientFill(shape2, grad_2, SWFFILL_RADIAL_GRADIENT); SWFFill_scaleTo(fill2, 0.120, 0.120); SWFFill_moveTo(fill2, 160.00, 120.00); SWFShape_setRightFill(shape2, fill2); SWFShape_drawLineTo(shape2, 320.00, 0.00); SWFShape_drawLineTo(shape2, 320.00, 240.00); SWFShape_drawLineTo(shape2, 0.00, 240.00); SWFShape_drawLineTo(shape2, 0.00, 0.00); timeline= SWFMovie_add(movie, (SWFBlock) shape2); SWFMovie_nextFrame(movie); SWFMovie_save(movie, "gradient.swf"); return 0; }
int main (int argc, char **argv) { SWFMovie movie; SWFVideoStream video; SWFDisplayItem item; SWFAction action; if (Ming_init ()) return 1; Ming_useSWFVersion (7); movie = newSWFMovie(); SWFMovie_setRate (movie, 1); SWFMovie_setDimension (movie, 200, 150); video = newSWFVideoStream (); SWFVideoStream_setDimension (video, 200, 150); item = SWFMovie_add (movie, (SWFBlock) video); SWFDisplayItem_setName (item, "video"); action = compileSWFActionCode ("" "trace (\"Test parsing of onMetaData\");" "nc = new NetConnection ();" "nc.connect (null);" "ns = new NetStream (nc);" "ns.onMetaData = function (info)" "{" " trace ('onMetaData');" " var props = [];" " for (var prop in info) {" " props.push (prop);" " }" " props.sort ();" " for (var i = 0; i < props.length; i++) {" " if (typeof (info[props[i]]) == 'object') {" " var keys = [];" " for (var key in info[props[i]]) {" " keys.push (key);" " }" " keys.sort ();" " trace (props[i] + ' = ');" " for (var j = 0; j < keys.length; j++) {" " trace (' ' + keys[j] + ' = ' + typeof (info[props[i]][keys[j]]) + ': ' + info[props[i]][keys[j]]);" " }" " } else {" " trace (props[i] + ' = ' + typeof (info[props[i]]) + ': ' + info[props[i]]);" " }" " }" " loadMovie ('FSCommand:quit', '');" "};" "video.attachVideo (ns);" "ns.setBufferTime (5);" "trace (\"Calling play\");" "ns.play (\"video.flv\");" "trace (\"done calling play\");" ""); SWFMovie_add (movie, (SWFBlock) action); SWFMovie_save (movie, "netstream-onmetadata.swf"); return 0; }
/* * create a new SWFMovie * This function creates a new SWFMovie with the specified version. */ SWFMovie newSWFMovieWithVersion(int version /* Flash version */) { SWFMovie movie; Ming_useSWFVersion(version); movie = (SWFMovie) malloc(sizeof(struct SWFMovie_s)); /* If malloc failed, return NULL to signify this */ if (movie == NULL) return NULL; movie->version = version; movie->blockList = newSWFBlockList(); movie->displayList = newSWFDisplayList(); /* Default movie dimension is hard-coded to 320x240 pixels */ movie->bounds = newSWFRect(0, 320*20, 0, 240*20); movie->rate = 12.0; movie->totalFrames = 0; movie->nFrames = 0; movie->nExports = 0; movie->exports = NULL; movie->nImports = 0; movie->imports = NULL; movie->nFonts = 0; movie->fonts = NULL; movie->backgroundBlock = NULL; if(version >= 8) movie->fattrs = newSWFFileAttributes(); else movie->fattrs = NULL; movie->metadata = NULL; movie->limits = NULL; movie->symbolClass = NULL; movie->sceneData = NULL; #if TRACK_ALLOCS movie->gcnode = ming_gc_add_node(movie, (dtorfunctype) destroySWFMovie); #endif return movie; }
static void ming_begin_job(GVJ_t * job) { SWFMovie movie; SWFAction action; Ming_init(); Ming_useSWFVersion(SWFVERSION); Ming_setSWFCompression(SWFCOMPRESSION); movie = newSWFMovie(); SWFMovie_setRate(movie, SWFFRAMERATE); SWFMovie_setDimension(movie, job->width, job->height); // Works, but why is it here? // action = newSWFAction(script); // SWFMovie_add(movie, (SWFBlock)action); job->context = (void*) movie; }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; char fdefont[256]; SWFMovieClip dejagnuclip; SWFDisplayItem it; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } sprintf(fdefont, "%s/Bitstream-Vera-Sans.fdb", srcdir); FILE *font_file = fopen(fdefont, "r"); if ( font_file == NULL ) { perror(fdefont); exit(1); } SWFFont efont = loadSWFFontFromFile(font_file); puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); mo = newSWFMovie(); SWFMovie_setRate(mo, 1.0); SWFMovie_setDimension(mo, 800, 600); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); // 1st frame /********************************************* * * Add some textfields * *********************************************/ int y = 30; int inc = 30; it = add_text_field(mo, (SWFBlock)efont, "Normal", 1, 2, 3, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_setName(it, "tf1"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "Transparent", 1, 2, 3, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 0); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_setName(it, "tf2"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 16, no indent or " "margin", 0, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf3"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 16, indent 4", 4, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf4"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 16, left margin 4", 0, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf5"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 16, right margin 4", 0, 0, 4, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf6"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 16, left margin 4, " "indent 4", 4, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf7"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 8, no indent or margin", 0, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 8, 1); SWFDisplayItem_setName(it, "tf8"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 8, indent 4", 4, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 8, 1); SWFDisplayItem_setName(it, "tf9"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 0.2", 8, 8, 8, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 0.2, 1); SWFDisplayItem_setName(it, "tf10"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "Y scaled by 4", 4, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 1, 4); SWFDisplayItem_setName(it, "tf11"); y += inc * 3; it = add_text_field(mo, (SWFBlock)efont, "Y scaled by 8", 4, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 1, 8); SWFDisplayItem_setName(it, "tf12"); // It's not clear how consistent the textWidth or textHeight // values are. As they are embedded, it may be possible to reproduce // exactly, in which case the test can be made more precise. check_equals(mo, "tf1._width", "84"); check_equals(mo, "tf1._height", "20"); xcheck_equals(mo, "tf1._x", "48"); xcheck_equals(mo, "tf1._y", "28"); xcheck_equals(mo, "tf1.textHeight", "23"); // Approx 46 add_actions(mo, "trace(tf1.textWidth);"); xcheck(mo, "tf1.textWidth >= 44 && tf1.textWidth <= 48"); check_equals(mo, "tf2._width", "84"); check_equals(mo, "tf2._height", "20"); xcheck_equals(mo, "tf2._x", "48"); xcheck_equals(mo, "tf2._y", "58"); xcheck_equals(mo, "tf2.textHeight", "23"); // Approx 78 add_actions(mo, "trace(tf2.textWidth);"); xcheck(mo, "tf2.textWidth >= 76 && tf2.textWidth <= 80"); check_equals(mo, "tf3._width", "1344"); check_equals(mo, "tf3._height", "20"); xcheck_equals(mo, "tf3._x", "18"); xcheck_equals(mo, "tf3._y", "88"); xcheck_equals(mo, "tf3.textHeight", "23"); // Approx 230 add_actions(mo, "trace(tf3.textWidth);"); xcheck(mo, "tf3.textWidth >= 225 && tf3.textWidth <= 235"); check_equals(mo, "tf4._width", "1344"); check_equals(mo, "tf4._height", "20"); xcheck_equals(mo, "tf4._x", "18"); xcheck_equals(mo, "tf4._y", "118"); xcheck_equals(mo, "tf4.textHeight", "23"); // Approx 156 add_actions(mo, "trace(tf4.textWidth);"); xcheck(mo, "tf4.textWidth >= 153 && tf4.textWidth <= 159"); check_equals(mo, "tf5._width", "1344"); check_equals(mo, "tf5._height", "20"); xcheck_equals(mo, "tf5._x", "18"); xcheck_equals(mo, "tf5._y", "148"); xcheck_equals(mo, "tf5.textHeight", "23"); // Approx 186 add_actions(mo, "trace(tf5.textWidth);"); xcheck(mo, "tf5.textWidth >= 183 && tf5.textWidth <= 189"); check_equals(mo, "tf6._width", "1344"); check_equals(mo, "tf6._height", "20"); xcheck_equals(mo, "tf6._x", "18"); xcheck_equals(mo, "tf6._y", "178"); xcheck_equals(mo, "tf6.textHeight", "23"); // Approx 194 add_actions(mo, "trace(tf6.textWidth);"); xcheck(mo, "tf6.textWidth >= 189 && tf6.textWidth <= 199"); check_equals(mo, "tf7._width", "1344"); check_equals(mo, "tf7._height", "20"); xcheck_equals(mo, "tf7._x", "18"); xcheck_equals(mo, "tf7._y", "208"); xcheck_equals(mo, "tf7.textHeight", "23"); // Approx 247 add_actions(mo, "trace(tf7.textWidth);"); xcheck(mo, "tf7.textWidth >= 240 && tf7.textWidth <= 254"); check_equals(mo, "tf8._width", "672"); check_equals(mo, "tf8._height", "20"); xcheck_equals(mo, "tf8._x", "34"); xcheck_equals(mo, "tf8._y", "238"); xcheck_equals(mo, "tf8.textHeight", "23"); // Approx 222 add_actions(mo, "trace(tf8.textWidth);"); xcheck(mo, "tf8.textWidth >= 217 && tf8.textWidth <= 227"); check_equals(mo, "tf9._width", "672"); check_equals(mo, "tf9._height", "20"); xcheck_equals(mo, "tf9._x", "34"); xcheck_equals(mo, "tf9._y", "268"); xcheck_equals(mo, "tf9.textHeight", "23"); // Approx 148 add_actions(mo, "trace(tf9.textWidth);"); xcheck(mo, "tf9.textWidth >= 144 && tf9.textWidth <= 152"); check_equals(mo, "tf10._width", "16.8"); check_equals(mo, "tf10._height", "20"); xcheck_equals(mo, "tf10._x", "49.6"); xcheck_equals(mo, "tf10._y", "298"); xcheck_equals(mo, "tf10.textHeight", "23"); // Approx 99 add_actions(mo, "trace(tf10.textWidth);"); xcheck(mo, "tf10.textWidth >= 95 && tf10.textWidth <= 103"); // The textHeight for the following two fields varies. check_equals(mo, "tf11._width", "84"); check_equals(mo, "tf11._height", "80"); xcheck_equals(mo, "tf11._x", "48"); xcheck_equals(mo, "tf11._y", "322"); xcheck_equals(mo, "tf11.textHeight", "23"); // Approx 86 add_actions(mo, "trace(tf11.textWidth);"); xcheck(mo, "tf11.textWidth >= 84 && tf11.textWidth <= 88"); check_equals(mo, "tf12._width", "84"); check_equals(mo, "tf12._height", "160"); xcheck_equals(mo, "tf12._x", "48"); xcheck_equals(mo, "tf12._y", "404"); xcheck_equals(mo, "tf12.textHeight", "23"); // Approx 86 add_actions(mo, "trace(tf12.textWidth);"); xcheck(mo, "tf12.textWidth >= 84 && tf12.textWidth <= 88"); add_actions(mo, "totals(); stop();"); SWFMovie_nextFrame(mo); /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char **argv) { SWFMovie mo; SWFDisplayItem it; const char *srcdir="."; char fdbfont[256]; SWFMovieClip dejagnuclip; SWFFont font; puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); mo = newSWFMovie(); SWFMovie_setDimension(mo, 800, 600); 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) { perror(fdbfont); exit(1); } font = loadSWFFontFromFile(font_file); /* Dejagnu equipment */ dejagnuclip = get_dejagnu_clip((SWFBlock)font, 10, 0, 0, 800, 600); it = SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFDisplayItem_setDepth(it, 200); SWFDisplayItem_move(it, 200, 0); SWFMovie_nextFrame(mo); add_actions(mo, "mc1 = _root.createEmptyMovieClip('mc1', 34);" "mc2 = mc1.createEmptyMovieClip('mc2', 35);" "with(mc2) {" " moveTo(100, 100);" " beginFill(0x20fff0);" " lineTo(100, 200);" " lineTo(200, 200);" " lineTo(200, 100);" "};" "_root.onMouseUp = function() { play(); };" ); // One has all the functions, one has __resolve. add_actions(mo, "resolveevents = [];" "events = [];" "mc1.__resolve = function(a) { resolveevents.push(a); };" "mc2.onEnterFrame = function() { events.push('onEnterFrame'); };" "mc2.onMouseDown = function() { events.push('onMouseDown'); };" "mc2.onMouseUp = function() { events.push('onMouseUp'); };" // Gnash sends a bogus event here, but we're not testing that! //"mc2.onLoad = function() { events.push('onLoad'); };" "mc2.onPress = function() { events.push('onPress'); };" "mc2.onRelease = function() { events.push('onRelease'); };" "mc2.onRollOver = function() { events.push('onRollOver'); };" "mc2.onRollOut = function() { events.push('onRollOut'); };" "mc2.onInitialize = function() { events.push('onInitialize'); };" "mc2.onConstruct = function() { events.push('onConstruct'); };" "mc2.onReleaseOutside = function() { events.push('onReleaseOutside'); };" "mc2.onDragOver = function() { events.push('onDragOver'); };" "mc2.func = function() { events.push('func'); };" ); add_actions(mo, "mc2.func();" "mc1.func();" "mc2.onEnterFrame();" "mc1.onEnterFrame();" "mc2.onRollOver();" "mc1.onRollOver();" ); add_actions(mo, "_root.note('Do not touch anything!');"); // The ones called manually should appear in both. check_equals(mo, "events.toString()", "'func,onEnterFrame,onRollOver'"); check_equals(mo, "resolveevents.toString()", "'func,onEnterFrame,onRollOver'"); SWFMovie_nextFrame(mo); check_equals(mo, "events.toString()", "'func,onEnterFrame,onRollOver,onEnterFrame'"); check_equals(mo, "resolveevents.toString()", "'func,onEnterFrame,onRollOver'"); // Otherwise the number is unpredictable. add_actions(mo, "mc2.onEnterFrame = function() {};"); add_actions(mo, "stop();"); add_actions(mo, "_root.note('Move over square, click and release!');"); SWFMovie_nextFrame(mo); // Expect rollover, onMouseDown, onMouseUp, onRelease check_equals(mo, "events.toString()", "'func,onEnterFrame,onRollOver,onEnterFrame," "onRollOver,onMouseDown,onPress,onMouseUp,onRelease'"); check_equals(mo, "resolveevents.toString()", "'func,onEnterFrame,onRollOver'"); add_actions(mo, "_root.note('Move out of square, click and release!');"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); check_equals(mo, "events.toString()", "'func,onEnterFrame,onRollOver,onEnterFrame,onRollOver," "onMouseDown,onPress,onMouseUp,onRelease,onRollOut,onMouseDown," "onMouseUp'"); check_equals(mo, "resolveevents.toString()", "'func,onEnterFrame,onRollOver'"); add_actions(mo, "mevents = [];" "ressiz = resolveevents.length;" "mc2.onMouseMove = function() { mevents.push('onMouseMove'); };"); // Last test! add_actions(mo, "_root.note('Move the mouse about, then click');"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); // Check that mouse events aren't carried to resolve. check_equals(mo, "mevents[0]", "'onMouseMove'"); check_equals(mo, "resolveevents.length", "ressiz"); add_actions(mo, "_root.note('End of test!');"); // Finish and save SWFMovie_nextFrame(mo); add_actions(mo, "stop();"); puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; int frames; SWFVideoStream stream; SWFDisplayItem item; SWFMovieClip dejagnuclip; FILE *flv, *font_file; SWFFont font; char filename[256]; char fdbfont[1024]; if ( argc>1 ) mediadir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } sprintf(filename, "%s/square.flv", mediadir); flv = fopen(filename, "rb"); if (flv == NULL) { perror(filename); return -1; } sprintf(fdbfont, "%s/Bitstream-Vera-Sans.fdb", mediadir); font_file = fopen(fdbfont, "r"); if ( font_file == NULL ) { perror(fdbfont); exit(1); } Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); font = loadSWFFontFromFile(font_file); mo = newSWFMovie(); SWFMovie_setDimension(mo, 320, 96); if (mo == NULL) return -1; SWFMovie_setRate(mo, 5); dejagnuclip = get_dejagnu_clip((SWFBlock)font, 10, 0, 0, 200, 200); item = SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFDisplayItem_setDepth(item, 200); SWFDisplayItem_move(item, 140, 0); stream = newSWFVideoStream_fromFile(flv); item = SWFMovie_add(mo, (SWFBlock)stream); SWFDisplayItem_setName(item, "vid"); // A bug in Ming prevents this from working the // way I liked it to. It was useful to try this // out as it exposed a bad bug in gnash eating up // all memory and a few other issues. // // In order to keep the test *runner* untouched // this will be commented out for now. When Ming // is fixed I'll like to have two instances of // the definition playing one near the other, // both playing all frames. // //item = SWFMovie_add(mo, (SWFBlock)stream); //SWFDisplayItem_move(item, 150, 0); // Mouse clicks toggle play/stop add_actions(mo, "_root.onMouseDown = function() {" " if (stopped) { play(); stopped=false; }" " else { stop(); stopped=true; }" "};"); // Pressing a number jumps to the specified frame add_actions(mo, "_root.onKeyDown = function() {" " var fnum = Key.getAscii() - 47;" //" trace('going to frame '+fnum);" " _root.gotoAndPlay(fnum);" "}; Key.addListener(_root);"); // TODO: dynamic frame rate adjust frames = SWFVideoStream_getNumFrames(stream); for(; frames > 0; frames--) { SWFMovie_nextFrame(mo); } /// Video.clear() should not work on embedded Videos. add_actions(mo, "stop(); vid.clear(); trace(vid);"); add_actions(mo, "note('You should still see the video frame." " Click to replay');" "o = {};" "o.onMouseDown = function() { _root.play(); };" "Mouse.addListener(o);" ); SWFMovie_nextFrame(mo); //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char ** argv) { SWFMovie mo; SWFDisplayItem it1, it2, it3; SWFShape sh1, sh2, sh3; int framenum; argc=argc; argv=argv; /* unused... */ /********************************************* * * Initialization * *********************************************/ puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); mo = newSWFMovie(); /***************************************************** * * Add the square named * *****************************************************/ SWFMovie_setDimension(mo, 100, 100); #define FRAMESGAP 5 sh1 = make_square(10, 10, 20, 20, 255, 0, 0); it1 = SWFMovie_add(mo, (SWFBlock)sh1); SWFDisplayItem_setDepth(it1, 1); SWFDisplayItem_setName(it1, "Name1"); for (framenum=0; framenum<FRAMESGAP; framenum++) { SWFMovie_nextFrame(mo); } sh2 = make_square(35, 10, 20, 20, 0, 255, 0); it2 = SWFMovie_add(mo, (SWFBlock)sh2); SWFDisplayItem_setDepth(it2, 2); SWFDisplayItem_setName(it2, "Name2"); for (framenum=0; framenum<FRAMESGAP; framenum++) { SWFMovie_nextFrame(mo); } sh3 = make_square(10, 35, 45, 20, 0, 0, 255); it3 = SWFMovie_add(mo, (SWFBlock)sh3); SWFDisplayItem_setDepth(it3, 3); SWFDisplayItem_setName(it3, "Name3"); for (framenum=0; framenum<FRAMESGAP; framenum++) { SWFMovie_nextFrame(mo); } SWFMovie_remove(mo, it1); for (framenum=0; framenum<FRAMESGAP; framenum++) { SWFMovie_nextFrame(mo); } SWFMovie_remove(mo, it2); for (framenum=0; framenum<FRAMESGAP; framenum++) { SWFMovie_nextFrame(mo); } SWFMovie_remove(mo, it3); puts("Saving " OUTPUT_FILENAME ); SWFMovie_nextFrame(mo); /* showFrame */ SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip mc1, mc2, dejagnuclip; SWFDisplayItem it1, it2; SWFShape sh1,sh2; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { //fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); //return 1; } Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); mo = newSWFMovie(); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate(mo, 6); // Frame 1: Place dejagnu clip dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); add_actions(mo, "mc1Constructed=0; mc2Constructed=0; mc3Constructed=0; mc4Constructed=0;"); SWFMovie_nextFrame(mo); // // Frame 2: // Place red static movieClip1 DisplayObject at depth 3 (-16381) // Place black static movieClip1 DisplayObject at depth 4 (-16380) // sh1 = make_fill_square (300, 300, 60, 60, 255, 0, 0, 255, 0, 0); mc1 = newSWFMovieClip(); SWFMovieClip_add(mc1, (SWFBlock)sh1); SWFMovieClip_nextFrame(mc1); it1 = SWFMovie_add(mo, (SWFBlock)mc1); //add movieClip1 to the _root SWFDisplayItem_setDepth(it1, 3); SWFDisplayItem_setName(it1, "movieClip1"); //name movieClip1 SWFDisplayItem_addAction(it1, newSWFAction( "_root.note(this+' constructed');" "_root.mc1Constructed++;" ), SWFACTION_CONSTRUCT); sh2 = make_fill_square (330, 270, 120, 120, 0, 0, 0, 0, 0, 0); mc2 = newSWFMovieClip(); SWFMovieClip_add(mc2, (SWFBlock)sh2); SWFMovieClip_nextFrame(mc2); it2 = SWFMovie_add(mo, (SWFBlock)mc2); //add movieClip2 to the _root SWFDisplayItem_setDepth(it2, 4); SWFDisplayItem_setName(it2, "movieClip2"); //name movieClip2 SWFDisplayItem_addAction(it2, newSWFAction( "_root.note(this+' constructed');" "_root.mc2Constructed++;"), SWFACTION_CONSTRUCT); SWFMovie_nextFrame(mo); // Frame3: nothing new SWFMovie_nextFrame(mo); // Frame4: remove "movieClip1" and "movieClip2" SWFDisplayItem_remove(it1); SWFDisplayItem_remove(it2); SWFMovie_nextFrame(mo); // // Frame5: // Place red static movieClip3 DisplayObject at depth 3 (-16381) with ratio set to 2.0 // Place black static movieClip4 DisplayObject at depth4 (-16380) with ratio set to 0.0 // it1 = SWFMovie_add(mo, (SWFBlock)mc1); //add movieClip3 to the _root SWFDisplayItem_setDepth(it1, 3); SWFDisplayItem_setName(it1, "movieClip3"); //name movieClip3 SWFDisplayItem_setRatio(it1, 2.0); // It's important to set this, don't why yet. SWFDisplayItem_addAction(it1, newSWFAction( "_root.note(this+' constructed');" "_root.mc3Constructed++;" ), SWFACTION_CONSTRUCT); it2 = SWFMovie_add(mo, (SWFBlock)mc2); //add movieClip4 to the _root SWFDisplayItem_setDepth(it2, 4); SWFDisplayItem_setName(it2, "movieClip4"); //name movieClip4 SWFDisplayItem_setRatio(it2, 0.0); // It's important to set this, don't why yet. SWFDisplayItem_addAction(it2, newSWFAction( "_root.note(this+' constructed');" "_root.mc4Constructed++;" ), SWFACTION_CONSTRUCT); SWFMovie_nextFrame(mo); // // Frame4: check, gotoAndStop(3), check.. // check_equals(mo, "typeof(movieClip1)", "'undefined'"); check_equals(mo, "typeof(movieClip2)", "'undefined'"); check_equals(mo, "typeof(movieClip3)", "'movieclip'"); check_equals(mo, "typeof(movieClip4)", "'movieclip'"); check_equals(mo, "_root.mc1Constructed", "1"); check_equals(mo, "_root.mc2Constructed", "1"); check_equals(mo, "_root.mc3Constructed", "1"); check_equals(mo, "_root.mc4Constructed", "1"); SWFMovie_add(mo, (SWFBlock)newSWFAction( "gotoAndStop(3);")); check_equals(mo, "typeof(movieClip1)", "'movieclip'"); check_equals(mo, "typeof(movieClip2)", "'undefined'"); // the difference of movieClip3 and movieClip4 was caused by the ratio value check_equals(mo, "typeof(movieClip3)", "'undefined'"); check_equals(mo, "typeof(movieClip4)", "'movieclip'"); check_equals(mo, "_root.mc1Constructed", "2"); check_equals(mo, "_root.mc2Constructed", "1"); check_equals(mo, "_root.mc3Constructed", "1"); check_equals(mo, "_root.mc4Constructed", "1"); SWFMovie_add(mo, (SWFBlock)newSWFAction( "totals(); stop();" )); SWFMovie_nextFrame(mo); //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip dejaclip; const char *srcdir="."; SWFFont bfont; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); /* let's talk pixels */ mo = newSWFMovie(); SWFMovie_setRate(mo, 1); SWFMovie_setDimension(mo, 628, 1024); bfont = get_default_font(srcdir); /********************************************* * * Body * *********************************************/ dejaclip = get_dejagnu_clip((SWFBlock)bfont, 3000, 0, 50, 800, 800); SWFMovie_add(mo, (SWFBlock)dejaclip); SWFMovie_addExport(mo, (SWFBlock)dejaclip, "dejagnu"); SWFMovie_addExport(mo, (SWFBlock)SWFMovie_addFont(mo, bfont), "dejafont"); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char *argv[]) { SWFMovie m; SWFShape shape; SWFBitmap b; SWFFill fill; SWFDisplayItem i; FILE *file_bitmap; float n; float height; float width; char *imageFile = "backyard.jpg"; Ming_init(argc, argv); Ming_useSWFVersion(5); m = newSWFMovie(); shape = newSWFShape(); if(!(file_bitmap = fopen(imageFile,"rb"))) { printf("Couldn't find file '%s'", imageFile); } b = (SWFCharacter) newSWFJpegBitmap(file_bitmap); SWFMovie_setDimension(m, SWFBitmap_getWidth(b), SWFBitmap_getHeight(b)); fill = SWFShape_addBitmapFill(shape, b, SWFFILL_TILED_BITMAP); SWFShape_setRightFill(shape, fill); height = (float) SWFBitmap_getHeight(b); width = (float) SWFBitmap_getWidth(b); SWFShape_drawLineTo(shape, width, 0.00); SWFShape_drawLineTo(shape, width, height); SWFShape_drawLineTo(shape, 0.00, height); SWFShape_drawLineTo(shape, 0.00, 0.00); i = SWFMovie_add(m, (SWFBlock) shape); for(n=0; n<20.0; ++n) { SWFDisplayItem_multColor(i, 1.0- n/10.0, 1.0, 1.0, 1.0); SWFDisplayItem_addColor(i, 0xff* n/20.0, 0, 0, 0); SWFMovie_nextFrame(m); } for(n=20.0; n>0; --n) { SWFDisplayItem_multColor(i, 1.0- n/10.0, 1.0, 1.0, 1.0); SWFDisplayItem_addColor(i, 0xff* n/20.0, 0, 0, 0); SWFMovie_nextFrame(m); } SWFMovie_save(m, "cxform.swf"); fclose(file_bitmap); /* Do not close earlier or an error will happen */ return 0; }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; SWFMovieClip dejagnuclip; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s\n", argv[0]); return 1; } puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); /* let's talk pixels */ mo = newSWFMovie(); SWFMovie_setRate(mo, 12); //SWFMovie_setDimension(mo, 6400, 4000); SWFMovie_setDimension(mo, 640, 400); /********************************************* * * Body * *********************************************/ dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 80, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); addRedSquareExport(mo); /* it seems we need a SHOWFRAME for this to be effective */ /* (maybe it's related to loop-back handling ?) */ SWFMovie_nextFrame(mo); // This should run for four frames. The counter should only be reset // on the first frame, i.e. when start is undefined. This should // work for all swf versions, unlike "if (undefined < 4);" add_actions(mo, "initObj = new Object();"); add_actions(mo, "if (!started) { counter = 0; started = true; }"); add_actions(mo, "redsquare = function() { " " trace('hello redsquare'); " " if (counter > 0) {" " check_equals(this._x, counter * 70);" " check_equals(Math.round(this._xscale), 99);" " check_equals(Math.round(this._yscale), " " Math.round((10 * counter +5) / 60 * 100));" " check_equals(this._height, 10 * counter + 5); " " check_equals(this.aProperty, 6); " " } else {" " check_equals(this._x, 0);" " check_equals(this._xscale, 100);" " check_equals(this._height, 60.1);" " check_equals(this.aProperty, undefined); " " };" " };" "redsquare.prototype = new MovieClip();" "Object.registerClass('redsquare', redsquare);" ); add_actions(mo, "if ( counter < 4 ) {" " if ( counter > 0 ) { " " initObj.aProperty = 6;" " initObj._xscale = 99;" " initObj._x = 70*counter;" " initObj._height = 10*counter + 5; " " attachMovie('redsquare', " " 'square'+counter, 70+counter, initObj);" " } else {" /* We don't use an initObject for the first attachMovie call * to verify that the DisplayObject will be kept in DisplayList * at loopback time anyway */ " attachMovie('redsquare', " " 'square'+counter, 70+counter);" " }" " check_equals(this['square'+counter]._x, 70*counter);" " if (counter > 0) {" " check_equals(this['square'+counter]._height, 10 * counter + 5);" " };" " note('Depth is '+70*counter);" " counter++;" " note('Next counter is '+counter);" "} else {" " totals(26); stop();" "}" ); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char **argv) { SWFMovie mo; SWFInput in; SWFBitmap bitmap; SWFShape shpSmt; SWFShape shpHrd; SWFMovieClip mc; SWFDisplayItem it; int swfversion; SWFFont font; SWFMovieClip dejagnuclip; char outputFilename[256]; FILE* imgfile; if ( argc < 2 ) { fprintf(stderr, "Usage: %s <swf_version>\n", argv[0]); exit(EXIT_FAILURE); } swfversion = atoi(argv[1]); sprintf(outputFilename, "BitmapSmoothingTest-v%d.swf", swfversion); /********************************************* * * Initialization * *********************************************/ puts("Setting things up"); Ming_init(); Ming_useSWFVersion (swfversion); mo = newSWFMovieWithVersion(swfversion); /**************************************************** * Create filled shapes mc ****************************************************/ imgfile = fopen(MEDIADIR"/vstroke.png", "rb"); if (!imgfile) { fprintf(stderr, "Failed to open bitmap file"); return EXIT_FAILURE; } // Note that recent ming version have the more convenient // newSWFInput_filename() function, but we want to support // older versions. in = newSWFInput_file(imgfile); bitmap = newSWFBitmap_fromInput(in); if (!bitmap) { return EXIT_FAILURE; } shpSmt = newSWFShapeFromBitmap(bitmap, SWFFILL_CLIPPED_BITMAP); shpHrd = newSWFShapeFromBitmap(bitmap, SWFFILL_NONSMOOTHED_CLIPPED_BITMAP); mc = newSWFMovieClip(); SWFMovieClip_add(mc, (SWFBlock)shpSmt); it = SWFMovieClip_add(mc, (SWFBlock)shpHrd); SWFDisplayItem_moveTo(it, 0, 5); SWFMovieClip_nextFrame(mc); /**************************************************** * Create filled shapes mc, and scale it ****************************************************/ it = SWFMovie_add(mo, (SWFBlock)mc); SWFDisplayItem_scaleTo(it, 30, 10); SWFMovie_setDimension(mo, SWFBitmap_getWidth(bitmap)*30, 500); /**************************************************** * Add dejagnu clip ****************************************************/ font = get_default_font(MEDIADIR); dejagnuclip = get_dejagnu_clip((SWFBlock)font, 10, 0, 0, 200, 200); it = SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFDisplayItem_setDepth(it, 200); SWFDisplayItem_move(it, 0, 100); /**************************************************** * TODO: Add actions ****************************************************/ /**************************************************** * Save things up ****************************************************/ printf("Saving %s\n", outputFilename); SWFMovie_nextFrame(mo); /* showFrame */ SWFMovie_save(mo, outputFilename); fclose(imgfile); return EXIT_SUCCESS; }
EXPORT BOOL WINAPI ming_useSWFVersion(int version, int p2, int p3, int p4) { lstrcpy(funcname, "ming_useSWFVersion"); Ming_useSWFVersion(version); return 0; }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; SWFMovieClip dejagnuclip; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s\n", argv[0]); return 1; } puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); /* let's talk pixels */ mo = newSWFMovie(); SWFMovie_setRate(mo, 12); SWFMovie_setDimension(mo, 640, 400); /********************************************* * * Body * *********************************************/ dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 80, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); addRedSquareExport(mo); /* it seems we need a SHOWFRAME for this to be effective */ /* (maybe it's related to loop-back handling ?) */ SWFMovie_nextFrame(mo); /* end of frame1 */ add_actions(mo, "counter = 1; onLoadCalled = new Array();"); add_actions(mo, "var name1 = 'square'+counter;" "attachMovie('redsquare', name1, 70+counter);" "var clip1 = this[name1];" "counter++;" ); SWFMovie_nextFrame(mo); /* end of frame2 */ add_actions(mo, "function CustomClass() { this._x = 80; }" "CustomClass.prototype.onLoad = function() { note(this+'.onLoad called'); _root.onLoadCalled.push(this); };" "registerClassRet = Object.registerClass('redsquare', CustomClass);" ); check_equals(mo, "typeof(registerClassRet)", "'boolean'"); check_equals(mo, "registerClassRet", "true"); add_actions(mo, "var name2 = 'square'+counter;" "attachMovie('redsquare', name2, 70+counter);" "var clip2 = this[name2];" "counter++;" ); SWFMovie_nextFrame(mo); /* end of frame3 */ add_actions(mo, "function CustomClass2() { this._x = 160; check_equals(typeof(super.lineTo), 'function'); }" "CustomClass2.prototype = new MovieClip;" "registerClassRet = Object.registerClass('redsquare', CustomClass2);" ); check_equals(mo, "_root.onLoadCalled.length", "1"); check_equals(mo, "_root.onLoadCalled[0]", "_level0.square2"); check_equals(mo, "typeof(registerClassRet)", "'boolean'"); check_equals(mo, "registerClassRet", "true"); add_actions(mo, "var name3 = 'square'+counter;" "attachMovie('redsquare', name3, 70+counter);" "var clip3 = this[name3];" "counter++;" ); SWFMovie_nextFrame(mo); /* end of frame4 */ add_actions(mo, "registerClassRet = Object.registerClass('redsquare');" ); check_equals(mo, "typeof(registerClassRet)", "'boolean'"); check_equals(mo, "registerClassRet", "false"); add_actions(mo, "var name4 = 'square'+counter;" "attachMovie('redsquare', name4, 70+counter);" "var clip4 = this[name4];" "clip4._x = 240;" "counter++;" ); SWFMovie_nextFrame(mo); /* end of frame5 */ check_equals(mo, "typeof(clip1)", "'movieclip'"); check(mo, "clip1 instanceOf MovieClip"); check_equals(mo, "clip1._x", "0"); check(mo, "! clip1 instanceOf CustomClass"); // Check that non-enumerable properties (unnamed instances, // constructor, __constructor__) are not enumerated. add_actions(mo, "var s = ''; for (i in clip1) { s += i + ','; };"); check_equals(mo, "s", "'onRollOver,'"); check_equals(mo, "typeof(clip2)", "'movieclip'"); check(mo, "clip2 instanceOf CustomClass"); check(mo, "clip2.hasOwnProperty('__constructor__')"); check(mo, "clip2.hasOwnProperty('constructor')"); check(mo, "clip2.hasOwnProperty('__proto__')"); check_equals(mo, "clip2.__proto__", "CustomClass.prototype"); check_equals(mo, "clip2.__constructor__", "CustomClass"); check_equals(mo, "clip2.constructor", "CustomClass"); check_equals(mo, "clip2._x", "80"); check_equals(mo, "typeof(clip2.lineTo)", "'undefined'"); check(mo, "! clip2 instanceOf MovieClip"); // Check that non-enumerable properties (unnamed instances, // constructor, __constructor__) are not enumerated. add_actions(mo, "var s = ''; for (i in clip2) { s += i + ','; };"); check_equals(mo, "s", "'onLoad,onRollOver,'"); check(mo, "clip3.hasOwnProperty('__constructor__')"); check(mo, "clip3.hasOwnProperty('constructor')"); check(mo, "clip3.hasOwnProperty('__proto__')"); check_equals(mo, "clip3.__proto__", "CustomClass2.prototype"); check_equals(mo, "clip3.__constructor__", "CustomClass2"); check_equals(mo, "clip3.constructor", "CustomClass2"); check_equals(mo, "typeof(clip3)", "'movieclip'"); check_equals(mo, "clip3._x", "160"); check(mo, "clip3 instanceOf CustomClass2"); check(mo, "clip3 instanceOf MovieClip"); // Check that non-enumerable properties (unnamed instances, // constructor, __constructor__) are not enumerated. add_actions(mo, "var s = ''; for (i in clip3) { s += i + ','; };"); check_equals(mo, "s", "'onRollOver,'"); check(mo, "clip4.hasOwnProperty('__constructor__')"); check(mo, "clip4.hasOwnProperty('constructor')"); check(mo, "clip4.hasOwnProperty('__proto__')"); check_equals(mo, "clip4.__proto__", "CustomClass2.prototype"); check_equals(mo, "clip4.__constructor__", "CustomClass2"); check_equals(mo, "clip4.constructor", "CustomClass2"); check_equals(mo, "typeof(clip4)", "'movieclip'"); check_equals(mo, "clip4._x", "240"); check(mo, "clip4 instanceOf MovieClip"); add_actions(mo, "totals(47);" "stop();" ); SWFMovie_nextFrame(mo); /* end of frame5 */ /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; char fdbfont[256]; SWFMovieClip dejagnuclip; /********************************************* * * Initialization * *********************************************/ 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); puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); //Ming_setScale(20.0); /* so we talk twips */ mo = newSWFMovie(); SWFMovie_setRate(mo, 1.0); SWFMovie_setDimension(mo, 800, 600); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); // 1st frame // Check that the dejagnu clip is really a TextField. check_equals(mo, "_root.getInstanceAtDepth(-16383)", "_level0.instance1"); check(mo, "_level0.instance1._xtrace_win " "instanceof TextField"); // Note: the dejagnuclip already placed some texts, so the following // should be true. check(mo, "TextField.prototype.hasOwnProperty('background')"); check(mo, "TextField.prototype.hasOwnProperty('backgroundColor')"); check(mo, "TextField.prototype.hasOwnProperty('text')"); check(mo, "TextField.prototype.hasOwnProperty('textColor')"); /********************************************* * * Add some textfields * *********************************************/ { SWFDisplayItem it; FILE *font_file = fopen(fdbfont, "r"); if ( font_file == NULL ) { perror(fdbfont); exit(1); } SWFBrowserFont bfont = newSWFBrowserFont("_sans"); SWFFont efont = loadSWFFontFromFile(font_file); it = add_text_field(mo, (SWFBlock)bfont, "Hello", 1, 2, 3, SWFTEXTFIELD_ALIGN_LEFT, 10, 100, 101, 102, 50); SWFDisplayItem_setName(it, "dtext1"); SWFDisplayItem_moveTo(it, 0, 200); it = add_text_field(mo, (SWFBlock)efont, "Hello", 4, 5, 6, SWFTEXTFIELD_ALIGN_CENTER, 11, 110, 111, 112, 51); SWFDisplayItem_setName(it, "etext1"); SWFDisplayItem_moveTo(it, 0, 300); SWFBrowserFont bfont2 = newSWFBrowserFont("times"); it = add_text_field(mo, (SWFBlock)bfont2, "Hello", 7, 8, 9, SWFTEXTFIELD_ALIGN_RIGHT, 12, 120, 121, 122, 52); SWFDisplayItem_setName(it, "dtext2"); SWFDisplayItem_moveTo(it, 0, 400); } SWFMovie_nextFrame(mo); check_equals(mo, "dtext1.embedFonts", "false"); check_equals(mo, "etext1.embedFonts", "true"); check_equals(mo, "etext1.hasOwnProperty('embedFonts')", "false"); add_actions(mo, "ret = Selection.setFocus(dtext1);" "check_equals(ret, false);" "check_equals(Selection.getFocus(), '_level0.dtext1');"); add_actions(mo, "ret = Selection.setFocus(etext1);" "check_equals(ret, false);" "check_equals(Selection.getFocus(), '_level0.etext1');"); add_actions(mo, "createTextField('dynamictext1', 99, 10, 10, 10, 10);"); add_actions(mo, "ret = Selection.setFocus(dynamictext1);" "check_equals(ret, false);" "check_equals(Selection.getFocus(), '_level0.dynamictext1');"); check_equals(mo, "dtext1.__proto__", "TextField.prototype"); check_equals(mo, "etext1.__proto__", "TextField.prototype"); check_equals(mo, "etext1.__proto__", "dynamictext1.__proto__"); // checks after placing some swf defined TextField check(mo, "TextField.prototype.hasOwnProperty('background')"); check(mo, "TextField.prototype.hasOwnProperty('backgroundColor')"); check(mo, "TextField.prototype.hasOwnProperty('text')"); check(mo, "TextField.prototype.hasOwnProperty('textColor')"); check(mo, "!TextField.prototype.hasOwnProperty('_parent')"); check(mo, "!TextField.prototype.hasOwnProperty('_xmouse')"); check(mo, "!TextField.prototype.hasOwnProperty('_ymouse')"); check(mo, "!TextField.prototype.hasOwnProperty('_xscale')"); check(mo, "!TextField.prototype.hasOwnProperty('_yscale')"); check_equals(mo, "typeof(dtext1)", "'object'"); check_equals(mo, "typeof(dtext1.text)", "'string'"); check_equals(mo, "typeof(dtext1.background)", "'boolean'"); check_equals(mo, "typeof(dtext1.backgroundColor)", "'number'"); check_equals(mo, "typeof(dtext1.textColor)", "'number'"); check_equals(mo, "typeof(dtext1._alpha)", "'number'"); check_equals(mo, "typeof(dtext1.type)", "'string'"); check_equals(mo, "dtext1.type", "'input'"); check_equals(mo, "typeof(dtext1.__proto__.text)", "'undefined'"); check_equals(mo, "typeof(dtext1.__proto__.background)", "'undefined'"); check_equals(mo, "typeof(dtext1.__proto__.backgroundColor)", "'undefined'"); check_equals(mo, "typeof(dtext1.__proto__.textColor)", "'undefined'"); check_equals(mo, "typeof(dtext1.__proto__._alpha)", "'undefined'"); check_equals(mo, "dtext1.hasOwnProperty('text')", "false"); check_equals(mo, "dtext1.hasOwnProperty('background')", "false"); check_equals(mo, "dtext1.hasOwnProperty('backgroundColor')", "false"); check_equals(mo, "dtext1.hasOwnProperty('textColor')", "false"); check_equals(mo, "dtext1.hasOwnProperty('_alpha')", "false"); check(mo, "!dtext1.hasOwnProperty('_parent')"); check(mo, "!dtext1.hasOwnProperty('_xmouse')"); check(mo, "!dtext1.hasOwnProperty('_ymouse')"); check(mo, "!dtext1.hasOwnProperty('_xscale')"); check(mo, "!dtext1.hasOwnProperty('_yscale')"); check(mo, "!etext1.hasOwnProperty('_parent')"); check(mo, "!etext1.hasOwnProperty('_xmouse')"); check(mo, "!etext1.hasOwnProperty('_ymouse')"); check(mo, "!etext1.hasOwnProperty('_xscale')"); check(mo, "!etext1.hasOwnProperty('_yscale')"); check(mo, "dtext1.__proto__.hasOwnProperty('text')"); check_equals(mo, "dtext1.__proto__.hasOwnProperty('background')", "true"); check_equals(mo, "dtext1.__proto__.hasOwnProperty('backgroundColor')", "true"); check_equals(mo, "dtext1.__proto__.hasOwnProperty('textColor')", "true"); // Why _alpha is special??? check_equals(mo, "dtext1.__proto__.hasOwnProperty('_alpha')", "false"); check_equals(mo, "dtext1.text", "'Hello'"); check_equals(mo, "etext1.text", "'Hello'"); check_equals(mo, "dtext2.text", "'Hello'"); check_equals(mo, "dtext1.background", "false"); check_equals(mo, "etext1.background", "false"); check_equals(mo, "dtext2.background", "false"); check_equals(mo, "dtext1.backgroundColor", "0xffffff"); check_equals(mo, "etext1.backgroundColor", "0xffffff"); check_equals(mo, "dtext2.backgroundColor", "0xffffff"); check_equals(mo, "dtext1.textColor", "6579558"); check_equals(mo, "etext1.textColor", "7237488"); check_equals(mo, "dtext2.textColor", "7895418"); check_equals(mo, "dtext1._alpha", "100"); check_equals(mo, "etext1._alpha", "100"); check_equals(mo, "dtext2._alpha", "100"); check_equals(mo, "etext1._parent", "_root"); check_equals(mo, "dtext2._parent", "_root"); check_equals(mo, "etext1._xscale", "100"); check_equals(mo, "dtext2._xscale", "100"); check_equals(mo, "etext1._yscale", "100"); check_equals(mo, "dtext2._yscale", "100"); check_equals(mo, "typeof(etext1._xmouse)", "'number'"); check_equals(mo, "typeof(dtext2._xmouse)", "'number'"); check_equals(mo, "typeof(etext1._ymouse)", "'number'"); check_equals(mo, "typeof(dtext2._ymouse)", "'number'"); // TextFormat objects are created on the fly add_actions(mo, "etext1.tf = etext1.getTextFormat();" "dtext2.tf = dtext2.getTextFormat();" ); check_equals(mo, "typeof(etext1.tf)", "'object'"); check_equals(mo, "typeof(dtext2.tf)", "'object'"); check_equals(mo, "etext1.tf.size", "12"); check_equals(mo, "dtext2.tf.size", "12"); check_equals(mo, "etext1.tf.font", "'Bitstream Vera Sans'"); check_equals(mo, "dtext2.tf.font", "'times'"); check_equals(mo, "typeof(etext1.tf.bold)", "'boolean'"); check_equals(mo, "typeof(dtext2.tf.bold)", "'boolean'"); check_equals(mo, "etext1.tf.bold", "false"); check_equals(mo, "dtext2.tf.bold", "false"); check_equals(mo, "typeof(etext1.tf.italic)", "'boolean'"); check_equals(mo, "typeof(dtext2.tf.italic)", "'boolean'"); check_equals(mo, "etext1.tf.italic", "false"); check_equals(mo, "dtext2.tf.italic", "false"); check_equals(mo, "typeof(etext1.tf.indent)", "'number'"); check_equals(mo, "typeof(dtext2.tf.indent)", "'number'"); check_equals(mo, "etext1.tf.indent", "4"); check_equals(mo, "dtext2.tf.indent", "7"); check_equals(mo, "typeof(etext1.tf.leftMargin)", "'number'"); check_equals(mo, "typeof(dtext2.tf.leftMargin)", "'number'"); check_equals(mo, "etext1.tf.leftMargin", "5"); check_equals(mo, "dtext2.tf.leftMargin", "8"); check_equals(mo, "typeof(etext1.tf.rightMargin)", "'number'"); check_equals(mo, "typeof(dtext2.tf.rightMargin)", "'number'"); check_equals(mo, "etext1.tf.rightMargin", "6"); check_equals(mo, "dtext2.tf.rightMargin", "9"); check_equals(mo, "typeof(etext1.tf.align)", "'string'"); check_equals(mo, "typeof(dtext2.tf.align)", "'string'"); check_equals(mo, "etext1.tf.align", "'center'"); check_equals(mo, "dtext2.tf.align", "'right'"); check_equals(mo, "typeof(etext1.tf.leading)", "'number'"); check_equals(mo, "typeof(dtext2.tf.leading)", "'number'"); check_equals(mo, "etext1.tf.leading", "11"); check_equals(mo, "dtext2.tf.leading", "12"); check_equals(mo, "typeof(etext1.tf.color)", "'number'"); check_equals(mo, "typeof(dtext2.tf.color)", "'number'"); check_equals(mo, "etext1.tf.color", "7237488"); check_equals(mo, "dtext2.tf.color", "7895418"); check_equals(mo, "typeof(etext1.tf.blockIndent)", "'number'"); check_equals(mo, "typeof(dtext2.tf.blockIndent)", "'number'"); check_equals(mo, "etext1.tf.blockIndent", "0"); check_equals(mo, "dtext2.tf.blockIndent", "0"); check_equals(mo, "typeof(etext1.tf.underline)", "'boolean'"); check_equals(mo, "typeof(dtext2.tf.underline)", "'boolean'"); check_equals(mo, "etext1.tf.underline", "false"); check_equals(mo, "dtext2.tf.underline", "false"); add_actions(mo, "dtext1.background = true;" "etext1.background = true;" "dtext2.background = true;" "dtext1.backgroundColor = 0xff0000;" "etext1.backgroundColor = 0x00ff00;" "dtext2.backgroundColor = 0x0000ff;" "dtext1.textColor = 0x00ffff;" "etext1.textColor = 0xff00ff;" "dtext2.textColor = 0xffff00;" "dtext1.text += ' world';" "etext1.text += ' world';" "dtext2.text += ' world';" ); check_equals(mo, "etext1.getTextFormat().color", "0xff00ff"); check_equals(mo, "dtext2.getTextFormat().color", "0xffff00"); check_equals(mo, "dtext1.text", "'Hello world'"); check_equals(mo, "etext1.text", "'Hello world'"); check_equals(mo, "dtext2.text", "'Hello world'"); check_equals(mo, "dtext1.background", "true"); check_equals(mo, "etext1.background", "true"); check_equals(mo, "dtext2.background", "true"); check_equals(mo, "dtext1.backgroundColor", "0xff0000"); check_equals(mo, "etext1.backgroundColor", "0x00ff00"); check_equals(mo, "dtext2.backgroundColor", "0x0000ff"); check_equals(mo, "dtext1.textColor", "0x00ffff"); check_equals(mo, "etext1.textColor", "0xff00ff"); check_equals(mo, "dtext2.textColor", "0xffff00"); SWFMovie_nextFrame(mo); add_actions(mo, "dtext1._alpha = 0;" "etext1._alpha = 0;" "dtext2._alpha = 0;" ); check_equals(mo, "dtext1._alpha", "0"); check_equals(mo, "etext1._alpha", "0"); check_equals(mo, "dtext2._alpha", "0"); SWFMovie_nextFrame(mo); add_actions(mo, "dtext1._alpha = 100; dtext1.embedFonts=true; dtext1.text = 'embedFonts';" "etext1._alpha = 100; etext1.embedFonts=false; etext1.text = '!embedFonts';" "dtext2._alpha = 100;" ); check_equals(mo, "dtext1.embedFonts", "true"); check_equals(mo, "etext1.embedFonts", "false"); add_actions(mo, "totals(); stop();"); SWFMovie_nextFrame(mo); /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip dejagnuclip; SWFDisplayItem it; char url_png[512]; char url_indexpng[512]; char url_greypng[512]; char url_gif[512]; char url_igif[512]; char png_action[256]; char indexpng_action[256]; char greypng_action[256]; char gif_action[256]; char igif_action[256]; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) mediadir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } sprintf(url_png, "%s/png.png", mediadir); sprintf(url_indexpng, "%s/indexed.png", mediadir); sprintf(url_greypng, "%s/greyscale.png", mediadir); sprintf(url_gif, "%s/gif.gif", mediadir); sprintf(url_igif, "%s/gif-interlaced.gif", mediadir); puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); /* so we talk pixels */ mo = newSWFMovie(); SWFMovie_setDimension (mo, 800, 600); SWFMovie_setRate (mo, 12.0); SWFMovie_setBackground (mo, 255, 255, 255); /***************************************************** * * Add Dejagnu clip * *****************************************************/ dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(mediadir), 10, 0, 0, 800, 600); it = SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFDisplayItem_moveTo(it, 0, 250); SWFMovie_nextFrame(mo); /***************************************************** * * Add the clips * *****************************************************/ sprintf(png_action, "_root.window.loadMovie(\"%s\");", url_png); add_button(mo, 50, 100, "Load PNG", newSWFAction(png_action)); sprintf(indexpng_action, "_root.window.loadMovie(\"%s\");", url_indexpng); add_button(mo, 50, 125, "Load indexed PNG", newSWFAction(indexpng_action)); sprintf(greypng_action, "_root.window.loadMovie(\"%s\");", url_greypng); add_button(mo, 50, 150, "Load greyscale PNG", newSWFAction(greypng_action)); sprintf(gif_action, "_root.window.loadMovie(\"%s\");", url_gif); add_button(mo, 50, 175, "Load GIF", newSWFAction(gif_action)); sprintf(igif_action, "_root.window.loadMovie(\"%s\");", url_igif); add_button(mo, 50, 200, "Load interlaced GIF", newSWFAction(igif_action)); /***************************************************** * * Add the window clip * *****************************************************/ puts("Adding window"); add_window(mo, 600, 100); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main (int argc, char **argv) { int width=640, height=480; /* default stage size */ int i; int swfcompression = DEFSWFCOMPRESSION; float framerate = 12.0; /* * Allow network access from locally-loaded movies. * * 0 = file access * 1 = network access * -1 = unspecified (omit the tag if SWF < 8, file access otherwise) * * By default is unspecified. */ int networkAccess = -1; int usedfiles = 0; struct stat statbuf; int debug_parser = 0; #ifdef HAVE_GETOPT_LONG struct option opts[] = { {"dont-preprocess", 0, 0, 'p'}, {"frame-rate", 1, 0, 'r'}, {"swfversion", 1, 0, 'v'}, {"bgcolor", 1, 0, 'b'}, {"compression", 1, 0, 'c'}, {"includepath", 1, 0, 'I'}, {"define", 1, 0, 'D'}, {"size", 1, 0, 's'}, {"network-access", 1, 0, 'n'}, {"output", 1, 0, 'o'}, {"import", 1, 0, 'i'}, {"version", 0, 0, 'V'}, {"help", 0, 0, 'h'}, {"debug", 0, 0, 'd'}, {"init-action", 1, 0, 'a'}, {0, 0, 0, 0} }; int opts_idx; #endif int c; char *me; cppargs = malloc(cppargsize); sprintf(cppargs, "%s", DEFAULT_FLAGS); //cppargs[0] = '\0'; me = argv[0]; while (1) { #define BUFSIZE 1024 char buf [BUFSIZE]; const char *optstring = "Vhpds:r:D:I:v:c:b:i:o:a:n:"; #ifdef HAVE_GETOPT_LONG c = getopt_long (argc, argv, optstring, opts, &opts_idx); #else c = getopt (argc, argv, optstring); #endif if (c == -1) break; switch (c) { case 'p': makeswf_set_dopreprocess(0); break; case 's': if ( sscanf(optarg, "%dx%d", &width, &height) != 2 ) { usage(argv[0], EXIT_FAILURE); } break; case 'n': { if ( ! strcasecmp(optarg, "network") ) { networkAccess = 1; } else if ( ! strcasecmp(optarg, "file") ) { networkAccess = 0; } else { fprintf(stderr, "Network access must be 'network' or 'file'\n"); exit(1); } break; } case 'v': if ( sscanf(optarg, "%d", &swfversion) != 1 ) { usage(argv[0], EXIT_FAILURE); } makeswf_set_swfversion(swfversion); break; case 'b': if ( sscanf(optarg, "%lx", &bgcolor) != 1 ) { usage(argv[0], EXIT_FAILURE); } useBgColor=1; break; case 'c': if ( sscanf(optarg, "%d", &swfcompression) != 1 ) { usage(argv[0], EXIT_FAILURE); } if ( swfcompression < -1 || swfcompression > 9 ) { fprintf(stderr, "Compression level must be in the range -1..9\n"); exit(1); } break; case 'r': if ( sscanf(optarg, "%f", &framerate) != 1 ) { usage(argv[0], EXIT_FAILURE); } break; case 'I': snprintf(buf, BUFSIZE-1, " -I%s", optarg); buf[BUFSIZE-1]='\0'; makeswf_append_cpparg(buf); break; case 'i': add_import_spec(optarg); break; case 'o': outputfile = optarg; break; case 'D': // yes, you can smash the stack ... snprintf(buf, BUFSIZE-1, " -D%s", optarg); buf[BUFSIZE-1]='\0'; makeswf_append_cpparg(buf); break; case 'd': debug_parser = 1; break; case 'a': add_init_action_spec(optarg); break; case 'V': printf("%s\n", RCSID); printf("Copyright (C) 2001-2006 \"Sandro Santilli\" <*****@*****.**>.\n"); printf("Released under the GNU General Public License.\n"); exit(EXIT_SUCCESS); case 'h': usage(argv[0], EXIT_SUCCESS); default: usage(argv[0], EXIT_FAILURE); break; } } argv+=optind; argc-=optind; if ( argc < 1 ) usage(me, EXIT_FAILURE); if ( stat(outputfile, &statbuf) ) { // should warn about overriding (-f ?) } if ( Ming_init() ) { fprintf(stderr, "Ming initialization error\n"); exit(EXIT_FAILURE); } Ming_setWarnFunction(warningHandler); //Ming_setErrorFunction(compileError); Ming_useSWFVersion(swfversion); Ming_setSWFCompression(swfcompression); mo = newSWFMovie(); if ( networkAccess >= 0 ) SWFMovie_setNetworkAccess(mo, networkAccess); SWFMovie_setDimension(mo, (float)width, (float)height); SWFMovie_setRate(mo, framerate); if ( useBgColor ) { SWFMovie_setBackground(mo, bgcolor >> 16, (bgcolor&0x00FF00) >> 8, (bgcolor&0x0000FF)); } printf("Output file name: %s\n", outputfile); printf("Output compression level: %d\n", swfcompression); printf("Output SWF version: %d\n", swfversion); /* * Add imports */ if ( numimport_specs ) add_imports(); for ( i=0; i<argc; i++ ) { SWFAction ac; char *filename = argv[i]; char ppfile[PATH_MAX]; FileType type = getFileType(filename); compile_init_actions(i, debug_parser); if ( type == SWF ) { printf("Adding prebuilt clip %s to frame %d... ", filename, i); embed_swf(mo, filename); } else if ( type == BITMAP ) { printf("Adding bitmap %s to frame %d... ", filename, i); embed_image(mo, filename); } else { sprintf(ppfile, "%s.frame%d.pp", outputfile, i); ac = makeswf_compile_source(filename, ppfile, debug_parser); printf("Adding %s to frame %d... ", filename, i); SWFMovie_add(mo, (SWFBlock)ac); } printf("done.\n"); usedfiles++; SWFMovie_nextFrame(mo); } if ( i <= max_init_action_frame ) { fprintf(stderr, "WARNING: following init actions for frames > %d have been discarded:\n", i-1); for (;i<=max_init_action_frame; ++i) { print_init_actions(i, stderr); } } if ( ! usedfiles ) { printf("No valid input files\n"); return 1; } printf("Saving output to %s... ", outputfile); fflush(stdout); SWFMovie_save(mo, outputfile); printf("done.\n"); return 0; }
int main(int argc, char **argv) { SWFMovie mo; SWFDisplayItem it; const char *srcdir="."; SWFMovieClip dejagnuclip; /********************************************* * * Initialization * *********************************************/ puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); mo = newSWFMovie(); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate(mo, 12); if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } font = get_default_font(srcdir); /* Dejagnu equipment */ dejagnuclip = get_dejagnu_clip((SWFBlock)font, 10, 0, 0, 800, 600); it = SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFDisplayItem_setDepth(it, 200); SWFDisplayItem_move(it, 200, 0); 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); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * Add button * *****************************************************/ it = add_button(mo); SWFDisplayItem_moveTo(it, 40, 30); SWFDisplayItem_setName(it, "square1"); SWFDisplayItem_setDepth(it, 2); add_actions(mo, "function printBounds(b) {" " return ''+Math.round(b.xMin*100)/100+','+Math.round(b.yMin*100)/100+' '+Math.round(b.xMax*100)/100+','+Math.round(b.yMax*100)/100;" "}" ); // // Mouse pointer events // add_actions(mo, "square1.button.onRollOver = function() { " " _root.msg2 = 'RollOver'; " // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); add_actions(mo, "square1.button.onRollOut = function() {" " _root.msg2 = 'RollOut'; " // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); // // Mouse buttons events // add_actions(mo, "square1.button.onPress = function() {" " _root.msg2 = 'Press'; " // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); add_actions(mo, "square1.button.onRelease = function() {" " _root.msg2 = 'Release'; " // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); add_actions(mo, "square1.button.onReleaseOutside = function() {" " _root.msg2 = 'ReleaseOutside'; " // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); // // Focus events // add_actions(mo, "square1.button.onSetFocus = function() {" " _root.msg3 = 'SetFocus';" // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); // // Key events - button needs focus for these to work // add_actions(mo, "square1.button.onKeyDown = function() {" " _root.msg3 = 'KeyDown';" // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); add_actions(mo, "square1.button.onKeyUp = function() {" " _root.msg3 = 'KeyUp';" // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * On second frame, check construction of the button * DisplayObject states and give instructions to proceed * * *****************************************************/ add_actions(mo, "Array.prototype.realLength = function() {" " var l=0; for (var i in this) { " " if (Number(i) == i) l++;" /* count only numbers */ " };" " return l;" "};"); /* buttonChild was initialized with 2 elements */ check_equals(mo, "typeof(_root.buttonChild)", "'object'"); check(mo, "_root.buttonChild instanceof Array"); check_equals(mo, "_root.buttonChild.realLength()", "2"); /* UP and ALL states */ /* sprite for ALL states */ check_equals(mo, "typeof(_root.buttonChild[10])", "'object'"); check_equals(mo, "(_root.buttonChild[10].nam)", "'_level0.square1.button.instance5'"); check_equals(mo, "(_root.buttonChild[10].exe)", "1"); check_equals(mo, "(_root.buttonChild[10].uld)", "0"); /* sprite for UP state */ check_equals(mo, "typeof(_root.buttonChild[12])", "'object'"); check_equals(mo, "(_root.buttonChild[12].nam)", "'_level0.square1.button.instance6'"); check_equals(mo, "(_root.buttonChild[12].exe)", "1"); check_equals(mo, "(_root.buttonChild[12].uld)", "0"); check_equals(mo, "_level0.square1.button.instance6._name", "'instance6'"); check_equals(mo, "_level0.square1.button.instance6.getDepth()", "-16371"); /* sprite for HIT state not constructed */ check_equals(mo, "typeof(_root.buttonChild[11])", "'undefined'"); /* sprite for DOWN state not constructed */ check_equals(mo, "typeof(_root.buttonChild[13])", "'undefined'"); add_actions(mo, "stop();" /*"_root.note('buttonChild is '+dumpObj(_root.buttonChild));"*/ "_root.testno=0;" "_root.square1.onRollOut = function() { _root.testno++; delete _root.square1.onRollOut; nextFrame(); };" "_root.note('" "0. Roll over and out the red square, not touching the small dark-red square in it." "');"); /* hitTest should work on every child, not just first added */ check(mo, "_level0.square1.hitTest(60,60,true)"); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * On third frame, start the button event test * *****************************************************/ add_actions(mo, "stop();" /*"_root.note('buttonChild is '+dumpObj(_root.buttonChild));"*/ "_root.testno=1;" "_root.note('" "1. Roll over the red square." "');"); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * On fourth frame, add a shape at lower depth, * and check bounds of square1 * * *****************************************************/ { 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); check_equals(mo, "printBounds(square1.getBounds())", "'-0.05,-0.05 40.05,40.05'"); /* buttonChild should now have a total of 4 elements (UP,DOWN, OVER and ALL states) */ check_equals(mo, "typeof(_root.buttonChild)", "'object'"); check(mo, "_root.buttonChild instanceof Array"); check_equals(mo, "_root.buttonChild.realLength()", "4"); /* sprite for ALL states */ check_equals(mo, "typeof(_root.buttonChild[10])", "'object'"); check_equals(mo, "(_root.buttonChild[10].nam)", "'_level0.square1.button.instance5'"); check_equals(mo, "(_root.buttonChild[10].exe)", "1"); check_equals(mo, "(_root.buttonChild[10].uld)", "0"); /* sprite for UP state */ check_equals(mo, "typeof(_root.buttonChild[12])", "'object'"); check_equals(mo, "(_root.buttonChild[12].nam)", "'_level0.square1.button.instance6'"); check_equals(mo, "(_root.buttonChild[12].exe)", "3"); check_equals(mo, "(_root.buttonChild[12].uld)", "2"); /* sprite for OVER state */ check_equals(mo, "typeof(_root.buttonChild[13])", "'object'"); check_equals(mo, "(_root.buttonChild[13].nam)", "'_level0.square1.button.instance7'"); check_equals(mo, "(_root.buttonChild[13].exe)", "4"); check_equals(mo, "(_root.buttonChild[13].uld)", "4"); /* sprite for DOWN state */ check_equals(mo, "typeof(_root.buttonChild[14])", "'object'"); check_equals(mo, "(_root.buttonChild[14].nam)", "'_level0.square1.button.instance8'"); check_equals(mo, "(_root.buttonChild[14].exe)", "2"); check_equals(mo, "(_root.buttonChild[14].uld)", "2"); /* sprite for HIT state never constructed */ check_equals(mo, "typeof(_root.buttonChild[11])", "'undefined'"); add_actions(mo, "stop();" "_root.note('-- Added shape at lower depth --');" "_root.testno++;" "_root.note(_root.testno+'. Roll over the square.');" ); SWFMovie_nextFrame(mo); /* showFrame */ } /***************************************************** * * On fifth 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); /* buttonChild should now have a total of 4 elements (UP,DOWN, OVER and ALL states) */ check_equals(mo, "typeof(_root.buttonChild)", "'object'"); check(mo, "_root.buttonChild instanceof Array"); check_equals(mo, "_root.buttonChild.realLength()", "4"); /* sprite for ALL states */ check_equals(mo, "typeof(_root.buttonChild[10])", "'object'"); check_equals(mo, "(_root.buttonChild[10].nam)", "'_level0.square1.button.instance5'"); check_equals(mo, "(_root.buttonChild[10].exe)", "1"); check_equals(mo, "(_root.buttonChild[10].uld)", "0"); /* sprite for UP state */ check_equals(mo, "typeof(_root.buttonChild[12])", "'object'"); check_equals(mo, "(_root.buttonChild[12].nam)", "'_level0.square1.button.instance6'"); check_equals(mo, "(_root.buttonChild[12].exe)", "5"); check_equals(mo, "(_root.buttonChild[12].uld)", "4"); /* sprite for OVER state */ check_equals(mo, "typeof(_root.buttonChild[13])", "'object'"); check_equals(mo, "(_root.buttonChild[13].nam)", "'_level0.square1.button.instance7'"); check_equals(mo, "(_root.buttonChild[13].exe)", "8"); check_equals(mo, "(_root.buttonChild[13].uld)", "8"); /* sprite for DOWN state */ check_equals(mo, "typeof(_root.buttonChild[14])", "'object'"); check_equals(mo, "(_root.buttonChild[14].nam)", "'_level0.square1.button.instance8'"); check_equals(mo, "(_root.buttonChild[14].exe)", "4"); check_equals(mo, "(_root.buttonChild[14].uld)", "4"); /* sprite for HIT state never constructed */ check_equals(mo, "typeof(_root.buttonChild[11])", "'undefined'"); add_actions(mo, "stop();" "_root.note('-- Added shape at higher depth --');" "_root.testno++;" "_root.note(_root.testno+'. Roll over the square.');" ); SWFMovie_nextFrame(mo); /* showFrame */ } /***************************************************** * * On sixth frame, disable the button * and check total tests so far * *****************************************************/ { add_actions(mo, "check_equals(square1.button.enabled, true);" "square1.button.enabled = 6;" "check_equals(square1.button.enabled, 6);" "square1.button.enabled = 'string';" "check_equals(square1.button.enabled, 'string');" "square1.button._visible = false;" "check_equals(square1.button.enabled, 'string');" "square1.button._visible = true;" "square1.button.enabled = false;" "stop();" "_root.totals(160);" "_root.note('-- Button disabled, try playing with it, nothing should happen --');" ); SWFMovie_nextFrame(mo); /* showFrame */ } /***************************************************** * * Save it... * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; SWFMovieClip dejagnuclip; SWFDisplayItem it; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s\n", argv[0]); return 1; } puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); /* let's talk pixels */ mo = newSWFMovie(); SWFMovie_setRate(mo, 1.33); SWFMovie_setDimension(mo, 640, 400); /********************************************* * * Body * *********************************************/ dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 80, 800, 600); it = SWFMovie_add(mo, (SWFBlock)dejagnuclip); addSoundExport(mo); SWFMovie_nextFrame(mo); /* end of frame1 */ // Tracker variables for calls to onSoundComplete add_actions(mo, "c_soundComplete = 0;"); add_actions(mo, "d_soundComplete = 0;"); add_actions(mo, "e_soundComplete = 0;"); add_actions(mo, "a = new Sound();"); check_equals(mo, "a.duration", "undefined"); add_actions(mo, "a.attachSound('mono22_mp2');"); check_equals(mo, "a.duration", "13740"); add_actions(mo, "b = new Sound(); b.attachSound('mono22_mp2b');"); add_actions(mo, "c = new Sound(); c.attachSound('stereo8_mp3');"); // Two different Sounds with the same exported sound. add_actions(mo, "d = new Sound(); d.attachSound('stereo8_mp3b');"); add_actions(mo, "e = new Sound(); e.attachSound('stereo8_mp3b');"); add_actions(mo, "check_equals(a.getBytesTotal(), undefined);"); add_actions(mo, "check_equals(a.getBytesLoaded(), undefined);"); add_actions(mo, "check_equals(a.id3, undefined);"); check_equals(mo, "a.position", "0"); add_actions(mo, "a.start();"); // This isn't very consistent either. Please re-enable when it is. //check_equals(mo, "a.position", "0"); check_equals(mo, "b.duration", "13740"); check_equals(mo, "b.position", "0"); add_actions(mo, "b.start();"); // Here, gst gives 46, ffmpeg 0. //check_equals(mo, "b.position", "0"); check_equals(mo, "c.duration", "5224"); check_equals(mo, "c.position", "0"); // Play twice (loop). add_actions(mo, "c.start(0, 2);"); check_equals(mo, "c.position", "0"); check_equals(mo, "d.duration", "5224"); check_equals(mo, "d.position", "0"); // Start twice. add_actions(mo, "d.start();"); add_actions(mo, "d.start(4);"); check_equals(mo, "d.position", "0"); add_actions(mo, "e.start();"); SWFMovie_nextFrame(mo); add_actions(mo, "stop();" "note('will wait for onSoundComplete to finish the test (about " "13 seconds).');"); // This is the longest sound, so the test should end when this is called. add_actions(mo, "a.onSoundComplete = function() {" "check_equals(arguments.length, 0);" "check_equals(a.position, 13740, 'a.position at a.onSoundComplete time');" "check_equals(c_soundComplete, 1, 'c_soundComplete at a.onSoundComplete time');" "check_equals(d_soundComplete, 1, 'd_soundComplete at a.onSoundComplete time');" "check_equals(e_soundComplete, 2, 'e_soundComplete at a.onSoundComplete time');" "totals(26); " "finished = true;" "};"); // Check position of b, c, d, and e after the first loop of c. add_actions(mo, "c.onSoundComplete = function() {" // I'm not sure how reliable this is: "check_equals(b.position, 10472, 'b.position at c.onSoundComplete time');" "check_equals(c.position, 5224, 'c.position at c.onSoundComplete time');" "check_equals(d.position, 5224, 'd.position at c.onSoundComplete time');" "check_equals(e.position, 5224, 'e.position at c.onSoundComplete time');" "c_soundComplete++;" "note('c.onSoundComplete() called '+c_soundComplete+' time(s).');" "};"); add_actions(mo, "d.onSoundComplete = function() {" "check_equals(d.position, 5224, 'd.position at d.onSoundComplete time');" "d_soundComplete++;" "note('d.onSoundComplete() called '+d_soundComplete+' time(s).');" "};"); // This starts e again. It should run twice before the longest // sound stops. add_actions(mo, "e.onSoundComplete = function() {" "check_equals(e.position, 5224, 'e.position at e.onSoundComplete time');" "e_soundComplete++;" "note('e.onSoundComplete() called '+e_soundComplete+' time(s).');" "if ( e_soundComplete < 2 ) e.start();" "};"); /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; char fdbfont[256]; SWFMovieClip dejagnuclip; /********************************************* * * Initialization * *********************************************/ 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); puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); //Ming_setScale(20.0); /* so we talk twips */ mo = newSWFMovie(); SWFMovie_setRate(mo, 1.0); SWFMovie_setDimension(mo, 800, 600); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); // 1st frame /********************************************* * * Add some textfields * *********************************************/ { SWFDisplayItem it; FILE *font_file = fopen(fdbfont, "r"); if ( font_file == NULL ) { perror(fdbfont); exit(1); } SWFFont efont = loadSWFFontFromFile(font_file); it = add_text_field(mo, efont, "First text"); SWFDisplayItem_setName(it, "dtext1"); SWFDisplayItem_moveTo(it, 0, 200); it = add_text_field(mo, efont, "Zweites Textfeld"); SWFDisplayItem_setName(it, "etext1"); SWFDisplayItem_moveTo(it, 0, 300); it = add_text_field(mo, efont, "Some more static text here... abcdefgh"); SWFDisplayItem_setName(it, "dtext2"); SWFDisplayItem_moveTo(it, 0, 400); } SWFMovie_nextFrame(mo); add_actions(mo, "createTextField('dynamictext1', 99, 10, 10, 10, 10);" "this.dynamictext1.text = 'Dynamic Text';"); add_actions(mo, "ts = this.getTextSnapshot();"); check(mo, "ts instanceof TextSnapshot"); check_equals(mo, "ts.getCount()", "64"); check_equals(mo, "ts.getText(0, 1)", "'F'"); check_equals(mo, "ts.getText(3, 3)", "'s'"); check_equals(mo, "ts.getText(-5, 5)", "'First'"); check_equals(mo, "ts.getText(10, 6)", "'Z'"); check_equals(mo, "ts.getText(0, 100)", "'First textZweites TextfeldSome more " "static text here... abcdefgh'"); add_actions(mo, "ss = ts.getText(100, 110);"); check_equals(mo, "typeof(ss)", "'string'"); check_equals(mo, "ss", "'h'"); check_equals(mo, "ss.length", "1"); check_equals(mo, "ts.getText(0, 100, true)", "'First text\nZweites Textfeld\nSome more " "static text here... abcdefgh'"); check_equals(mo, "ts.getText(0, 14, true)", "'First text\nZwei'"); check_equals(mo, "ts.findText(0, '', false)", "-1"); check_equals(mo, "ts.findText(0, 'f', false)", "0"); check_equals(mo, "ts.findText(0, 'f', true)", "22"); check_equals(mo, "ts.findText(1, 'Rst', false)", "2"); check_equals(mo, "ts.findText(3, 'RSt', false)", "-1"); check_equals(mo, "ts.findText(100, 'h', false)", "-1"); check_equals(mo, "ts.findText(64, 'h', false)", "-1"); check_equals(mo, "ts.findText(-5, 'Zwei', true)", "-1"); check_equals(mo, "ts.findText(-5, 'gh', true)", "-1"); add_actions(mo, "ts.setSelected(5, 30, true);"); check_equals(mo, "ts.getSelectedText()", "' textZweites TextfeldSome'"); check_equals(mo, "ts.getSelectedText(true)", "' text\nZweites " "Textfeld\nSome'"); check_equals(mo, "ts.getSelectedText(false)", "' textZweites TextfeldSome'"); check_equals(mo, "ts.getSelected(0, 4)", "false"); check_equals(mo, "ts.getSelected(1, 9)", "true"); check_equals(mo, "ts.getSelected(-4, 10)", "true"); check_equals(mo, "ts.getSelected(-4, 6)", "true"); check_equals(mo, "ts.getSelected(28, 23)", "true"); check_equals(mo, "ts.getSelected(20, 20)", "true"); check_equals(mo, "ts.getSelected(20, 27)", "true"); check_equals(mo, "ts.getSelected(-3, -1)", "false"); check_equals(mo, "ts.getSelected(30, 31)", "false"); check_equals(mo, "ts.getSelected(0, 5)", "false"); check_equals(mo, "ts.getSelected(40, 45)", "false"); check_equals(mo, "ts.getSelected(31, 34)", "false"); check_equals(mo, "ts.getSelected(0)", "undefined"); check_equals(mo, "ts.getSelected(1)", "undefined"); check_equals(mo, "ts.getSelected(-4)", "undefined"); check_equals(mo, "ts.getSelected(-4)", "undefined"); check_equals(mo, "ts.getSelected(28)", "undefined"); check_equals(mo, "ts.getSelected(20)", "undefined"); // Selected text is stored in the textfield and reset when a new // snapshot is taken. add_actions(mo, "ts2 = new TextSnapshot(this);"); check_equals(mo, "ts.getSelectedText(false)", "''"); check_equals(mo, "ts2.getCount()", "64"); check_equals(mo, "ts2.getSelectedText()", "''"); add_actions(mo, "ts2 = this.getTextSnapshot();"); check_equals(mo, "ts2.getCount()", "64"); check_equals(mo, "ts2.getSelectedText()", "''"); add_actions(mo, "ts2.setSelected(3, 10, true);"); check_equals(mo, "ts2.getSelectedText(false).length", "7"); check_equals(mo, "ts.getSelectedText(false).length", "7"); add_actions(mo, "ts.setSelectedColor(0xffff00);"); add_actions(mo, "ts2.setSelectedColor(0x0000ff);"); check_equals(mo, "ts.getSelectedText(false)", "'st text'"); add_actions(mo, "ri = ts.getTextRunInfo(4, 10);"); check_equals(mo, "typeof(ri)", "'object'"); check(mo, "ri instanceof Array"); check_equals(mo, "ri.length", "7"); add_actions(mo, "el = ri[1];"); check_equals(mo, "typeof(el)", "'object'"); check(mo, "!el.hasOwnProperty('indexInRun')"); check_equals(mo, "el.indexInRun", "5"); check_equals(mo, "el.selected", "true"); check_equals(mo, "el.font", "'Bitstream Vera Sans'"); check_equals(mo, "el.color", "0"); check_equals(mo, "el.height", "12"); check_equals(mo, "el.matrix_a", "1"); check_equals(mo, "el.matrix_b", "0"); check_equals(mo, "el.matrix_c", "0"); check_equals(mo, "el.matrix_d", "1"); check_equals(mo, "el.matrix_tx", "25.95"); check_equals(mo, "el.matrix_ty", "200"); xcheck_equals(mo, "el.corner0x", "25.95"); xcheck_equals(mo, "el.corner0y", "202.8"); xcheck_equals(mo, "el.corner1x", "29.75"); xcheck_equals(mo, "el.corner1y", "202.8"); xcheck_equals(mo, "el.corner2x", "29.75"); xcheck_equals(mo, "el.corner2y", "188.85"); xcheck_equals(mo, "el.corner3x", "25.95"); xcheck_equals(mo, "el.corner3y", "188.85"); // Check properties individually check_equals(mo, "ri[2].height", "12"); check_equals(mo, "ri[3].height", "12"); check_equals(mo, "ri[4].height", "12"); check_equals(mo, "ri[5].height", "12"); check_equals(mo, "ri[6].height", "12"); check_equals(mo, "ri[2].selected", "true"); check_equals(mo, "ri[3].selected", "true"); check_equals(mo, "ri[4].selected", "true"); check_equals(mo, "ri[5].selected", "true"); check_equals(mo, "ri[6].selected", "false"); check_equals(mo, "ri[2].matrix_tx", "29.75"); check_equals(mo, "ri[2].matrix_ty", "200"); check_equals(mo, "ri[3].matrix_tx", "34.4"); check_equals(mo, "ri[3].matrix_ty", "200"); check_equals(mo, "ri[4].matrix_tx", "41.75"); check_equals(mo, "ri[4].matrix_ty", "200"); xcheck_equals(mo, "ri[2].corner0x", "29.75"); xcheck_equals(mo, "ri[2].corner0y", "202.8"); xcheck_equals(mo, "ri[3].corner0x", "34.4"); xcheck_equals(mo, "ri[3].corner0y", "202.8"); xcheck_equals(mo, "ri[4].corner0x", "41.75"); xcheck_equals(mo, "ri[4].corner0y", "202.8"); xcheck_equals(mo, "ri[2].corner2y", "188.85"); xcheck_equals(mo, "ri[3].corner2y", "188.85"); xcheck_equals(mo, "ri[4].corner2y", "188.85"); add_actions(mo, "ts.setSelected(0, 10, true);"); add_actions(mo, "ts.setSelected(15, 20, false);"); check_equals(mo, "ts2.getSelectedText().length", "10"); add_actions(mo, "ri2 = ts.getTextRunInfo(0, 100);"); check_equals(mo, "ri2[0].selected", "true"); check_equals(mo, "ri2[1].selected", "true"); check_equals(mo, "ri2[2].selected", "true"); check_equals(mo, "ri2[3].selected", "true"); check_equals(mo, "ri2[4].selected", "true"); check_equals(mo, "ri2[5].selected", "true"); check_equals(mo, "ri2[6].selected", "true"); check_equals(mo, "ri2[15].selected", "false"); check_equals(mo, "ri2[16].selected", "false"); check_equals(mo, "ri2[17].selected", "false"); check_equals(mo, "ri2[18].selected", "false"); xcheck_equals(mo, "ri2[50].corner2y", "388.85"); xcheck_equals(mo, "ri2[50].corner2x", "156.6"); xcheck_equals(mo, "ri2[51].corner2y", "388.85"); xcheck_equals(mo, "ri2[51].corner2x", "163.95"); check_equals(mo, "ri2[50].matrix_tx", "151.65"); check_equals(mo, "ri2[51].matrix_tx", "156.55"); add_actions(mo, "ts = this.getTextSnapshot();"); check_equals(mo, "typeof(ts)", "'object'"); add_actions(mo, "backup = TextSnapshot;"); add_actions(mo, "TextSnapshot = undefined;"); add_actions(mo, "t = new TextSnapshot();"); check_equals(mo, "typeof(t)", "'undefined'"); check_equals(mo, "typeof(TextSnapshot)", "'undefined'"); add_actions(mo, "ts = this.getTextSnapshot();"); xcheck_equals(mo, "typeof(ts)", "'undefined'"); add_actions(mo, "TextSnapshot = backup;"); add_actions(mo, "ts = this.getTextSnapshot();"); check_equals(mo, "typeof(ts)", "'object'"); add_actions(mo, "backup = TextSnapshot.prototype;"); add_actions(mo, "TextSnapshot.prototype = undefined;"); add_actions(mo, "ts = this.getTextSnapshot();"); check_equals(mo, "typeof(ts)", "'object'"); add_actions(mo, "TextSnapshot.prototype = backup;"); add_actions(mo, "ts = this.getTextSnapshot();"); check_equals(mo, "typeof(ts)", "'object'"); add_actions(mo, "totals(); stop();"); SWFMovie_nextFrame(mo); /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFSound so; const char* soundFile; const char* srcdir; int frame; if (argc > 1) { soundFile = argv[1]; } else { soundFile = "brokenchord.wav"; } if (argc > 2) { srcdir = argv[2]; } else { srcdir = "."; } /* setup ming and basic movie properties */ Ming_init(); Ming_useSWFVersion(OUTPUT_VERSION); mo = newSWFMovie(); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate(mo, 0.5); setupMovie(mo, srcdir); so = setupSounds(soundFile); /// Add as an export so we can attach it. SWFMovie_addExport(mo, (SWFBlock)so, "es"); SWFMovie_writeExports(mo); add_actions(mo, "c = 0;"); SWFMovie_nextFrame(mo); add_actions(mo, "note('You will hear several short tests with a succession of sounds. " "Each frame is two seconds long.\n" "The movie will describe what you should hear at the beginning of " "the frame.');"); frame = 0; pauseForNextTest(mo); runMultipleSoundsTest(mo, so, &frame); pauseForNextTest(mo); runNoMultipleSoundsTest(mo, so, &frame); pauseForNextTest(mo); runTrimmedSoundsTest(mo, so, &frame); pauseForNextTest(mo); runAttachedSoundsTest(mo, so, &frame); // TODO: test start(<sec_offset>) (+ with loop ?) endOfTests(mo); //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip mc1, mc2, dejagnuclip; SWFDisplayItem it1, it2; SWFShape sh1,sh2; SWFAction ac; int i; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { //fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); //return 1; } Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); mo = newSWFMovie(); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate(mo, 6); // Frame 1: Place dejagnu clip dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); add_actions(mo, "mc1Constructed=0; mc2Constructed=0; mc3Constructed=0; mc4Constructed=0;"); SWFMovie_nextFrame(mo); // // Frame 2: // Place red static movieClip1 DisplayObject at depth 3 (-16381) // sh1 = make_fill_square (300, 300, 60, 60, 255, 0, 0, 255, 0, 0); mc1 = newSWFMovieClip(); SWFMovieClip_add(mc1, (SWFBlock)sh1); SWFMovieClip_nextFrame(mc1); it1 = SWFMovie_add(mo, (SWFBlock)mc1); //add movieClip1 to the _root SWFDisplayItem_setDepth(it1, 3); SWFDisplayItem_setName(it1, "movieClip1"); //name movieClip1 SWFDisplayItem_addAction(it1, newSWFAction( "_root.note(this+' constructed');" "_root.mc1Constructed++;" ), SWFACTION_CONSTRUCT); SWFDisplayItem_addAction(it1, newSWFAction( "_root.note(this+' unloaded');" "_root.mc1Unloaded++;" ), SWFACTION_UNLOAD); check_equals(mo, "typeof(movieClip1)", "'movieclip'"); check_equals(mo, "_root.mc1Constructed", "1"); SWFMovie_nextFrame(mo); // Frame3: Remove red square SWFDisplayItem_remove(it1); // After compile, the RemoveObject2 tag is *after* the DoAction tag which // contains the following check. So it's not surprise that we can still access // "movieClip1" here when considering the gloabal ActionQueue model! If the // RemoveObject2 is *before* the DoAction, then typeof(movieClip1) will reurn 'undefined'. // So Gnash fails here because of action execution order! // TODO: add testcase for this(RemoveObject2 placed *before* DoAction within the same frame). check_equals(mo, "typeof(movieClip1)", "'movieclip'"); // kept alive for calling onUnload! check_equals(mo, "_root.mc1Constructed", "1"); SWFMovie_nextFrame(mo); // Frame4: nothing new SWFMovie_nextFrame(mo); // Frame5: check, gotoAndStop(4), check.. check_equals(mo, "typeof(movieClip1)", "'undefined'"); SWFMovie_add(mo, (SWFBlock)newSWFAction( "gotoAndStop(4);")); check_equals(mo, "typeof(movieClip1)", "'movieclip'"); // onConstruct is called twice check_equals(mo, "_root.mc1Constructed", "2"); // this is due to action execution order, it's called twice, but // the second time it's called *after* the end of *this* DOACTION block .. check_equals(mo, "_root.mc1Unloaded", "1"); SWFMovie_add(mo, (SWFBlock)newSWFAction( "totals(); stop();" )); SWFMovie_nextFrame(mo); //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char **argv) { SWFMovie mo; const char *jpeg_filename="red.jpg"; FILE *jpeg_fd; SWFJpegBitmap jpeg_bm; SWFShape jpeg_sh; SWFMovieClip jpeg_mc; /********************************************* * * Initialization * *********************************************/ if ( argc > 1 ) jpeg_filename=argv[1]; else { fprintf(stderr, "Usage: %s <jpegfile>\n", argv[0]); return 1; } puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(1.0); /* so we talk twips */ mo = newSWFMovie(); /***************************************************** * * Add the RED clip * *****************************************************/ puts("Adding red"); jpeg_fd = fopen(jpeg_filename, "r"); if ( ! jpeg_fd ) { perror(jpeg_filename); return 1; } jpeg_bm = newSWFJpegBitmap(jpeg_fd); jpeg_sh = newSWFShapeFromBitmap((SWFBitmap)jpeg_bm, SWFFILL_CLIPPED_BITMAP); jpeg_mc = newSWFMovieClip(); SWFMovieClip_add(jpeg_mc, (SWFBlock)jpeg_sh); SWFMovieClip_nextFrame(jpeg_mc); /* showFrame */ SWFMovie_add(mo, (SWFBlock)jpeg_mc); puts("Saving " OUTPUT_FILENAME ); SWFMovie_nextFrame(mo); /* showFrame */ SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip dejagnuclip, staticSquare; SWFShape shape; SWFDisplayItem it; if ( argc>1 ) mediadir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); mo = newSWFMovie(); SWFMovie_setDimension(mo, 800, 600); if (mo == NULL) return -1; addRedSquareExport(mo); add_actions(mo, "_root.onKeyDown = _root.onMouseUp = function() {" "play(); }; " "Key.addListener(_root);"); SWFMovie_setRate(mo, 12); dejagnuclip = get_dejagnu_clip( (SWFBlock)get_default_font(mediadir), 10, 10, 150, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); add_actions(mo, "BitmapData = flash.display.BitmapData;" "Rectangle = flash.geom.Rectangle;" "bmp = new BitmapData(150, 150, false);" "rect = new Rectangle(10, 10, 100, 100);" "bmp.fillRect(rect, 0x00ff00);" "mc = _root.createEmptyMovieClip('mc', getNextHighestDepth());" "d = mc.getNextHighestDepth();" "mc.attachBitmap(bmp, d);" "bmp2 = new BitmapData(20, 20, true);" "rect2 = new Rectangle (10, 10, 20, 20);" "bmp2.fillRect(rect2, 0xffffff00);" "d2 = mc.getNextHighestDepth();" "mc.attachBitmap(bmp2, d2);" "note('1. You should see a small yellow square in the top left " "corner of a larger green square. Click to proceed.');" "stop();" ); SWFMovie_nextFrame(mo); add_actions(mo, "rect = new Rectangle (90, 90, 120, 120);" "bmp.fillRect(rect, 0x0000FF);" "note('2. You should see a new blue square covering the " "bottom right corner of the large green square. Click" " to proceed.');" "stop();" ); SWFMovie_nextFrame(mo); add_actions(mo, "mc.createEmptyMovieClip('d', d);" "note('3. You should see just the small yellow square in the top " "left corner. Click to proceed.');"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); // Place a dynamic DisplayObject at depth 4 add_actions(mo, "mc.removeMovieClip();" "_root.attachMovie('redsquare', 'rs', 4);"); // Place a static DisplayObject at depth 3 staticSquare = newSWFMovieClip(); shape = make_fill_square (300, 0, 60, 60, 255, 0, 255, 255, 0, 255); SWFMovieClip_add(staticSquare, (SWFBlock)shape); SWFMovieClip_nextFrame(staticSquare); it = SWFMovie_add(mo, (SWFBlock)staticSquare); SWFDisplayItem_setDepth(it, 3); SWFDisplayItem_setName(it, "staticSquare"); add_actions(mo, "note('4. You should see a red square in the top left and a " "purple square in the top right. Click to proceed.');"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); add_actions(mo, "staticSquare.swapDepths(20);" "note('5. There should have been no change. Click to proceed.');" "stop();" ); SWFMovie_nextFrame(mo); add_actions(mo, "_root.attachBitmap(bmp, 2);" "note('6. You should see the green and blue squares " "under the red square. The purple square should still be there. " "Click to proceed.');" "stop();" ); SWFMovie_nextFrame(mo); add_actions(mo, "_root.attachBitmap(bmp, 3);" "note('7. There should have been no change. Click to proceed.');" "stop();" ); SWFMovie_nextFrame(mo); SWFDisplayItem_remove(it); add_actions(mo, "_root.attachBitmap(bmp2, 20);" "note('8. The purple square should have gone. The small yellow " "square should have replaced the top left corner of the red " "square. The green and blue squares should still be there. " "Click to proceed.');" "stop();" ); SWFMovie_nextFrame(mo); add_actions(mo, "bmp.dispose(); bmp2.dispose();" "note('9. You should see just the red square. Click to proceed.');" "stop();" ); SWFMovie_nextFrame(mo); add_actions(mo, "bmp = new BitmapData(100, 100, false, 0x0000ff);" "note('10. There should have been no change. Click to proceed.');" "stop();" ); SWFMovie_nextFrame(mo); add_actions(mo, "bmp3 = new BitmapData(100, 100, false);" "rect3 = new Rectangle(20, 20, 90, 90);" "bmp3.fillRect(rect3, 0x0000ff);" "ch = _root.createEmptyMovieClip('original', 40);" "original.attachBitmap(bmp3, getNextHighestDepth());" "ch._name = 'duplicate';" "newch = _root.createEmptyMovieClip('original', " "getNextHighestDepth());" "note('11. You should see a large blue square only. " "Click to proceed.');" "stop();" ); SWFMovie_nextFrame(mo); add_actions(mo, "original.removeMovieClip();" "note('12. There should have been no change. Click to proceed.');" "stop();" ); SWFMovie_nextFrame(mo); add_actions(mo, "duplicate.removeMovieClip();" "note('13. You should see the red square again. Click to " "proceed.');" "stop();" ); SWFMovie_nextFrame(mo); add_actions(mo, "_root.createEmptyMovieClip('mcLeft', getNextHighestDepth());" "mcLeft.duplicateMovieClip('mcMiddle', getNextHighestDepth()," " { _x: 300, _y: 0 } );" "mcLeft.attachBitmap(bmp3, getNextHighestDepth());" "mcMiddle.attachBitmap(bmp3, getNextHighestDepth());" "mcMiddle.duplicateMovieClip('mcRight', getNextHighestDepth()," " { _x: 600, _y: 0 } );" "note('14. You should see two blue squares. Click to proceed.');" "stop();" ); SWFMovie_nextFrame(mo); add_actions(mo, "bmp3.noise(293);" "note('15. You should see two noise patterns where the two " "squares were. Click to proceed.');" "stop();" ); add_actions(mo, "_root.onKeyDown = _root.onMouseUp = undefined;" "_root.eof = true;" // hook for test runner... "note(' - END OF TEST - thanks for flying with us ! ');" //"totals(6);" // no AS based tests... ); SWFMovie_nextFrame(mo); //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; SWFMovieClip dejagnuclip; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s\n", argv[0]); return 1; } puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); /* let's talk pixels */ mo = newSWFMovie(); SWFMovie_setRate(mo, 12); //SWFMovie_setDimension(mo, 6400, 4000); SWFMovie_setDimension(mo, 640, 400); /********************************************* * * Body * *********************************************/ dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 80, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); addRedSquareExport(mo); /* it seems we need a SHOWFRAME for this to be effective */ /* (maybe it's related to loop-back handling ?) */ SWFMovie_nextFrame(mo); /* A load of tests for depth */ add_actions(mo, "attachMovie('redsquare', 'depthtest', -16, initObj);" "d = depthtest.getDepth();"); check_equals(mo, "d", "-16"); add_actions(mo, "attachMovie('redsquare', 'depthtest', -16384, initObj);" "d = depthtest.getDepth();"); check_equals(mo, "d", "-16384"); /* Less than -16384 fails */ add_actions(mo, "attachMovie('redsquare', 'depthtest2', -20000, initObj);" "d = depthtest2.getDepth();"); check_equals(mo, "d", "undefined"); /* It really does */ add_actions(mo, "attachMovie('redsquare', 'depthtest2', -16385, initObj);" "d = depthtest2.getDepth();"); check_equals(mo, "d", "undefined"); /* Up to 2130690044 works */ add_actions(mo, "attachMovie('redsquare', 'depthtest2', 1147483648, initObj);" "d = depthtest2.getDepth();"); check_equals(mo, "d", "1147483648"); /* Up to 2130690044 works */ add_actions(mo, "attachMovie('redsquare', 'depthtest3', 2130690044, initObj);" "d = depthtest3.getDepth();"); check_equals(mo, "d", "2130690044"); /* 2130690045 doesn't work */ add_actions(mo, "attachMovie('redsquare', 'depthtest4', 2130690045, initObj);" "d = depthtest4.getDepth();"); check_equals(mo, "d", "undefined"); /* duplicateMovieClip */ /* Same limits... */ add_actions(mo, "createEmptyMovieClip('original', 10);"); add_actions(mo, "duplicateMovieClip('original', 'dup1', -1);" "d = dup1.getDepth();"); check_equals(mo, "d", "-1"); add_actions(mo, "original.duplicateMovieClip('odup1', -1);" "d = odup1.getDepth();"); check_equals(mo, "d", "-1"); add_actions(mo, "duplicateMovieClip('original', 'dup2', -16384);" "d = dup2.getDepth();"); check_equals(mo, "d", "-16384"); add_actions(mo, "original.duplicateMovieClip('odup2', -16384);" "d = odup2.getDepth();"); check_equals(mo, "d", "-16384"); add_actions(mo, "duplicateMovieClip('original', 'dup3', -16385);" "d = dup3.getDepth();"); check_equals(mo, "d", "undefined"); add_actions(mo, "original.duplicateMovieClip('odup3', -16385);" "d = odup3.getDepth();"); check_equals(mo, "d", "undefined"); add_actions(mo, "duplicateMovieClip('original', 'dup4', 2130690044);" "d = dup4.getDepth();"); check_equals(mo, "d", "2130690044"); add_actions(mo, "original.duplicateMovieClip('odup4', 2130690044);" "d = odup4.getDepth();"); check_equals(mo, "d", "2130690044"); add_actions(mo, "duplicateMovieClip('original', 'dup5', 2130690045);" "d = dup5.getDepth();"); check_equals(mo, "d", "undefined"); add_actions(mo, "original.duplicateMovieClip('odup5', 2130690045);" "d = odup5.getDepth();"); check_equals(mo, "d", "undefined"); add_actions(mo, "totals(); stop();"); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char **argv) { SWFMovie mo; SWFDisplayItem it; const char *srcdir="."; char fdbfont[256]; SWFMovieClip dejagnuclip; /********************************************* * * Initialization * *********************************************/ puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); mo = newSWFMovie(); SWFMovie_setDimension(mo, 800, 600); 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); /* Dejagnu equipment */ dejagnuclip = get_dejagnu_clip((SWFBlock)font, 10, 0, 0, 800, 600); it = SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFDisplayItem_setDepth(it, 200); SWFDisplayItem_move(it, 200, 0); 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); SWFMovie_nextFrame(mo); /***************************************************** * * 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;" //"_root.msg = _root.msg2 = _root.msg3 = 'Idle';" "stop();" "totals();" ); SWFMovie_nextFrame(mo); /* showFrame */ } /***************************************************** * * Save it... * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip mc; SWFSoundStream ss; FILE* sound_f; const char* sound_filename; SWFDisplayItem it; struct stat statbuf; if ( argc>1 ) { sound_filename=argv[1]; } else { sound_filename="sound1.mp3"; } sound_f = fopen(sound_filename, "r"); if ( ! sound_f ) { perror(sound_filename); return EXIT_FAILURE; } printf("Using sound file %s\n", sound_filename); if ( -1 == fstat(fileno(sound_f), &statbuf) ) { perror("fstat"); return EXIT_FAILURE; } if ( S_ISDIR(statbuf.st_mode) ) { fprintf(stderr, "%s is a directory, we need a file\n", sound_filename); return EXIT_FAILURE; } Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); mo = newSWFMovie(); SWFMovie_setDimension(mo, 100, 100); SWFMovie_setRate(mo, 1); ss = newSWFSoundStream(sound_f); mc = newSWFMovieClip(); SWFMovieClip_setSoundStream(mc, ss, 1); SWFMovieClip_nextFrame(mc); it = SWFMovie_add(mo, mc); SWFMovie_nextFrame(mo); SWFMovie_nextFrame(mo); SWFMovie_nextFrame(mo); SWFMovie_nextFrame(mo); SWFMovie_nextFrame(mo); SWFMovie_nextFrame(mo); SWFMovie_nextFrame(mo); SWFMovie_nextFrame(mo); //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return EXIT_SUCCESS; }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; SWFMovieClip dejagnuclip; char loadvars[1048]; char loademptyvars[1048]; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s\n", argv[0]); return 1; } sprintf(loadvars, "e = l.load('%s/vars2.txt');", srcdir); sprintf(loademptyvars, "e = l.load('%s/empty.txt');", srcdir); puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); /* let's talk pixels */ mo = newSWFMovie(); SWFMovie_setRate(mo, 12); SWFMovie_setDimension(mo, 640, 400); /********************************************* * * Body * *********************************************/ dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 80, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); add_actions(mo, "odatB = LoadVars.prototype.onData;" "olB = LoadVars.prototype.onLoad;" "odecB = LoadVars.prototype.decode;" "loadString = '';" "decodeString = '';" "dataString = '';" "callCount = 0;"); add_actions(mo, "ourLoad = function(arg) {" "loadString += callCount + ': onLoad called with ' + " "typeof(arg) + ' argument ' + arg;" "callCount++;" "play();" "};"); add_actions(mo, "ourData = function(arg) {" "trace('onData called');" "dataString += callCount + ': onData called with ' + " "typeof(arg) + ' argument ' + arg;" "callCount++;" "play();" "};"); add_actions(mo, "decodeCalled = 0;"); add_actions(mo, "ourDecode = function(arg) {" "decodeString += 'decode called with ' + typeof(arg)" "+ ' argument ' + arg;" "decodeCalled++;" "};"); /// The decode method is overwritten to see where it gets /// called from. We don't call it ourselves. Don't forget to /// overwrite it again when the LoadVars object is constructed again. /// What happens when load fails? // /// The onLoad method is called from the default implementation of /// onData. The "loaded" property is immediately set to false on a /// call to "load". SWFMovie_nextFrame(mo); /// onData add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onData = ourData;" "dataString = '';" "e = l.load('fail');"); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); /// Wait for data before proceeding to next frame. SWFMovie_nextFrame(mo); // Check result, restore state. check_equals(mo, "dataString", "'0: onData called with undefined argument undefined'"); check_equals(mo, "l.loaded", "false"); add_actions(mo, "l.onData = odatB;"); /// onLoad add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onLoad = ourLoad;" "loadString = '';" "e = l.load('fail');"); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); check_equals(mo, "loadString", "'1: onLoad called with boolean argument false'"); check_equals(mo, "l.loaded", "false"); add_actions(mo, "l.onLoad = olB;"); /// Both onData and onLoad add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onLoad = ourLoad;" "l.onData = ourData;" "loadString = '';" "dataString = '';" "e = l.load('fail');"); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); check_equals(mo, "loadString", "''"); check_equals(mo, "dataString", "'2: onData called with undefined argument undefined'"); check_equals(mo, "l.loaded", "false"); add_actions(mo, "l.onLoad = olB;" "l.onData = odatB;"); /// What happens when load succeeds? // /// Both methods are called separately. The "loaded" property is set /// to true only when "onData" isn't overwritten. // onData add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onData = ourData;" "dataString = '';"); add_actions(mo, loadvars); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); // check_equals is too braindead to do this without escaping. check_equals(mo, "escape(dataString)", "'3%3A%20onData%20called%20with%20string%20argument%20v2%5Fvar1%3D" "val1%26v2%5Fvar2%3Dval2%26%0A'"); check_equals(mo, "l.loaded", "false"); add_actions(mo, "l.onData = odatB;"); check_equals(mo, "decodeCalled", "0"); check_equals(mo, "decodeString", "''"); // onLoad add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onLoad = ourLoad;" "loadString = '';"); add_actions(mo, loadvars); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); check_equals(mo, "loadString", "'4: onLoad called with boolean argument true'"); add_actions(mo, "l.onLoad = olB;"); /// decode is called from onData (i.e. it's called when we overwrite /// onLoad, not onData). check_equals(mo, "decodeCalled", "1"); // check_equals is too braindead to do this without escaping. check_equals(mo, "escape(decodeString)", "'decode%20called%20with%20string%20argument%20v2%5Fvar1%3D" "val1%26v2%5Fvar2%3Dval2%26%0A'"); /// What happens on load of empty data? // /// Same as a load failure. // onData add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onData = ourData;" "dataString = '';"); add_actions(mo, loademptyvars); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); // check_equals is too braindead to do this without escaping. check_equals(mo, "escape(dataString)", "'5%3A%20onData%20called%20with%20undefined%20" "argument%20undefined'"); check_equals(mo, "l.loaded", "false"); add_actions(mo, "l.onData = odatB;"); // No more calls to decode. check_equals(mo, "decodeCalled", "1"); /// End of tests. add_actions(mo, "totals(29);"); add_actions(mo, "stop();"); /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }