[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
Benjamin Otte
company at kemper.freedesktop.org
Wed Aug 29 14:57:21 PDT 2007
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) {
More information about the Swfdec
mailing list