Benjamin Otte
2007-Jun-15 13:51 UTC
[Swfdec] Branch 'as' - 4 commits - libswfdec/swfdec_movie.c libswfdec/swfdec_player.c libswfdec/swfdec_sprite.c test/trace
libswfdec/swfdec_movie.c | 5 +---- libswfdec/swfdec_player.c | 36 ++++++++++++++++++++++++++++++++++++ libswfdec/swfdec_sprite.c | 4 +++- test/trace/trace.c | 27 ++++++++++++++++++++++++--- 4 files changed, 64 insertions(+), 8 deletions(-) New commits: diff-tree 0b6e91a7cfe6614977c78321d3e19bf8e8035f9d (from d8b550fa5c0a47912941ab3e3bb0358fa3c481e9) Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 14 16:06:38 2007 +0200 remove all actions on destruction diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index c3faa96..a1c9be6 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -322,6 +322,7 @@ swfdec_movie_destroy (SwfdecMovie *movie * This is just a stop-gap measure to avoid dead movies in those queues */ g_queue_remove (player->init_queue, movie); g_queue_remove (player->construct_queue, movie); + swfdec_player_remove_all_actions (player, movie); if (klass->finish_movie) klass->finish_movie (movie); player->movies = g_list_remove (player->movies, movie); diff-tree d8b550fa5c0a47912941ab3e3bb0358fa3c481e9 (from 7126839b418cf8980ab2c67401e99010d11c496c) Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 14 16:06:25 2007 +0200 implement FSCommand:quit so tests can decide to quit whenever they like diff --git a/test/trace/trace.c b/test/trace/trace.c index 55f8e98..50bb5c6 100644 --- a/test/trace/trace.c +++ b/test/trace/trace.c @@ -11,16 +11,27 @@ trace_cb (SwfdecPlayer *player, const ch g_string_append_printf (string, "%s\n", message); } +static void +fscommand_cb (SwfdecPlayer *player, const char *command, const char *parameter, gpointer data) +{ + gboolean *quit = data; + + if (g_str_equal (command, "quit")) { + *quit = TRUE; + } +} + static gboolean run_test (const char *filename) { SwfdecLoader *loader; SwfdecPlayer *player; SwfdecBuffer *buffer; - guint advance; + guint time_left; char *str; GString *string; GError *error = NULL; + gboolean quit = FALSE; g_print ("Testing %s:\n", filename); loader = swfdec_loader_new_from_file (filename); @@ -31,6 +42,7 @@ run_test (const char *filename) string = g_string_new (""); player = swfdec_player_new (); g_signal_connect (player, "trace", G_CALLBACK (trace_cb), string); + g_signal_connect (player, "fscommand", G_CALLBACK (fscommand_cb), &quit); swfdec_player_set_loader (player, loader); if (!swfdec_player_is_initialized (player)) { g_print (" ERROR: player is not initialized\n"); @@ -38,8 +50,17 @@ run_test (const char *filename) return FALSE; } - advance = ceil (10000 / swfdec_player_get_rate (player)); - swfdec_player_advance (player, advance); + time_left = ceil (10000 / swfdec_player_get_rate (player)); + /* FIXME: Make the number of iterations configurable? */ + while (quit == FALSE) { + /* FIXME: will not do 10 iterations if there's other stuff loaded */ + guint advance = swfdec_player_get_next_event (player); + + if (advance > time_left) + break; + swfdec_player_advance (player, advance); + time_left -= advance; + } g_signal_handlers_disconnect_by_func (player, trace_cb, string); g_object_unref (player); diff-tree 7126839b418cf8980ab2c67401e99010d11c496c (from c877d7d30f470a1035ee89e8aa616c958f49df70) Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 14 15:55:20 2007 +0200 implement fscommnds. They're now handled by the SwfdecPlayer which emits an "fscommand" signal. diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index be3e877..c3faa96 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -1039,10 +1039,6 @@ swfdec_movie_load (SwfdecMovie *movie, c } /* FIXME: what do we do here? Is returning correct?*/ return; - } else if (g_str_has_prefix (target, "FSCommand:")) { - const char *command = url + strlen ("FSCommand:"); - SWFDEC_WARNING ("unhandled fscommand: %s %s", command, target); - return; } swfdec_player_launch (player, url, target); } diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index bcc3952..a5d302c 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -293,6 +293,7 @@ enum { AUDIO_ADDED, AUDIO_REMOVED, LAUNCH, + FSCOMMAND, LAST_SIGNAL }; @@ -887,6 +888,36 @@ swfdec_player_class_init (SwfdecPlayerCl G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, SWFDEC_TYPE_AUDIO); /** + * SwfdecPlayer::fscommand: + * @player: the #SwfdecPlayer affected + * @command: the command to execute + * @paramter: parameter to pass to the command. The parameter depends on the + * function. + * + * This signal is emited whenever a Flash script command (also known as + * fscommand) is encountered. This method is ued by the Flash file to + * communicate with the hosting environment. In web browsers it is used to + * call Javascript functions. Standalone Flash players understand a limited + * set of functions. They vary from player to player, but the most common are + * listed here: <itemizedlist> + * <listitem><para>"quit": quits the player.</para> + * <listitem><para>"fullscreen": A boolean setting (parameter is "true" or + * "false") that sets the player into fullscreen mode.</para> + * <listitem><para>"allowscale": A boolean setting that tells the player to + * not scale the Flash application.</para> + * <listitem><para>"showmenu": A boolean setting that tells the Flash player + * to not show its own entries in the right-click menu.</para> + * <listitem><para>"exec": Run an external executable. The parameter + * specifies the path.</para> + * <listitem><para>"trapallkeys": A boolean setting that tells the Flash + * player to pass all key events to the Flash application instead of using it + * for keyboard shortcuts or similar. + * </itemizedlist> + */ + signals[FSCOMMAND] = g_signal_new ("fscommand", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, swfdec_marshal_VOID__STRING_STRING, + G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING); + /** * SwfdecPlayer::launch: * @player: the #SwfdecPlayer affected * @url: URL to open @@ -1012,6 +1043,11 @@ swfdec_player_launch (SwfdecPlayer *play g_return_if_fail (url != NULL); g_return_if_fail (target != NULL); + if (g_str_has_prefix (url, "FSCommand:")) { + const char *command = url + strlen ("FSCommand:"); + g_signal_emit (player, signals[FSCOMMAND], 0, command, target); + return; + } g_signal_emit (player, signals[LAUNCH], 0, url, target); } diff-tree c877d7d30f470a1035ee89e8aa616c958f49df70 (from 228be8a9445d25e41ecd7a09102c85609ec81ad7) Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 14 15:02:32 2007 +0200 WE're not guaranteed to have a graphic diff --git a/libswfdec/swfdec_sprite.c b/libswfdec/swfdec_sprite.c index cd678a9..73eeea5 100644 --- a/libswfdec/swfdec_sprite.c +++ b/libswfdec/swfdec_sprite.c @@ -357,8 +357,10 @@ swfdec_spriteseg_do_place_object (Swfdec if (content->name) script_name = g_strdup (content->name); - else + else if (content->graphic) script_name = g_strdup_printf ("Sprite%u", SWFDEC_CHARACTER (content->graphic)->id); + else + script_name = g_strdup ("unknown"); while ((event_flags = swfdec_get_clipeventflags (s, bits)) != 0) { guint length = swfdec_bits_get_u32 (bits); SwfdecBits action_bits;
Seemingly Similar Threads
- Branch 'as' - 2 commits - libswfdec/swfdec_sprite.c test/trace
- 11 commits - libswfdec/swfdec_event.c libswfdec/swfdec_event.h libswfdec/swfdec_js_movie.c libswfdec/swfdec_movie.c libswfdec/swfdec_scriptable.c libswfdec/swfdec_scriptable.h libswfdec/swfdec_script.c libswfdec/swfdec_sprite.c libswfdec/swfdec_sprite.h
- 9 commits - libswfdec-gtk/swfdec_source.c libswfdec/swfdec_marshal.list libswfdec/swfdec_player.c libswfdec/swfdec_player.h libswfdec/swfdec_player_internal.h libswfdec/swfdec_sprite_movie.c libswfdec/swfdec_swf_instance.c test/dump.c test/Makefile.am
- 2 commits - doc/swfdec-sections.txt libswfdec/swfdec_color.h libswfdec/swfdec_player.c libswfdec/swfdec_player.h libswfdec/swfdec_player_internal.h libswfdec/swfdec_sprite.c libswfdec/swfdec_sprite.h libswfdec/swfdec_sprite_movie.c
- Branch 'as' - 4 commits - libswfdec/swfdec_as_frame.c libswfdec/swfdec_as_object.c libswfdec/swfdec_player.c