[Swfdec] 8 commits - libswfdec/Makefile.am libswfdec/swfdec_as_strings.c libswfdec/swfdec_load_object_as.c libswfdec/swfdec_load_object_as.h libswfdec/swfdec_load_object.c libswfdec/swfdec_load_object.h libswfdec/swfdec_player.c libswfdec/swfdec_player_internal.h libswfdec/swfdec_xml_as.c libswfdec/swfdec_xml_as.h libswfdec/swfdec_xml.c libswfdec/swfdec_xml.h test/trace
Pekka Lampila
medar at kemper.freedesktop.org
Sat Aug 18 05:32:42 PDT 2007
libswfdec/Makefile.am | 7 -
libswfdec/swfdec_as_strings.c | 2
libswfdec/swfdec_load_object.c | 215 +++++++++++++++++++++++++++++++++++++
libswfdec/swfdec_load_object.h | 35 ++----
libswfdec/swfdec_load_object_as.c | 48 ++++++++
libswfdec/swfdec_load_object_as.h | 31 +++++
libswfdec/swfdec_player.c | 5
libswfdec/swfdec_player_internal.h | 1
libswfdec/swfdec_xml.c | 177 ------------------------------
libswfdec/swfdec_xml_as.c | 17 +-
libswfdec/swfdec_xml_as.h | 14 --
test/trace/Makefile.am | 7 +
test/trace/loadobject-5.swf |binary
test/trace/loadobject-5.swf.trace | 46 +++++++
test/trace/loadobject-6.swf |binary
test/trace/loadobject-6.swf.trace | 46 +++++++
test/trace/loadobject-7.swf |binary
test/trace/loadobject-7.swf.trace | 46 +++++++
test/trace/loadobject.as | 29 ++++
test/trace/trace.c | 2
20 files changed, 512 insertions(+), 216 deletions(-)
New commits:
diff-tree 5307f431c31026bf25f1abe9e642bb26256b3a5a (from 036bc27bbf78889a7bea8f8a3288457e46848cec)
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Sat Aug 18 15:25:04 2007 +0300
Add test case loadobject for the load method
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 794e7f1..3f7219f 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -478,6 +478,13 @@ EXTRA_DIST = \
load-4.swf.trace \
load-5.swf \
load-5.swf.trace \
+ loadobject.as \
+ loadobject-5.swf \
+ loadobject-5.swf.trace \
+ loadobject-6.swf \
+ loadobject-6.swf.trace \
+ loadobject-7.swf \
+ loadobject-7.swf.trace \
local.swf \
local.swf.trace \
lots-of-arguments.as \
diff --git a/test/trace/loadobject-5.swf b/test/trace/loadobject-5.swf
new file mode 100644
index 0000000..b3b144d
Binary files /dev/null and b/test/trace/loadobject-5.swf differ
diff --git a/test/trace/loadobject-5.swf.trace b/test/trace/loadobject-5.swf.trace
new file mode 100644
index 0000000..ba49d21
--- /dev/null
+++ b/test/trace/loadobject-5.swf.trace
@@ -0,0 +1,46 @@
+Loaded:
+Total:
+false
+Loaded:
+Total:
+true
+Loaded: 0
+Total:
+true
+Loaded: 0
+Total:
+Got: string '// makeswf -v 7 -r 1 -o loadobject-7.swf loadobject.as
+
+var obj = new Object ();
+
+obj.load = ASnative (301, 0);
+
+obj.onData = function (str) {
+ trace ("Got: " + typeof (str) + " '" + str + "'");
+ trace ("Loaded: " + this._bytesLoaded);
+ trace ("Total: " + this._bytesTotal);
+};
+
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ());
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ("loadobject.as"));
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ("404"));
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+
+function quit () {
+ loadMovie ("FSCommand:quit", "");
+};
+
+setInterval (quit, 1000);
+'
+Loaded: 755
+Total: 755
+Got: undefined ''
+Loaded: 755
+Total: 755
diff --git a/test/trace/loadobject-6.swf b/test/trace/loadobject-6.swf
new file mode 100644
index 0000000..3a19ff4
Binary files /dev/null and b/test/trace/loadobject-6.swf differ
diff --git a/test/trace/loadobject-6.swf.trace b/test/trace/loadobject-6.swf.trace
new file mode 100644
index 0000000..ba49d21
--- /dev/null
+++ b/test/trace/loadobject-6.swf.trace
@@ -0,0 +1,46 @@
+Loaded:
+Total:
+false
+Loaded:
+Total:
+true
+Loaded: 0
+Total:
+true
+Loaded: 0
+Total:
+Got: string '// makeswf -v 7 -r 1 -o loadobject-7.swf loadobject.as
+
+var obj = new Object ();
+
+obj.load = ASnative (301, 0);
+
+obj.onData = function (str) {
+ trace ("Got: " + typeof (str) + " '" + str + "'");
+ trace ("Loaded: " + this._bytesLoaded);
+ trace ("Total: " + this._bytesTotal);
+};
+
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ());
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ("loadobject.as"));
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ("404"));
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+
+function quit () {
+ loadMovie ("FSCommand:quit", "");
+};
+
+setInterval (quit, 1000);
+'
+Loaded: 755
+Total: 755
+Got: undefined ''
+Loaded: 755
+Total: 755
diff --git a/test/trace/loadobject-7.swf b/test/trace/loadobject-7.swf
new file mode 100644
index 0000000..4d580e6
Binary files /dev/null and b/test/trace/loadobject-7.swf differ
diff --git a/test/trace/loadobject-7.swf.trace b/test/trace/loadobject-7.swf.trace
new file mode 100644
index 0000000..8e6d8c0
--- /dev/null
+++ b/test/trace/loadobject-7.swf.trace
@@ -0,0 +1,46 @@
+Loaded: undefined
+Total: undefined
+false
+Loaded: undefined
+Total: undefined
+true
+Loaded: 0
+Total: undefined
+true
+Loaded: 0
+Total: undefined
+Got: string '// makeswf -v 7 -r 1 -o loadobject-7.swf loadobject.as
+
+var obj = new Object ();
+
+obj.load = ASnative (301, 0);
+
+obj.onData = function (str) {
+ trace ("Got: " + typeof (str) + " '" + str + "'");
+ trace ("Loaded: " + this._bytesLoaded);
+ trace ("Total: " + this._bytesTotal);
+};
+
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ());
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ("loadobject.as"));
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ("404"));
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+
+function quit () {
+ loadMovie ("FSCommand:quit", "");
+};
+
+setInterval (quit, 1000);
+'
+Loaded: 755
+Total: 755
+Got: undefined 'undefined'
+Loaded: 755
+Total: 755
diff --git a/test/trace/loadobject.as b/test/trace/loadobject.as
new file mode 100644
index 0000000..127e063
--- /dev/null
+++ b/test/trace/loadobject.as
@@ -0,0 +1,29 @@
+// makeswf -v 7 -r 1 -o loadobject-7.swf loadobject.as
+
+var obj = new Object ();
+
+obj.load = ASnative (301, 0);
+
+obj.onData = function (str) {
+ trace ("Got: " + typeof (str) + " '" + str + "'");
+ trace ("Loaded: " + this._bytesLoaded);
+ trace ("Total: " + this._bytesTotal);
+};
+
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ());
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ("loadobject.as"));
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+trace (obj.load ("404"));
+trace ("Loaded: " + obj._bytesLoaded);
+trace ("Total: " + obj._bytesTotal);
+
+function quit () {
+ loadMovie ("FSCommand:quit", "");
+};
+
+setInterval (quit, 1000);
diff-tree 036bc27bbf78889a7bea8f8a3288457e46848cec (from c2e81f0fcd0fda22a358e9884a539e55d03510e5)
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Sat Aug 18 14:33:06 2007 +0300
Don't use program's output as format string in trace.c
diff --git a/test/trace/trace.c b/test/trace/trace.c
index 0f986e5..9725a0b 100644
--- a/test/trace/trace.c
+++ b/test/trace/trace.c
@@ -248,7 +248,7 @@ main (int argc, char **argv)
Test *test = walk->data;
run_test (test, NULL);
- g_print (test->output);
+ g_print ("%s", test->output);
if (!test->success) {
failures++;
g_string_append_printf (failed_tests,
diff-tree c2e81f0fcd0fda22a358e9884a539e55d03510e5 (from 1e15b5e20599d5193ba0745cf1e11fac076e66f6)
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Sat Aug 18 14:21:22 2007 +0300
Allow calling XML.load with 0 params to return FALSE
diff --git a/libswfdec/swfdec_xml_as.c b/libswfdec/swfdec_xml_as.c
index 10f9d13..db31bc0 100644
--- a/libswfdec/swfdec_xml_as.c
+++ b/libswfdec/swfdec_xml_as.c
@@ -65,6 +65,6 @@ swfdec_xml_init_context (SwfdecPlayer *p
SWFDEC_AS_VALUE_SET_OBJECT (&val, xml);
swfdec_as_object_set_variable (proto, SWFDEC_AS_STR_constructor, &val);
swfdec_as_object_add_function (proto, SWFDEC_AS_STR_load, SWFDEC_TYPE_XML,
- swfdec_load_object_load, 1);
+ swfdec_load_object_load, 0);
}
diff-tree 1e15b5e20599d5193ba0745cf1e11fac076e66f6 (from d0bd628cea984172d9dfb185b9fbeba64348ed81)
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Sat Aug 18 14:12:48 2007 +0300
Fix load method crash when called without params and fix it's return values
diff --git a/libswfdec/swfdec_load_object_as.c b/libswfdec/swfdec_load_object_as.c
index e4ab4de..9df8c9f 100644
--- a/libswfdec/swfdec_load_object_as.c
+++ b/libswfdec/swfdec_load_object_as.c
@@ -36,6 +36,13 @@ swfdec_load_object_load (SwfdecAsContext
{
const char *url;
+ if (argc < 1) {
+ SWFDEC_AS_VALUE_SET_BOOLEAN (rval, FALSE);
+ return;
+ }
+
url = swfdec_as_value_to_string (cx, &argv[0]);
swfdec_load_object_new (obj, url);
+
+ SWFDEC_AS_VALUE_SET_BOOLEAN (rval, TRUE);
}
diff-tree d0bd628cea984172d9dfb185b9fbeba64348ed81 (from e068c79c89238e20d94e93992489aef7a078fada)
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Sat Aug 18 14:08:43 2007 +0300
Reformat LoadObject code a little
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index ae017e2..6542f7c 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -42,13 +42,15 @@ swfdec_load_object_loader_target_parse (
SwfdecLoader *loader)
{
SwfdecAsValue val;
- SwfdecAsObject *object = SWFDEC_LOAD_OBJECT (target)->target;
+ SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
SWFDEC_AS_VALUE_SET_INT (&val, swfdec_loader_get_loaded (loader));
- swfdec_as_object_set_variable (object, SWFDEC_AS_STR__bytesLoaded, &val);
+ swfdec_as_object_set_variable (load_object->target,
+ SWFDEC_AS_STR__bytesLoaded, &val);
SWFDEC_AS_VALUE_SET_INT (&val, swfdec_loader_get_size (loader));
- swfdec_as_object_set_variable (object, SWFDEC_AS_STR__bytesTotal, &val);
+ swfdec_as_object_set_variable (load_object->target, SWFDEC_AS_STR__bytesTotal,
+ &val);
}
static void
@@ -58,15 +60,18 @@ swfdec_load_object_ondata (SwfdecLoadObj
if (load_object->text) {
SWFDEC_AS_VALUE_SET_STRING (&val,
- swfdec_as_context_get_string (SWFDEC_AS_OBJECT (load_object->target)->context, load_object->text));
+ swfdec_as_context_get_string (load_object->target->context,
+ load_object->text));
} else {
SWFDEC_AS_VALUE_SET_UNDEFINED (&val);
}
- swfdec_as_object_call (load_object->target, SWFDEC_AS_STR_onData, 1, &val, NULL);
+ swfdec_as_object_call (load_object->target, SWFDEC_AS_STR_onData, 1, &val,
+ NULL);
}
static void
-swfdec_load_object_loader_target_error (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+swfdec_load_object_loader_target_error (SwfdecLoaderTarget *target,
+ SwfdecLoader *loader)
{
SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
@@ -79,7 +84,8 @@ swfdec_load_object_loader_target_error (
}
static void
-swfdec_load_object_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+swfdec_load_object_loader_target_eof (SwfdecLoaderTarget *target,
+ SwfdecLoader *loader)
{
SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
guint size;
@@ -173,8 +179,10 @@ swfdec_load_object_load (SwfdecLoadObjec
g_return_if_fail (url != NULL);
swfdec_load_object_reset (load_object);
- load_object->loader = swfdec_player_load (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load_object)->context), url);
- swfdec_loader_set_target (load_object->loader, SWFDEC_LOADER_TARGET (load_object));
+ load_object->loader = swfdec_player_load (
+ SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load_object)->context), url);
+ swfdec_loader_set_target (load_object->loader,
+ SWFDEC_LOADER_TARGET (load_object));
swfdec_loader_set_data_type (load_object->loader, SWFDEC_LOADER_DATA_TEXT);
SWFDEC_AS_VALUE_SET_INT (&val, 0);
@@ -193,7 +201,8 @@ swfdec_load_object_new (SwfdecAsObject *
if (!swfdec_as_context_use_mem (target->context, sizeof (SwfdecLoadObject)))
return NULL;
load_object = g_object_new (SWFDEC_TYPE_LOAD_OBJECT, NULL);
- swfdec_as_object_add (load_object, target->context, sizeof (SwfdecLoadObject));
+ swfdec_as_object_add (load_object, target->context,
+ sizeof (SwfdecLoadObject));
SWFDEC_LOAD_OBJECT (load_object)->target = target;
diff --git a/libswfdec/swfdec_load_object_as.c b/libswfdec/swfdec_load_object_as.c
index 740c4de..e4ab4de 100644
--- a/libswfdec/swfdec_load_object_as.c
+++ b/libswfdec/swfdec_load_object_as.c
@@ -31,7 +31,8 @@
SWFDEC_AS_NATIVE (301, 0, swfdec_load_object_load)
void
-swfdec_load_object_load (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
+swfdec_load_object_load (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *rval)
{
const char *url;
diff-tree e068c79c89238e20d94e93992489aef7a078fada (from 962fb2b3504c1e3205f80a8e66f1a5ba9f8b104b)
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Sat Aug 18 14:02:41 2007 +0300
Set _bytesLoaded to 0 when LoadObject is started
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index b570849..ae017e2 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -42,7 +42,7 @@ swfdec_load_object_loader_target_parse (
SwfdecLoader *loader)
{
SwfdecAsValue val;
- SwfdecLoadObject *object = SWFDEC_LOAD_OBJECT (target)->target;
+ SwfdecAsObject *object = SWFDEC_LOAD_OBJECT (target)->target;
SWFDEC_AS_VALUE_SET_INT (&val, swfdec_loader_get_loaded (loader));
swfdec_as_object_set_variable (object, SWFDEC_AS_STR__bytesLoaded, &val);
@@ -167,6 +167,8 @@ swfdec_load_object_init (SwfdecLoadObjec
static void
swfdec_load_object_load (SwfdecLoadObject *load_object, const char *url)
{
+ SwfdecAsValue val;
+
g_return_if_fail (SWFDEC_IS_LOAD_OBJECT (load_object));
g_return_if_fail (url != NULL);
@@ -174,6 +176,10 @@ swfdec_load_object_load (SwfdecLoadObjec
load_object->loader = swfdec_player_load (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load_object)->context), url);
swfdec_loader_set_target (load_object->loader, SWFDEC_LOADER_TARGET (load_object));
swfdec_loader_set_data_type (load_object->loader, SWFDEC_LOADER_DATA_TEXT);
+
+ SWFDEC_AS_VALUE_SET_INT (&val, 0);
+ swfdec_as_object_set_variable (load_object->target,
+ SWFDEC_AS_STR__bytesLoaded, &val);
}
SwfdecAsObject *
diff-tree 962fb2b3504c1e3205f80a8e66f1a5ba9f8b104b (from 0c9f29a8c03fea12e171e839cbc26df4d57705cf)
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Sat Aug 18 12:24:03 2007 +0300
Set _bytesLoaded and _bytesTotal properties in LoadObject
diff --git a/libswfdec/swfdec_as_strings.c b/libswfdec/swfdec_as_strings.c
index 75589b7..7674f3b 100644
--- a/libswfdec/swfdec_as_strings.c
+++ b/libswfdec/swfdec_as_strings.c
@@ -250,6 +250,8 @@ const char swfdec_as_strings[] =
SWFDEC_AS_CONSTANT_STRING ("yMin")
SWFDEC_AS_CONSTANT_STRING ("yMax")
SWFDEC_AS_CONSTANT_STRING ("close")
+ SWFDEC_AS_CONSTANT_STRING ("_bytesLoaded")
+ SWFDEC_AS_CONSTANT_STRING ("_bytesTotal")
/* add more here */
;
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index 7085397..b570849 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -38,6 +38,20 @@ swfdec_load_object_loader_target_get_pla
}
static void
+swfdec_load_object_loader_target_parse (SwfdecLoaderTarget *target,
+ SwfdecLoader *loader)
+{
+ SwfdecAsValue val;
+ SwfdecLoadObject *object = SWFDEC_LOAD_OBJECT (target)->target;
+
+ SWFDEC_AS_VALUE_SET_INT (&val, swfdec_loader_get_loaded (loader));
+ swfdec_as_object_set_variable (object, SWFDEC_AS_STR__bytesLoaded, &val);
+
+ SWFDEC_AS_VALUE_SET_INT (&val, swfdec_loader_get_size (loader));
+ swfdec_as_object_set_variable (object, SWFDEC_AS_STR__bytesTotal, &val);
+}
+
+static void
swfdec_load_object_ondata (SwfdecLoadObject *load_object)
{
SwfdecAsValue val;
@@ -48,7 +62,7 @@ swfdec_load_object_ondata (SwfdecLoadObj
} else {
SWFDEC_AS_VALUE_SET_UNDEFINED (&val);
}
- swfdec_as_object_call (SWFDEC_AS_OBJECT (load_object->target), SWFDEC_AS_STR_onData, 1, &val, NULL);
+ swfdec_as_object_call (load_object->target, SWFDEC_AS_STR_onData, 1, &val, NULL);
}
static void
@@ -105,6 +119,7 @@ static void
swfdec_load_object_loader_target_init (SwfdecLoaderTargetInterface *iface)
{
iface->get_player = swfdec_load_object_loader_target_get_player;
+ iface->parse = swfdec_load_object_loader_target_parse;
iface->eof = swfdec_load_object_loader_target_eof;
iface->error = swfdec_load_object_loader_target_error;
}
diff-tree 0c9f29a8c03fea12e171e839cbc26df4d57705cf (from c7b0dabb45c6522f1cb4413a2f997dd2be63568f)
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Sat Aug 18 12:01:10 2007 +0300
Move XML.load code to new LoadObject class, make it work with any Object
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 2f48811..85ec276 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -74,6 +74,8 @@ libswfdec_ at SWFDEC_MAJORMINOR@_la_SOURCES
swfdec_image.c \
swfdec_interval.c \
swfdec_key_as.c \
+ swfdec_load_object.c \
+ swfdec_load_object_as.c \
swfdec_loader.c \
swfdec_loadertarget.c \
swfdec_marshal.c \
@@ -107,7 +109,6 @@ libswfdec_ at SWFDEC_MAJORMINOR@_la_SOURCES
swfdec_video.c \
swfdec_video_movie.c \
swfdec_video_movie_as.c \
- swfdec_xml.c \
swfdec_xml_as.c
libswfdec_ at SWFDEC_MAJORMINOR@_la_CFLAGS = \
@@ -187,6 +188,8 @@ noinst_HEADERS = \
swfdec_initialize.h \
swfdec_internal.h \
swfdec_interval.h \
+ swfdec_load_object.h \
+ swfdec_load_object_as.h \
swfdec_loader_internal.h \
swfdec_loadertarget.h \
swfdec_marshal.h \
@@ -213,7 +216,7 @@ noinst_HEADERS = \
swfdec_utils.h \
swfdec_video.h \
swfdec_video_movie.h \
- swfdec_xml.h
+ swfdec_xml_as.h
EXTRA_DIST = \
compiler.c \
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
new file mode 100644
index 0000000..7085397
--- /dev/null
+++ b/libswfdec/swfdec_load_object.c
@@ -0,0 +1,185 @@
+/* Swfdec
+ * Copyright (C) 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 <string.h>
+#include "swfdec_load_object.h"
+#include "swfdec_as_strings.h"
+#include "swfdec_debug.h"
+#include "swfdec_loader_internal.h"
+#include "swfdec_loadertarget.h"
+#include "swfdec_player_internal.h"
+
+/*** SWFDEC_LOADER_TARGET ***/
+
+static SwfdecPlayer *
+swfdec_load_object_loader_target_get_player (SwfdecLoaderTarget *target)
+{
+ return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
+}
+
+static void
+swfdec_load_object_ondata (SwfdecLoadObject *load_object)
+{
+ SwfdecAsValue val;
+
+ if (load_object->text) {
+ SWFDEC_AS_VALUE_SET_STRING (&val,
+ swfdec_as_context_get_string (SWFDEC_AS_OBJECT (load_object->target)->context, load_object->text));
+ } else {
+ SWFDEC_AS_VALUE_SET_UNDEFINED (&val);
+ }
+ swfdec_as_object_call (SWFDEC_AS_OBJECT (load_object->target), SWFDEC_AS_STR_onData, 1, &val, NULL);
+}
+
+static void
+swfdec_load_object_loader_target_error (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+{
+ SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
+
+ /* break reference to the loader */
+ swfdec_loader_set_target (loader, NULL);
+ load_object->loader = NULL;
+ g_object_unref (loader);
+ /* emit onData */
+ swfdec_load_object_ondata (load_object);
+}
+
+static void
+swfdec_load_object_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+{
+ SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
+ guint size;
+
+ /* get the text from the loader */
+ size = swfdec_buffer_queue_get_depth (loader->queue);
+ load_object->text = g_try_malloc (size + 1);
+ if (load_object->text) {
+ SwfdecBuffer *buffer;
+ guint i = 0;
+ while ((buffer = swfdec_buffer_queue_pull_buffer (loader->queue))) {
+ memcpy (load_object->text + i, buffer->data, buffer->length);
+ i += buffer->length;
+ swfdec_buffer_unref (buffer);
+ }
+ g_assert (i == size);
+ load_object->text[size] = '\0';
+ /* FIXME: validate otherwise? */
+ if (!g_utf8_validate (load_object->text, size, NULL)) {
+ SWFDEC_ERROR ("downloaded data is not valid utf-8");
+ g_free (load_object->text);
+ load_object->text = NULL;
+ }
+ } else {
+ SWFDEC_ERROR ("not enough memory to copy %u bytes", size);
+ }
+
+ /* break reference to the loader */
+ swfdec_loader_set_target (loader, NULL);
+ load_object->loader = NULL;
+ g_object_unref (loader);
+ /* emit onData */
+ swfdec_load_object_ondata (load_object);
+}
+
+static void
+swfdec_load_object_loader_target_init (SwfdecLoaderTargetInterface *iface)
+{
+ iface->get_player = swfdec_load_object_loader_target_get_player;
+ iface->eof = swfdec_load_object_loader_target_eof;
+ iface->error = swfdec_load_object_loader_target_error;
+}
+
+/*** SWFDEC_LOAD_OBJECT ***/
+
+G_DEFINE_TYPE_WITH_CODE (SwfdecLoadObject, swfdec_load_object, SWFDEC_TYPE_AS_OBJECT,
+ G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_load_object_loader_target_init))
+
+static void
+swfdec_load_object_reset (SwfdecLoadObject *load_object)
+{
+ if (load_object->loader) {
+ swfdec_loader_set_target (load_object->loader, NULL);
+ g_object_unref (load_object->loader);
+ load_object->loader = NULL;
+ }
+ g_free (load_object->text);
+ load_object->text = NULL;
+}
+
+static void
+swfdec_load_object_dispose (GObject *object)
+{
+ SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (object);
+
+ swfdec_load_object_reset (load_object);
+
+ G_OBJECT_CLASS (swfdec_load_object_parent_class)->dispose (object);
+}
+
+static void
+swfdec_load_object_class_init (SwfdecLoadObjectClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = swfdec_load_object_dispose;
+}
+
+static void
+swfdec_load_object_init (SwfdecLoadObject *load_object)
+{
+}
+
+static void
+swfdec_load_object_load (SwfdecLoadObject *load_object, const char *url)
+{
+ g_return_if_fail (SWFDEC_IS_LOAD_OBJECT (load_object));
+ g_return_if_fail (url != NULL);
+
+ swfdec_load_object_reset (load_object);
+ load_object->loader = swfdec_player_load (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load_object)->context), url);
+ swfdec_loader_set_target (load_object->loader, SWFDEC_LOADER_TARGET (load_object));
+ swfdec_loader_set_data_type (load_object->loader, SWFDEC_LOADER_DATA_TEXT);
+}
+
+SwfdecAsObject *
+swfdec_load_object_new (SwfdecAsObject *target, const char *url)
+{
+ SwfdecAsObject *load_object;
+
+ g_return_val_if_fail (SWFDEC_IS_AS_OBJECT (target), NULL);
+ g_return_val_if_fail (url != NULL, NULL);
+
+ if (!swfdec_as_context_use_mem (target->context, sizeof (SwfdecLoadObject)))
+ return NULL;
+ load_object = g_object_new (SWFDEC_TYPE_LOAD_OBJECT, NULL);
+ swfdec_as_object_add (load_object, target->context, sizeof (SwfdecLoadObject));
+
+ SWFDEC_LOAD_OBJECT (load_object)->target = target;
+
+ SWFDEC_PLAYER (target->context)->load_objects =
+ g_list_append (SWFDEC_PLAYER (target->context)->load_objects, load_object);
+
+ swfdec_load_object_load (SWFDEC_LOAD_OBJECT (load_object), url);
+
+ return load_object;
+}
diff --git a/libswfdec/swfdec_load_object.h b/libswfdec/swfdec_load_object.h
new file mode 100644
index 0000000..9a07b59
--- /dev/null
+++ b/libswfdec/swfdec_load_object.h
@@ -0,0 +1,58 @@
+/* Swfdec
+ * Copyright (C) 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 _SWFDEC_LOAD_OBJECT_H_
+#define _SWFDEC_LOAD_OBJECT_H_
+
+#include <libswfdec/swfdec.h>
+#include <libswfdec/swfdec_as_object.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecLoadObject SwfdecLoadObject;
+typedef struct _SwfdecLoadObjectClass SwfdecLoadObjectClass;
+
+#define SWFDEC_TYPE_LOAD_OBJECT (swfdec_load_object_get_type())
+#define SWFDEC_IS_LOAD_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_LOAD_OBJECT))
+#define SWFDEC_IS_LOAD_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_LOAD_OBJECT))
+#define SWFDEC_LOAD_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_LOAD_OBJECT, SwfdecLoadObject))
+#define SWFDEC_LOAD_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_LOAD_OBJECT, SwfdecLoadObjectClass))
+#define SWFDEC_LOAD_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_LOAD_OBJECT, SwfdecLoadObjectClass))
+
+struct _SwfdecLoadObject {
+ SwfdecAsObject object;
+
+ SwfdecAsObject *target; /* target object */
+ char * text; /* string that this LOAD_OBJECT displays */
+ SwfdecLoader * loader; /* loader when loading or NULL */
+};
+
+struct _SwfdecLoadObjectClass {
+ SwfdecAsObjectClass object_class;
+};
+
+GType swfdec_load_object_get_type (void);
+
+SwfdecAsObject *swfdec_load_object_new (SwfdecAsObject * target,
+ const char * url);
+
+
+G_END_DECLS
+#endif
diff --git a/libswfdec/swfdec_load_object_as.c b/libswfdec/swfdec_load_object_as.c
new file mode 100644
index 0000000..740c4de
--- /dev/null
+++ b/libswfdec/swfdec_load_object_as.c
@@ -0,0 +1,40 @@
+/* Swfdec
+ * Copyright (C) 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 <string.h>
+#include "swfdec_load_object.h"
+#include "swfdec_as_strings.h"
+#include "swfdec_debug.h"
+#include "swfdec_loader_internal.h"
+#include "swfdec_loadertarget.h"
+#include "swfdec_player_internal.h"
+
+SWFDEC_AS_NATIVE (301, 0, swfdec_load_object_load)
+void
+swfdec_load_object_load (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
+{
+ const char *url;
+
+ url = swfdec_as_value_to_string (cx, &argv[0]);
+ swfdec_load_object_new (obj, url);
+}
diff --git a/libswfdec/swfdec_load_object_as.h b/libswfdec/swfdec_load_object_as.h
new file mode 100644
index 0000000..f14f0e2
--- /dev/null
+++ b/libswfdec/swfdec_load_object_as.h
@@ -0,0 +1,31 @@
+/* Swfdec
+ * Copyright (C) 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 _SWFDEC_LOADABLE_H_
+#define _SWFDEC_LOADABLE_H_
+
+#include <libswfdec/swfdec.h>
+#include <libswfdec/swfdec_as_object.h>
+
+G_BEGIN_DECLS
+
+void swfdec_load_object_load (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval);
+
+G_END_DECLS
+#endif
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 98ded92..39a1cb1 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -38,6 +38,7 @@
#include "swfdec_initialize.h"
#include "swfdec_internal.h"
#include "swfdec_loader_internal.h"
+#include "swfdec_load_object.h"
#include "swfdec_marshal.h"
#include "swfdec_movie.h"
#include "swfdec_script.h"
@@ -1095,6 +1096,10 @@ swfdec_player_mark (SwfdecAsContext *con
for (walk = player->roots; walk; walk = walk->next) {
swfdec_as_object_mark (walk->data);
}
+ for (walk = player->load_objects; walk; walk = walk->next) {
+ swfdec_as_object_mark (walk->data);
+ swfdec_as_object_mark (SWFDEC_LOAD_OBJECT (walk->data)->target);
+ }
SWFDEC_AS_CONTEXT_CLASS (swfdec_player_parent_class)->mark (context);
}
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index 0d27ec8..45d9103 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -56,6 +56,7 @@ struct _SwfdecPlayer
guint width; /* width of movie */
guint height; /* height of movie */
GList * roots; /* all the root movies */
+ GList * load_objects; /* all the load objects */
SwfdecCache * cache; /* player cache */
gboolean bgcolor_set; /* TRUE if the background color has been set */
SwfdecColor bgcolor; /* background color */
diff --git a/libswfdec/swfdec_xml.c b/libswfdec/swfdec_xml.c
deleted file mode 100644
index c418ca4..0000000
--- a/libswfdec/swfdec_xml.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Swfdec
- * Copyright (C) 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 <string.h>
-#include "swfdec_xml.h"
-#include "swfdec_as_strings.h"
-#include "swfdec_debug.h"
-#include "swfdec_loader_internal.h"
-#include "swfdec_loadertarget.h"
-#include "swfdec_player_internal.h"
-
-/*** SWFDEC_LOADER_TARGET ***/
-
-static SwfdecPlayer *
-swfdec_xml_loader_target_get_player (SwfdecLoaderTarget *target)
-{
- return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
-}
-
-static void
-swfdec_xml_ondata (SwfdecXml *xml)
-{
- SwfdecAsValue val;
-
- if (xml->text) {
- SWFDEC_AS_VALUE_SET_STRING (&val,
- swfdec_as_context_get_string (SWFDEC_AS_OBJECT (xml)->context, xml->text));
- } else {
- SWFDEC_AS_VALUE_SET_UNDEFINED (&val);
- }
- swfdec_as_object_call (SWFDEC_AS_OBJECT (xml), SWFDEC_AS_STR_onData, 1, &val, NULL);
-}
-
-static void
-swfdec_xml_loader_target_error (SwfdecLoaderTarget *target, SwfdecLoader *loader)
-{
- SwfdecXml *xml = SWFDEC_XML (target);
-
- /* break reference to the loader */
- swfdec_loader_set_target (loader, NULL);
- xml->loader = NULL;
- g_object_unref (loader);
- /* emit onData */
- swfdec_xml_ondata (xml);
-}
-
-static void
-swfdec_xml_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loader)
-{
- SwfdecXml *xml = SWFDEC_XML (target);
- guint size;
-
- /* get the text from the loader */
- size = swfdec_buffer_queue_get_depth (loader->queue);
- xml->text = g_try_malloc (size + 1);
- if (xml->text) {
- SwfdecBuffer *buffer;
- guint i = 0;
- while ((buffer = swfdec_buffer_queue_pull_buffer (loader->queue))) {
- memcpy (xml->text + i, buffer->data, buffer->length);
- i += buffer->length;
- swfdec_buffer_unref (buffer);
- }
- g_assert (i == size);
- xml->text[size] = '\0';
- /* FIXME: validate otherwise? */
- if (!g_utf8_validate (xml->text, size, NULL)) {
- SWFDEC_ERROR ("downloaded data is not valid utf-8");
- g_free (xml->text);
- xml->text = NULL;
- }
- } else {
- SWFDEC_ERROR ("not enough memory to copy %u bytes", size);
- }
-
- /* break reference to the loader */
- swfdec_loader_set_target (loader, NULL);
- xml->loader = NULL;
- g_object_unref (loader);
- /* emit onData */
- swfdec_xml_ondata (xml);
-}
-
-static void
-swfdec_xml_loader_target_init (SwfdecLoaderTargetInterface *iface)
-{
- iface->get_player = swfdec_xml_loader_target_get_player;
- iface->eof = swfdec_xml_loader_target_eof;
- iface->error = swfdec_xml_loader_target_error;
-}
-
-/*** SWFDEC_XML ***/
-
-G_DEFINE_TYPE_WITH_CODE (SwfdecXml, swfdec_xml, SWFDEC_TYPE_AS_OBJECT,
- G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_xml_loader_target_init))
-
-static void
-swfdec_xml_reset (SwfdecXml *xml)
-{
- if (xml->loader) {
- swfdec_loader_set_target (xml->loader, NULL);
- g_object_unref (xml->loader);
- xml->loader = NULL;
- }
- g_free (xml->text);
- xml->text = NULL;
-}
-
-static void
-swfdec_xml_dispose (GObject *object)
-{
- SwfdecXml *xml = SWFDEC_XML (object);
-
- swfdec_xml_reset (xml);
-
- G_OBJECT_CLASS (swfdec_xml_parent_class)->dispose (object);
-}
-
-static void
-swfdec_xml_class_init (SwfdecXmlClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = swfdec_xml_dispose;
-}
-
-static void
-swfdec_xml_init (SwfdecXml *xml)
-{
-}
-
-SwfdecAsObject *
-swfdec_xml_new (SwfdecAsContext *context)
-{
- SwfdecAsObject *xml;
-
- g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), NULL);
-
- if (!swfdec_as_context_use_mem (context, sizeof (SwfdecXml)))
- return NULL;
- xml = g_object_new (SWFDEC_TYPE_XML, NULL);
- swfdec_as_object_add (xml, context, sizeof (SwfdecXml));
-
- return xml;
-}
-
-void
-swfdec_xml_load (SwfdecXml *xml, const char *url)
-{
- g_return_if_fail (SWFDEC_IS_XML (xml));
- g_return_if_fail (url != NULL);
-
- swfdec_xml_reset (xml);
- xml->loader = swfdec_player_load (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (xml)->context), url);
- swfdec_loader_set_target (xml->loader, SWFDEC_LOADER_TARGET (xml));
- swfdec_loader_set_data_type (xml->loader, SWFDEC_LOADER_DATA_TEXT);
-}
diff --git a/libswfdec/swfdec_xml.h b/libswfdec/swfdec_xml.h
deleted file mode 100644
index 77b355a..0000000
--- a/libswfdec/swfdec_xml.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Swfdec
- * Copyright (C) 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 _SWFDEC_XML_H_
-#define _SWFDEC_XML_H_
-
-#include <libswfdec/swfdec.h>
-#include <libswfdec/swfdec_as_object.h>
-
-G_BEGIN_DECLS
-
-
-typedef struct _SwfdecXml SwfdecXml;
-typedef struct _SwfdecXmlClass SwfdecXmlClass;
-
-#define SWFDEC_TYPE_XML (swfdec_xml_get_type())
-#define SWFDEC_IS_XML(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_XML))
-#define SWFDEC_IS_XML_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_XML))
-#define SWFDEC_XML(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_XML, SwfdecXml))
-#define SWFDEC_XML_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_XML, SwfdecXmlClass))
-#define SWFDEC_XML_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_XML, SwfdecXmlClass))
-
-struct _SwfdecXml {
- SwfdecAsObject object;
-
- char * text; /* string that this XML displays */
- SwfdecLoader * loader; /* loader when loading or NULL */
-};
-
-struct _SwfdecXmlClass {
- SwfdecAsObjectClass object_class;
-};
-
-GType swfdec_xml_get_type (void);
-
-SwfdecAsObject *swfdec_xml_new (SwfdecAsContext * context);
-
-void swfdec_xml_load (SwfdecXml * xml,
- const char * url);
-
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_xml_as.c b/libswfdec/swfdec_xml_as.c
index 8159977..10f9d13 100644
--- a/libswfdec/swfdec_xml_as.c
+++ b/libswfdec/swfdec_xml_as.c
@@ -21,22 +21,25 @@
#include "config.h"
#endif
-#include "swfdec_xml.h"
+#include "swfdec_xml_as.h"
#include "swfdec_as_native_function.h"
#include "swfdec_as_object.h"
#include "swfdec_as_strings.h"
#include "swfdec_debug.h"
#include "swfdec_internal.h"
#include "swfdec_player_internal.h"
+#include "swfdec_load_object_as.h"
+
+G_DEFINE_TYPE (SwfdecXml, swfdec_xml, SWFDEC_TYPE_AS_OBJECT)
static void
-swfdec_xml_do_load (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
+swfdec_xml_class_init (SwfdecXmlClass *klass)
{
- SwfdecXml *xml = SWFDEC_XML (obj);
- const char *url;
+}
- url = swfdec_as_value_to_string (cx, &argv[0]);
- swfdec_xml_load (xml, url);
+static void
+swfdec_xml_init (SwfdecXml *xml)
+{
}
void
@@ -62,6 +65,6 @@ swfdec_xml_init_context (SwfdecPlayer *p
SWFDEC_AS_VALUE_SET_OBJECT (&val, xml);
swfdec_as_object_set_variable (proto, SWFDEC_AS_STR_constructor, &val);
swfdec_as_object_add_function (proto, SWFDEC_AS_STR_load, SWFDEC_TYPE_XML,
- swfdec_xml_do_load, 1);
+ swfdec_load_object_load, 1);
}
diff --git a/libswfdec/swfdec_xml_as.h b/libswfdec/swfdec_xml_as.h
new file mode 100644
index 0000000..1681a8f
--- /dev/null
+++ b/libswfdec/swfdec_xml_as.h
@@ -0,0 +1,51 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * 2007 Pekka Lampila <pekka.lampila at iki.fi>
+ *
+ * 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_XML_H_
+#define _SWFDEC_XML_H_
+
+#include <libswfdec/swfdec_as_object.h>
+#include <libswfdec/swfdec_types.h>
+#include <libswfdec/swfdec_script.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SwfdecXml SwfdecXml;
+typedef struct _SwfdecXmlClass SwfdecXmlClass;
+
+#define SWFDEC_TYPE_XML (swfdec_xml_get_type())
+#define SWFDEC_IS_XML(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_XML))
+#define SWFDEC_IS_XML_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_XML))
+#define SWFDEC_XML(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_XML, SwfdecXml))
+#define SWFDEC_XML_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_XML, SwfdecXmlClass))
+#define SWFDEC_XML_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_XML, SwfdecXmlClass))
+
+struct _SwfdecXml {
+ SwfdecAsObject object;
+};
+
+struct _SwfdecXmlClass {
+ SwfdecAsObjectClass object_class;
+};
+
+GType swfdec_xml_get_type (void);
+
+G_END_DECLS
+#endif
More information about the Swfdec
mailing list