Benjamin Otte
2007-Aug-29 21:57 UTC
[Swfdec] 15 commits - libswfdec/swfdec_as_strings.c libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h libswfdec/swfdec_movie.c libswfdec/swfdec_movie.h libswfdec/swfdec_sprite.c libswfdec/swfdec_sprite_movie.c libswfdec/swfdec_system_as.c libswfdec/swfdec_system.c libswfdec/swfdec_system.h libswfdec/swfdec_tag.c player/swfdebug.c player/swfdec_debug_widget.c player/swfdec_debug_widget.h test/trace vivified/ui
libswfdec/swfdec_as_strings.c | 1 libswfdec/swfdec_initialize.as | 1 libswfdec/swfdec_initialize.h | 210 +++++------ libswfdec/swfdec_movie.c | 71 +++ libswfdec/swfdec_movie.h | 4 libswfdec/swfdec_sprite.c | 1 libswfdec/swfdec_sprite_movie.c | 22 - libswfdec/swfdec_system.c | 17 libswfdec/swfdec_system.h | 1 libswfdec/swfdec_system_as.c | 10 libswfdec/swfdec_tag.c | 14 player/swfdebug.c | 426 ----------------------- player/swfdec_debug_widget.c | 155 -------- player/swfdec_debug_widget.h | 55 -- test/trace/Makefile.am | 9 test/trace/system-capabilities-query-5.swf |binary test/trace/system-capabilities-query-5.swf.trace | 33 + test/trace/system-capabilities-query-6.swf |binary test/trace/system-capabilities-query-6.swf.trace | 33 + test/trace/system-capabilities-query-7.swf |binary test/trace/system-capabilities-query-7.swf.trace | 33 + test/trace/system-capabilities-query-8.swf |binary test/trace/system-capabilities-query-8.swf.trace | 33 + test/trace/system-capabilities-query.as | 13 vivified/ui/Makefile.am | 2 vivified/ui/vivi_player.c | 28 - vivified/ui/vivi_player.xml | 3 vivified/ui/vivi_widget.c | 239 ++++++++++++ vivified/ui/vivi_widget.h | 62 +++ 29 files changed, 677 insertions(+), 799 deletions(-) New commits: diff-tree da2933ac249d01058d9cf2e5b24a79e00e756fa3 (from 2c1b79c0da63c520d630d0417af98bc4ef89e180) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 29 13:43:03 2007 +0200 no need to throw errors for blend modes anymore diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c index 56878c9..15d005b 100644 --- a/libswfdec/swfdec_sprite_movie.c +++ b/libswfdec/swfdec_sprite_movie.c @@ -184,7 +184,7 @@ swfdec_sprite_movie_perform_place (Swfde if (has_blend_mode) { blend_mode = swfdec_bits_get_u8 (bits); - SWFDEC_ERROR (" blend mode = %u", blend_mode); + SWFDEC_LOG (" blend mode = %u", blend_mode); } else { blend_mode = 0; } diff-tree 2c1b79c0da63c520d630d0417af98bc4ef89e180 (from 61b11b6d0a82bcca7b4cca3c0b3b82e4f6f7f6c5) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 29 13:36:31 2007 +0200 alpha blend mode is supported by cairo, too diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index 60b34b0..c9755ea 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -702,6 +702,8 @@ swfdec_movie_get_operator_for_blend_mode return CAIRO_OPERATOR_OVER; case 8: return CAIRO_OPERATOR_ADD; + case 11: + return CAIRO_OPERATOR_DEST_IN; case 12: return CAIRO_OPERATOR_DEST_OUT; case 3: @@ -711,7 +713,6 @@ swfdec_movie_get_operator_for_blend_mode case 7: case 9: case 10: - case 11: case 13: case 14: SWFDEC_WARNING ("blend mode %u unimplemented in cairo", blend_mode); diff-tree 61b11b6d0a82bcca7b4cca3c0b3b82e4f6f7f6c5 (from 1b153f39f46ef7ad302dbb7782034fa358eb4939) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 29 13:35:03 2007 +0200 use the right operator for erase diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index 6b9ce4b..60b34b0 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -703,7 +703,7 @@ swfdec_movie_get_operator_for_blend_mode case 8: return CAIRO_OPERATOR_ADD; case 12: - return CAIRO_OPERATOR_CLEAR; + return CAIRO_OPERATOR_DEST_OUT; case 3: case 4: case 5: diff-tree 1b153f39f46ef7ad302dbb7782034fa358eb4939 (from ea0162e4d86d6eae98bf575897ab3bb9a5bb482d) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 29 13:31:59 2007 +0200 handle blend modes when drawing Well, cairo only supports two of those, but still :) diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index f6b8f55..6b9ce4b 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -685,6 +685,43 @@ swfdec_movie_get_movie_at (SwfdecMovie * return NULL; } +static gboolean +swfdec_movie_needs_group (SwfdecMovie *movie) +{ + return (movie->blend_mode > 1); +} + +static cairo_operator_t +swfdec_movie_get_operator_for_blend_mode (guint blend_mode) +{ + switch (blend_mode) { + case 0: + case 1: + SWFDEC_ERROR ("shouldn't need to get operator without blend mode?!"); + case 2: + return CAIRO_OPERATOR_OVER; + case 8: + return CAIRO_OPERATOR_ADD; + case 12: + return CAIRO_OPERATOR_CLEAR; + case 3: + case 4: + case 5: + case 6: + case 7: + case 9: + case 10: + case 11: + case 13: + case 14: + SWFDEC_WARNING ("blend mode %u unimplemented in cairo", blend_mode); + return CAIRO_OPERATOR_OVER; + default: + SWFDEC_WARNING ("invalid blend mode %u", blend_mode); + return CAIRO_OPERATOR_OVER; + } +} + void swfdec_movie_render (SwfdecMovie *movie, cairo_t *cr, const SwfdecColorTransform *color_transform, const SwfdecRect *inval, gboolean fill) @@ -694,6 +731,7 @@ swfdec_movie_render (SwfdecMovie *movie, int clip_depth = 0; SwfdecColorTransform trans; SwfdecRect rect; + gboolean group; g_return_if_fail (SWFDEC_IS_MOVIE (movie)); g_return_if_fail (cr != NULL); @@ -717,6 +755,11 @@ swfdec_movie_render (SwfdecMovie *movie, } cairo_save (cr); + group = swfdec_movie_needs_group (movie); + if (group) { + SWFDEC_DEBUG ("pushing group for blend mode %u", movie->blend_mode); + cairo_push_group (cr); + } SWFDEC_LOG ("transforming movie, transform: %g %g %g %g %g %g", movie->matrix.xx, movie->matrix.yy, @@ -789,6 +832,14 @@ swfdec_movie_render (SwfdecMovie *movie, if (cairo_status (cr) != CAIRO_STATUS_SUCCESS) { g_warning ("error rendering with cairo: %s", cairo_status_to_string (cairo_status (cr))); } + if (group) { + cairo_pattern_t *pattern; + + pattern = cairo_pop_group (cr); + cairo_set_source (cr, pattern); + cairo_set_operator (cr, swfdec_movie_get_operator_for_blend_mode (movie->blend_mode)); + cairo_paint (cr); + } cairo_restore (cr); } diff-tree ea0162e4d86d6eae98bf575897ab3bb9a5bb482d (from ba620e7dd08210039197fcb89bb2265856ada6a4) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 29 13:09:52 2007 +0200 parse blend modes and put them in a proper variable diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index 02904d0..f6b8f55 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -1098,7 +1098,8 @@ swfdec_movie_new (SwfdecPlayer *player, */ void swfdec_movie_set_static_properties (SwfdecMovie *movie, const cairo_matrix_t *transform, - const SwfdecColorTransform *ctrans, int ratio, int clip_depth, SwfdecEventList *events) + const SwfdecColorTransform *ctrans, int ratio, int clip_depth, guint blend_mode, + SwfdecEventList *events) { g_return_if_fail (SWFDEC_IS_MOVIE (movie)); g_return_if_fail (clip_depth >= -16384 || clip_depth <= 0); @@ -1130,6 +1131,10 @@ swfdec_movie_set_static_properties (Swfd /* FIXME: is this correct? */ swfdec_movie_invalidate (movie->parent ? movie->parent : movie); } + if (blend_mode != movie->blend_mode) { + movie->blend_mode = blend_mode; + swfdec_movie_invalidate (movie); + } if (events) { if (movie->events) swfdec_event_list_free (movie->events); @@ -1172,7 +1177,8 @@ swfdec_movie_duplicate (SwfdecMovie *mov if (copy == NULL) return NULL; swfdec_movie_set_static_properties (copy, &movie->original_transform, - &movie->original_ctrans, movie->original_ratio, movie->clip_depth, movie->events); + &movie->original_ctrans, movie->original_ratio, movie->clip_depth, + movie->blend_mode, movie->events); return copy; } @@ -1193,7 +1199,7 @@ swfdec_movie_new_for_content (SwfdecMovi swfdec_movie_set_static_properties (movie, content->has_transform ? &content->transform : NULL, content->has_color_transform ? &content->color_transform : NULL, - content->ratio, content->clip_depth, content->events); + content->ratio, content->clip_depth, content->blend_mode, content->events); if (SWFDEC_IS_SPRITE_MOVIE (movie)) { g_queue_push_tail (player->init_queue, movie); g_queue_push_tail (player->construct_queue, movie); diff --git a/libswfdec/swfdec_movie.h b/libswfdec/swfdec_movie.h index 41e99fa..d383c98 100644 --- a/libswfdec/swfdec_movie.h +++ b/libswfdec/swfdec_movie.h @@ -58,7 +58,7 @@ struct _SwfdecContent { gboolean has_color_transform : 1; char * name; SwfdecEventList * events; - cairo_operator_t operator; /* operator to use when painting (aka blend mode) */ + guint blend_mode; /* operator to use when painting (aka blend mode) */ /* only used by buttons */ SwfdecContent * sequence; @@ -114,6 +114,7 @@ struct _SwfdecMovie { cairo_matrix_t matrix; /* cairo matrix computed from above and content->transform */ cairo_matrix_t inverse_matrix; /* the inverse of the cairo matrix */ SwfdecColorTransform color_transform; /* scripted color transformation */ + guint blend_mode; /* blend mode to use - see to-cairo conversion code for what they mean */ /* iteration state */ gboolean visible; /* whether we currently can be seen or iterate */ @@ -181,6 +182,7 @@ void swfdec_movie_set_static_properties const SwfdecColorTransform *ctrans, int ratio, int clip_depth, + guint blend_mode, SwfdecEventList * events); void swfdec_movie_invalidate (SwfdecMovie * movie); void swfdec_movie_queue_update (SwfdecMovie * movie, diff --git a/libswfdec/swfdec_sprite.c b/libswfdec/swfdec_sprite.c index c525fc1..d5f2f11 100644 --- a/libswfdec/swfdec_sprite.c +++ b/libswfdec/swfdec_sprite.c @@ -164,7 +164,6 @@ swfdec_content_new (int depth) cairo_matrix_init_identity (&content->transform); swfdec_color_transform_init_identity (&content->color_transform); content->depth = depth; - content->operator = CAIRO_OPERATOR_OVER; return content; } diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c index 5bce6fa..56878c9 100644 --- a/libswfdec/swfdec_sprite_movie.c +++ b/libswfdec/swfdec_sprite_movie.c @@ -58,12 +58,6 @@ swfdec_sprite_movie_run_script (gpointer swfdec_as_object_run (movie, data); } -static cairo_operator_t -swfdec_sprite_convert_operator (guint operator) -{ - return CAIRO_OPERATOR_OVER; -} - static int swfdec_get_clipeventflags (SwfdecMovie *movie, SwfdecBits * bits) { @@ -98,6 +92,7 @@ swfdec_sprite_movie_perform_place (Swfde guint ratio, id, version; SwfdecEventList *events; const char *name; + guint blend_mode; SwfdecGraphic *graphic; version = SWFDEC_SWF_DECODER (mov->swf->decoder)->version; @@ -188,10 +183,10 @@ swfdec_sprite_movie_perform_place (Swfde swfdec_filters_parse (bits); if (has_blend_mode) { - /* FIXME: implement */ - guint operator = swfdec_bits_get_u8 (bits); - swfdec_sprite_convert_operator (operator); - SWFDEC_ERROR (" operator = %u", operator); + blend_mode = swfdec_bits_get_u8 (bits); + SWFDEC_ERROR (" blend mode = %u", blend_mode); + } else { + blend_mode = 0; } if (has_clip_actions) { @@ -251,7 +246,7 @@ swfdec_sprite_movie_perform_place (Swfde klass->replace (cur, graphic); } swfdec_movie_set_static_properties (cur, has_transform ? &transform : NULL, - has_ctrans ? &ctrans : NULL, ratio, clip_depth, events); + has_ctrans ? &ctrans : NULL, ratio, clip_depth, blend_mode, events); } else { if (cur != NULL && version > 5) { SWFDEC_INFO ("depth %d is already occupied by movie %s, not placing", depth, cur->name); @@ -265,7 +260,7 @@ swfdec_sprite_movie_perform_place (Swfde } cur = swfdec_movie_new (player, depth, mov, graphic, name); swfdec_movie_set_static_properties (cur, has_transform ? &transform : NULL, - has_ctrans ? &ctrans : NULL, ratio, clip_depth, events); + has_ctrans ? &ctrans : NULL, ratio, clip_depth, blend_mode, events); if (SWFDEC_IS_SPRITE_MOVIE (cur)) { g_queue_push_tail (player->init_queue, cur); g_queue_push_tail (player->construct_queue, cur); @@ -454,7 +449,8 @@ swfdec_sprite_movie_goto (SwfdecSpriteMo if (klass->replace) klass->replace (prev, cur->graphic); swfdec_movie_set_static_properties (prev, &cur->original_transform, - &cur->original_ctrans, cur->original_ratio, cur->clip_depth, cur->events); + &cur->original_ctrans, cur->original_ratio, cur->clip_depth, + cur->blend_mode, cur->events); swfdec_movie_destroy (cur); cur = prev; continue; diff --git a/libswfdec/swfdec_tag.c b/libswfdec/swfdec_tag.c index d07bb89..2fe1a04 100644 --- a/libswfdec/swfdec_tag.c +++ b/libswfdec/swfdec_tag.c @@ -416,19 +416,19 @@ tag_func_define_button_2 (SwfdecSwfDecod guint character; guint depth; guint states; - gboolean blend_mode, has_filters; + gboolean has_blend_mode, has_filters; SwfdecContent *content; if (s->version >= 8) { reserved = swfdec_bits_getbits (&bits, 2); - blend_mode = swfdec_bits_getbit (&bits); + has_blend_mode = swfdec_bits_getbit (&bits); has_filters = swfdec_bits_getbit (&bits); SWFDEC_LOG (" reserved = %d", reserved); - SWFDEC_LOG (" blend_mode = %d", blend_mode); + SWFDEC_LOG (" has_blend_mode = %d", has_blend_mode); SWFDEC_LOG (" has_filters = %d", has_filters); } else { reserved = swfdec_bits_getbits (&bits, 4); - blend_mode = 0; + has_blend_mode = 0; has_filters = 0; SWFDEC_LOG (" reserved = %d", reserved); } @@ -454,9 +454,9 @@ tag_func_define_button_2 (SwfdecSwfDecod content->has_color_transform = TRUE; content->graphic = swfdec_swf_decoder_get_character (s, character); - if (blend_mode) { - guint mode = swfdec_bits_get_u8 (&bits); - SWFDEC_WARNING (" blend mode = %u", mode); + if (has_blend_mode) { + content->blend_mode = swfdec_bits_get_u8 (&bits); + SWFDEC_LOG (" blend mode = %u", content->blend_mode); } if (has_filters) swfdec_filters_parse (&bits); diff-tree ba620e7dd08210039197fcb89bb2265856ada6a4 (from 4dd4aecd5c797383927fa3aaed95c6deb049f357) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 29 12:34:38 2007 +0200 add test for System.capabilites.Query () note that this test needs to be doctored when we support more features or change defaults diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index af93a1f..22b7a95 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -1196,6 +1196,15 @@ EXTRA_DIST = \ super-this-7.swf.trace \ super-this-8.swf \ super-this-8.swf.trace \ + system-capabilities-query.as \ + system-capabilities-query-5.swf \ + system-capabilities-query-5.swf.trace \ + system-capabilities-query-6.swf \ + system-capabilities-query-6.swf.trace \ + system-capabilities-query-7.swf \ + system-capabilities-query-7.swf.trace \ + system-capabilities-query-8.swf \ + system-capabilities-query-8.swf.trace \ targetpath.as \ targetpath-5.swf \ targetpath-5.swf.trace \ diff --git a/test/trace/system-capabilities-query-5.swf b/test/trace/system-capabilities-query-5.swf new file mode 100644 index 0000000..dbc9e12 Binary files /dev/null and b/test/trace/system-capabilities-query-5.swf differ diff --git a/test/trace/system-capabilities-query-5.swf.trace b/test/trace/system-capabilities-query-5.swf.trace new file mode 100644 index 0000000..557e098 --- /dev/null +++ b/test/trace/system-capabilities-query-5.swf.trace @@ -0,0 +1,33 @@ +test System.capabilites.Query +undefined +. = _global.Object.prototype + __proto__ (hp) = _global.Object.prototype + avHardwareDisable = boolean : false + constructor (hp) = _global.Object + hasAccessibility = boolean : false + hasAudio = boolean : true + hasAudioEncoder = boolean : false + hasEmbeddedVideo = boolean : true + hasIME = boolean : false + hasMP3 = boolean : true + hasPrinting = boolean : false + hasScreenBroadcast = boolean : false + hasScreenPlayback = boolean : false + hasStreamingAudio = boolean : true + hasStreamingVideo = boolean : true + hasTLS = boolean : false + hasVideoEncoder = boolean : false + isDebugger = boolean : false + language = string : "en" + localFileReadDisable = boolean : false + manufacturer = string : "Macromedia Windows" + os = string : "Windows XP" + pixelAspectRatio = number : 1 + playerType = string : "StandAlone" + screenColor = string : "color" + screenDPI = number : 96 + screenResolutionX = number : 1024 + screenResolutionY = number : 768 + serverString = string : "A=t&SA=t&SV=t&EV=t&MP3=t&AE=f&VE=f&ACC=f&PR=f&SP=f&SB=f&DEB=f&V=WIN%209%2C0%2C100%2C0&M=Adobe%20Windows&R=1024x768&DP=96&COL=color&AR=1.0&OS=Windows%20XP&L=en&IME=f&PT=StandAlone&AVD=f&LFD=f&WD=f&TLS=f" + version = string : "WIN 9,0,100,0" + windowlessDisable = boolean : false diff --git a/test/trace/system-capabilities-query-6.swf b/test/trace/system-capabilities-query-6.swf new file mode 100644 index 0000000..8631eea Binary files /dev/null and b/test/trace/system-capabilities-query-6.swf differ diff --git a/test/trace/system-capabilities-query-6.swf.trace b/test/trace/system-capabilities-query-6.swf.trace new file mode 100644 index 0000000..557e098 --- /dev/null +++ b/test/trace/system-capabilities-query-6.swf.trace @@ -0,0 +1,33 @@ +test System.capabilites.Query +undefined +. = _global.Object.prototype + __proto__ (hp) = _global.Object.prototype + avHardwareDisable = boolean : false + constructor (hp) = _global.Object + hasAccessibility = boolean : false + hasAudio = boolean : true + hasAudioEncoder = boolean : false + hasEmbeddedVideo = boolean : true + hasIME = boolean : false + hasMP3 = boolean : true + hasPrinting = boolean : false + hasScreenBroadcast = boolean : false + hasScreenPlayback = boolean : false + hasStreamingAudio = boolean : true + hasStreamingVideo = boolean : true + hasTLS = boolean : false + hasVideoEncoder = boolean : false + isDebugger = boolean : false + language = string : "en" + localFileReadDisable = boolean : false + manufacturer = string : "Macromedia Windows" + os = string : "Windows XP" + pixelAspectRatio = number : 1 + playerType = string : "StandAlone" + screenColor = string : "color" + screenDPI = number : 96 + screenResolutionX = number : 1024 + screenResolutionY = number : 768 + serverString = string : "A=t&SA=t&SV=t&EV=t&MP3=t&AE=f&VE=f&ACC=f&PR=f&SP=f&SB=f&DEB=f&V=WIN%209%2C0%2C100%2C0&M=Adobe%20Windows&R=1024x768&DP=96&COL=color&AR=1.0&OS=Windows%20XP&L=en&IME=f&PT=StandAlone&AVD=f&LFD=f&WD=f&TLS=f" + version = string : "WIN 9,0,100,0" + windowlessDisable = boolean : false diff --git a/test/trace/system-capabilities-query-7.swf b/test/trace/system-capabilities-query-7.swf new file mode 100644 index 0000000..c39a653 Binary files /dev/null and b/test/trace/system-capabilities-query-7.swf differ diff --git a/test/trace/system-capabilities-query-7.swf.trace b/test/trace/system-capabilities-query-7.swf.trace new file mode 100644 index 0000000..0ff3057 --- /dev/null +++ b/test/trace/system-capabilities-query-7.swf.trace @@ -0,0 +1,33 @@ +test System.capabilites.Query +undefined +undefined.undefined = _global.Object.prototype + __proto__ (hp) = _global.Object.prototype + avHardwareDisable = boolean : false + constructor (hp) = _global.Object + hasAccessibility = boolean : false + hasAudio = boolean : true + hasAudioEncoder = boolean : false + hasEmbeddedVideo = boolean : true + hasIME = boolean : false + hasMP3 = boolean : true + hasPrinting = boolean : false + hasScreenBroadcast = boolean : false + hasScreenPlayback = boolean : false + hasStreamingAudio = boolean : true + hasStreamingVideo = boolean : true + hasTLS = boolean : false + hasVideoEncoder = boolean : false + isDebugger = boolean : false + language = string : "en" + localFileReadDisable = boolean : false + manufacturer = string : "Macromedia Windows" + os = string : "Windows XP" + pixelAspectRatio = number : 1 + playerType = string : "StandAlone" + screenColor = string : "color" + screenDPI = number : 96 + screenResolutionX = number : 1024 + screenResolutionY = number : 768 + serverString = string : "A=t&SA=t&SV=t&EV=t&MP3=t&AE=f&VE=f&ACC=f&PR=f&SP=f&SB=f&DEB=f&V=WIN%209%2C0%2C100%2C0&M=Adobe%20Windows&R=1024x768&DP=96&COL=color&AR=1.0&OS=Windows%20XP&L=en&IME=f&PT=StandAlone&AVD=f&LFD=f&WD=f&TLS=f" + version = string : "WIN 9,0,100,0" + windowlessDisable = boolean : false diff --git a/test/trace/system-capabilities-query-8.swf b/test/trace/system-capabilities-query-8.swf new file mode 100644 index 0000000..f426a0e Binary files /dev/null and b/test/trace/system-capabilities-query-8.swf differ diff --git a/test/trace/system-capabilities-query-8.swf.trace b/test/trace/system-capabilities-query-8.swf.trace new file mode 100644 index 0000000..0ff3057 --- /dev/null +++ b/test/trace/system-capabilities-query-8.swf.trace @@ -0,0 +1,33 @@ +test System.capabilites.Query +undefined +undefined.undefined = _global.Object.prototype + __proto__ (hp) = _global.Object.prototype + avHardwareDisable = boolean : false + constructor (hp) = _global.Object + hasAccessibility = boolean : false + hasAudio = boolean : true + hasAudioEncoder = boolean : false + hasEmbeddedVideo = boolean : true + hasIME = boolean : false + hasMP3 = boolean : true + hasPrinting = boolean : false + hasScreenBroadcast = boolean : false + hasScreenPlayback = boolean : false + hasStreamingAudio = boolean : true + hasStreamingVideo = boolean : true + hasTLS = boolean : false + hasVideoEncoder = boolean : false + isDebugger = boolean : false + language = string : "en" + localFileReadDisable = boolean : false + manufacturer = string : "Macromedia Windows" + os = string : "Windows XP" + pixelAspectRatio = number : 1 + playerType = string : "StandAlone" + screenColor = string : "color" + screenDPI = number : 96 + screenResolutionX = number : 1024 + screenResolutionY = number : 768 + serverString = string : "A=t&SA=t&SV=t&EV=t&MP3=t&AE=f&VE=f&ACC=f&PR=f&SP=f&SB=f&DEB=f&V=WIN%209%2C0%2C100%2C0&M=Adobe%20Windows&R=1024x768&DP=96&COL=color&AR=1.0&OS=Windows%20XP&L=en&IME=f&PT=StandAlone&AVD=f&LFD=f&WD=f&TLS=f" + version = string : "WIN 9,0,100,0" + windowlessDisable = boolean : false diff --git a/test/trace/system-capabilities-query.as b/test/trace/system-capabilities-query.as new file mode 100644 index 0000000..8a7dffb --- /dev/null +++ b/test/trace/system-capabilities-query.as @@ -0,0 +1,13 @@ +// makeswf -v 7 -s 200x150 -r 1 -o system-capabilities-query.swf system-capabilities-query.as + +#include "trace_properties.as" + +trace ("test System.capabilites.Query"); + +o = {}; +o.Query = ASnative (11, 0); +trace (o.Query()); +delete o.Query; +trace_properties (o); + +loadMovie ("FSCommand:quit", ""); diff-tree 4dd4aecd5c797383927fa3aaed95c6deb049f357 (from 1b78c01077678375f35478925172ea57ae7003ea) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 29 12:32:43 2007 +0200 add server-manufacturer property Adobe nicely differentiates between manufacturer as seen in System.capabilities.manufacturer and System.capabilities.serverString. If Adobe can do this, we can do, too. diff --git a/libswfdec/swfdec_system.c b/libswfdec/swfdec_system.c index 6c7aa04..dfc65d7 100644 --- a/libswfdec/swfdec_system.c +++ b/libswfdec/swfdec_system.c @@ -64,6 +64,7 @@ enum { PROP_0, PROP_DEBUGGER, PROP_MANUFACTURER, + PROP_SERVER_MANUFACTURER, PROP_OS, PROP_OS_TYPE, PROP_PLAYER_TYPE, @@ -91,6 +92,9 @@ swfdec_system_get_property (GObject *obj case PROP_MANUFACTURER: g_value_set_string (value, system->manufacturer); break; + case PROP_SERVER_MANUFACTURER: + g_value_set_string (value, system->server_manufacturer); + break; case PROP_OS: g_value_set_string (value, system->os); break; @@ -145,6 +149,13 @@ swfdec_system_set_property (GObject *obj system->manufacturer = s; } break; + case PROP_SERVER_MANUFACTURER: + s = g_value_dup_string (value); + if (s) { + g_free (system->server_manufacturer); + system->server_manufacturer = s; + } + break; case PROP_OS: s = g_value_dup_string (value); if (s) { @@ -211,6 +222,7 @@ swfdec_system_finalize (GObject *object) SwfdecSystem *system = SWFDEC_SYSTEM (object); g_free (system->manufacturer); + g_free (system->server_manufacturer); g_free (system->os); g_free (system->os_type); g_free (system->player_type); @@ -236,6 +248,9 @@ swfdec_system_class_init (SwfdecSystemCl g_object_class_install_property (object_class, PROP_MANUFACTURER, g_param_spec_string ("manufacturer", "manufacturer", "string describing the manufacturer of this system", "Macromedia Windows", G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + g_object_class_install_property (object_class, PROP_SERVER_MANUFACTURER, + g_param_spec_string ("server-manufacturer", "server-manufacturer", "manufacturer of this system as used in serverString", + "Adobe Windows", G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_OS, g_param_spec_string ("os", "os", "description of the operating system", "Windows XP", G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); diff --git a/libswfdec/swfdec_system.h b/libswfdec/swfdec_system.h index 51c4bbc..b16da65 100644 --- a/libswfdec/swfdec_system.h +++ b/libswfdec/swfdec_system.h @@ -42,6 +42,7 @@ struct _SwfdecSystem /* player engine */ gboolean debugger; /* TRUE if this engine is debugging */ char * manufacturer; /* note that this includes OS information */ + char * server_manufacturer; /* manufacturer as reported in serverString */ char * os; /* supposed to identify the operating system */ char * os_type; /* usually WIN, LIN or MAC */ char * player_type; /* "StandAlone", "External", "PlugIn" or "ActiveX" */ diff --git a/libswfdec/swfdec_system_as.c b/libswfdec/swfdec_system_as.c index fff177c..1849a32 100644 --- a/libswfdec/swfdec_system_as.c +++ b/libswfdec/swfdec_system_as.c @@ -225,7 +225,7 @@ const struct { { SWFDEC_AS_STR_hasScreenBroadcast, "SB", swfdec_system_has_screen_broadcast }, { SWFDEC_AS_STR_isDebugger, "DEB", swfdec_system_is_debugger }, { SWFDEC_AS_STR_version, "V", swfdec_system_version }, - { SWFDEC_AS_STR_manufacturer, "M", swfdec_system_manufacturer }, + { SWFDEC_AS_STR_manufacturer, NULL, swfdec_system_manufacturer }, { SWFDEC_AS_STR_screenResolutionX, "R", swfdec_system_screen_width }, { SWFDEC_AS_STR_screenResolutionY, NULL, swfdec_system_screen_height }, { SWFDEC_AS_STR_screenDPI, "DP", swfdec_system_screen_dpi }, @@ -264,6 +264,10 @@ swfdec_system_query (SwfdecAsContext *cx g_string_append_printf (server, "x%d", (int) SWFDEC_AS_VALUE_GET_NUMBER (&val)); } else if (queries[i].name == SWFDEC_AS_STR_pixelAspectRatio) { g_string_append_printf (server, "&AR=%.1f", SWFDEC_AS_VALUE_GET_NUMBER (&val)); + } else if (queries[i].name == SWFDEC_AS_STR_manufacturer) { + char *s = swfdec_as_string_escape (cx, player->system->server_manufacturer); + g_string_append_printf (server, "&M=%s", s); + g_free (s); } else { g_assert (queries[i].server_string); if (i > 0) diff-tree 1b78c01077678375f35478925172ea57ae7003ea (from a3bf094161ce6fbc97a2b59b154b3b2f7e307dca) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 29 12:26:19 2007 +0200 print the asect ratio as 1.0 diff --git a/libswfdec/swfdec_system_as.c b/libswfdec/swfdec_system_as.c index 4a2332b..fff177c 100644 --- a/libswfdec/swfdec_system_as.c +++ b/libswfdec/swfdec_system_as.c @@ -263,7 +263,7 @@ swfdec_system_query (SwfdecAsContext *cx if (queries[i].name == SWFDEC_AS_STR_screenResolutionY) { g_string_append_printf (server, "x%d", (int) SWFDEC_AS_VALUE_GET_NUMBER (&val)); } else if (queries[i].name == SWFDEC_AS_STR_pixelAspectRatio) { - g_string_append_printf (server, "&AR=%.1g", SWFDEC_AS_VALUE_GET_NUMBER (&val)); + g_string_append_printf (server, "&AR=%.1f", SWFDEC_AS_VALUE_GET_NUMBER (&val)); } else { g_assert (queries[i].server_string); if (i > 0) diff-tree a3bf094161ce6fbc97a2b59b154b3b2f7e307dca (from 71ee42795c8947ad0593c68d4cb9ea507a00b3a2) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 29 12:20:41 2007 +0200 correct wrong server string diff --git a/libswfdec/swfdec_system_as.c b/libswfdec/swfdec_system_as.c index f9e4e5b..4a2332b 100644 --- a/libswfdec/swfdec_system_as.c +++ b/libswfdec/swfdec_system_as.c @@ -215,7 +215,7 @@ const struct { { SWFDEC_AS_STR_hasAudio, "A", swfdec_system_has_audio }, { SWFDEC_AS_STR_hasStreamingAudio, "SA", swfdec_system_has_streaming_audio }, { SWFDEC_AS_STR_hasStreamingVideo, "SV", swfdec_system_has_streaming_video }, - { SWFDEC_AS_STR_hasEmbeddedVideo, "SV", swfdec_system_has_embedded_video }, + { SWFDEC_AS_STR_hasEmbeddedVideo, "EV", swfdec_system_has_embedded_video }, { SWFDEC_AS_STR_hasMP3, "MP3", swfdec_system_has_mp3 }, { SWFDEC_AS_STR_hasAudioEncoder, "AE", swfdec_system_has_audio_encoder }, { SWFDEC_AS_STR_hasVideoEncoder, "VE", swfdec_system_has_video_encoder }, diff-tree 71ee42795c8947ad0593c68d4cb9ea507a00b3a2 (from 2d54ac8bb41c41c9d512c64a194a0eee573f58e4) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 29 12:20:30 2007 +0200 version number uses commas, not dots diff --git a/libswfdec/swfdec_system.c b/libswfdec/swfdec_system.c index 78049fb..6c7aa04 100644 --- a/libswfdec/swfdec_system.c +++ b/libswfdec/swfdec_system.c @@ -247,7 +247,7 @@ swfdec_system_class_init (SwfdecSystemCl "StandAlone", G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_VERSION, g_param_spec_string ("version", "version", "version string", - "WIN 9.0.100.0", G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + "WIN 9,0,100,0", G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_LANGUAGE, g_param_spec_string ("language", "language", "ISO 639-1 language code", "en", G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); diff-tree 2d54ac8bb41c41c9d512c64a194a0eee573f58e4 (from 02eea3ef446151ed742f1f1689f3119aa9a609de) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 29 10:03:41 2007 +0200 delete file that isn't used anymore diff --git a/player/swfdebug.c b/player/swfdebug.c deleted file mode 100644 index 2f52401..0000000 --- a/player/swfdebug.c +++ /dev/null @@ -1,426 +0,0 @@ -#include <gtk/gtk.h> -#include <math.h> -#include <libswfdec/swfdec.h> -#include <libswfdec/swfdec_debugger.h> -#include "swfdec_debug_movies.h" -#include "swfdec_debug_script.h" -#include "swfdec_debug_scripts.h" -#include "swfdec_debug_stack.h" -#include "swfdec_debug_widget.h" -#include "swfdec_player_manager.h" -#ifdef CAIRO_HAS_SVG_SURFACE -#include <cairo-svg.h> - -static void -save_to_svg (GtkWidget *button, SwfdecPlayer *player) -{ - GtkWidget *dialog = gtk_file_chooser_dialog_new ("Save current frame as", - GTK_WINDOW (gtk_widget_get_toplevel (button)), GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); - - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { - int w, h; - cairo_t *cr; - cairo_surface_t *surface; - - swfdec_player_get_image_size (player, &w, &h); - if (w == 0 || h == 0) { - return; - } - surface = cairo_svg_surface_create ( - gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)), - w, h); - cr = cairo_create (surface); - cairo_surface_destroy (surface); - swfdec_player_render (player, cr, 0.0, 0.0, 0.0, 0.0); - cairo_show_page (cr); - cairo_destroy (cr); - } - gtk_widget_destroy (dialog); -} -#endif /* CAIRO_HAS_SVG_SURFACE */ - -static void -step_clicked_cb (GtkButton *button, SwfdecPlayerManager *manager) -{ - swfdec_player_manager_iterate (manager); -} - -static void -step_disable_cb (SwfdecPlayerManager *manager, GParamSpec *pspec, GtkWidget *widget) -{ - gtk_widget_set_sensitive (widget, !swfdec_player_manager_get_interrupted (manager)); -} - -static void -select_scripts (GtkTreeSelection *select, SwfdecDebugScript *script) -{ - GtkTreeModel *model; - GtkTreeIter iter; - - if (gtk_tree_selection_get_selected (select, &model, &iter)) { - SwfdecDebuggerScript *dscript; - gtk_tree_model_get (model, &iter, 0, &dscript, -1); - swfdec_debug_script_set_script (script, dscript); - } else { - swfdec_debug_script_set_script (script, NULL); - } -} - -static void -toggle_play_cb (SwfdecPlayerManager *manager, GParamSpec *pspec, GtkToggleButton *button) -{ - gtk_toggle_button_set_active (button, - swfdec_player_manager_get_playing (manager)); -} - -static void -play_toggled_cb (GtkToggleButton *button, SwfdecPlayerManager *manager) -{ - swfdec_player_manager_set_playing (manager, - gtk_toggle_button_get_active (button)); -} - -static void -entry_activate_cb (GtkEntry *entry, SwfdecPlayerManager *manager) -{ - const char *text = gtk_entry_get_text (entry); - - if (text[0] == '\0') - return; - - swfdec_player_manager_execute (manager, text); - gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1); -} - -static void -message_display_cb (SwfdecPlayerManager *manager, guint type, const char *message, GtkTextView *view) -{ - GtkTextBuffer *buffer = gtk_text_view_get_buffer (view); - GtkTextIter iter; - GtkTextMark *mark; - const char *tag_name = "output"; - - if (type == 0) - tag_name = "input"; - else if (type == 2) - tag_name = "error"; - - gtk_text_buffer_get_end_iter (buffer, &iter); - mark = gtk_text_buffer_get_mark (buffer, "end"); - if (mark == NULL) - mark = gtk_text_buffer_create_mark (buffer, "end", &iter, FALSE); - if (gtk_text_buffer_get_char_count (buffer) > 0) - gtk_text_buffer_insert (buffer, &iter, "\n", 1); - gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, message, -1, tag_name, NULL); - gtk_text_view_scroll_to_mark (view, mark, 0.0, TRUE, 0.0, 0.0); -} - -static void -interrupt_widget_cb (SwfdecPlayerManager *manager, GParamSpec *pspec, SwfdecGtkWidget *widget) -{ - swfdec_gtk_widget_set_interactive (widget, - !swfdec_player_manager_get_interrupted (manager)); -} - -static void -select_scripts_cb (SwfdecPlayerManager *manager, GParamSpec *pspec, SwfdecDebugScripts *debug) -{ - GtkTreeModel *model; - GtkTreeIter iter; - SwfdecDebuggerScript *script; - - if (!swfdec_player_manager_get_interrupted (manager)) - return; - - swfdec_player_manager_get_interrupt (manager, &script, NULL); - model = gtk_tree_view_get_model (GTK_TREE_VIEW (debug)); - gtk_tree_model_get_iter_first (model, &iter); - do { - SwfdecDebuggerScript *cur; - gtk_tree_model_get (model, &iter, 0, &cur, -1); - if (cur == script) { - gtk_tree_selection_select_iter ( - gtk_tree_view_get_selection (GTK_TREE_VIEW (debug)), - &iter); - return; - } - } while (gtk_tree_model_iter_next (model, &iter)); - g_assert_not_reached (); -} - -static void -select_script_cb (SwfdecPlayerManager *manager, GParamSpec *pspec, SwfdecDebugScript *debug) -{ - GtkTreePath *path; - SwfdecDebuggerScript *script; - guint line; - - if (!swfdec_player_manager_get_interrupted (manager)) - return; - - swfdec_player_manager_get_interrupt (manager, &script, &line); - swfdec_debug_script_set_script (debug, script); - - path = gtk_tree_path_new_from_indices (line, -1); - gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (debug)), - path); - gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (debug), path, NULL, TRUE, 0.0, 0.5); - gtk_tree_path_free (path); -} - -static void -force_continue (SwfdecPlayerManager *manager, GParamSpec *pspec, gpointer unused) -{ - g_signal_stop_emission_by_name (manager, "notify::interrupted"); - if (swfdec_player_manager_get_interrupted (manager)) - swfdec_player_manager_continue (manager); -} - -static void -destroyed_cb (GtkWindow *window, SwfdecPlayerManager *manager) -{ - g_signal_connect (manager, "notify::interrupted", G_CALLBACK (force_continue), NULL); - if (swfdec_player_manager_get_interrupted (manager)) - swfdec_player_manager_continue (manager); - g_object_unref (manager); - gtk_main_quit (); -} - -static void -disconnect_all (gpointer from, GObject *object) -{ - g_signal_handlers_disconnect_matched (from, G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, object); - g_object_weak_unref (G_OBJECT (from), disconnect_all, object); -} - -static void -signal_auto_connect (gpointer object, const char *signal, GCallback closure, gpointer data) -{ - g_assert (G_IS_OBJECT (data)); - - g_signal_connect (object, signal, closure, data); - g_object_weak_ref (G_OBJECT (object), disconnect_all, data); - g_object_weak_ref (G_OBJECT (data), disconnect_all, object); -} - -static GtkWidget * -create_movieview (SwfdecPlayer *player) -{ - GtkWidget *treeview; - GtkTreeViewColumn *column; - GtkCellRenderer *renderer; - SwfdecDebugMovies *movies; - - movies = swfdec_debug_movies_new (player); - treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (movies)); - renderer = gtk_cell_renderer_text_new (); - - column = gtk_tree_view_column_new_with_attributes ("Movie", renderer, - "text", SWFDEC_DEBUG_MOVIES_COLUMN_NAME, NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); - - column = gtk_tree_view_column_new_with_attributes ("Type", renderer, - "text", SWFDEC_DEBUG_MOVIES_COLUMN_TYPE, NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); - - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Depth", renderer, - "text", SWFDEC_DEBUG_MOVIES_COLUMN_DEPTH, NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); - - return treeview; -} - -static void -view_swf (SwfdecPlayer *player, gboolean use_image) -{ - SwfdecPlayerManager *manager; - GtkWidget *window, *widget, *vpaned, *hpaned, *vbox, *hbox, *scroll, *scripts; - - manager = swfdec_player_manager_new (player); - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - - hpaned = gtk_hpaned_new (); - gtk_container_add (GTK_CONTAINER (window), hpaned); - - /* left side */ - vpaned = gtk_vpaned_new (); - gtk_paned_add1 (GTK_PANED (hpaned), vpaned); - - scroll = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_paned_add1 (GTK_PANED (vpaned), scroll); - widget = create_movieview (player); - gtk_container_add (GTK_CONTAINER (scroll), widget); - - vbox = gtk_vbox_new (FALSE, 3); - gtk_paned_add2 (GTK_PANED (vpaned), vbox); - - scroll = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0); - scripts = swfdec_debug_scripts_new (SWFDEC_DEBUGGER (player)); - gtk_container_add (GTK_CONTAINER (scroll), scripts); - signal_auto_connect (manager, "notify::interrupted", G_CALLBACK (select_scripts_cb), scripts); - - widget = gtk_toggle_button_new_with_mnemonic ("_Play"); - signal_auto_connect (widget, "toggled", G_CALLBACK (play_toggled_cb), manager); - signal_auto_connect (manager, "notify::playing", G_CALLBACK (toggle_play_cb), widget); - gtk_box_pack_end (GTK_BOX (vbox), widget, FALSE, TRUE, 0); - - widget = gtk_button_new_from_stock ("_Step"); - signal_auto_connect (widget, "clicked", G_CALLBACK (step_clicked_cb), manager); - signal_auto_connect (manager, "notify::interrupted", G_CALLBACK (step_disable_cb), widget); - gtk_box_pack_end (GTK_BOX (vbox), widget, FALSE, TRUE, 0); - -#ifdef CAIRO_HAS_SVG_SURFACE - widget = gtk_button_new_with_mnemonic ("_Save frame"); - g_signal_connect (widget, "clicked", G_CALLBACK (save_to_svg), player); - gtk_box_pack_end (GTK_BOX (vbox), widget, FALSE, TRUE, 0); -#endif - - /* right side */ - vbox = gtk_vbox_new (FALSE, 3); - gtk_paned_add2 (GTK_PANED (hpaned), vbox); - - widget = swfdec_debug_widget_new (player); - if (use_image) - swfdec_gtk_widget_set_renderer (SWFDEC_GTK_WIDGET (widget), CAIRO_SURFACE_TYPE_IMAGE); - gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, TRUE, 0); - signal_auto_connect (manager, "notify::interrupted", G_CALLBACK (interrupt_widget_cb), widget); - - hbox = gtk_hbox_new (FALSE, 3); - gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); - - scroll = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start (GTK_BOX (hbox), scroll, TRUE, TRUE, 0); - widget = swfdec_debug_script_new (SWFDEC_DEBUGGER (player)); - gtk_container_add (GTK_CONTAINER (scroll), widget); - g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (scripts)), - "changed", G_CALLBACK (select_scripts), widget); - signal_auto_connect (manager, "notify::interrupted", G_CALLBACK (select_script_cb), widget); - - scroll = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start (GTK_BOX (hbox), scroll, TRUE, TRUE, 0); - widget = swfdec_debug_stack_new (manager); - gtk_container_add (GTK_CONTAINER (scroll), widget); - - scroll = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0); - widget = gtk_text_view_new (); - gtk_text_view_set_editable (GTK_TEXT_VIEW (widget), FALSE); - gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (widget), GTK_WRAP_WORD_CHAR); - gtk_text_buffer_create_tag (gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)), - "error", "foreground", "red", "left-margin", 15, NULL); - gtk_text_buffer_create_tag (gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)), - "input", "foreground", "dark grey", NULL); - gtk_text_buffer_create_tag (gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)), - "output", "left-margin", 15, NULL); - signal_auto_connect (manager, "message", G_CALLBACK (message_display_cb), widget); - gtk_container_add (GTK_CONTAINER (scroll), widget); - - widget = gtk_entry_new (); - signal_auto_connect (widget, "activate", G_CALLBACK (entry_activate_cb), manager); - gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, TRUE, 0); - gtk_widget_grab_focus (widget); - - g_signal_connect (window, "destroy", G_CALLBACK (destroyed_cb), manager); - gtk_widget_show_all (window); -} - -static void -do_break_cb (SwfdecDebugger *debugger, SwfdecDebuggerScript *script, gpointer unused) -{ - /* no need tobreak on scripts that don't do anything, so no special case needed */ - if (script->n_commands > 0) - swfdec_debugger_set_breakpoint (debugger, script, 0); -} - -static gboolean -add_variables (gpointer player) -{ - const char *variables = g_object_get_data (player, "variables"); - SwfdecLoader *loader = g_object_get_data (player, "loader"); - - swfdec_player_set_loader_with_variables (player, loader, variables); - if (!swfdec_player_is_initialized (player)) { - g_printerr ("File \"%s\" is not a file Swfdec can play\n", - swfdec_url_get_url (swfdec_loader_get_url (loader))); - g_object_unref (player); - gtk_main_quit (); - return FALSE; - } - return FALSE; -} - -int -main (int argc, char *argv[]) -{ - gboolean do_break = FALSE; - SwfdecLoader *loader; - SwfdecPlayer *player; - GError *error = NULL; - gboolean use_image = FALSE; - char *variables = NULL; - - GOptionEntry options[] = { - { "image", 'i', 0, G_OPTION_ARG_NONE, &use_image, "use an intermediate image surface for drawing", NULL }, - { "break", 'b', 0, G_OPTION_ARG_NONE, &do_break, "break at the beginning of every script", NULL }, - { "variables", 'v', 0, G_OPTION_ARG_STRING, &variables, "variables to pass to player", "VAR=NAME[&VAR=NAME..]" }, - { NULL } - }; - GOptionContext *ctx; - - ctx = g_option_context_new (""); - g_option_context_add_main_entries (ctx, options, "options"); - g_option_context_add_group (ctx, gtk_get_option_group (TRUE)); - g_option_context_parse (ctx, &argc, &argv, &error); - g_option_context_free (ctx); - - if (error) { - g_printerr ("Error parsing command line arguments: %s\n", error->message); - g_error_free (error); - return 1; - } - - swfdec_init (); - - if (argc < 2) { - g_printerr ("Usage: %s [OPTIONS] filename\n", argv[0]); - return 1; - } - - loader = swfdec_file_loader_new (argv[1]); - if (loader->error) { - g_printerr ("Couldn't open file \"%s\": %s\n", argv[1], loader->error); - g_object_unref (loader); - return 1; - } - player = swfdec_debugger_new (); - if (do_break) - g_signal_connect (player, "script-added", G_CALLBACK (do_break_cb), NULL); - view_swf (player, use_image); - g_object_set_data (G_OBJECT (player), "loader", loader); - g_object_set_data (G_OBJECT (player), "variables", variables); - g_idle_add_full (G_PRIORITY_HIGH, add_variables, player, NULL); - - gtk_main (); - - player = NULL; - return 0; -} - diff-tree 02eea3ef446151ed742f1f1689f3119aa9a609de (from ef0772d72cd948c2511f8e6b7e07393f803f31fc) Author: Benjamin Otte <otte at gnome.org> Date: Tue Aug 28 15:05:19 2007 +0200 hook in ViviWidget and make it work diff --git a/vivified/ui/vivi_player.c b/vivified/ui/vivi_player.c index 6fcfee2..e8134b2 100644 --- a/vivified/ui/vivi_player.c +++ b/vivified/ui/vivi_player.c @@ -23,36 +23,14 @@ #include <libswfdec-gtk/swfdec-gtk.h> #include "vivi_vivi_docklet.h" - -static void -vivi_player_notify_app (ViviApplication *app, GParamSpec *pspec, SwfdecGtkWidget *player) -{ - if (g_str_equal (pspec->name, "player")) { - swfdec_gtk_widget_set_player (player, vivi_application_get_player (app)); - } else if (g_str_equal (pspec->name, "interrupted")) { - swfdec_gtk_widget_set_interactive (player, !vivi_application_get_interrupted (app)); - } -} +#include "vivi_widget.h" void vivi_player_application_set (ViviViviDocklet *docklet, ViviApplication *app); void vivi_player_application_set (ViviViviDocklet *docklet, ViviApplication *app) { - SwfdecGtkWidget *widget = SWFDEC_GTK_WIDGET (vivi_vivi_docklet_find_widget_by_type (docklet, SWFDEC_TYPE_GTK_WIDGET)); - - g_signal_connect (app, "notify", G_CALLBACK (vivi_player_notify_app), widget); - swfdec_gtk_widget_set_player (widget, vivi_application_get_player (app)); - swfdec_gtk_widget_set_interactive (widget, !vivi_application_get_interrupted (app)); -} - -void -vivi_player_application_unset (ViviViviDocklet *docklet, ViviApplication *app); -void -vivi_player_application_unset (ViviViviDocklet *docklet, ViviApplication *app) -{ - SwfdecGtkWidget *widget = SWFDEC_GTK_WIDGET (vivi_vivi_docklet_find_widget_by_type (docklet, SWFDEC_TYPE_GTK_WIDGET)); + ViviWidget *widget = VIVI_WIDGET (vivi_vivi_docklet_find_widget_by_type (docklet, VIVI_TYPE_WIDGET)); - g_signal_handlers_disconnect_by_func (app, vivi_player_notify_app, widget); + vivi_widget_set_application (widget, app); } - diff --git a/vivified/ui/vivi_player.xml b/vivified/ui/vivi_player.xml index bb1c630..1c63819 100644 --- a/vivified/ui/vivi_player.xml +++ b/vivified/ui/vivi_player.xml @@ -2,13 +2,12 @@ <object class="ViviViviDocklet" id="player"> <property name="title">Player</property> <signal name="application-set" handler="vivi_player_application_set" /> - <signal name="application-unset" handler="vivi_player_application_unset" /> <child> <object class="GtkAlignment" id="1"> <property name="xscale">0.0</property> <property name="yscale">0.0</property> <child> - <object class="SwfdecGtkWidget" id="2"> + <object class="ViviWidget" id="2"> </object> </child> </object> diff --git a/vivified/ui/vivi_widget.c b/vivified/ui/vivi_widget.c index 7d3901c..fa9c2ac 100644 --- a/vivified/ui/vivi_widget.c +++ b/vivified/ui/vivi_widget.c @@ -24,9 +24,44 @@ #include <math.h> #include "vivi_widget.h" +enum { + PROP_0, + PROP_APP +}; G_DEFINE_TYPE (ViviWidget, vivi_widget, SWFDEC_TYPE_GTK_WIDGET) +static void +vivi_widget_get_property (GObject *object, guint param_id, GValue *value, + GParamSpec * pspec) +{ + ViviWidget *widget = VIVI_WIDGET (object); + + switch (param_id) { + case PROP_APP: + g_value_set_object (value, widget->app); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} + +static void +vivi_widget_set_property (GObject *object, guint param_id, const GValue *value, + GParamSpec *pspec) +{ + ViviWidget *widget = VIVI_WIDGET (object); + + switch (param_id) { + case PROP_APP: + vivi_widget_set_application (widget, VIVI_APPLICATION (g_value_get_object (value))); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} static gboolean vivi_widget_motion_notify (GtkWidget *gtkwidget, GdkEventMotion *event) @@ -118,27 +153,12 @@ vivi_widget_expose (GtkWidget *gtkwidget } static void -vivi_widget_app_notify (ViviApplication *app, GParamSpec *pspec, ViviWidget *widget) -{ - if (g_str_equal (pspec->name, "interrupted")) { - swfdec_gtk_widget_set_interactive (SWFDEC_GTK_WIDGET (widget), - vivi_application_get_interrupted (widget->app)); - } else if (g_str_equal (pspec->name, "player")) { - swfdec_gtk_widget_set_player (SWFDEC_GTK_WIDGET (widget), - vivi_application_get_player (widget->app)); - } -} - -static void vivi_widget_dispose (GObject *object) { ViviWidget *widget = VIVI_WIDGET (object); - if (widget->app) { - g_signal_handlers_disconnect_by_func (widget->app, vivi_widget_app_notify, widget); - g_object_unref (widget->app); - widget->app = NULL; - } + vivi_widget_set_application (widget, NULL); + G_OBJECT_CLASS (vivi_widget_parent_class)->dispose (object); } @@ -149,6 +169,12 @@ vivi_widget_class_init (ViviWidgetClass GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (g_class); object_class->dispose = vivi_widget_dispose; + object_class->get_property = vivi_widget_get_property; + object_class->set_property = vivi_widget_set_property; + + g_object_class_install_property (object_class, PROP_APP, + g_param_spec_object ("application", "application", "application that is playing", + VIVI_TYPE_APPLICATION, G_PARAM_READWRITE)); widget_class->expose_event = vivi_widget_expose; widget_class->button_press_event = vivi_widget_button_press; @@ -170,9 +196,44 @@ vivi_widget_new (ViviApplication *app) g_return_val_if_fail (VIVI_IS_APPLICATION (app), NULL); widget = g_object_new (VIVI_TYPE_WIDGET, "player", vivi_application_get_player (app), NULL); - widget->app = g_object_ref (app); - g_signal_connect (app, "notify", G_CALLBACK (vivi_widget_app_notify), widget); return GTK_WIDGET (widget); } +static void +vivi_widget_app_notify (ViviApplication *app, GParamSpec *pspec, ViviWidget *widget) +{ + if (g_str_equal (pspec->name, "interrupted")) { + swfdec_gtk_widget_set_interactive (SWFDEC_GTK_WIDGET (widget), + !vivi_application_get_interrupted (widget->app)); + } else if (g_str_equal (pspec->name, "player")) { + swfdec_gtk_widget_set_player (SWFDEC_GTK_WIDGET (widget), + vivi_application_get_player (widget->app)); + } +} + +void +vivi_widget_set_application (ViviWidget *widget, ViviApplication *app) +{ + g_return_if_fail (VIVI_IS_WIDGET (widget)); + g_return_if_fail (app == NULL || VIVI_IS_APPLICATION (app)); + + if (widget->app) { + g_signal_handlers_disconnect_by_func (widget->app, vivi_widget_app_notify, widget); + g_object_unref (widget->app); + } + widget->app = app; + if (app) { + g_object_ref (app); + g_signal_connect (app, "notify", G_CALLBACK (vivi_widget_app_notify), widget); + swfdec_gtk_widget_set_interactive (SWFDEC_GTK_WIDGET (widget), + !vivi_application_get_interrupted (app)); + swfdec_gtk_widget_set_player (SWFDEC_GTK_WIDGET (widget), + vivi_application_get_player (app)); + } else { + swfdec_gtk_widget_set_interactive (SWFDEC_GTK_WIDGET (widget), TRUE); + swfdec_gtk_widget_set_player (SWFDEC_GTK_WIDGET (widget), NULL); + } + g_object_notify (G_OBJECT (widget), "application"); +} + diff --git a/vivified/ui/vivi_widget.h b/vivified/ui/vivi_widget.h index d6097d4..b861ed1 100644 --- a/vivified/ui/vivi_widget.h +++ b/vivified/ui/vivi_widget.h @@ -54,6 +54,9 @@ GType vivi_widget_get_type (void); GtkWidget * vivi_widget_new (ViviApplication * app); +void vivi_widget_set_application (ViviWidget * widget, + ViviApplication * app); + G_END_DECLS #endif diff-tree ef0772d72cd948c2511f8e6b7e07393f803f31fc (from 7d7b5b829997da04b885cff8ff106792b818b63c) Author: Benjamin Otte <otte at gnome.org> Date: Tue Aug 28 14:53:18 2007 +0200 port to ViviApplication framework diff --git a/vivified/ui/vivi_widget.c b/vivified/ui/vivi_widget.c index 2b23ec6..7d3901c 100644 --- a/vivified/ui/vivi_widget.c +++ b/vivified/ui/vivi_widget.c @@ -118,10 +118,27 @@ vivi_widget_expose (GtkWidget *gtkwidget } static void +vivi_widget_app_notify (ViviApplication *app, GParamSpec *pspec, ViviWidget *widget) +{ + if (g_str_equal (pspec->name, "interrupted")) { + swfdec_gtk_widget_set_interactive (SWFDEC_GTK_WIDGET (widget), + vivi_application_get_interrupted (widget->app)); + } else if (g_str_equal (pspec->name, "player")) { + swfdec_gtk_widget_set_player (SWFDEC_GTK_WIDGET (widget), + vivi_application_get_player (widget->app)); + } +} + +static void vivi_widget_dispose (GObject *object) { - //SwfdecWidget *widget = SWFDEC_WIDGET (object); + ViviWidget *widget = VIVI_WIDGET (object); + if (widget->app) { + g_signal_handlers_disconnect_by_func (widget->app, vivi_widget_app_notify, widget); + g_object_unref (widget->app); + widget->app = NULL; + } G_OBJECT_CLASS (vivi_widget_parent_class)->dispose (object); } @@ -146,10 +163,16 @@ vivi_widget_init (ViviWidget *widget) } GtkWidget * -vivi_widget_new (SwfdecPlayer *player) +vivi_widget_new (ViviApplication *app) { - g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL); + ViviWidget *widget; + + g_return_val_if_fail (VIVI_IS_APPLICATION (app), NULL); + + widget = g_object_new (VIVI_TYPE_WIDGET, "player", vivi_application_get_player (app), NULL); + widget->app = g_object_ref (app); + g_signal_connect (app, "notify", G_CALLBACK (vivi_widget_app_notify), widget); - return g_object_new (VIVI_TYPE_WIDGET, "player", player, NULL); + return GTK_WIDGET (widget); } diff --git a/vivified/ui/vivi_widget.h b/vivified/ui/vivi_widget.h index 5348a33..d6097d4 100644 --- a/vivified/ui/vivi_widget.h +++ b/vivified/ui/vivi_widget.h @@ -21,6 +21,7 @@ #define _VIVI_WIDGET_H_ #include <libswfdec-gtk/swfdec-gtk.h> +#include <vivified/core/vivified-core.h> G_BEGIN_DECLS @@ -37,6 +38,8 @@ struct _ViviWidget { SwfdecGtkWidget widget; + ViviApplication * app; + int x; int y; int button; @@ -49,7 +52,7 @@ struct _ViviWidgetClass GType vivi_widget_get_type (void); -GtkWidget * vivi_widget_new (SwfdecPlayer * player); +GtkWidget * vivi_widget_new (ViviApplication * app); G_END_DECLS diff-tree 7d7b5b829997da04b885cff8ff106792b818b63c (from f9d06c40d6ce63504d5f2ae79a042373d07da9ce) Author: Benjamin Otte <otte at gnome.org> Date: Tue Aug 28 14:45:15 2007 +0200 move the debug widget here diff --git a/player/swfdec_debug_widget.c b/player/swfdec_debug_widget.c deleted file mode 100644 index 65cfa4d..0000000 --- a/player/swfdec_debug_widget.c +++ /dev/null @@ -1,155 +0,0 @@ -/* Swfdec - * Copyright (C) 2006 Benjamin Otte <otte at gnome.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <math.h> -#include "swfdec_debug_widget.h" - - -G_DEFINE_TYPE (SwfdecDebugWidget, swfdec_debug_widget, SWFDEC_TYPE_GTK_WIDGET) - - -static gboolean -swfdec_debug_widget_motion_notify (GtkWidget *gtkwidget, GdkEventMotion *event) -{ - return FALSE; -} - -static gboolean -swfdec_debug_widget_leave_notify (GtkWidget *gtkwidget, GdkEventCrossing *event) -{ - return FALSE; -} - -#define RADIUS 10 -static void -swfdec_debug_widget_invalidate_click_area (SwfdecDebugWidget *widget) -{ - GtkWidget *gtkwidget = GTK_WIDGET (widget); - GdkRectangle rect = { widget->x - RADIUS, widget->y - RADIUS, 2 * RADIUS, 2 * RADIUS }; - - gdk_window_invalidate_rect (gtkwidget->window, &rect, FALSE); -} - -static gboolean -swfdec_debug_widget_button_press (GtkWidget *gtkwidget, GdkEventButton *event) -{ - SwfdecGtkWidget *widget = SWFDEC_GTK_WIDGET (gtkwidget); - SwfdecDebugWidget *debug = SWFDEC_DEBUG_WIDGET (gtkwidget); - - if (event->window != gtkwidget->window) - return FALSE; - - if (event->button == 1 && swfdec_gtk_widget_get_interactive (widget)) { - SwfdecPlayer *player = swfdec_gtk_widget_get_player (widget); - switch (event->type) { - case GDK_BUTTON_PRESS: - swfdec_debug_widget_invalidate_click_area (debug); - debug->x = event->x; - debug->y = event->y; - swfdec_player_handle_mouse (player, debug->x, debug->y, debug->button); - swfdec_debug_widget_invalidate_click_area (debug); - break; - case GDK_2BUTTON_PRESS: - debug->button = 1 - debug->button; - swfdec_player_handle_mouse (player, debug->x, debug->y, debug->button); - swfdec_debug_widget_invalidate_click_area (debug); - break; - default: - break; - } - } - return FALSE; -} - -static gboolean -swfdec_debug_widget_button_release (GtkWidget *gtkwidget, GdkEventButton *event) -{ - return FALSE; -} - -static gboolean -swfdec_debug_widget_expose (GtkWidget *gtkwidget, GdkEventExpose *event) -{ - SwfdecDebugWidget *debug = SWFDEC_DEBUG_WIDGET (gtkwidget); - cairo_t *cr; - - if (event->window != gtkwidget->window) - return FALSE; - - if (GTK_WIDGET_CLASS (swfdec_debug_widget_parent_class)->expose_event (gtkwidget, event)) - return TRUE; - - cr = gdk_cairo_create (gtkwidget->window); - - cairo_arc (cr, debug->x, debug->y, RADIUS - 1.5, 0.0, 2 * G_PI); - if (debug->button) { - cairo_set_source_rgba (cr, 0.25, 0.25, 0.25, 0.5); - cairo_fill_preserve (cr); - } - cairo_set_line_width (cr, 3); - cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); - cairo_stroke_preserve (cr); - cairo_set_line_width (cr, 1); - cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); - cairo_stroke (cr); - cairo_destroy (cr); - - return FALSE; -} - -static void -swfdec_debug_widget_dispose (GObject *object) -{ - //SwfdecWidget *widget = SWFDEC_WIDGET (object); - - G_OBJECT_CLASS (swfdec_debug_widget_parent_class)->dispose (object); -} - -static void -swfdec_debug_widget_class_init (SwfdecDebugWidgetClass * g_class) -{ - GObjectClass *object_class = G_OBJECT_CLASS (g_class); - GtkWidgetClass *debug_widget_class = GTK_WIDGET_CLASS (g_class); - - object_class->dispose = swfdec_debug_widget_dispose; - - debug_widget_class->expose_event = swfdec_debug_widget_expose; - debug_widget_class->button_press_event = swfdec_debug_widget_button_press; - debug_widget_class->button_release_event = swfdec_debug_widget_button_release; - debug_widget_class->motion_notify_event = swfdec_debug_widget_motion_notify; - debug_widget_class->leave_notify_event = swfdec_debug_widget_leave_notify; -} - -static void -swfdec_debug_widget_init (SwfdecDebugWidget *widget) -{ -} - -GtkWidget * -swfdec_debug_widget_new (SwfdecPlayer *player) -{ - g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL); - - return g_object_new (SWFDEC_TYPE_DEBUG_WIDGET, "player", player, NULL); -} - diff --git a/player/swfdec_debug_widget.h b/player/swfdec_debug_widget.h deleted file mode 100644 index b00117d..0000000 --- a/player/swfdec_debug_widget.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Swfdec - * Copyright (C) 2006 Benjamin Otte <otte at gnome.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - -#ifndef _SWFDEC_DEBUG_WIDGET_H_ -#define _SWFDEC_DEBUG_WIDGET_H_ - -#include <libswfdec-gtk/swfdec_gtk_widget.h> - -G_BEGIN_DECLS - -typedef struct _SwfdecDebugWidget SwfdecDebugWidget; -typedef struct _SwfdecDebugWidgetClass SwfdecDebugWidgetClass; - -#define SWFDEC_TYPE_DEBUG_WIDGET (swfdec_debug_widget_get_type()) -#define SWFDEC_IS_DEBUG_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_DEBUG_WIDGET)) -#define SWFDEC_IS_DEBUG_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_DEBUG_WIDGET)) -#define SWFDEC_DEBUG_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_DEBUG_WIDGET, SwfdecDebugWidget)) -#define SWFDEC_DEBUG_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_DEBUG_WIDGET, SwfdecDebugWidgetClass)) - -struct _SwfdecDebugWidget -{ - SwfdecGtkWidget widget; - - int x; - int y; - int button; -}; - -struct _SwfdecDebugWidgetClass -{ - SwfdecGtkWidgetClass debug_widget_class; -}; - -GType swfdec_debug_widget_get_type (void); - -GtkWidget * swfdec_debug_widget_new (SwfdecPlayer * player); - -G_END_DECLS -#endif diff --git a/vivified/ui/Makefile.am b/vivified/ui/Makefile.am index c88facd..d9d0c15 100644 --- a/vivified/ui/Makefile.am +++ b/vivified/ui/Makefile.am @@ -12,9 +12,11 @@ vivified_SOURCES = \ vivi_movies.c \ vivi_player.c \ vivi_vivi_docklet.c \ + vivi_widget.c \ main.c noinst_HEADERS = \ vivi_movie_list.h \ + vivi_widget.h \ vivi_vivi_docklet.h diff --git a/vivified/ui/vivi_widget.c b/vivified/ui/vivi_widget.c new file mode 100644 index 0000000..2b23ec6 --- /dev/null +++ b/vivified/ui/vivi_widget.c @@ -0,0 +1,155 @@ +/* Swfdec + * Copyright (C) 2006-2007 Benjamin Otte <otte at gnome.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <math.h> +#include "vivi_widget.h" + + +G_DEFINE_TYPE (ViviWidget, vivi_widget, SWFDEC_TYPE_GTK_WIDGET) + + +static gboolean +vivi_widget_motion_notify (GtkWidget *gtkwidget, GdkEventMotion *event) +{ + return FALSE; +} + +static gboolean +vivi_widget_leave_notify (GtkWidget *gtkwidget, GdkEventCrossing *event) +{ + return FALSE; +} + +#define RADIUS 10 +static void +vivi_widget_invalidate_click_area (ViviWidget *widget) +{ + GtkWidget *gtkwidget = GTK_WIDGET (widget); + GdkRectangle rect = { widget->x - RADIUS, widget->y - RADIUS, 2 * RADIUS, 2 * RADIUS }; + + gdk_window_invalidate_rect (gtkwidget->window, &rect, FALSE); +} + +static gboolean +vivi_widget_button_press (GtkWidget *gtkwidget, GdkEventButton *event) +{ + SwfdecGtkWidget *widget = SWFDEC_GTK_WIDGET (gtkwidget); + ViviWidget *debug = VIVI_WIDGET (gtkwidget); + + if (event->window != gtkwidget->window) + return FALSE; + + if (event->button == 1 && swfdec_gtk_widget_get_interactive (widget)) { + SwfdecPlayer *player = swfdec_gtk_widget_get_player (widget); + switch (event->type) { + case GDK_BUTTON_PRESS: + vivi_widget_invalidate_click_area (debug); + debug->x = event->x; + debug->y = event->y; + swfdec_player_handle_mouse (player, debug->x, debug->y, debug->button); + vivi_widget_invalidate_click_area (debug); + break; + case GDK_2BUTTON_PRESS: + debug->button = 1 - debug->button; + swfdec_player_handle_mouse (player, debug->x, debug->y, debug->button); + vivi_widget_invalidate_click_area (debug); + break; + default: + break; + } + } + return FALSE; +} + +static gboolean +vivi_widget_button_release (GtkWidget *gtkwidget, GdkEventButton *event) +{ + return FALSE; +} + +static gboolean +vivi_widget_expose (GtkWidget *gtkwidget, GdkEventExpose *event) +{ + ViviWidget *debug = VIVI_WIDGET (gtkwidget); + cairo_t *cr; + + if (event->window != gtkwidget->window) + return FALSE; + + if (GTK_WIDGET_CLASS (vivi_widget_parent_class)->expose_event (gtkwidget, event)) + return TRUE; + + cr = gdk_cairo_create (gtkwidget->window); + + cairo_arc (cr, debug->x, debug->y, RADIUS - 1.5, 0.0, 2 * G_PI); + if (debug->button) { + cairo_set_source_rgba (cr, 0.25, 0.25, 0.25, 0.5); + cairo_fill_preserve (cr); + } + cairo_set_line_width (cr, 3); + cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); + cairo_stroke_preserve (cr); + cairo_set_line_width (cr, 1); + cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); + cairo_stroke (cr); + cairo_destroy (cr); + + return FALSE; +} + +static void +vivi_widget_dispose (GObject *object) +{ + //SwfdecWidget *widget = SWFDEC_WIDGET (object); + + G_OBJECT_CLASS (vivi_widget_parent_class)->dispose (object); +} + +static void +vivi_widget_class_init (ViviWidgetClass * g_class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (g_class); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (g_class); + + object_class->dispose = vivi_widget_dispose; + + widget_class->expose_event = vivi_widget_expose; + widget_class->button_press_event = vivi_widget_button_press; + widget_class->button_release_event = vivi_widget_button_release; + widget_class->motion_notify_event = vivi_widget_motion_notify; + widget_class->leave_notify_event = vivi_widget_leave_notify; +} + +static void +vivi_widget_init (ViviWidget *widget) +{ +} + +GtkWidget * +vivi_widget_new (SwfdecPlayer *player) +{ + g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL); + + return g_object_new (VIVI_TYPE_WIDGET, "player", player, NULL); +} + diff --git a/vivified/ui/vivi_widget.h b/vivified/ui/vivi_widget.h new file mode 100644 index 0000000..5348a33 --- /dev/null +++ b/vivified/ui/vivi_widget.h @@ -0,0 +1,56 @@ +/* Vivi + * Copyright (C) 2006-2007 Benjamin Otte <otte at gnome.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +#ifndef _VIVI_WIDGET_H_ +#define _VIVI_WIDGET_H_ + +#include <libswfdec-gtk/swfdec-gtk.h> + +G_BEGIN_DECLS + +typedef struct _ViviWidget ViviWidget; +typedef struct _ViviWidgetClass ViviWidgetClass; + +#define VIVI_TYPE_WIDGET (vivi_widget_get_type()) +#define VIVI_IS_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIVI_TYPE_WIDGET)) +#define VIVI_IS_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIVI_TYPE_WIDGET)) +#define VIVI_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIVI_TYPE_WIDGET, ViviWidget)) +#define VIVI_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIVI_TYPE_WIDGET, ViviWidgetClass)) + +struct _ViviWidget +{ + SwfdecGtkWidget widget; + + int x; + int y; + int button; +}; + +struct _ViviWidgetClass +{ + SwfdecGtkWidgetClass widget_class; +}; + +GType vivi_widget_get_type (void); + +GtkWidget * vivi_widget_new (SwfdecPlayer * player); + + +G_END_DECLS +#endif diff-tree f9d06c40d6ce63504d5f2ae79a042373d07da9ce (from 3b74be34227d1b1f6167daa2bef7282eedfc23e7) Author: Benjamin Otte <otte at gnome.org> Date: Tue Aug 28 13:25:13 2007 +0200 @version is a movie property - but only for root movies I don't think this is entirely correct but works for now diff --git a/libswfdec/swfdec_as_strings.c b/libswfdec/swfdec_as_strings.c index 661cfd0..9fb0169 100644 --- a/libswfdec/swfdec_as_strings.c +++ b/libswfdec/swfdec_as_strings.c @@ -282,6 +282,7 @@ const char swfdec_as_strings[] = SWFDEC_AS_CONSTANT_STRING ("windowlessDisable") SWFDEC_AS_CONSTANT_STRING ("hasTLS") SWFDEC_AS_CONSTANT_STRING ("serverString") + SWFDEC_AS_CONSTANT_STRING ("$version") /* add more here */ ; diff --git a/libswfdec/swfdec_initialize.as b/libswfdec/swfdec_initialize.as index c32a042..edfb2e0 100644 --- a/libswfdec/swfdec_initialize.as +++ b/libswfdec/swfdec_initialize.as @@ -134,7 +134,6 @@ System.capabilities = {}; System.capabilities.Query = ASnative (11, 0); System.capabilities.Query (); delete System.capabilities.Query; -$version = System.capabilities.version; /*** OH THE HUMANITY ***/ diff --git a/libswfdec/swfdec_initialize.h b/libswfdec/swfdec_initialize.h index c7ae7a6..715e81e 100644 --- a/libswfdec/swfdec_initialize.h +++ b/libswfdec/swfdec_initialize.h @@ -2,7 +2,7 @@ /* compiled from swfdec_initialize.as */ const unsigned char swfdec_initialize[] = { - 0x88, 0x93, 0x02, 0x48, 0x00, 0x41, 0x53, 0x53, 0x65, 0x74, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x88, 0x82, 0x02, 0x46, 0x00, 0x41, 0x53, 0x53, 0x65, 0x74, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x00, 0x41, 0x53, 0x6E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x00, 0x41, 0x53, 0x53, 0x65, 0x74, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x00, 0x41, 0x73, 0x42, 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00, 0x62, 0x72, 0x6F, 0x61, @@ -42,111 +42,109 @@ const unsigned char swfdec_initialize[] 0x42, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6F, 0x74, 0x61, 0x6C, 0x00, 0x5F, 0x62, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6F, 0x74, 0x61, 0x6C, 0x00, 0x58, 0x4D, 0x4C, 0x00, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x00, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6C, 0x69, 0x74, 0x69, 0x65, 0x73, 0x00, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x00, 0x24, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x00, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x00, 0x9B, 0x12, 0x00, 0x41, 0x73, 0x42, 0x72, 0x6F, 0x61, 0x64, - 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x0D, 0x00, 0x4C, 0x6F, - 0x61, 0x64, 0x56, 0x61, 0x72, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x13, 0x00, 0x08, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, - 0x01, 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0x02, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, - 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x03, - 0x1C, 0x96, 0x13, 0x00, 0x08, 0x04, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, - 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x03, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x05, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x96, 0x02, - 0x00, 0x08, 0x07, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x08, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x07, 0x1C, 0x96, 0x07, 0x00, 0x07, - 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x4E, 0x96, 0x02, 0x00, - 0x08, 0x0A, 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x03, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x78, 0x00, 0x8F, 0x00, - 0x96, 0x04, 0x00, 0x08, 0x0B, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x4E, 0x3C, 0x96, - 0x02, 0x00, 0x08, 0x0C, 0x41, 0x96, 0x07, 0x00, 0x08, 0x0C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3C, - 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, - 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, - 0x48, 0x12, 0x9D, 0x02, 0x00, 0x42, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x0C, 0x1C, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x07, 0x1C, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x23, - 0x00, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x07, 0x00, 0x07, - 0x02, 0x00, 0x00, 0x00, 0x08, 0x0B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x52, 0x17, 0x96, 0x02, - 0x00, 0x05, 0x01, 0x3E, 0x99, 0x02, 0x00, 0x9C, 0xFF, 0x96, 0x02, 0x00, 0x05, 0x00, 0x3E, 0x4F, - 0x96, 0x02, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x9B, 0x07, 0x00, 0x00, 0x01, - 0x00, 0x6F, 0x00, 0x75, 0x00, 0x96, 0x02, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x04, - 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, - 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x05, 0x08, 0x03, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x05, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x04, - 0x00, 0x08, 0x08, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x4E, 0x4F, 0x96, 0x02, 0x00, - 0x08, 0x10, 0x1C, 0x96, 0x09, 0x00, 0x08, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x40, - 0x4F, 0x96, 0x09, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x08, 0x12, 0x08, 0x10, 0x1C, 0x96, 0x07, - 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x13, 0x3D, 0x17, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x83, - 0x00, 0x00, 0x00, 0x02, 0x08, 0x03, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, - 0x13, 0x3D, 0x17, 0x96, 0x8C, 0x00, 0x08, 0x14, 0x08, 0x15, 0x07, 0x12, 0x00, 0x00, 0x00, 0x08, - 0x16, 0x07, 0x08, 0x00, 0x00, 0x00, 0x08, 0x17, 0x07, 0x14, 0x00, 0x00, 0x00, 0x08, 0x18, 0x07, - 0x11, 0x00, 0x00, 0x00, 0x08, 0x19, 0x07, 0x2E, 0x00, 0x00, 0x00, 0x08, 0x1A, 0x07, 0x28, 0x00, - 0x00, 0x00, 0x08, 0x1B, 0x07, 0x23, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x07, 0x0D, 0x00, 0x00, 0x00, - 0x08, 0x1D, 0x07, 0x1B, 0x00, 0x00, 0x00, 0x08, 0x1E, 0x07, 0x24, 0x00, 0x00, 0x00, 0x08, 0x1F, - 0x07, 0x2D, 0x00, 0x00, 0x00, 0x08, 0x20, 0x07, 0x25, 0x00, 0x00, 0x00, 0x08, 0x21, 0x07, 0x22, - 0x00, 0x00, 0x00, 0x08, 0x22, 0x07, 0x21, 0x00, 0x00, 0x00, 0x08, 0x23, 0x07, 0x27, 0x00, 0x00, - 0x00, 0x08, 0x24, 0x07, 0x10, 0x00, 0x00, 0x00, 0x08, 0x25, 0x07, 0x20, 0x00, 0x00, 0x00, 0x08, - 0x26, 0x07, 0x09, 0x00, 0x00, 0x00, 0x08, 0x27, 0x07, 0x26, 0x00, 0x00, 0x00, 0x07, 0x13, 0x00, - 0x00, 0x00, 0x43, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x28, 0x07, 0x20, 0x03, 0x00, 0x00, 0x08, 0x14, - 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, - 0x08, 0x14, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x0F, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x14, - 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x13, 0x3D, 0x17, 0x96, 0x09, 0x00, - 0x08, 0x29, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x2A, 0x40, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x29, - 0x1C, 0x96, 0x13, 0x00, 0x08, 0x2B, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, - 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x29, 0x1C, 0x96, - 0x13, 0x00, 0x08, 0x2C, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0x02, - 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x29, 0x1C, 0x96, 0x07, 0x00, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x52, 0x17, 0x96, - 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x29, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, - 0x00, 0x00, 0x00, 0x08, 0x13, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x08, 0x2D, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x2A, 0x40, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x2D, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, - 0x00, 0x00, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x52, 0x17, 0x96, 0x0E, 0x00, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x2E, 0x07, 0x9A, 0x02, 0x00, 0x00, 0x08, 0x2D, 0x1C, 0x96, - 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x2F, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x31, 0x08, 0x32, 0x4F, 0x96, - 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x33, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, - 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, - 0x13, 0x00, 0x08, 0x34, 0x07, 0x03, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, - 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x35, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, - 0x08, 0x36, 0x9B, 0x09, 0x00, 0x00, 0x01, 0x00, 0x73, 0x72, 0x63, 0x00, 0x64, 0x00, 0x96, 0x02, - 0x00, 0x08, 0x06, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x37, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, - 0x38, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x19, 0x00, 0x96, 0x09, 0x00, - 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x35, 0x52, - 0x17, 0x99, 0x02, 0x00, 0x2C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x38, 0x1C, 0x96, 0x07, 0x00, 0x07, - 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x34, 0x52, 0x17, 0x96, 0x09, - 0x00, 0x05, 0x01, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x35, - 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, - 0x02, 0x00, 0x08, 0x39, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0xB3, 0x00, 0x96, 0x03, 0x00, 0x08, - 0x3A, 0x02, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x06, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, - 0x02, 0x49, 0x9D, 0x02, 0x00, 0x91, 0x00, 0x96, 0x04, 0x00, 0x08, 0x07, 0x04, 0x00, 0x3C, 0x96, - 0x02, 0x00, 0x08, 0x3A, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x41, 0x00, 0x96, - 0x02, 0x00, 0x08, 0x3A, 0x4C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x3D, 0x08, 0x07, 0x1C, 0x96, 0x07, - 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3B, 0x3D, 0x47, 0x96, 0x02, 0x00, 0x08, 0x3C, 0x47, - 0x96, 0x02, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x07, 0x1C, 0x4E, 0x96, 0x07, 0x00, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3B, 0x3D, 0x47, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x33, 0x00, - 0x96, 0x04, 0x00, 0x08, 0x3A, 0x08, 0x07, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, - 0x08, 0x3B, 0x3D, 0x96, 0x02, 0x00, 0x08, 0x3C, 0x47, 0x96, 0x02, 0x00, 0x08, 0x06, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x07, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3B, - 0x3D, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x61, 0xFF, 0x96, 0x02, 0x00, 0x08, 0x3A, 0x1C, 0x3E, 0x4F, + 0x75, 0x65, 0x72, 0x79, 0x00, 0x9B, 0x12, 0x00, 0x41, 0x73, 0x42, 0x72, 0x6F, 0x61, 0x64, 0x63, + 0x61, 0x73, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x0D, 0x00, 0x4C, 0x6F, 0x61, + 0x64, 0x56, 0x61, 0x72, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x13, 0x00, 0x08, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, + 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0x02, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, + 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x03, 0x1C, + 0x96, 0x13, 0x00, 0x08, 0x04, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, + 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x05, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x96, 0x02, 0x00, + 0x08, 0x07, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x08, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x07, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, + 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x4E, 0x96, 0x02, 0x00, 0x08, + 0x0A, 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x03, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x08, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x78, 0x00, 0x8F, 0x00, 0x96, + 0x04, 0x00, 0x08, 0x0B, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x4E, 0x3C, 0x96, 0x02, + 0x00, 0x08, 0x0C, 0x41, 0x96, 0x07, 0x00, 0x08, 0x0C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, + 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, + 0x08, 0x0C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x48, + 0x12, 0x9D, 0x02, 0x00, 0x42, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x0C, 0x1C, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x07, 0x1C, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x23, 0x00, + 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x02, + 0x00, 0x00, 0x00, 0x08, 0x0B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x52, 0x17, 0x96, 0x02, 0x00, + 0x05, 0x01, 0x3E, 0x99, 0x02, 0x00, 0x9C, 0xFF, 0x96, 0x02, 0x00, 0x05, 0x00, 0x3E, 0x4F, 0x96, + 0x02, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, + 0x6F, 0x00, 0x75, 0x00, 0x96, 0x02, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x04, 0x07, + 0x0C, 0x00, 0x00, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, + 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x05, 0x08, 0x03, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x05, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x04, 0x00, + 0x08, 0x08, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, + 0x10, 0x1C, 0x96, 0x09, 0x00, 0x08, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x40, 0x4F, + 0x96, 0x09, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x08, 0x12, 0x08, 0x10, 0x1C, 0x96, 0x07, 0x00, + 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x13, 0x3D, 0x17, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x83, 0x00, + 0x00, 0x00, 0x02, 0x08, 0x03, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x13, + 0x3D, 0x17, 0x96, 0x8C, 0x00, 0x08, 0x14, 0x08, 0x15, 0x07, 0x12, 0x00, 0x00, 0x00, 0x08, 0x16, + 0x07, 0x08, 0x00, 0x00, 0x00, 0x08, 0x17, 0x07, 0x14, 0x00, 0x00, 0x00, 0x08, 0x18, 0x07, 0x11, + 0x00, 0x00, 0x00, 0x08, 0x19, 0x07, 0x2E, 0x00, 0x00, 0x00, 0x08, 0x1A, 0x07, 0x28, 0x00, 0x00, + 0x00, 0x08, 0x1B, 0x07, 0x23, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x07, 0x0D, 0x00, 0x00, 0x00, 0x08, + 0x1D, 0x07, 0x1B, 0x00, 0x00, 0x00, 0x08, 0x1E, 0x07, 0x24, 0x00, 0x00, 0x00, 0x08, 0x1F, 0x07, + 0x2D, 0x00, 0x00, 0x00, 0x08, 0x20, 0x07, 0x25, 0x00, 0x00, 0x00, 0x08, 0x21, 0x07, 0x22, 0x00, + 0x00, 0x00, 0x08, 0x22, 0x07, 0x21, 0x00, 0x00, 0x00, 0x08, 0x23, 0x07, 0x27, 0x00, 0x00, 0x00, + 0x08, 0x24, 0x07, 0x10, 0x00, 0x00, 0x00, 0x08, 0x25, 0x07, 0x20, 0x00, 0x00, 0x00, 0x08, 0x26, + 0x07, 0x09, 0x00, 0x00, 0x00, 0x08, 0x27, 0x07, 0x26, 0x00, 0x00, 0x00, 0x07, 0x13, 0x00, 0x00, + 0x00, 0x43, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x28, 0x07, 0x20, 0x03, 0x00, 0x00, 0x08, 0x14, 0x1C, + 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, + 0x14, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x0F, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x14, 0x1C, + 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x13, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x08, + 0x29, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x2A, 0x40, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x29, 0x1C, + 0x96, 0x13, 0x00, 0x08, 0x2B, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, + 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x29, 0x1C, 0x96, 0x13, + 0x00, 0x08, 0x2C, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, + 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x29, 0x1C, 0x96, 0x07, 0x00, 0x07, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x52, 0x17, 0x96, 0x08, + 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x29, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, + 0x00, 0x00, 0x08, 0x13, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x08, 0x2D, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x2A, 0x40, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x2D, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, + 0x00, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x52, 0x17, 0x96, 0x0E, 0x00, 0x07, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x2E, 0x07, 0x9A, 0x02, 0x00, 0x00, 0x08, 0x2D, 0x1C, 0x96, 0x07, + 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x31, 0x08, 0x32, 0x4F, 0x96, 0x02, + 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x33, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, + 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, + 0x00, 0x08, 0x34, 0x07, 0x03, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, + 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x35, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, - 0x3E, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x06, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x3F, 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x40, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, - 0x96, 0x02, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x41, 0x4E, 0x3E, 0x4F, 0x96, 0x08, - 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, - 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x13, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, - 0x42, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x33, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, - 0x96, 0x07, 0x00, 0x08, 0x43, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, - 0x43, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x44, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, - 0x00, 0x08, 0x43, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x44, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x45, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, - 0x3D, 0x4F, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x43, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x44, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x45, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x43, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0x44, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x45, 0x3A, 0x17, 0x96, 0x04, 0x00, - 0x08, 0x46, 0x08, 0x43, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x44, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x47, - 0x4E, 0x1D, 0x96, 0x03, 0x00, 0x08, 0x10, 0x02, 0x1D, 0x00 + 0x36, 0x9B, 0x09, 0x00, 0x00, 0x01, 0x00, 0x73, 0x72, 0x63, 0x00, 0x64, 0x00, 0x96, 0x02, 0x00, + 0x08, 0x06, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x37, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x38, + 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x19, 0x00, 0x96, 0x09, 0x00, 0x05, + 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x35, 0x52, 0x17, + 0x99, 0x02, 0x00, 0x2C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x38, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, + 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x34, 0x52, 0x17, 0x96, 0x09, 0x00, + 0x05, 0x01, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x35, 0x52, + 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, + 0x00, 0x08, 0x39, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0xB3, 0x00, 0x96, 0x03, 0x00, 0x08, 0x3A, + 0x02, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x06, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, + 0x49, 0x9D, 0x02, 0x00, 0x91, 0x00, 0x96, 0x04, 0x00, 0x08, 0x07, 0x04, 0x00, 0x3C, 0x96, 0x02, + 0x00, 0x08, 0x3A, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x41, 0x00, 0x96, 0x02, + 0x00, 0x08, 0x3A, 0x4C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x3D, 0x08, 0x07, 0x1C, 0x96, 0x07, 0x00, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3B, 0x3D, 0x47, 0x96, 0x02, 0x00, 0x08, 0x3C, 0x47, 0x96, + 0x02, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x07, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x3B, 0x3D, 0x47, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x33, 0x00, 0x96, + 0x04, 0x00, 0x08, 0x3A, 0x08, 0x07, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, + 0x3B, 0x3D, 0x96, 0x02, 0x00, 0x08, 0x3C, 0x47, 0x96, 0x02, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x07, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3B, 0x3D, + 0x47, 0x1D, 0x99, 0x02, 0x00, 0x61, 0xFF, 0x96, 0x02, 0x00, 0x08, 0x3A, 0x1C, 0x3E, 0x4F, 0x96, + 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x3E, + 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x3F, 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x40, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, + 0x02, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x41, 0x4E, 0x3E, 0x4F, 0x96, 0x08, 0x00, + 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, + 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x13, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x42, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x33, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, + 0x07, 0x00, 0x08, 0x43, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x43, + 0x1C, 0x96, 0x07, 0x00, 0x08, 0x44, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x43, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x44, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x45, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, + 0x4F, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x43, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x44, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x45, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x43, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x44, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x45, 0x3A, 0x17, 0x96, 0x03, 0x00, 0x08, + 0x10, 0x02, 0x1D, 0x00 }; diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index ca76cc5..02904d0 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -39,6 +39,7 @@ #include "swfdec_sprite.h" #include "swfdec_sprite_movie.h" #include "swfdec_swf_instance.h" +#include "swfdec_system.h" /*** MOVIE ***/ @@ -914,6 +915,12 @@ swfdec_movie_get_variable (SwfdecAsObjec *flags = 0; return TRUE; } + if (movie->parent == NULL && variable == SWFDEC_AS_STR__version) { + SWFDEC_AS_VALUE_SET_STRING (val, swfdec_as_context_get_string (object->context, + SWFDEC_PLAYER (object->context)->system->version)); + *flags = 0; + return TRUE; + } movie = swfdec_movie_get_by_name (SWFDEC_PLAYER (object->context), variable); if (movie) {
Apparently Analagous Threads
- Branch 'vivi' - 24 commits - configure.ac libswfdec/swfdec_sprite_movie.c libswfdec/swfdec_tag.c libswfdec/swfdec_tag.h vivified/core vivified/dock vivified/ui
- Branch 'vivi' - 15 commits - configure.ac libswfdec/Makefile.am libswfdec/swfdec_as_context.c libswfdec/swfdec_as_debugger.h libswfdec/swfdec_as_object.c libswfdec/swfdec_movie.c libswfdec/swfdec_script.c libswfdec/swfdec_types.h vivified/core vivified/ui
- 13 commits - libswfdec-gtk/Makefile.am libswfdec-gtk/swfdec_gtk_keys.c libswfdec-gtk/swfdec_gtk_keys.h libswfdec-gtk/swfdec_gtk_widget.c libswfdec/Makefile.am libswfdec/swfdec_as_types.c libswfdec/swfdec.h libswfdec/swfdec_initialize.as
- configure.ac libswfdec-gtk/swfdec_gtk_widget.c libswfdec-gtk/swfdec_playback_alsa.c libswfdec/swfdec_as_date.c libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_types.c libswfdec/swfdec_audio_flv.c libswfdec/swfdec_audio_flv.h
- 163 commits - autogen.sh configure.ac doc/swfdec-sections.txt libswfdec-gtk/swfdec_gtk_player.c libswfdec-gtk/swfdec_gtk_player.h libswfdec-gtk/swfdec_gtk_widget.c libswfdec-gtk/swfdec_source.c libswfdec/Makefile.am libswfdec/swfdec_as_array.c