Benjamin Otte
2007-Jul-27 17:11 UTC
[Swfdec] 11 commits - libswfdec/swfdec_asbroadcaster.c libswfdec/swfdec_as_strings.c libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h libswfdec/swfdec_net_stream.c libswfdec/swfdec_player.c libswfdec/swfdec_sprite_movie_as.c test/trace
libswfdec/swfdec_as_strings.c | 7 + libswfdec/swfdec_asbroadcaster.c | 10 + libswfdec/swfdec_initialize.as | 1 libswfdec/swfdec_initialize.h | 8 - libswfdec/swfdec_net_stream.c | 10 + libswfdec/swfdec_player.c | 77 +++++------ libswfdec/swfdec_sprite_movie_as.c | 35 +++++ test/trace/Makefile.am | 45 ++++++ test/trace/asbroadcaster-broadcastMessage-retval-5.swf |binary test/trace/asbroadcaster-broadcastMessage-retval-5.swf.trace | 7 + test/trace/asbroadcaster-broadcastMessage-retval-6.swf |binary test/trace/asbroadcaster-broadcastMessage-retval-6.swf.trace | 7 + test/trace/asbroadcaster-broadcastMessage-retval-7.swf |binary test/trace/asbroadcaster-broadcastMessage-retval-7.swf.trace | 7 + test/trace/asbroadcaster-broadcastMessage-retval-8.swf |binary test/trace/asbroadcaster-broadcastMessage-retval-8.swf.trace | 7 + test/trace/asbroadcaster-broadcastMessage-retval.as | 19 ++ test/trace/asbroadcaster-listeners-5.swf |binary test/trace/asbroadcaster-listeners-5.swf.trace | 3 test/trace/asbroadcaster-listeners-6.swf |binary test/trace/asbroadcaster-listeners-6.swf.trace | 3 test/trace/asbroadcaster-listeners-7.swf |binary test/trace/asbroadcaster-listeners-7.swf.trace | 3 test/trace/asbroadcaster-listeners-8.swf |binary test/trace/asbroadcaster-listeners-8.swf.trace | 3 test/trace/asbroadcaster-listeners.as | 16 ++ test/trace/asbroadcaster-override-5.swf |binary test/trace/asbroadcaster-override-5.swf.trace | 5 test/trace/asbroadcaster-override-6.swf |binary test/trace/asbroadcaster-override-6.swf.trace | 9 + test/trace/asbroadcaster-override-7.swf |binary test/trace/asbroadcaster-override-7.swf.trace | 9 + test/trace/asbroadcaster-override-8.swf |binary test/trace/asbroadcaster-override-8.swf.trace | 9 + test/trace/asbroadcaster-override.as | 31 ++++ test/trace/asnative-create-5.swf |binary test/trace/asnative-create-5.swf.trace | 7 + test/trace/asnative-create-6.swf |binary test/trace/asnative-create-6.swf.trace | 7 + test/trace/asnative-create-7.swf |binary test/trace/asnative-create-7.swf.trace | 7 + test/trace/asnative-create-8.swf |binary test/trace/asnative-create-8.swf.trace | 7 + test/trace/asnative-create.as | 15 ++ test/trace/onresize-5.swf |binary test/trace/onresize-5.swf.trace | 1 test/trace/onresize-6.swf |binary test/trace/onresize-6.swf.trace | 1 test/trace/onresize-7.swf |binary test/trace/onresize-7.swf.trace | 1 test/trace/onresize-8.swf |binary test/trace/onresize-8.swf.trace | 1 test/trace/onresize.as | 20 ++ 53 files changed, 348 insertions(+), 50 deletions(-) New commits: diff-tree b3ab4943fa2579832e3cf9e346caab16feab4b46 (from adcd9b97486a5983702b8938a0b961ac9146b2f4) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 27 18:24:17 2007 +0200 only goto on the video if there is a video diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c index 7af040c..2f993c3 100644 --- a/libswfdec/swfdec_net_stream.c +++ b/libswfdec/swfdec_net_stream.c @@ -63,15 +63,19 @@ swfdec_net_stream_video_goto (SwfdecNetS SWFDEC_LOG ("goto %ums", timestamp); process_events = timestamp == stream->next_time; process_events_from = MIN (stream->next_time, stream->current_time + 1); - buffer = swfdec_flv_decoder_get_video (stream->flvdecoder, timestamp, - FALSE, &format, &stream->current_time, &stream->next_time); old = stream->surface; if (stream->surface) { cairo_surface_destroy (stream->surface); stream->surface = NULL; } + if (stream->flvdecoder->video) { + buffer = swfdec_flv_decoder_get_video (stream->flvdecoder, timestamp, + FALSE, &format, &stream->current_time, &stream->next_time); + } else { + buffer = NULL; + } if (buffer == NULL) { - SWFDEC_ERROR ("got no buffer?!"); + SWFDEC_ERROR ("got no buffer - no video available?"); } else { if (format != stream->format) { if (stream->decoder) diff-tree adcd9b97486a5983702b8938a0b961ac9146b2f4 (from 00f6b6ce1b01dd2f2eb2a0c1532c2b8f83741a36) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 27 13:11:06 2007 +0200 add test for when broadcaster._listeners is not an array diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index 2fefd62..7e5e2c4 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -77,6 +77,15 @@ EXTRA_DIST = \ asbroadcaster-broadcastMessage-retval-7.swf.trace \ asbroadcaster-broadcastMessage-retval-8.swf \ asbroadcaster-broadcastMessage-retval-8.swf.trace \ + asbroadcaster-listeners.as \ + asbroadcaster-listeners-5.swf \ + asbroadcaster-listeners-5.swf.trace \ + asbroadcaster-listeners-6.swf \ + asbroadcaster-listeners-6.swf.trace \ + asbroadcaster-listeners-7.swf \ + asbroadcaster-listeners-7.swf.trace \ + asbroadcaster-listeners-8.swf \ + asbroadcaster-listeners-8.swf.trace \ asbroadcaster-override.as \ asbroadcaster-override-5.swf \ asbroadcaster-override-5.swf.trace \ diff --git a/test/trace/asbroadcaster-listeners-5.swf b/test/trace/asbroadcaster-listeners-5.swf new file mode 100644 index 0000000..c9b0911 Binary files /dev/null and b/test/trace/asbroadcaster-listeners-5.swf differ diff --git a/test/trace/asbroadcaster-listeners-5.swf.trace b/test/trace/asbroadcaster-listeners-5.swf.trace new file mode 100644 index 0000000..71a845e --- /dev/null +++ b/test/trace/asbroadcaster-listeners-5.swf.trace @@ -0,0 +1,3 @@ +Check what happens if _listeners is not an array +[object Object] +undefined diff --git a/test/trace/asbroadcaster-listeners-6.swf b/test/trace/asbroadcaster-listeners-6.swf new file mode 100644 index 0000000..e263532 Binary files /dev/null and b/test/trace/asbroadcaster-listeners-6.swf differ diff --git a/test/trace/asbroadcaster-listeners-6.swf.trace b/test/trace/asbroadcaster-listeners-6.swf.trace new file mode 100644 index 0000000..71a845e --- /dev/null +++ b/test/trace/asbroadcaster-listeners-6.swf.trace @@ -0,0 +1,3 @@ +Check what happens if _listeners is not an array +[object Object] +undefined diff --git a/test/trace/asbroadcaster-listeners-7.swf b/test/trace/asbroadcaster-listeners-7.swf new file mode 100644 index 0000000..9962deb Binary files /dev/null and b/test/trace/asbroadcaster-listeners-7.swf differ diff --git a/test/trace/asbroadcaster-listeners-7.swf.trace b/test/trace/asbroadcaster-listeners-7.swf.trace new file mode 100644 index 0000000..71a845e --- /dev/null +++ b/test/trace/asbroadcaster-listeners-7.swf.trace @@ -0,0 +1,3 @@ +Check what happens if _listeners is not an array +[object Object] +undefined diff --git a/test/trace/asbroadcaster-listeners-8.swf b/test/trace/asbroadcaster-listeners-8.swf new file mode 100644 index 0000000..bb6859d Binary files /dev/null and b/test/trace/asbroadcaster-listeners-8.swf differ diff --git a/test/trace/asbroadcaster-listeners-8.swf.trace b/test/trace/asbroadcaster-listeners-8.swf.trace new file mode 100644 index 0000000..71a845e --- /dev/null +++ b/test/trace/asbroadcaster-listeners-8.swf.trace @@ -0,0 +1,3 @@ +Check what happens if _listeners is not an array +[object Object] +undefined diff --git a/test/trace/asbroadcaster-listeners.as b/test/trace/asbroadcaster-listeners.as new file mode 100644 index 0000000..0f99c6f --- /dev/null +++ b/test/trace/asbroadcaster-listeners.as @@ -0,0 +1,16 @@ +// makeswf -v 7 -s 200x150 -r 1 -o asbroadcaster-listeners.swf asbroadcaster-listeners.as + +trace ("Check what happens if _listeners is not an array"); + +emitter = new Object (); +AsBroadcaster.initialize (emitter); +o1 = new Object (); +o1.foo = function () { + trace ("o1"); +}; +emitter._listeners = new Object (); +emitter._listeners[10] = o1; +trace (emitter._listeners[10]); +trace (emitter.broadcastMessage ("foo")); + +loadMovie ("FSCommand:quit", ""); diff-tree 00f6b6ce1b01dd2f2eb2a0c1532c2b8f83741a36 (from e617568c097b604b54d0137431ee92ed0d427a0e) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 27 13:06:24 2007 +0200 add a test for return values of AsBroadcaster diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index 16035e3..2fefd62 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -68,6 +68,15 @@ EXTRA_DIST = \ array2-7.swf.trace \ array2-8.swf \ array2-8.swf.trace \ + asbroadcaster-broadcastMessage-retval.as \ + asbroadcaster-broadcastMessage-retval-5.swf \ + asbroadcaster-broadcastMessage-retval-5.swf.trace \ + asbroadcaster-broadcastMessage-retval-6.swf \ + asbroadcaster-broadcastMessage-retval-6.swf.trace \ + asbroadcaster-broadcastMessage-retval-7.swf \ + asbroadcaster-broadcastMessage-retval-7.swf.trace \ + asbroadcaster-broadcastMessage-retval-8.swf \ + asbroadcaster-broadcastMessage-retval-8.swf.trace \ asbroadcaster-override.as \ asbroadcaster-override-5.swf \ asbroadcaster-override-5.swf.trace \ diff --git a/test/trace/asbroadcaster-broadcastMessage-retval-5.swf b/test/trace/asbroadcaster-broadcastMessage-retval-5.swf new file mode 100644 index 0000000..2538c94 Binary files /dev/null and b/test/trace/asbroadcaster-broadcastMessage-retval-5.swf differ diff --git a/test/trace/asbroadcaster-broadcastMessage-retval-5.swf.trace b/test/trace/asbroadcaster-broadcastMessage-retval-5.swf.trace new file mode 100644 index 0000000..458241c --- /dev/null +++ b/test/trace/asbroadcaster-broadcastMessage-retval-5.swf.trace @@ -0,0 +1,7 @@ +check return value of broadcastMessage +undefined +undefined +undefined +undefined +undefined +undefined diff --git a/test/trace/asbroadcaster-broadcastMessage-retval-6.swf b/test/trace/asbroadcaster-broadcastMessage-retval-6.swf new file mode 100644 index 0000000..83b0e6c Binary files /dev/null and b/test/trace/asbroadcaster-broadcastMessage-retval-6.swf differ diff --git a/test/trace/asbroadcaster-broadcastMessage-retval-6.swf.trace b/test/trace/asbroadcaster-broadcastMessage-retval-6.swf.trace new file mode 100644 index 0000000..f61d1b4 --- /dev/null +++ b/test/trace/asbroadcaster-broadcastMessage-retval-6.swf.trace @@ -0,0 +1,7 @@ +check return value of broadcastMessage +undefined +true +undefined +undefined +undefined +undefined diff --git a/test/trace/asbroadcaster-broadcastMessage-retval-7.swf b/test/trace/asbroadcaster-broadcastMessage-retval-7.swf new file mode 100644 index 0000000..8605b63 Binary files /dev/null and b/test/trace/asbroadcaster-broadcastMessage-retval-7.swf differ diff --git a/test/trace/asbroadcaster-broadcastMessage-retval-7.swf.trace b/test/trace/asbroadcaster-broadcastMessage-retval-7.swf.trace new file mode 100644 index 0000000..f61d1b4 --- /dev/null +++ b/test/trace/asbroadcaster-broadcastMessage-retval-7.swf.trace @@ -0,0 +1,7 @@ +check return value of broadcastMessage +undefined +true +undefined +undefined +undefined +undefined diff --git a/test/trace/asbroadcaster-broadcastMessage-retval-8.swf b/test/trace/asbroadcaster-broadcastMessage-retval-8.swf new file mode 100644 index 0000000..893ecad Binary files /dev/null and b/test/trace/asbroadcaster-broadcastMessage-retval-8.swf differ diff --git a/test/trace/asbroadcaster-broadcastMessage-retval-8.swf.trace b/test/trace/asbroadcaster-broadcastMessage-retval-8.swf.trace new file mode 100644 index 0000000..f61d1b4 --- /dev/null +++ b/test/trace/asbroadcaster-broadcastMessage-retval-8.swf.trace @@ -0,0 +1,7 @@ +check return value of broadcastMessage +undefined +true +undefined +undefined +undefined +undefined diff --git a/test/trace/asbroadcaster-broadcastMessage-retval.as b/test/trace/asbroadcaster-broadcastMessage-retval.as new file mode 100644 index 0000000..d5fb899 --- /dev/null +++ b/test/trace/asbroadcaster-broadcastMessage-retval.as @@ -0,0 +1,19 @@ +// makeswf -v 7 -s 200x150 -r 1 -o asbroadcaster-broadcastMessage-retval.swf asbroadcaster-broadcastMessage-retval.as + +trace ("check return value of broadcastMessage"); + +emitter = new Object (); +AsBroadcaster.initialize (emitter); +trace (emitter.broadcastMessage ("foo")); +emitter._listeners[0] = "hi"; +trace (emitter.broadcastMessage ("foo")); +emitter._listeners.length = 0; +trace (emitter.broadcastMessage ("foo")); +emitter._listeners.length = -1; +trace (emitter.broadcastMessage ("foo")); +emitter._listeners.length = 1; +trace (emitter.broadcastMessage ("foo")); +emitter._listeners[1] = null; +trace (emitter.broadcastMessage ("foo")); + +loadMovie ("FSCommand:quit", ""); diff-tree e617568c097b604b54d0137431ee92ed0d427a0e (from d027fca4a18863373b5f1b8332fb29dbe5918a24) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 27 13:03:45 2007 +0200 rewrite broadcastMessage so it produces the correct return value diff --git a/libswfdec/swfdec_asbroadcaster.c b/libswfdec/swfdec_asbroadcaster.c index 7d1d9dc..1e69533 100644 --- a/libswfdec/swfdec_asbroadcaster.c +++ b/libswfdec/swfdec_asbroadcaster.c @@ -35,7 +35,7 @@ broadcastMessage (SwfdecAsContext *cx, S guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { SwfdecAsValue val; - SwfdecAsObject *listeners; + SwfdecAsObject *listeners, *o; gint i, length; const char *name; GSList *list = NULL, *walk; @@ -61,9 +61,13 @@ broadcastMessage (SwfdecAsContext *cx, S /* FIXME: solve this wth foreach, so it gets faster for weird cases */ for (i = 0; i < length; i++) { swfdec_as_object_get_variable (listeners, swfdec_as_double_to_string (cx, i), &val); - if (SWFDEC_AS_VALUE_IS_OBJECT (&val)) - list = g_slist_prepend (list, SWFDEC_AS_VALUE_GET_OBJECT (&val)); + o = swfdec_as_value_to_object (cx, &val); + if (o == NULL) + continue; + list = g_slist_prepend (list, o); } + if (list == NULL) + return; list = g_slist_reverse (list); for (walk = list; walk; walk = walk->next) { swfdec_as_object_call (walk->data, name, argc, argv, &val); diff-tree d027fca4a18863373b5f1b8332fb29dbe5918a24 (from 842140435a75459c869f9b432085db9be9963410) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 27 12:55:05 2007 +0200 add a test for overriding AsBroadcaster methods diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index c86810b..16035e3 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -68,6 +68,15 @@ EXTRA_DIST = \ array2-7.swf.trace \ array2-8.swf \ array2-8.swf.trace \ + asbroadcaster-override.as \ + asbroadcaster-override-5.swf \ + asbroadcaster-override-5.swf.trace \ + asbroadcaster-override-6.swf \ + asbroadcaster-override-6.swf.trace \ + asbroadcaster-override-7.swf \ + asbroadcaster-override-7.swf.trace \ + asbroadcaster-override-8.swf \ + asbroadcaster-override-8.swf.trace \ asnative-create.as \ asnative-create-5.swf \ asnative-create-5.swf.trace \ diff --git a/test/trace/asbroadcaster-override-5.swf b/test/trace/asbroadcaster-override-5.swf new file mode 100644 index 0000000..8d7c104 Binary files /dev/null and b/test/trace/asbroadcaster-override-5.swf differ diff --git a/test/trace/asbroadcaster-override-5.swf.trace b/test/trace/asbroadcaster-override-5.swf.trace new file mode 100644 index 0000000..1e661a4 --- /dev/null +++ b/test/trace/asbroadcaster-override-5.swf.trace @@ -0,0 +1,5 @@ +override AsBroadcaster methods +undefined +undefined +undefined +undefined diff --git a/test/trace/asbroadcaster-override-6.swf b/test/trace/asbroadcaster-override-6.swf new file mode 100644 index 0000000..1fb94d1 Binary files /dev/null and b/test/trace/asbroadcaster-override-6.swf differ diff --git a/test/trace/asbroadcaster-override-6.swf.trace b/test/trace/asbroadcaster-override-6.swf.trace new file mode 100644 index 0000000..a1a0daa --- /dev/null +++ b/test/trace/asbroadcaster-override-6.swf.trace @@ -0,0 +1,9 @@ +override AsBroadcaster methods +add +true +remove +[type Function] +22 +add +undefined +remove diff --git a/test/trace/asbroadcaster-override-7.swf b/test/trace/asbroadcaster-override-7.swf new file mode 100644 index 0000000..ff5bdee Binary files /dev/null and b/test/trace/asbroadcaster-override-7.swf differ diff --git a/test/trace/asbroadcaster-override-7.swf.trace b/test/trace/asbroadcaster-override-7.swf.trace new file mode 100644 index 0000000..a1a0daa --- /dev/null +++ b/test/trace/asbroadcaster-override-7.swf.trace @@ -0,0 +1,9 @@ +override AsBroadcaster methods +add +true +remove +[type Function] +22 +add +undefined +remove diff --git a/test/trace/asbroadcaster-override-8.swf b/test/trace/asbroadcaster-override-8.swf new file mode 100644 index 0000000..23fb2eb Binary files /dev/null and b/test/trace/asbroadcaster-override-8.swf differ diff --git a/test/trace/asbroadcaster-override-8.swf.trace b/test/trace/asbroadcaster-override-8.swf.trace new file mode 100644 index 0000000..a1a0daa --- /dev/null +++ b/test/trace/asbroadcaster-override-8.swf.trace @@ -0,0 +1,9 @@ +override AsBroadcaster methods +add +true +remove +[type Function] +22 +add +undefined +remove diff --git a/test/trace/asbroadcaster-override.as b/test/trace/asbroadcaster-override.as new file mode 100644 index 0000000..d406420 --- /dev/null +++ b/test/trace/asbroadcaster-override.as @@ -0,0 +1,31 @@ +// makeswf -v 7 -s 200x150 -r 1 -o asbroadcaster-override.swf asbroadcaster-override.as + +trace ("override AsBroadcaster methods"); + +AsBroadcaster.addListener = function () { + trace ("add"); +}; +AsBroadcaster.removeListener = function () { + trace ("remove"); +}; +AsBroadcaster.broadcastMessage = function () { + trace ("broadcast"); +}; +function test () { + emitter = new Object (); + AsBroadcaster.initialize (emitter); + emitter._listeners[0] = "hi"; + emitter.addListener (null); + trace (emitter.broadcastMessage ("foo")); + emitter.removeListener (null); +}; + +test (); + +trace (_global.ASnative); +_global.ASnative = 22; +trace (_global.ASnative); + +test (); + +loadMovie ("FSCommand:quit", ""); diff-tree 842140435a75459c869f9b432085db9be9963410 (from 1c9a301f4bc6a0f1d54e8af60e9929f8a06cdb53) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 27 12:50:59 2007 +0200 add a test for ASnative diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index e1510c9..c86810b 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -68,6 +68,15 @@ EXTRA_DIST = \ array2-7.swf.trace \ array2-8.swf \ array2-8.swf.trace \ + asnative-create.as \ + asnative-create-5.swf \ + asnative-create-5.swf.trace \ + asnative-create-6.swf \ + asnative-create-6.swf.trace \ + asnative-create-7.swf \ + asnative-create-7.swf.trace \ + asnative-create-8.swf \ + asnative-create-8.swf.trace \ bitwise.as \ bitwise-5.swf \ bitwise-5.swf.trace \ diff --git a/test/trace/asnative-create-5.swf b/test/trace/asnative-create-5.swf new file mode 100644 index 0000000..fda2a6d Binary files /dev/null and b/test/trace/asnative-create-5.swf differ diff --git a/test/trace/asnative-create-5.swf.trace b/test/trace/asnative-create-5.swf.trace new file mode 100644 index 0000000..bbc81b2 --- /dev/null +++ b/test/trace/asnative-create-5.swf.trace @@ -0,0 +1,7 @@ +Check ASnative creates a new functio object every time +[type Function] +42 +undefined +true +true +undefined diff --git a/test/trace/asnative-create-6.swf b/test/trace/asnative-create-6.swf new file mode 100644 index 0000000..441420c Binary files /dev/null and b/test/trace/asnative-create-6.swf differ diff --git a/test/trace/asnative-create-6.swf.trace b/test/trace/asnative-create-6.swf.trace new file mode 100644 index 0000000..b61c244 --- /dev/null +++ b/test/trace/asnative-create-6.swf.trace @@ -0,0 +1,7 @@ +Check ASnative creates a new functio object every time +[type Function] +42 +undefined +false +false +undefined diff --git a/test/trace/asnative-create-7.swf b/test/trace/asnative-create-7.swf new file mode 100644 index 0000000..e1cf91d Binary files /dev/null and b/test/trace/asnative-create-7.swf differ diff --git a/test/trace/asnative-create-7.swf.trace b/test/trace/asnative-create-7.swf.trace new file mode 100644 index 0000000..b61c244 --- /dev/null +++ b/test/trace/asnative-create-7.swf.trace @@ -0,0 +1,7 @@ +Check ASnative creates a new functio object every time +[type Function] +42 +undefined +false +false +undefined diff --git a/test/trace/asnative-create-8.swf b/test/trace/asnative-create-8.swf new file mode 100644 index 0000000..7c2e3ab Binary files /dev/null and b/test/trace/asnative-create-8.swf differ diff --git a/test/trace/asnative-create-8.swf.trace b/test/trace/asnative-create-8.swf.trace new file mode 100644 index 0000000..b61c244 --- /dev/null +++ b/test/trace/asnative-create-8.swf.trace @@ -0,0 +1,7 @@ +Check ASnative creates a new functio object every time +[type Function] +42 +undefined +false +false +undefined diff --git a/test/trace/asnative-create.as b/test/trace/asnative-create.as new file mode 100644 index 0000000..70c369f --- /dev/null +++ b/test/trace/asnative-create.as @@ -0,0 +1,15 @@ +// makeswf -v 7 -s 200x150 -r 1 -o asnative-create.swf asnative-create.as + +trace ("Check ASnative creates a new functio object every time"); + +foo = ASnative(5, 0); +foo.bla = 42; +trace (foo); +trace (foo.bla); +foo2 = ASnative(5, 0); +trace (foo2.bla); +trace (foo == foo2); +trace (foo == Mouse.show); +trace (Mouse.show.bla); + +loadMovie ("FSCommand:quit", ""); diff-tree 1c9a301f4bc6a0f1d54e8af60e9929f8a06cdb53 (from 4179c20f5d0f9f072ad00a63e4eeb58437f602d0) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 27 10:01:18 2007 +0200 implement MovieClip.getBounds() completely untested as I'm missing tests atm diff --git a/libswfdec/swfdec_as_strings.c b/libswfdec/swfdec_as_strings.c index d6e23b0..ab08338 100644 --- a/libswfdec/swfdec_as_strings.c +++ b/libswfdec/swfdec_as_strings.c @@ -244,6 +244,11 @@ const char swfdec_as_strings[] = SWFDEC_AS_CONSTANT_STRING ("noScale") SWFDEC_AS_CONSTANT_STRING ("Stage") SWFDEC_AS_CONSTANT_STRING ("onResize") + SWFDEC_AS_CONSTANT_STRING ("getBounds") + SWFDEC_AS_CONSTANT_STRING ("xMin") + SWFDEC_AS_CONSTANT_STRING ("xMax") + SWFDEC_AS_CONSTANT_STRING ("yMin") + SWFDEC_AS_CONSTANT_STRING ("yMax") /* add more here */ ; diff --git a/libswfdec/swfdec_sprite_movie_as.c b/libswfdec/swfdec_sprite_movie_as.c index 087cfda..bef0690 100644 --- a/libswfdec/swfdec_sprite_movie_as.c +++ b/libswfdec/swfdec_sprite_movie_as.c @@ -412,6 +412,39 @@ swfdec_sprite_movie_getDepth (SwfdecAsCo SWFDEC_AS_VALUE_SET_INT (rval, movie->depth); } +static void +swfdec_sprite_movie_getBounds (SwfdecAsContext *cx, SwfdecAsObject *obj, + guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) +{ + int x0, x1, y0, y1; + SwfdecAsValue val; + SwfdecAsObject *object; + SwfdecMovie *movie = SWFDEC_MOVIE (obj); + + object = swfdec_as_object_new_empty (cx); + if (object == NULL) + return; + + if (swfdec_rect_is_empty (&movie->extents)) { + x0 = x1 = y0 = y1 = 0x7FFFFFF; + } else { + x0 = movie->extents.x0; + y0 = movie->extents.y0; + x1 = movie->extents.x1; + y1 = movie->extents.y1; + } + SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (x0)); + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_xMin, &val); + SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (y0)); + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_yMin, &val); + SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (x1)); + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_xMax, &val); + SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (y1)); + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_yMax, &val); + + SWFDEC_AS_VALUE_SET_OBJECT (rval, object); +} + void swfdec_sprite_movie_init_context (SwfdecPlayer *player, guint version) { @@ -469,4 +502,6 @@ swfdec_sprite_movie_init_context (Swfdec swfdec_sprite_movie_stopDrag, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_swapDepths, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_swapDepths, 1); + swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getBounds, SWFDEC_TYPE_SPRITE_MOVIE, + swfdec_sprite_movie_getBounds, 0); }; diff-tree 4179c20f5d0f9f072ad00a63e4eeb58437f602d0 (from cddba05b6db9b8fc0e4935afeb505790f68a2179) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 27 09:59:36 2007 +0200 perform actions before unlocking Otherwise we'll get nasty assertion failures diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index cf0f01c..88c14e0 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -1756,6 +1756,7 @@ swfdec_player_set_size (SwfdecPlayer *pl swfdec_player_lock (player); swfdec_player_set_size_internal (player, width, height); + swfdec_player_perform_actions (player); swfdec_player_unlock (player); } diff-tree cddba05b6db9b8fc0e4935afeb505790f68a2179 (from 72b5819a508a106b81bde86f6dd7b16006166dc5) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 27 09:43:56 2007 +0200 add test for onResize event emission diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index e273dfe..e1510c9 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -477,6 +477,15 @@ EXTRA_DIST = \ onload-childparent.c \ onload-childparent.swf \ onload-childparent.swf.trace \ + onresize.as \ + onresize-5.swf \ + onresize-5.swf.trace \ + onresize-6.swf \ + onresize-6.swf.trace \ + onresize-7.swf \ + onresize-7.swf.trace \ + onresize-8.swf \ + onresize-8.swf.trace \ order.swf \ order.swf.trace \ parent-root.swf \ diff --git a/test/trace/onresize-5.swf b/test/trace/onresize-5.swf new file mode 100644 index 0000000..8b4cc54 Binary files /dev/null and b/test/trace/onresize-5.swf differ diff --git a/test/trace/onresize-5.swf.trace b/test/trace/onresize-5.swf.trace new file mode 100644 index 0000000..043a497 --- /dev/null +++ b/test/trace/onresize-5.swf.trace @@ -0,0 +1 @@ +Check no onResize happens when setting scaleMode diff --git a/test/trace/onresize-6.swf b/test/trace/onresize-6.swf new file mode 100644 index 0000000..8c6e850 Binary files /dev/null and b/test/trace/onresize-6.swf differ diff --git a/test/trace/onresize-6.swf.trace b/test/trace/onresize-6.swf.trace new file mode 100644 index 0000000..043a497 --- /dev/null +++ b/test/trace/onresize-6.swf.trace @@ -0,0 +1 @@ +Check no onResize happens when setting scaleMode diff --git a/test/trace/onresize-7.swf b/test/trace/onresize-7.swf new file mode 100644 index 0000000..91776f4 Binary files /dev/null and b/test/trace/onresize-7.swf differ diff --git a/test/trace/onresize-7.swf.trace b/test/trace/onresize-7.swf.trace new file mode 100644 index 0000000..043a497 --- /dev/null +++ b/test/trace/onresize-7.swf.trace @@ -0,0 +1 @@ +Check no onResize happens when setting scaleMode diff --git a/test/trace/onresize-8.swf b/test/trace/onresize-8.swf new file mode 100644 index 0000000..d7d4155 Binary files /dev/null and b/test/trace/onresize-8.swf differ diff --git a/test/trace/onresize-8.swf.trace b/test/trace/onresize-8.swf.trace new file mode 100644 index 0000000..043a497 --- /dev/null +++ b/test/trace/onresize-8.swf.trace @@ -0,0 +1 @@ +Check no onResize happens when setting scaleMode diff --git a/test/trace/onresize.as b/test/trace/onresize.as new file mode 100644 index 0000000..d1295a3 --- /dev/null +++ b/test/trace/onresize.as @@ -0,0 +1,20 @@ +// makeswf -v 7 -s 200x150 -r 1 -o onresize.swf onresize.as + +trace ("Check no onResize happens when setting scaleMode"); + +o = { }; +o.onResize = function () { + trace (this); + trace (this.foo); + trace (foo); +}; +Stage.addListener (o); +foo = 42; + +Stage.scaleMode = "noScale"; +Stage.scaleMode = "noBorder"; +Stage.scaleMode = "noScale"; +Stage.width = 20; + +loadMovie ("FSCommand:quit", ""); + diff-tree 72b5819a508a106b81bde86f6dd7b16006166dc5 (from 46d21b4eb753a088a89f1b0059b2ee2870968fc0) Author: Benjamin Otte <otte at gnome.org> Date: Thu Jul 26 23:54:45 2007 +0200 implement emitting the onResize signal diff --git a/libswfdec/swfdec_as_strings.c b/libswfdec/swfdec_as_strings.c index a97471d..d6e23b0 100644 --- a/libswfdec/swfdec_as_strings.c +++ b/libswfdec/swfdec_as_strings.c @@ -242,6 +242,8 @@ const char swfdec_as_strings[] = SWFDEC_AS_CONSTANT_STRING ("noBorder") SWFDEC_AS_CONSTANT_STRING ("exactFit") SWFDEC_AS_CONSTANT_STRING ("noScale") + SWFDEC_AS_CONSTANT_STRING ("Stage") + SWFDEC_AS_CONSTANT_STRING ("onResize") /* add more here */ ; diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index 398db18..cf0f01c 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -586,22 +586,19 @@ swfdec_player_dispose (GObject *object) } static void -swfdec_player_dispatch_properties_changed (GObject *object, guint n_pspecs, - GParamSpec **pspecs) +swfdec_player_broadcast (SwfdecPlayer *player, const char *object_name, const char *signal) { - guint i; + SwfdecAsValue val; + SwfdecAsObject *obj; - G_OBJECT_CLASS (swfdec_player_parent_class)->dispatch_properties_changed ( - object, n_pspecs, pspecs); - - /* check if we need to emit any stage signals */ - for (i = 0; i < n_pspecs; i++) { - if (g_str_equal (pspecs[i]->name, "width") || - g_str_equal (pspecs[i]->name, "height")) { - SWFDEC_FIXME ("width or height got changed, emit a Stage signal!"); - break; - } - } + SWFDEC_DEBUG ("broadcasting message %s.%s", object_name, signal); + obj = SWFDEC_AS_CONTEXT (player)->global; + swfdec_as_object_get_variable (obj, object_name, &val); + if (!SWFDEC_AS_VALUE_IS_OBJECT (&val)) + return; + obj = SWFDEC_AS_VALUE_GET_OBJECT (&val); + SWFDEC_AS_VALUE_SET_STRING (&val, signal); + swfdec_as_object_call (obj, SWFDEC_AS_STR_broadcastMessage, 1, &val, NULL); } static void @@ -733,21 +730,6 @@ swfdec_player_update_mouse_position (Swf } static void -swfdec_player_broadcast (SwfdecPlayer *player, const char *object_name, const char *signal) -{ - SwfdecAsValue val; - SwfdecAsObject *obj; - - obj = SWFDEC_AS_CONTEXT (player)->global; - swfdec_as_object_get_variable (obj, object_name, &val); - if (!SWFDEC_AS_VALUE_IS_OBJECT (&val)) - return; - obj = SWFDEC_AS_VALUE_GET_OBJECT (&val); - SWFDEC_AS_VALUE_SET_STRING (&val, signal); - swfdec_as_object_call (obj, SWFDEC_AS_STR_broadcastMessage, 1, &val, NULL); -} - -static void swfdec_player_do_mouse_move (SwfdecPlayer *player) { GList *walk; @@ -1024,7 +1006,6 @@ swfdec_player_class_init (SwfdecPlayerCl object_class->get_property = swfdec_player_get_property; object_class->set_property = swfdec_player_set_property; object_class->dispose = swfdec_player_dispose; - object_class->dispatch_properties_changed = swfdec_player_dispatch_properties_changed; g_object_class_install_property (object_class, PROP_INITIALIZED, g_param_spec_boolean ("initialized", "initialized", "TRUE when the player has initialized its basic values", @@ -1733,6 +1714,27 @@ swfdec_player_get_size (SwfdecPlayer *pl *height = player->stage_height; } +static void +swfdec_player_set_size_internal (SwfdecPlayer *player, int width, int height) +{ + gboolean changed = FALSE; + + if (player->stage_width != width) { + player->stage_width = width; + g_object_notify (G_OBJECT (player), "width"); + changed = TRUE; + } + if (player->stage_height != height) { + player->stage_height = height; + g_object_notify (G_OBJECT (player), "height"); + changed = TRUE; + } + swfdec_player_update_scale (player); + if (changed && player->scale_mode == SWFDEC_SCALE_NONE) { + swfdec_player_broadcast (player, SWFDEC_AS_STR_Stage, SWFDEC_AS_STR_onResize); + } +} + /** * swfdec_player_set_size: * @player: a #SwfdecPlayer @@ -1752,17 +1754,9 @@ swfdec_player_set_size (SwfdecPlayer *pl g_return_if_fail (width >= -1); g_return_if_fail (height >= -1); - g_object_freeze_notify (G_OBJECT (player)); - if (player->stage_width != width) { - player->stage_width = width; - g_object_notify (G_OBJECT (player), "width"); - } - if (player->stage_height != height) { - player->stage_height = height; - g_object_notify (G_OBJECT (player), "height"); - } - g_object_thaw_notify (G_OBJECT (player)); - swfdec_player_update_scale (player); + swfdec_player_lock (player); + swfdec_player_set_size_internal (player, width, height); + swfdec_player_unlock (player); } /** diff-tree 46d21b4eb753a088a89f1b0059b2ee2870968fc0 (from 53d6aae6f5cf72dc934950928315ca48897365d5) Author: Benjamin Otte <otte at gnome.org> Date: Thu Jul 26 23:12:55 2007 +0200 Stage is a broadcaster diff --git a/libswfdec/swfdec_initialize.as b/libswfdec/swfdec_initialize.as index f81e1e6..624cfdc 100644 --- a/libswfdec/swfdec_initialize.as +++ b/libswfdec/swfdec_initialize.as @@ -65,5 +65,6 @@ AsBroadcaster.initialize (Mouse); /*** STAGE ***/ Stage = new Object (); +AsBroadcaster.initialize (Stage); ASSetNativeAccessor (Stage, 666, "scaleMode,align,width,height", 1); diff --git a/libswfdec/swfdec_initialize.h b/libswfdec/swfdec_initialize.h index 3e15dd3..993de28 100644 --- a/libswfdec/swfdec_initialize.h +++ b/libswfdec/swfdec_initialize.h @@ -56,8 +56,10 @@ const unsigned char swfdec_initialize[] 0x13, 0x00, 0x08, 0x16, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x02, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x52, 0x17, 0x96, - 0x09, 0x00, 0x08, 0x17, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x40, 0x1D, 0x96, 0x0E, 0x00, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x18, 0x07, 0x9A, 0x02, 0x00, 0x00, 0x08, 0x17, 0x1C, 0x96, - 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x00 + 0x09, 0x00, 0x08, 0x17, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x40, 0x1D, 0x96, 0x02, 0x00, + 0x08, 0x17, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x02, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x0E, 0x52, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x18, 0x07, + 0x9A, 0x02, 0x00, 0x00, 0x08, 0x17, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x3D, 0x17, 0x00 };
Reasonably Related Threads
- Changes to 'refs/tags/0.5.1'
- 17 commits - doc/swfdec-sections.txt libswfdec/compiler.c libswfdec/.gitignore libswfdec/Makefile.am libswfdec/swfdec_asbroadcaster.c libswfdec/swfdec_as_context.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_as_strings.c
- 12 commits - libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_strings.c libswfdec/swfdec_loader.c libswfdec/swfdec_loader_internal.h libswfdec/swfdec_load_object_as.c libswfdec/swfdec_load_object.c libswfdec/swfdec_load_object.h
- 8 commits - libswfdec/Makefile.am libswfdec/swfdec_as_string.c libswfdec/swfdec_as_string.h libswfdec/swfdec_as_strings.c libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h libswfdec/swfdec_load_object.c libswfdec/swfdec_loadvars_as.c test/trace
- 4 commits - libswfdec/swfdec_asbroadcaster.c libswfdec/swfdec_as_frame.c libswfdec/swfdec_as_frame_internal.h libswfdec/swfdec_as_function.c libswfdec/swfdec_as_interpret.c test/trace