[Swfdec-commits] 8 commits - swfdec/swfdec_as_relay.c swfdec/swfdec_as_relay.h swfdec/swfdec_bitmap_data.c swfdec/swfdec_bitmap_data.h swfdec/swfdec_blur_filter_as.c swfdec/swfdec_color_matrix_filter_as.c swfdec/swfdec_color_transform_as.c swfdec/swfdec_color_transform_as.h swfdec/swfdec_filter.c swfdec/swfdec_filter.h swfdec/swfdec_initialize.as swfdec/swfdec_initialize.h swfdec/swfdec_movie_as_drawing.c swfdec/swfdec_net_connection.c swfdec/swfdec_net_connection.h swfdec/swfdec_sound_object.c swfdec/swfdec_sound_object.h swfdec/swfdec_sprite_movie_as.c swfdec/swfdec_style_sheet.c swfdec/swfdec_style_sheet.h swfdec/swfdec_text_field_movie_as.c swfdec/swfdec_text_field_movie.c swfdec/swfdec_text_field_movie_html.c swfdec/swfdec_text_format.c swfdec/swfdec_text_format.h swfdec/swfdec_transform_as.c swfdec/swfdec_transform_as.h
Benjamin Otte
company at kemper.freedesktop.org
Tue Oct 21 14:31:51 PDT 2008
swfdec/swfdec_as_relay.c | 14 +---
swfdec/swfdec_as_relay.h | 1
swfdec/swfdec_bitmap_data.c | 43 ++++++++------
swfdec/swfdec_bitmap_data.h | 8 +-
swfdec/swfdec_blur_filter_as.c | 7 +-
swfdec/swfdec_color_matrix_filter_as.c | 8 ++
swfdec/swfdec_color_transform_as.c | 34 +++++------
swfdec/swfdec_color_transform_as.h | 8 +-
swfdec/swfdec_filter.c | 2
swfdec/swfdec_filter.h | 6 +-
swfdec/swfdec_initialize.as | 2
swfdec/swfdec_initialize.h | 2
swfdec/swfdec_movie_as_drawing.c | 6 +-
swfdec/swfdec_net_connection.c | 22 +++++--
swfdec/swfdec_net_connection.h | 8 +-
swfdec/swfdec_sound_object.c | 11 ++-
swfdec/swfdec_sound_object.h | 5 +
swfdec/swfdec_sprite_movie_as.c | 15 ++---
swfdec/swfdec_style_sheet.c | 23 ++++---
swfdec/swfdec_style_sheet.h | 24 +++-----
swfdec/swfdec_text_field_movie.c | 4 -
swfdec/swfdec_text_field_movie_as.c | 32 +++++------
swfdec/swfdec_text_field_movie_html.c | 10 +--
swfdec/swfdec_text_format.c | 96 ++++++++++++++++-----------------
swfdec/swfdec_text_format.h | 34 +++++------
swfdec/swfdec_transform_as.c | 56 +++++++++++++------
swfdec/swfdec_transform_as.h | 8 +-
27 files changed, 264 insertions(+), 225 deletions(-)
New commits:
commit b17ebc1e5a060beda6cd83400bd5f9e928a6067b
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Oct 21 23:05:44 2008 +0200
NetConnection is a relay now
diff --git a/swfdec/swfdec_net_connection.c b/swfdec/swfdec_net_connection.c
index d826502..29f0a04 100644
--- a/swfdec/swfdec_net_connection.c
+++ b/swfdec/swfdec_net_connection.c
@@ -33,15 +33,15 @@
/*** SwfdecNetConnection ***/
-G_DEFINE_TYPE (SwfdecNetConnection, swfdec_net_connection, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_TYPE (SwfdecNetConnection, swfdec_net_connection, SWFDEC_TYPE_AS_RELAY)
static void
swfdec_net_connection_dispose (GObject *object)
{
- SwfdecNetConnection *net_connection = SWFDEC_NET_CONNECTION (object);
+ SwfdecNetConnection *conn = SWFDEC_NET_CONNECTION (object);
- g_free (net_connection->url);
- net_connection->url = NULL;
+ g_free (conn->url);
+ conn->url = NULL;
G_OBJECT_CLASS (swfdec_net_connection_parent_class)->dispose (object);
}
@@ -76,7 +76,7 @@ swfdec_net_connection_onstatus (SwfdecNetConnection *conn, const char *code,
swfdec_as_object_set_variable (info, SWFDEC_AS_STR_description, &value);
}
SWFDEC_AS_VALUE_SET_OBJECT (&value, info);
- swfdec_as_object_call (SWFDEC_AS_OBJECT (conn), SWFDEC_AS_STR_onStatus, 1, &value, NULL);
+ swfdec_as_relay_call (SWFDEC_AS_RELAY(conn), SWFDEC_AS_STR_onStatus, 1, &value, NULL);
}
void
@@ -111,7 +111,8 @@ swfdec_net_connection_do_connect (SwfdecAsContext *cx, SwfdecAsObject *object,
} else if (SWFDEC_AS_VALUE_IS_NULL (&val)) {
url = NULL;
} else {
- SWFDEC_FIXME ("untested argument to NetConnection.connect: type %u", val.type);
+ SWFDEC_FIXME ("untested argument to NetConnection.connect: type %u",
+ SWFDEC_AS_VALUE_GET_TYPE (&val));
url = NULL;
}
swfdec_net_connection_connect (conn, url);
@@ -160,10 +161,17 @@ swfdec_net_connection_get_usingTLS (SwfdecAsContext *cx,
}
// not actually the constructor, but called from the constructor
-SWFDEC_AS_CONSTRUCTOR (2100, 200, swfdec_net_connection_construct, swfdec_net_connection_get_type)
+SWFDEC_AS_NATIVE (2100, 200, swfdec_net_connection_construct)
void
swfdec_net_connection_construct (SwfdecAsContext *cx, SwfdecAsObject *obj,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
+ SwfdecNetConnection *conn;
+
+ if (obj == NULL)
+ return;
+
+ conn = g_object_new (SWFDEC_TYPE_NET_CONNECTION, "context", cx, NULL);
// FIXME: Set contentType and possible do some other stuff too
+ swfdec_as_object_set_relay (obj, SWFDEC_AS_RELAY (conn));
}
diff --git a/swfdec/swfdec_net_connection.h b/swfdec/swfdec_net_connection.h
index 6ab26b8..79d5ee8 100644
--- a/swfdec/swfdec_net_connection.h
+++ b/swfdec/swfdec_net_connection.h
@@ -1,5 +1,5 @@
/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 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
@@ -20,7 +20,7 @@
#ifndef _SWFDEC_NET_CONNECTION_H_
#define _SWFDEC_NET_CONNECTION_H_
-#include <swfdec/swfdec_as_object.h>
+#include <swfdec/swfdec_as_relay.h>
G_BEGIN_DECLS
@@ -36,13 +36,13 @@ typedef struct _SwfdecNetConnectionClass SwfdecNetConnectionClass;
#define SWFDEC_NET_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_NET_CONNECTION, SwfdecNetConnectionClass))
struct _SwfdecNetConnection {
- SwfdecAsObject object;
+ SwfdecAsRelay relay;
char * url; /* url for this net_connection or NULL for none */
};
struct _SwfdecNetConnectionClass {
- SwfdecAsObjectClass object_class;
+ SwfdecAsRelayClass relay_class;
};
GType swfdec_net_connection_get_type (void);
commit 491afcf5cf98c2268abb9fbd98a23584415aa859
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Oct 21 22:01:10 2008 +0200
make Transform a relay, too
diff --git a/swfdec/swfdec_sprite_movie_as.c b/swfdec/swfdec_sprite_movie_as.c
index 761e4ef..c146ca4 100644
--- a/swfdec/swfdec_sprite_movie_as.c
+++ b/swfdec/swfdec_sprite_movie_as.c
@@ -178,12 +178,13 @@ void
swfdec_sprite_movie_get_transform (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
+ SwfdecTransformAs *trans;
SwfdecMovie *movie;
SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE, &movie, "");
- SWFDEC_AS_VALUE_SET_OBJECT (rval,
- SWFDEC_AS_OBJECT (swfdec_transform_as_new (cx, movie)));
+ trans = swfdec_transform_as_new (cx, movie);
+ SWFDEC_AS_VALUE_SET_OBJECT (rval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (trans)));
}
SWFDEC_AS_NATIVE (900, 420, swfdec_sprite_movie_set_transform)
diff --git a/swfdec/swfdec_transform_as.c b/swfdec/swfdec_transform_as.c
index f70b3d3..eed7401 100644
--- a/swfdec/swfdec_transform_as.c
+++ b/swfdec/swfdec_transform_as.c
@@ -1,5 +1,6 @@
/* Swfdec
* Copyright (C) 2007-2008 Pekka Lampila <pekka.lampila at iki.fi>
+ * 2008 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
@@ -24,17 +25,30 @@
#include "swfdec_transform_as.h"
#include "swfdec_color_transform_as.h"
-#include "swfdec_as_strings.h"
#include "swfdec_as_internal.h"
-#include "swfdec_as_frame_internal.h"
+#include "swfdec_as_strings.h"
#include "swfdec_debug.h"
#include "swfdec_utils.h"
-G_DEFINE_TYPE (SwfdecTransformAs, swfdec_transform_as, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_TYPE (SwfdecTransformAs, swfdec_transform_as, SWFDEC_TYPE_AS_RELAY)
+
+static void
+swfdec_transform_as_mark (SwfdecGcObject *object)
+{
+ SwfdecTransformAs *trans = SWFDEC_TRANSFORM_AS (object);
+
+ if (trans->target != NULL)
+ swfdec_gc_object_mark (trans->target);
+
+ SWFDEC_GC_OBJECT_CLASS (swfdec_transform_as_parent_class)->mark (object);
+}
static void
swfdec_transform_as_class_init (SwfdecTransformAsClass *klass)
{
+ SwfdecGcObjectClass *gc_class = SWFDEC_GC_OBJECT_CLASS (klass);
+
+ gc_class->mark = swfdec_transform_as_mark;
}
static void
@@ -225,12 +239,14 @@ swfdec_transform_as_set_pixelBounds (SwfdecAsContext *cx,
}
// constructor
-SWFDEC_AS_CONSTRUCTOR (1106, 0, swfdec_transform_as_construct, swfdec_transform_as_get_type)
+SWFDEC_AS_NATIVE (1106, 0, swfdec_transform_as_construct)
void
swfdec_transform_as_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
- if (!cx->frame->construct)
+ SwfdecTransformAs *trans;
+
+ if (!swfdec_as_context_is_constructing (cx))
return;
if (argc < 1 ||
@@ -240,23 +256,29 @@ swfdec_transform_as_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
return;
}
- SWFDEC_TRANSFORM_AS (object)->target =
- SWFDEC_MOVIE (SWFDEC_AS_VALUE_GET_OBJECT (&argv[0]));
+ trans = g_object_new (SWFDEC_TYPE_TRANSFORM_AS, "context", cx, NULL);
+ trans->target = SWFDEC_MOVIE (SWFDEC_AS_VALUE_GET_OBJECT (&argv[0]));
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (trans));
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, object);
}
SwfdecTransformAs *
swfdec_transform_as_new (SwfdecAsContext *context, SwfdecMovie *target)
{
SwfdecTransformAs *transform;
+ SwfdecAsObject *object;
g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), NULL);
g_return_val_if_fail (SWFDEC_IS_MOVIE (target), NULL);
transform = g_object_new (SWFDEC_TYPE_TRANSFORM_AS, "context", context, NULL);
+ transform->target = target;
- swfdec_as_object_set_constructor_by_name (SWFDEC_AS_OBJECT (transform),
+ object = swfdec_as_object_new (context, NULL);
+ swfdec_as_object_set_constructor_by_name (object,
SWFDEC_AS_STR_flash, SWFDEC_AS_STR_geom, SWFDEC_AS_STR_Transform, NULL);
- transform->target = target;
+
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (transform));
return transform;
}
diff --git a/swfdec/swfdec_transform_as.h b/swfdec/swfdec_transform_as.h
index 8d21f49..1b4b93e 100644
--- a/swfdec/swfdec_transform_as.h
+++ b/swfdec/swfdec_transform_as.h
@@ -1,5 +1,6 @@
/* Swfdec
* Copyright (C) 2008 Pekka Lampila <pekka.lampila at iki.fi>
+ * 2008 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
@@ -21,8 +22,7 @@
#define _SWFDEC_TRANSFORM_H_
#include <swfdec/swfdec_movie.h>
-#include <swfdec/swfdec_as_object.h>
-#include <swfdec/swfdec_as_types.h>
+#include <swfdec/swfdec_as_relay.h>
G_BEGIN_DECLS
@@ -37,13 +37,13 @@ typedef struct _SwfdecTransformAsClass SwfdecTransformAsClass;
#define SWFDEC_TRANSFORM_AS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_TRANSFORM_AS, SwfdecTransformAsClass))
struct _SwfdecTransformAs {
- SwfdecAsObject object;
+ SwfdecAsRelay relay;
SwfdecMovie * target;
};
struct _SwfdecTransformAsClass {
- SwfdecAsObjectClass object_class;
+ SwfdecAsRelayClass relay_class;
};
GType swfdec_transform_as_get_type (void);
commit 14b41ffa05b81358f101d1e3dfaa8789b311b044
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Oct 21 21:27:34 2008 +0200
make TextFormat a relay
diff --git a/swfdec/swfdec_text_field_movie_as.c b/swfdec/swfdec_text_field_movie_as.c
index 954024e..606a56d 100644
--- a/swfdec/swfdec_text_field_movie_as.c
+++ b/swfdec/swfdec_text_field_movie_as.c
@@ -1065,16 +1065,14 @@ swfdec_text_field_movie_getNewTextFormat (SwfdecAsContext *cx,
SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE, &text, "");
- format = SWFDEC_TEXT_FORMAT (swfdec_text_format_new (cx));
- if (format == NULL)
- return;
+ format = swfdec_text_format_new (cx);
swfdec_text_attributes_copy (&format->attr,
swfdec_text_buffer_get_default_attributes (text->text),
SWFDEC_TEXT_ATTRIBUTES_MASK);
format->values_set = SWFDEC_TEXT_ATTRIBUTES_MASK;
- SWFDEC_AS_VALUE_SET_OBJECT (ret, SWFDEC_AS_OBJECT (format));
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (format)));
}
SWFDEC_AS_NATIVE (104, 105, swfdec_text_field_movie_setNewTextFormat)
@@ -1084,13 +1082,15 @@ swfdec_text_field_movie_setNewTextFormat (SwfdecAsContext *cx,
SwfdecAsValue *ret)
{
SwfdecTextFieldMovie *text;
+ SwfdecAsObject *format_object;
SwfdecTextFormat *format;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE, &text, "o", &format);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE, &text, "o", &format_object);
- if (!SWFDEC_IS_TEXT_FORMAT (format))
+ if (!SWFDEC_IS_TEXT_FORMAT (format_object->relay))
return;
+ format = SWFDEC_TEXT_FORMAT (format_object->relay);
swfdec_text_buffer_set_default_attributes (text->text,
&format->attr, format->values_set);
}
@@ -1142,10 +1142,10 @@ swfdec_text_field_movie_setTextFormat (SwfdecAsContext *cx,
if (!SWFDEC_AS_VALUE_IS_OBJECT (&argv[i]))
return;
- if (!SWFDEC_IS_TEXT_FORMAT (SWFDEC_AS_VALUE_GET_OBJECT (&argv[i])))
+ if (!SWFDEC_IS_TEXT_FORMAT (SWFDEC_AS_VALUE_GET_OBJECT (&argv[i])->relay))
return;
- format = SWFDEC_TEXT_FORMAT (SWFDEC_AS_VALUE_GET_OBJECT (&argv[i]));
+ format = SWFDEC_TEXT_FORMAT (SWFDEC_AS_VALUE_GET_OBJECT (&argv[i])->relay);
start = g_utf8_offset_to_pointer (string, start) - string;
end = g_utf8_offset_to_pointer (string, end) - string;
@@ -1182,8 +1182,8 @@ swfdec_text_field_movie_getTextFormat (SwfdecAsContext *cx,
string = swfdec_text_buffer_get_text (text->text);
length = g_utf8_strlen (string, -1);
- format = SWFDEC_TEXT_FORMAT (swfdec_text_format_new (cx));
- SWFDEC_AS_VALUE_SET_OBJECT (ret, SWFDEC_AS_OBJECT (format));
+ format = swfdec_text_format_new (cx);
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (format)));
if (argc == 0) {
start = 0;
diff --git a/swfdec/swfdec_text_field_movie_html.c b/swfdec/swfdec_text_field_movie_html.c
index b670062..81e68e2 100644
--- a/swfdec/swfdec_text_field_movie_html.c
+++ b/swfdec/swfdec_text_field_movie_html.c
@@ -128,7 +128,7 @@ swfdec_text_field_movie_html_tag_set_attribute (ParserData *data,
if (!tag->format)
return;
- object = SWFDEC_AS_OBJECT (tag->format);
+ object = swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (tag->format));
cx = swfdec_gc_object_get_context (object);
SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string (
cx, g_strndup (value, value_length)));
@@ -381,14 +381,14 @@ swfdec_text_field_movie_html_parse_tag (ParserData *data, const char *p)
tag = g_new0 (ParserTag, 1);
tag->name = name;
tag->name_length = name_length;
- tag->format = SWFDEC_TEXT_FORMAT (swfdec_text_format_new (data->cx));
+ tag->format = swfdec_text_format_new (data->cx);
tag->index = swfdec_text_buffer_get_length (data->text);
data->tags_open = g_slist_prepend (data->tags_open, tag);
// set format based on tag
if (tag->format != NULL) {
- object = SWFDEC_AS_OBJECT (tag->format);
+ object = swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (tag->format));
SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE);
if (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) {
diff --git a/swfdec/swfdec_text_format.c b/swfdec/swfdec_text_format.c
index c45379d..281e512 100644
--- a/swfdec/swfdec_text_format.c
+++ b/swfdec/swfdec_text_format.c
@@ -39,7 +39,7 @@
#include "swfdec_text_buffer.h"
#include "swfdec_text_layout.h"
-G_DEFINE_TYPE (SwfdecTextFormat, swfdec_text_format, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_TYPE (SwfdecTextFormat, swfdec_text_format, SWFDEC_TYPE_AS_RELAY)
static int property_offsets[] = {
G_STRUCT_OFFSET (SwfdecTextFormat, attr.align),
@@ -93,9 +93,9 @@ swfdec_text_format_get_string (SwfdecAsObject *object,
{
SwfdecTextFormat *format;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (!SWFDEC_TEXT_ATTRIBUTE_IS_SET (format->values_set, property)) {
SWFDEC_AS_VALUE_SET_NULL (ret);
@@ -114,9 +114,9 @@ swfdec_text_format_set_string (SwfdecAsObject *object,
SwfdecAsContext *context;
const char *s;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (argc < 1)
return;
@@ -143,9 +143,9 @@ swfdec_text_format_get_boolean (SwfdecAsObject *object,
{
SwfdecTextFormat *format;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (!SWFDEC_TEXT_ATTRIBUTE_IS_SET (format->values_set, property)) {
SWFDEC_AS_VALUE_SET_NULL (ret);
@@ -166,9 +166,9 @@ swfdec_text_format_set_boolean (SwfdecAsObject *object,
SwfdecTextFormat *format;
SwfdecAsContext *context;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (argc < 1)
return;
@@ -194,9 +194,9 @@ swfdec_text_format_get_integer (SwfdecAsObject *object,
{
SwfdecTextFormat *format;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (!SWFDEC_TEXT_ATTRIBUTE_IS_SET (format->values_set, property)) {
SWFDEC_AS_VALUE_SET_NULL (ret);
@@ -254,9 +254,9 @@ swfdec_text_format_set_integer (SwfdecAsObject *object,
{
SwfdecTextFormat *format;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (argc < 1)
return;
@@ -278,9 +278,9 @@ swfdec_text_format_do_get_align (SwfdecAsContext *cx, SwfdecAsObject *object,
{
SwfdecTextFormat *format;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (!SWFDEC_TEXT_ATTRIBUTE_IS_SET (format->values_set, SWFDEC_TEXT_ATTRIBUTE_ALIGN)) {
SWFDEC_AS_VALUE_SET_NULL (ret);
@@ -312,9 +312,9 @@ swfdec_text_format_do_set_align (SwfdecAsContext *cx, SwfdecAsObject *object,
SwfdecTextFormat *format;
const char *s;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (argc < 1)
return;
@@ -389,9 +389,9 @@ swfdec_text_format_do_get_color (SwfdecAsContext *cx, SwfdecAsObject *object,
{
SwfdecTextFormat *format;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (!SWFDEC_TEXT_ATTRIBUTE_IS_SET (format->values_set, SWFDEC_TEXT_ATTRIBUTE_COLOR)) {
SWFDEC_AS_VALUE_SET_NULL (ret);
@@ -407,9 +407,9 @@ swfdec_text_format_do_set_color (SwfdecAsContext *cx, SwfdecAsObject *object,
{
SwfdecTextFormat *format;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (argc < 1)
return;
@@ -432,9 +432,9 @@ swfdec_text_format_do_get_display (SwfdecAsContext *cx, SwfdecAsObject *object,
{
SwfdecTextFormat *format;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (!SWFDEC_TEXT_ATTRIBUTE_IS_SET (format->values_set, SWFDEC_TEXT_ATTRIBUTE_DISPLAY))
{
@@ -464,9 +464,9 @@ swfdec_text_format_do_set_display (SwfdecAsContext *cx, SwfdecAsObject *object,
SwfdecTextFormat *format;
const char *s;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
swfdec_as_value_to_integer (cx, &argv[0]);
swfdec_as_value_to_number (cx, &argv[0]);
@@ -579,9 +579,9 @@ swfdec_text_format_do_get_letter_spacing (SwfdecAsContext *cx,
{
SwfdecTextFormat *format;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (!SWFDEC_TEXT_ATTRIBUTE_IS_SET (format->values_set, SWFDEC_TEXT_ATTRIBUTE_LETTER_SPACING)) {
SWFDEC_AS_VALUE_SET_NULL (ret);
@@ -599,9 +599,9 @@ swfdec_text_format_do_set_letter_spacing (SwfdecAsContext *cx,
SwfdecTextFormat *format;
double d;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (argc < 1)
return;
@@ -665,9 +665,9 @@ swfdec_text_format_do_get_tab_stops (SwfdecAsContext *cx,
SwfdecAsValue val;
SwfdecAsObject *array;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (!SWFDEC_TEXT_ATTRIBUTE_IS_SET (format->values_set, SWFDEC_TEXT_ATTRIBUTE_TAB_STOPS)) {
SWFDEC_AS_VALUE_SET_NULL (ret);
@@ -689,9 +689,9 @@ swfdec_text_format_do_set_tab_stops (SwfdecAsContext *cx,
{
SwfdecTextFormat *format;
- if (!SWFDEC_IS_TEXT_FORMAT (object))
+ if (object == NULL || !SWFDEC_IS_TEXT_FORMAT (object->relay))
return;
- format = SWFDEC_TEXT_FORMAT (object);
+ format = SWFDEC_TEXT_FORMAT (object->relay);
if (argc < 1)
return;
@@ -994,7 +994,7 @@ swfdec_text_format_init_properties (SwfdecAsContext *cx)
swfdec_text_format_do_get_url, swfdec_text_format_do_set_url);
}
-SWFDEC_AS_CONSTRUCTOR (110, 0, swfdec_text_format_construct, swfdec_text_format_get_type)
+SWFDEC_AS_NATIVE (110, 0, swfdec_text_format_construct)
void
swfdec_text_format_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
@@ -1015,6 +1015,7 @@ swfdec_text_format_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
SWFDEC_AS_STR_leading,
NULL
};
+ SwfdecTextFormat *format;
SwfdecAsFunction *function;
SwfdecAsObject *tmp;
SwfdecAsValue val;
@@ -1025,11 +1026,11 @@ swfdec_text_format_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
return;
}
- g_assert (SWFDEC_IS_TEXT_FORMAT (object));
-
swfdec_text_format_init_properties (cx);
- swfdec_text_format_clear (SWFDEC_TEXT_FORMAT (object));
+ format = g_object_new (SWFDEC_TYPE_TEXT_FORMAT, "context", cx, NULL);
+ swfdec_text_format_clear (format);
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (format));
// FIXME: Need better way to create function without prototype/constructor
tmp = cx->Function;
@@ -1050,16 +1051,12 @@ swfdec_text_format_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
SwfdecTextFormat *
swfdec_text_format_copy (SwfdecTextFormat *copy_from)
{
- SwfdecAsObject *object_to;
SwfdecTextFormat *copy_to;
g_return_val_if_fail (SWFDEC_IS_TEXT_FORMAT (copy_from), NULL);
- object_to = swfdec_text_format_new_no_properties (
+ copy_to = swfdec_text_format_new_no_properties (
swfdec_gc_object_get_context (copy_from));
- if (object_to == NULL)
- return NULL;
- copy_to = SWFDEC_TEXT_FORMAT (object_to);
swfdec_text_attributes_copy (©_to->attr, ©_from->attr, -1);
copy_to->values_set = copy_from->values_set;
@@ -1067,10 +1064,11 @@ swfdec_text_format_copy (SwfdecTextFormat *copy_from)
return copy_to;
}
-SwfdecAsObject *
+SwfdecTextFormat *
swfdec_text_format_new_no_properties (SwfdecAsContext *context)
{
- SwfdecAsObject *tmp, *ret;
+ SwfdecAsObject *tmp, *object;
+ SwfdecTextFormat *ret;
SwfdecAsFunction *function;
SwfdecAsValue val;
@@ -1078,8 +1076,10 @@ swfdec_text_format_new_no_properties (SwfdecAsContext *context)
ret = g_object_new (SWFDEC_TYPE_TEXT_FORMAT, "context", context, NULL);
- swfdec_text_format_clear (SWFDEC_TEXT_FORMAT (ret));
- swfdec_as_object_set_constructor_by_name (ret, SWFDEC_AS_STR_TextFormat, NULL);
+ swfdec_text_format_clear (ret);
+ object = swfdec_as_object_new (context, NULL);
+ swfdec_as_object_set_constructor_by_name (object, SWFDEC_AS_STR_TextFormat, NULL);
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (ret));
// FIXME: Need better way to create function without prototype/constructor
tmp = context->Function;
@@ -1089,13 +1089,13 @@ swfdec_text_format_new_no_properties (SwfdecAsContext *context)
context->Function = tmp;
if (function != NULL) {
SWFDEC_AS_VALUE_SET_OBJECT (&val, SWFDEC_AS_OBJECT (function));
- swfdec_as_object_set_variable (ret, SWFDEC_AS_STR_getTextExtent, &val);
+ swfdec_as_object_set_variable (object, SWFDEC_AS_STR_getTextExtent, &val);
}
return ret;
}
-SwfdecAsObject *
+SwfdecTextFormat *
swfdec_text_format_new (SwfdecAsContext *context)
{
g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), NULL);
diff --git a/swfdec/swfdec_text_format.h b/swfdec/swfdec_text_format.h
index a5f32a4..c4ba7ad 100644
--- a/swfdec/swfdec_text_format.h
+++ b/swfdec/swfdec_text_format.h
@@ -21,11 +21,9 @@
#ifndef _SWFDEC_TEXT_FORMAT_H_
#define _SWFDEC_TEXT_FORMAT_H_
-#include <swfdec/swfdec_as_object.h>
-#include <swfdec/swfdec_as_array.h>
+#include <swfdec/swfdec_as_relay.h>
#include <swfdec/swfdec_text_attributes.h>
#include <swfdec/swfdec_types.h>
-#include <swfdec/swfdec_script.h>
G_BEGIN_DECLS
@@ -40,7 +38,7 @@ typedef struct _SwfdecTextFormatClass SwfdecTextFormatClass;
#define SWFDEC_TEXT_FORMAT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_TEXT_FORMAT, SwfdecTextFormatClass))
struct _SwfdecTextFormat {
- SwfdecAsObject object;
+ SwfdecAsRelay relay;
SwfdecTextAttributes attr;
@@ -48,24 +46,24 @@ struct _SwfdecTextFormat {
};
struct _SwfdecTextFormatClass {
- SwfdecAsObjectClass object_class;
+ SwfdecAsRelayClass relay_class;
};
GType swfdec_text_format_get_type (void);
-SwfdecAsObject * swfdec_text_format_new (SwfdecAsContext * context);
-SwfdecAsObject * swfdec_text_format_new_no_properties (SwfdecAsContext * context);
-void swfdec_text_format_set_defaults (SwfdecTextFormat * format);
-SwfdecTextFormat * swfdec_text_format_copy (SwfdecTextFormat * copy_from);
-void swfdec_text_format_add (SwfdecTextFormat * format,
- const SwfdecTextFormat *from);
-gboolean swfdec_text_format_equal (const SwfdecTextFormat *a,
- const SwfdecTextFormat *b);
-gboolean swfdec_text_format_equal_or_undefined (const SwfdecTextFormat *a,
- const SwfdecTextFormat *b);
-void swfdec_text_format_remove_different (SwfdecTextFormat * format,
- const SwfdecTextFormat * from);
-void swfdec_text_format_init_properties (SwfdecAsContext * cx);
+SwfdecTextFormat * swfdec_text_format_new (SwfdecAsContext * context);
+SwfdecTextFormat * swfdec_text_format_new_no_properties (SwfdecAsContext * context);
+void swfdec_text_format_set_defaults (SwfdecTextFormat * format);
+SwfdecTextFormat * swfdec_text_format_copy (SwfdecTextFormat * copy_from);
+void swfdec_text_format_add (SwfdecTextFormat * format,
+ const SwfdecTextFormat *from);
+gboolean swfdec_text_format_equal (const SwfdecTextFormat *a,
+ const SwfdecTextFormat *b);
+gboolean swfdec_text_format_equal_or_undefined (const SwfdecTextFormat *a,
+ const SwfdecTextFormat *b);
+void swfdec_text_format_remove_different (SwfdecTextFormat * format,
+ const SwfdecTextFormat *from);
+void swfdec_text_format_init_properties (SwfdecAsContext * cx);
G_END_DECLS
#endif
commit 51db426c52ccc9f586c573941c5aea5833e62ddc
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Oct 21 19:18:31 2008 +0200
make ColorTransform a relay
diff --git a/swfdec/swfdec_bitmap_data.c b/swfdec/swfdec_bitmap_data.c
index 6f5ba03..17023ff 100644
--- a/swfdec/swfdec_bitmap_data.c
+++ b/swfdec/swfdec_bitmap_data.c
@@ -499,8 +499,8 @@ swfdec_bitmap_data_draw (SwfdecAsContext *cx, SwfdecAsObject *object,
} else {
cairo_matrix_init_identity (&mat);
}
- if (SWFDEC_IS_COLOR_TRANSFORM_AS (trans)) {
- swfdec_color_transform_get_transform (SWFDEC_COLOR_TRANSFORM_AS (trans), &ctrans);
+ if (trans && SWFDEC_IS_COLOR_TRANSFORM_AS (trans->relay)) {
+ swfdec_color_transform_get_transform (SWFDEC_COLOR_TRANSFORM_AS (trans->relay), &ctrans);
} else {
swfdec_color_transform_init_identity (&ctrans);
}
@@ -633,8 +633,8 @@ swfdec_bitmap_data_colorTransform (SwfdecAsContext *cx, SwfdecAsObject *object,
if (!swfdec_rectangle_from_as_object (&area, rect))
return;
- if (SWFDEC_IS_COLOR_TRANSFORM_AS (trans))
- swfdec_color_transform_get_transform (SWFDEC_COLOR_TRANSFORM_AS (trans), &ctrans);
+ if (trans && SWFDEC_IS_COLOR_TRANSFORM_AS (trans->relay))
+ swfdec_color_transform_get_transform (SWFDEC_COLOR_TRANSFORM_AS (trans->relay), &ctrans);
else
return;
diff --git a/swfdec/swfdec_color_transform_as.c b/swfdec/swfdec_color_transform_as.c
index 1b7b6ff..953217a 100644
--- a/swfdec/swfdec_color_transform_as.c
+++ b/swfdec/swfdec_color_transform_as.c
@@ -27,7 +27,7 @@
#include "swfdec_as_frame_internal.h"
#include "swfdec_debug.h"
-G_DEFINE_TYPE (SwfdecColorTransformAs, swfdec_color_transform_as, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_TYPE (SwfdecColorTransformAs, swfdec_color_transform_as, SWFDEC_TYPE_AS_RELAY)
static void
swfdec_color_transform_as_class_init (SwfdecColorTransformAsClass *klass)
@@ -316,9 +316,9 @@ swfdec_color_transform_as_concat (SwfdecAsContext *cx,
SWFDEC_AS_CHECK (SWFDEC_TYPE_COLOR_TRANSFORM_AS, &transform, "o",
&other_object);
- if (!SWFDEC_IS_COLOR_TRANSFORM_AS (other_object))
+ if (!SWFDEC_IS_COLOR_TRANSFORM_AS (other_object->relay))
return;
- other = SWFDEC_COLOR_TRANSFORM_AS (other_object);
+ other = SWFDEC_COLOR_TRANSFORM_AS (other_object->relay);
transform->rb += (transform->ra * other->rb);
transform->gb += (transform->ga * other->gb);
@@ -331,32 +331,27 @@ swfdec_color_transform_as_concat (SwfdecAsContext *cx,
}
// constructor
-SWFDEC_AS_CONSTRUCTOR (1105, 0, swfdec_color_transform_as_construct, swfdec_color_transform_as_get_type)
+SWFDEC_AS_NATIVE (1105, 0, swfdec_color_transform_as_construct)
void
swfdec_color_transform_as_construct (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
SwfdecAsValue *ret)
{
SwfdecColorTransformAs *transform;
- guint i;
if (!cx->frame->construct)
return;
+ transform = g_object_new (SWFDEC_TYPE_COLOR_TRANSFORM_AS, "context", cx, NULL);
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (transform));
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, object);
+
if (argc < 8)
return;
- transform = SWFDEC_COLOR_TRANSFORM_AS (object);
-
- i = 0;
- transform->ra = swfdec_as_value_to_number (cx, &argv[i++]);
- transform->ga = swfdec_as_value_to_number (cx, &argv[i++]);
- transform->ba = swfdec_as_value_to_number (cx, &argv[i++]);
- transform->aa = swfdec_as_value_to_number (cx, &argv[i++]);
- transform->rb = swfdec_as_value_to_number (cx, &argv[i++]);
- transform->gb = swfdec_as_value_to_number (cx, &argv[i++]);
- transform->bb = swfdec_as_value_to_number (cx, &argv[i++]);
- transform->ab = swfdec_as_value_to_number (cx, &argv[i++]);
+ SWFDEC_AS_CHECK (0, NULL, "nnnnnnnn",
+ &transform->ra, &transform->ga, &transform->ba, &transform->aa,
+ &transform->rb, &transform->gb, &transform->bb, &transform->ab);
}
SwfdecColorTransformAs *
@@ -364,13 +359,16 @@ swfdec_color_transform_as_new_from_transform (SwfdecAsContext *context,
const SwfdecColorTransform *transform)
{
SwfdecColorTransformAs *transform_as;
+ SwfdecAsObject *object;
g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), NULL);
g_return_val_if_fail (transform != NULL, NULL);
transform_as = g_object_new (SWFDEC_TYPE_COLOR_TRANSFORM_AS, "context", context, NULL);
-
- swfdec_as_object_set_constructor_by_name (SWFDEC_AS_OBJECT (transform_as),
+ /* do it this way so the constructor isn't called */
+ object = swfdec_as_object_new (context, NULL);
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (transform_as));
+ swfdec_as_object_set_constructor_by_name (object,
SWFDEC_AS_STR_flash, SWFDEC_AS_STR_geom, SWFDEC_AS_STR_ColorTransform, NULL);
transform_as->ra = transform->ra / 256.0;
diff --git a/swfdec/swfdec_color_transform_as.h b/swfdec/swfdec_color_transform_as.h
index 6a0704e..d281152 100644
--- a/swfdec/swfdec_color_transform_as.h
+++ b/swfdec/swfdec_color_transform_as.h
@@ -20,9 +20,7 @@
#ifndef _SWFDEC_COLOR_TRANSFORM_H_
#define _SWFDEC_COLOR_TRANSFORM_H_
-#include <swfdec/swfdec_as_object.h>
-#include <swfdec/swfdec_as_types.h>
-#include <swfdec/swfdec_types.h>
+#include <swfdec/swfdec_as_relay.h>
#include <swfdec/swfdec_color.h>
G_BEGIN_DECLS
@@ -38,13 +36,13 @@ typedef struct _SwfdecColorTransformAsClass SwfdecColorTransformAsClass;
#define SWFDEC_COLOR_TRANSFORM_AS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_COLOR_TRANSFORM_AS, SwfdecColorTransformAsClass))
struct _SwfdecColorTransformAs {
- SwfdecAsObject object;
+ SwfdecAsRelay relay;
double ra, rb, ga, gb, ba, bb, aa, ab;
};
struct _SwfdecColorTransformAsClass {
- SwfdecAsObjectClass object_class;
+ SwfdecAsRelayClass relay_class;
};
GType swfdec_color_transform_as_get_type (void);
diff --git a/swfdec/swfdec_transform_as.c b/swfdec/swfdec_transform_as.c
index c27b465..f70b3d3 100644
--- a/swfdec/swfdec_transform_as.c
+++ b/swfdec/swfdec_transform_as.c
@@ -136,15 +136,16 @@ swfdec_transform_as_get_colorTransform (SwfdecAsContext *cx,
SwfdecAsValue *ret)
{
SwfdecTransformAs *transform;
+ SwfdecColorTransformAs *ctrans;
SWFDEC_AS_CHECK (SWFDEC_TYPE_TRANSFORM_AS, &transform, "");
if (transform->target == NULL)
return;
- SWFDEC_AS_VALUE_SET_OBJECT (ret,
- SWFDEC_AS_OBJECT (swfdec_color_transform_as_new_from_transform (cx,
- &transform->target->color_transform)));
+ ctrans = swfdec_color_transform_as_new_from_transform (cx,
+ &transform->target->color_transform);
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (ctrans)));
}
SWFDEC_AS_NATIVE (1106, 106, swfdec_transform_as_set_colorTransform)
@@ -162,10 +163,10 @@ swfdec_transform_as_set_colorTransform (SwfdecAsContext *cx,
if (self->target == NULL)
return;
- if (!SWFDEC_IS_COLOR_TRANSFORM_AS (color))
+ if (color == NULL || !SWFDEC_IS_COLOR_TRANSFORM_AS (color->relay))
return;
- transform_as = SWFDEC_COLOR_TRANSFORM_AS (color);
+ transform_as = SWFDEC_COLOR_TRANSFORM_AS (color->relay);
swfdec_color_transform_get_transform (transform_as, &self->target->color_transform);
}
@@ -178,6 +179,7 @@ swfdec_transform_as_get_concatenatedColorTransform (SwfdecAsContext *cx,
{
SwfdecTransformAs *self;
SwfdecColorTransform chain;
+ SwfdecColorTransformAs *ctrans;
SwfdecMovie *movie;
SWFDEC_AS_CHECK (SWFDEC_TYPE_TRANSFORM_AS, &self, "");
@@ -191,8 +193,8 @@ swfdec_transform_as_get_concatenatedColorTransform (SwfdecAsContext *cx,
swfdec_color_transform_chain (&chain, &movie->color_transform, &chain);
}
- SWFDEC_AS_VALUE_SET_OBJECT (ret, SWFDEC_AS_OBJECT (
- swfdec_color_transform_as_new_from_transform (cx, &chain)));
+ ctrans = swfdec_color_transform_as_new_from_transform (cx, &chain);
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (ctrans)));
}
SWFDEC_AS_NATIVE (1106, 108, swfdec_transform_as_set_concatenatedColorTransform)
commit edbb7312f505b2abe9148ea7d3b72e5eb91ab8a4
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Oct 21 18:07:44 2008 +0200
make StyleSheet a relay
diff --git a/swfdec/swfdec_style_sheet.c b/swfdec/swfdec_style_sheet.c
index 94e0e29..300bbd8 100644
--- a/swfdec/swfdec_style_sheet.c
+++ b/swfdec/swfdec_style_sheet.c
@@ -41,7 +41,7 @@ enum {
LAST_SIGNAL
};
-G_DEFINE_TYPE (SwfdecStyleSheet, swfdec_style_sheet, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_TYPE (SwfdecStyleSheet, swfdec_style_sheet, SWFDEC_TYPE_AS_RELAY)
static guint signals[LAST_SIGNAL] = { 0, };
static void
@@ -234,7 +234,7 @@ swfdec_style_sheet_update (SwfdecAsContext *cx, SwfdecAsObject *object,
{
SwfdecStyleSheet *style;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_STYLESHEET, &style, "");
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_STYLE_SHEET, &style, "");
g_signal_emit (style, signals[UPDATE], 0);
}
@@ -246,12 +246,11 @@ swfdec_style_sheet_parseCSSInternal (SwfdecAsContext *cx,
SwfdecAsValue *rval)
{
SwfdecAsObject *values;
+ const char *s;
- if (argc < 1)
- return;
+ SWFDEC_AS_CHECK (0, NULL, "s", &s);
- values =
- swfdec_style_sheet_parse (cx, swfdec_as_value_to_string (cx, &argv[0]));
+ values = swfdec_style_sheet_parse (cx, s);
if (values == NULL) {
SWFDEC_AS_VALUE_SET_NULL (rval);
@@ -307,17 +306,21 @@ swfdec_style_sheet_parseColor (SwfdecAsContext *cx, SwfdecAsObject *object,
swfdec_as_value_set_integer (cx, rval, result);
}
-SWFDEC_AS_CONSTRUCTOR (113, 0, swfdec_style_sheet_construct, swfdec_style_sheet_get_type)
+SWFDEC_AS_NATIVE (113, 0, swfdec_style_sheet_construct)
void
swfdec_style_sheet_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
+ SwfdecStyleSheet *sheet;
+
if (!swfdec_as_context_is_constructing (cx)) {
SWFDEC_FIXME ("What do we do if not constructing?");
return;
}
- g_assert (SWFDEC_IS_STYLESHEET (object));
+ sheet = g_object_new (SWFDEC_TYPE_STYLE_SHEET, "context", cx, NULL);
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (sheet));
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, object);
}
static SwfdecTextFormat *
@@ -326,7 +329,7 @@ swfdec_style_sheet_get_format (SwfdecStyleSheet *style, const char *name)
SwfdecAsObject *styles;
SwfdecAsValue val;
- g_return_val_if_fail (SWFDEC_IS_STYLESHEET (style), NULL);
+ g_return_val_if_fail (SWFDEC_IS_STYLE_SHEET (style), NULL);
g_return_val_if_fail (name != NULL, NULL);
swfdec_as_object_get_variable (SWFDEC_AS_OBJECT (style),
@@ -355,7 +358,7 @@ swfdec_style_sheet_get_class_format (SwfdecStyleSheet *style, const char *name)
{
char *name_full;
- g_return_val_if_fail (SWFDEC_IS_STYLESHEET (style), NULL);
+ g_return_val_if_fail (SWFDEC_IS_STYLE_SHEET (style), NULL);
g_return_val_if_fail (name != NULL, NULL);
name_full = g_malloc (1 + strlen (name) + 1);
diff --git a/swfdec/swfdec_style_sheet.h b/swfdec/swfdec_style_sheet.h
index 226ff87..d1d7292 100644
--- a/swfdec/swfdec_style_sheet.h
+++ b/swfdec/swfdec_style_sheet.h
@@ -18,12 +18,10 @@
* Boston, MA 02110-1301 USA
*/
-#ifndef _SWFDEC_STYLESHEET_H_
-#define _SWFDEC_STYLESHEET_H_
+#ifndef _SWFDEC_STYLE_SHEET_H_
+#define _SWFDEC_STYLE_SHEET_H_
-#include <swfdec/swfdec_as_object.h>
-#include <swfdec/swfdec_types.h>
-#include <swfdec/swfdec_script.h>
+#include <swfdec/swfdec_as_relay.h>
#include <swfdec/swfdec_text_format.h>
G_BEGIN_DECLS
@@ -31,19 +29,19 @@ G_BEGIN_DECLS
typedef struct _SwfdecStyleSheet SwfdecStyleSheet;
typedef struct _SwfdecStyleSheetClass SwfdecStyleSheetClass;
-#define SWFDEC_TYPE_STYLESHEET (swfdec_style_sheet_get_type())
-#define SWFDEC_IS_STYLESHEET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_STYLESHEET))
-#define SWFDEC_IS_STYLESHEET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_STYLESHEET))
-#define SWFDEC_STYLESHEET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_STYLESHEET, SwfdecStyleSheet))
-#define SWFDEC_STYLESHEET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_STYLESHEET, SwfdecStyleSheetClass))
-#define SWFDEC_STYLESHEET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_STYLESHEET, SwfdecStyleSheetClass))
+#define SWFDEC_TYPE_STYLE_SHEET (swfdec_style_sheet_get_type())
+#define SWFDEC_IS_STYLE_SHEET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_STYLE_SHEET))
+#define SWFDEC_IS_STYLE_SHEET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_STYLE_SHEET))
+#define SWFDEC_STYLE_SHEET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_STYLE_SHEET, SwfdecStyleSheet))
+#define SWFDEC_STYLE_SHEET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_STYLE_SHEET, SwfdecStyleSheetClass))
+#define SWFDEC_STYLE_SHEET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_STYLE_SHEET, SwfdecStyleSheetClass))
struct _SwfdecStyleSheet {
- SwfdecAsObject object;
+ SwfdecAsRelay relay;
};
struct _SwfdecStyleSheetClass {
- SwfdecAsObjectClass object_class;
+ SwfdecAsRelayClass relay_class;
};
GType swfdec_style_sheet_get_type (void);
diff --git a/swfdec/swfdec_text_field_movie.c b/swfdec/swfdec_text_field_movie.c
index bbebe17..e36d581 100644
--- a/swfdec/swfdec_text_field_movie.c
+++ b/swfdec/swfdec_text_field_movie.c
@@ -288,8 +288,8 @@ swfdec_text_field_movie_dispose (GObject *object)
text = SWFDEC_TEXT_FIELD_MOVIE (object);
if (text->style_sheet) {
- if (SWFDEC_IS_STYLESHEET (text->style_sheet)) {
- g_signal_handlers_disconnect_matched (text->style_sheet,
+ if (SWFDEC_IS_STYLE_SHEET (text->style_sheet->relay)) {
+ g_signal_handlers_disconnect_matched (text->style_sheet->relay,
G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, text);
}
text->style_sheet = NULL;
diff --git a/swfdec/swfdec_text_field_movie_as.c b/swfdec/swfdec_text_field_movie_as.c
index 18c4c35..954024e 100644
--- a/swfdec/swfdec_text_field_movie_as.c
+++ b/swfdec/swfdec_text_field_movie_as.c
@@ -914,19 +914,19 @@ swfdec_text_field_movie_set_styleSheet (SwfdecAsContext *cx,
if (text->style_sheet == value)
return;
- if (text->style_sheet != NULL && SWFDEC_IS_STYLESHEET (text->style_sheet)) {
- g_signal_handlers_disconnect_by_func (text->style_sheet,
+ if (text->style_sheet != NULL && SWFDEC_IS_STYLE_SHEET (text->style_sheet->relay)) {
+ g_signal_handlers_disconnect_by_func (text->style_sheet->relay,
swfdec_text_field_movie_style_sheet_update, text);
- g_object_remove_weak_pointer (G_OBJECT (text->style_sheet),
+ g_object_remove_weak_pointer (G_OBJECT (text->style_sheet->relay),
(gpointer) &text->style_sheet);
}
text->style_sheet = value;
- if (SWFDEC_IS_STYLESHEET (value)) {
- g_signal_connect_swapped (value, "update",
+ if (value && SWFDEC_IS_STYLE_SHEET (value->relay)) {
+ g_signal_connect_swapped (value->relay, "update",
G_CALLBACK (swfdec_text_field_movie_style_sheet_update), text);
- g_object_add_weak_pointer (G_OBJECT (text->style_sheet),
+ g_object_add_weak_pointer (G_OBJECT (text->style_sheet->relay),
(gpointer) &text->style_sheet);
swfdec_text_field_movie_style_sheet_update (text);
diff --git a/swfdec/swfdec_text_field_movie_html.c b/swfdec/swfdec_text_field_movie_html.c
index a68bb1c..b670062 100644
--- a/swfdec/swfdec_text_field_movie_html.c
+++ b/swfdec/swfdec_text_field_movie_html.c
@@ -499,8 +499,8 @@ swfdec_text_field_movie_html_parse (SwfdecTextFieldMovie *text, const char *str)
data.cx = swfdec_gc_object_get_context (text);
data.multiline = (data.cx->version < 7 || text->multiline);
data.condense_white = text->condense_white;
- if (text->style_sheet != NULL && SWFDEC_IS_STYLESHEET (text->style_sheet)) {
- data.style_sheet = SWFDEC_STYLESHEET (text->style_sheet);
+ if (text->style_sheet != NULL && SWFDEC_IS_STYLE_SHEET (text->style_sheet->relay)) {
+ data.style_sheet = SWFDEC_STYLE_SHEET (text->style_sheet->relay);
} else {
data.style_sheet = NULL;
}
commit eb9dcf44d90e8efbd7309fcbac85ba71a500ee06
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Oct 21 17:00:16 2008 +0200
make Sound a relay
also fix the fact that the Sound constructor and areSoundsInaccessible
occupy the same ASnative slot
diff --git a/swfdec/swfdec_initialize.as b/swfdec/swfdec_initialize.as
index 1c44a98..be23547 100644
--- a/swfdec/swfdec_initialize.as
+++ b/swfdec/swfdec_initialize.as
@@ -256,7 +256,7 @@ ASSetPropFlags(LoadVars.prototype, null, 131);
/*** Sound ***/
-Sound = ASconstructor (500, 16);
+Sound = ASconstructor (500, 17);
ASSetNative (Sound.prototype, 500, "getPan,getTransform,getVolume,setPan,setTransform,setVolume,stop,attachSound,start,6getDuration,6setDuration,6getPosition,6setPosition,6loadSound,6getBytesLoaded,6getBytesTotal,9areSoundsInaccessible");
ASSetNativeAccessor (Sound.prototype, 500, "checkPolicyFile", 18);
ASSetPropFlags (Sound.prototype, null, 7);
diff --git a/swfdec/swfdec_initialize.h b/swfdec/swfdec_initialize.h
index b2b7fe5..aa4b79b 100644
--- a/swfdec/swfdec_initialize.h
+++ b/swfdec/swfdec_initialize.h
@@ -809,7 +809,7 @@ static const unsigned char swfdec_initialize[] = {
0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x63, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x16, 0x52, 0x17,
0x4F, 0x96, 0x08, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, 0x68, 0x1C, 0x96, 0x02, 0x00,
0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96,
- 0x13, 0x00, 0x08, 0x71, 0x07, 0x10, 0x00, 0x00, 0x00, 0x07, 0xF4, 0x01, 0x00, 0x00, 0x07, 0x02,
+ 0x13, 0x00, 0x08, 0x71, 0x07, 0x11, 0x00, 0x00, 0x00, 0x07, 0xF4, 0x01, 0x00, 0x00, 0x07, 0x02,
0x00, 0x00, 0x00, 0x08, 0x3A, 0x3D, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x72, 0x07, 0xF4, 0x01, 0x00,
0x00, 0x08, 0x71, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00,
0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x12, 0x00, 0x00, 0x00, 0x08, 0x48,
diff --git a/swfdec/swfdec_sound_object.c b/swfdec/swfdec_sound_object.c
index f7dc144..ac553da 100644
--- a/swfdec/swfdec_sound_object.c
+++ b/swfdec/swfdec_sound_object.c
@@ -36,7 +36,7 @@
/*** SwfdecSoundObject ***/
-G_DEFINE_TYPE (SwfdecSoundObject, swfdec_sound_object, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_TYPE (SwfdecSoundObject, swfdec_sound_object, SWFDEC_TYPE_AS_RELAY)
static void
swfdec_sound_object_mark (SwfdecGcObject *object)
@@ -438,24 +438,25 @@ swfdec_sound_object_stop (SwfdecAsContext *cx, SwfdecAsObject *object, guint arg
}
}
-SWFDEC_AS_CONSTRUCTOR (500, 16, swfdec_sound_object_construct, swfdec_sound_object_get_type)
+SWFDEC_AS_NATIVE (500, 17, swfdec_sound_object_construct)
void
swfdec_sound_object_construct (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *ret)
{
SwfdecSoundObject *sound;
- SwfdecPlayer *player;
if (!swfdec_as_context_is_constructing (cx))
return;
- sound = SWFDEC_SOUND_OBJECT (object);
- player = SWFDEC_PLAYER (cx);
+ sound = g_object_new (SWFDEC_TYPE_SOUND_OBJECT, "context", cx, NULL);
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (sound));
if (argc == 0 || SWFDEC_AS_VALUE_IS_UNDEFINED (&argv[0])) {
sound->target = NULL;
} else {
sound->target = swfdec_as_value_to_string (cx, &argv[0]);
}
+
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, object);
}
diff --git a/swfdec/swfdec_sound_object.h b/swfdec/swfdec_sound_object.h
index c543410..453a883 100644
--- a/swfdec/swfdec_sound_object.h
+++ b/swfdec/swfdec_sound_object.h
@@ -20,6 +20,7 @@
#ifndef _SWFDEC_SOUND_OBJECT_H_
#define _SWFDEC_SOUND_OBJECT_H_
+#include <swfdec/swfdec_as_relay.h>
#include <swfdec/swfdec_audio.h>
#include <swfdec/swfdec_load_sound.h>
#include <swfdec/swfdec_movie.h>
@@ -39,14 +40,14 @@ typedef struct _SwfdecSoundObjectClass SwfdecSoundObjectClass;
#define SWFDEC_SOUND_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SOUND_OBJECT, SwfdecSoundObjectClass))
struct _SwfdecSoundObject {
- SwfdecAsObject object;
+ SwfdecAsRelay relay;
const char * target; /* target or NULL if global */
SwfdecSoundProvider * provider; /* sound that we play */
};
struct _SwfdecSoundObjectClass {
- SwfdecAsObjectClass object_class;
+ SwfdecAsRelayClass relay_class;
};
GType swfdec_sound_object_get_type (void);
commit f2e5524f63678c48b2d6d89319c39114e59e4ef3
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Oct 21 16:21:25 2008 +0200
make filters relays
diff --git a/swfdec/swfdec_blur_filter_as.c b/swfdec/swfdec_blur_filter_as.c
index e0ddc13..162f7f4 100644
--- a/swfdec/swfdec_blur_filter_as.c
+++ b/swfdec/swfdec_blur_filter_as.c
@@ -105,7 +105,7 @@ swfdec_blur_filter_set_quality (SwfdecAsContext *cx, SwfdecAsObject *object,
}
// constructor
-SWFDEC_AS_CONSTRUCTOR (1102, 0, swfdec_blur_filter_construct, swfdec_blur_filter_get_type)
+SWFDEC_AS_NATIVE (1102, 0, swfdec_blur_filter_construct)
void
swfdec_blur_filter_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
@@ -114,13 +114,16 @@ swfdec_blur_filter_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
double x = 4, y = 4;
int quality = 1;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_BLUR_FILTER, &filter, "|nni", &x, &y, &quality);
+ SWFDEC_AS_CHECK (0, NULL, "|nni", &x, &y, &quality);
if (!swfdec_as_context_is_constructing (cx))
return;
+ filter = g_object_new (SWFDEC_TYPE_BLUR_FILTER, "context", cx, NULL);
filter->x = CLAMP (x, 0, 255);
filter->y = CLAMP (y, 0, 255);
filter->quality = CLAMP (quality, 0, 15);
+
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (filter));
SWFDEC_AS_VALUE_SET_OBJECT (ret, object);
}
diff --git a/swfdec/swfdec_color_matrix_filter_as.c b/swfdec/swfdec_color_matrix_filter_as.c
index 5c38d68..726e123 100644
--- a/swfdec/swfdec_color_matrix_filter_as.c
+++ b/swfdec/swfdec_color_matrix_filter_as.c
@@ -88,7 +88,7 @@ swfdec_color_matrix_filter_set_matrix (SwfdecAsContext *cx,
swfdec_color_matrix_filter_do_set_matrix (cm, array);
}
-SWFDEC_AS_CONSTRUCTOR (1110, 0, swfdec_color_matrix_filter_contruct, swfdec_color_matrix_filter_get_type)
+SWFDEC_AS_NATIVE (1110, 0, swfdec_color_matrix_filter_contruct)
void
swfdec_color_matrix_filter_contruct (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
@@ -100,7 +100,11 @@ swfdec_color_matrix_filter_contruct (SwfdecAsContext *cx,
if (!swfdec_as_context_is_constructing (cx))
return;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_COLOR_MATRIX_FILTER, &cm, "o", &array);
+ SWFDEC_AS_CHECK (0, NULL, "o", &array);
+ cm = g_object_new (SWFDEC_TYPE_COLOR_MATRIX_FILTER, "context", cx, NULL);
swfdec_color_matrix_filter_do_set_matrix (cm, array);
+
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (cm));
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, object);
}
diff --git a/swfdec/swfdec_filter.c b/swfdec/swfdec_filter.c
index de4544d..6fa26d0 100644
--- a/swfdec/swfdec_filter.c
+++ b/swfdec/swfdec_filter.c
@@ -27,7 +27,7 @@
#include "swfdec_color_matrix_filter.h"
#include "swfdec_debug.h"
-G_DEFINE_ABSTRACT_TYPE (SwfdecFilter, swfdec_filter, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_ABSTRACT_TYPE (SwfdecFilter, swfdec_filter, SWFDEC_TYPE_AS_RELAY)
static void
swfdec_filter_class_init (SwfdecFilterClass *klass)
diff --git a/swfdec/swfdec_filter.h b/swfdec/swfdec_filter.h
index 65d6ae7..e362754 100644
--- a/swfdec/swfdec_filter.h
+++ b/swfdec/swfdec_filter.h
@@ -21,7 +21,7 @@
#define _SWFDEC_FILTER_H_
#include <swfdec/swfdec.h>
-#include <swfdec/swfdec_as_object.h>
+#include <swfdec/swfdec_as_relay.h>
#include <swfdec/swfdec_bits.h>
#include <swfdec/swfdec_types.h>
@@ -37,11 +37,11 @@ typedef struct _SwfdecFilterClass SwfdecFilterClass;
#define SWFDEC_FILTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_FILTER, SwfdecFilterClass))
struct _SwfdecFilter {
- SwfdecAsObject object;
+ SwfdecAsRelay relay;
};
struct _SwfdecFilterClass {
- SwfdecAsObjectClass object_class;
+ SwfdecAsObjectClass relay_class;
void (* clone) (SwfdecFilter * dest,
SwfdecFilter * source);
diff --git a/swfdec/swfdec_sprite_movie_as.c b/swfdec/swfdec_sprite_movie_as.c
index 1d421df..761e4ef 100644
--- a/swfdec/swfdec_sprite_movie_as.c
+++ b/swfdec/swfdec_sprite_movie_as.c
@@ -163,9 +163,9 @@ swfdec_sprite_movie_set_filters (SwfdecAsContext *cx, SwfdecAsObject *object,
if (!swfdec_as_object_get_variable (array,
swfdec_as_integer_to_string (cx, i), &val) ||
!SWFDEC_AS_VALUE_IS_OBJECT (&val) ||
- !SWFDEC_IS_FILTER (SWFDEC_AS_VALUE_GET_OBJECT (&val)))
+ !SWFDEC_IS_FILTER (SWFDEC_AS_VALUE_GET_OBJECT (&val)->relay))
continue;
- filter = SWFDEC_FILTER (SWFDEC_AS_VALUE_GET_OBJECT (&val));
+ filter = SWFDEC_FILTER (SWFDEC_AS_VALUE_GET_OBJECT (&val)->relay);
filter = swfdec_filter_clone (filter);
list = g_slist_prepend (list, filter);
}
commit f18cb195ca07b0c11e2418bceb83fffb8a28baa7
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Oct 21 16:04:09 2008 +0200
make BitmapData a relay
diff --git a/swfdec/swfdec_as_relay.c b/swfdec/swfdec_as_relay.c
index 1339275..b0ee439 100644
--- a/swfdec/swfdec_as_relay.c
+++ b/swfdec/swfdec_as_relay.c
@@ -51,28 +51,22 @@ swfdec_as_relay_init (SwfdecAsRelay *object)
{
}
-#if 0
/**
* swfdec_as_relay_get_as_object:
- * @object: a #SwfdecAsRelay. This function takes a gpointer argument only to
- * save you from having to cast it manually. For language bindings,
- * please treat this argument as having the #SwfdecAsRelay type.
+ * @object: a #SwfdecAsRelay.
*
* Gets the Actionscript object associated with this object.
*
* Returns: The #SwfdecAsObject associated with this relay.
**/
-static SwfdecAsObject *
-swfdec_as_relay_get_as_object (gpointer object)
+SwfdecAsObject *
+swfdec_as_relay_get_as_object (SwfdecAsRelay *relay)
{
- SwfdecAsRelay *relay = object;
-
- g_return_val_if_fail (SWFDEC_IS_AS_RELAY (object), NULL);
+ g_return_val_if_fail (SWFDEC_IS_AS_RELAY (relay), NULL);
g_return_val_if_fail (relay->relay != NULL, NULL);
return relay->relay;
}
-#endif
/**
* swfdec_as_relay_call:
diff --git a/swfdec/swfdec_as_relay.h b/swfdec/swfdec_as_relay.h
index 6afa9c5..d574088 100644
--- a/swfdec/swfdec_as_relay.h
+++ b/swfdec/swfdec_as_relay.h
@@ -47,6 +47,7 @@ struct _SwfdecAsRelayClass {
GType swfdec_as_relay_get_type (void);
+SwfdecAsObject *swfdec_as_relay_get_as_object (SwfdecAsRelay * relay);
gboolean swfdec_as_relay_call (SwfdecAsRelay * relay,
const char * name,
diff --git a/swfdec/swfdec_bitmap_data.c b/swfdec/swfdec_bitmap_data.c
index 4aaf3c2..6f5ba03 100644
--- a/swfdec/swfdec_bitmap_data.c
+++ b/swfdec/swfdec_bitmap_data.c
@@ -47,7 +47,7 @@ enum {
};
static guint signals[LAST_SIGNAL];
-G_DEFINE_TYPE (SwfdecBitmapData, swfdec_bitmap_data, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_TYPE (SwfdecBitmapData, swfdec_bitmap_data, SWFDEC_TYPE_AS_RELAY)
static void
swfdec_bitmap_data_invalidate (SwfdecBitmapData *bitmap, guint x, guint y, guint w, guint h)
@@ -108,6 +108,7 @@ SwfdecBitmapData *
swfdec_bitmap_data_new (SwfdecAsContext *context, gboolean transparent, guint width, guint height)
{
SwfdecBitmapData *bitmap;
+ SwfdecAsObject *object;
g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), NULL);
g_return_val_if_fail (width > 0, NULL);
@@ -122,8 +123,10 @@ swfdec_bitmap_data_new (SwfdecAsContext *context, gboolean transparent, guint wi
bitmap->surface = cairo_image_surface_create (
transparent ? CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24, width, height);
- swfdec_as_object_set_constructor_by_name (SWFDEC_AS_OBJECT (bitmap),
+ object = swfdec_as_object_new (context, NULL);
+ swfdec_as_object_set_constructor_by_name (object,
SWFDEC_AS_STR_flash, SWFDEC_AS_STR_display, SWFDEC_AS_STR_BitmapData, NULL);
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (bitmap));
return bitmap;
}
@@ -168,7 +171,7 @@ swfdec_bitmap_data_loadBitmap (SwfdecAsContext *cx, SwfdecAsObject *object,
cairo_paint (cr);
cairo_destroy (cr);
cairo_surface_destroy (isurface);
- SWFDEC_AS_VALUE_SET_OBJECT (ret, SWFDEC_AS_OBJECT (bitmap));
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (bitmap)));
}
// properties
@@ -383,7 +386,7 @@ swfdec_bitmap_data_copyPixels (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
SwfdecBitmapData *bitmap, *source, *alpha = NULL;
- SwfdecAsObject *recto, *pt, *apt = NULL;
+ SwfdecAsObject *recto, *pt, *apt = NULL, *so, *ao = NULL;
SwfdecRectangle rect;
gboolean copy_alpha = FALSE;
SwfdecColorTransform ctrans;
@@ -391,13 +394,14 @@ swfdec_bitmap_data_copyPixels (SwfdecAsContext *cx, SwfdecAsObject *object,
cairo_t *cr;
int x, y;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_BITMAP_DATA, &bitmap, "ooo|OOb", &source, &recto, &pt,
- &alpha, &apt, ©_alpha);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_BITMAP_DATA, &bitmap, "ooo|OOb", &so, &recto, &pt,
+ &ao, &apt, ©_alpha);
if (bitmap->surface == NULL ||
- !SWFDEC_IS_BITMAP_DATA (source) ||
- source->surface == NULL ||
- (argc > 3 && (!SWFDEC_IS_BITMAP_DATA (alpha) || alpha->surface == NULL)) ||
+ !SWFDEC_IS_BITMAP_DATA (so->relay) ||
+ (source = SWFDEC_BITMAP_DATA (so->relay))->surface == NULL ||
+ (argc > 3 && (!SWFDEC_IS_BITMAP_DATA (ao->relay) ||
+ (alpha = SWFDEC_BITMAP_DATA (ao->relay))->surface == NULL)) ||
!swfdec_rectangle_from_as_object (&rect, recto))
return;
@@ -516,9 +520,9 @@ swfdec_bitmap_data_draw (SwfdecAsContext *cx, SwfdecAsObject *object,
swfdec_renderer_attach (renderer, cr);
cairo_transform (cr, &mat);
- if (SWFDEC_IS_BITMAP_DATA (o)) {
+ if (SWFDEC_IS_BITMAP_DATA (o->relay)) {
cairo_pattern_t *pattern = swfdec_bitmap_data_get_pattern (
- SWFDEC_BITMAP_DATA (o), renderer, &ctrans);
+ SWFDEC_BITMAP_DATA (o->relay), renderer, &ctrans);
if (pattern) {
cairo_set_source (cr, pattern);
cairo_paint (cr);
@@ -729,7 +733,7 @@ swfdec_bitmap_data_clone (SwfdecAsContext *cx, SwfdecAsObject *object,
cairo_set_source_surface (cr, bitmap->surface, 0, 0);
cairo_paint (cr);
cairo_destroy (cr);
- SWFDEC_AS_VALUE_SET_OBJECT (ret, SWFDEC_AS_OBJECT (clone));
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (clone)));
}
SWFDEC_AS_NATIVE (1100, 22, swfdec_bitmap_data_do_dispose)
@@ -762,7 +766,7 @@ swfdec_bitmap_data_compare (SwfdecAsContext *cx,
SWFDEC_STUB ("BitmapData.compare");
}
-SWFDEC_AS_CONSTRUCTOR (1100, 0, swfdec_bitmap_data_construct, swfdec_bitmap_data_get_type)
+SWFDEC_AS_NATIVE (1100, 0, swfdec_bitmap_data_construct)
void
swfdec_bitmap_data_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
@@ -775,7 +779,7 @@ swfdec_bitmap_data_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
if (!swfdec_as_context_is_constructing (cx))
return;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_BITMAP_DATA, &bitmap, "ii|bi",
+ SWFDEC_AS_CHECK (0, NULL, "ii|bi",
&w, &h, &transparent, &color);
if (w > 2880 || w <= 0 || h > 2880 || h <= 0) {
@@ -785,6 +789,7 @@ swfdec_bitmap_data_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
if (!swfdec_as_context_try_use_mem (cx, w * h * 4))
return;
+ bitmap = g_object_new (SWFDEC_TYPE_BITMAP_DATA, "context", cx, NULL);
bitmap->width = w;
bitmap->height = h;
bitmap->surface = cairo_image_surface_create (
@@ -796,6 +801,8 @@ swfdec_bitmap_data_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
cairo_paint (cr);
cairo_destroy (cr);
}
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (bitmap));
+ SWFDEC_AS_VALUE_SET_OBJECT (ret, object);
}
/*** PUBLIC API ***/
diff --git a/swfdec/swfdec_bitmap_data.h b/swfdec/swfdec_bitmap_data.h
index b1417c7..cd356ce 100644
--- a/swfdec/swfdec_bitmap_data.h
+++ b/swfdec/swfdec_bitmap_data.h
@@ -21,9 +21,9 @@
#define _SWFDEC_BITMAP_DATA_H_
#include <cairo.h>
-#include <swfdec/swfdec_as_object.h>
+#include <swfdec/swfdec_as_relay.h>
+#include <swfdec/swfdec_color.h>
#include <swfdec/swfdec_renderer.h>
-#include <swfdec/swfdec_types.h>
G_BEGIN_DECLS
@@ -37,7 +37,7 @@ typedef struct _SwfdecBitmapDataClass SwfdecBitmapDataClass;
#define SWFDEC_BITMAP_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_BITMAP_DATA, SwfdecBitmapDataClass))
struct _SwfdecBitmapData {
- SwfdecAsObject object;
+ SwfdecAsRelay relay;
cairo_surface_t * surface; /* An image surface or NULL */
guint width; /* width of surface */
@@ -45,7 +45,7 @@ struct _SwfdecBitmapData {
};
struct _SwfdecBitmapDataClass {
- SwfdecAsObjectClass object_class;
+ SwfdecAsRelayClass relay_class;
};
GType swfdec_bitmap_data_get_type (void);
diff --git a/swfdec/swfdec_movie_as_drawing.c b/swfdec/swfdec_movie_as_drawing.c
index 7cc28a1..491b5a5 100644
--- a/swfdec/swfdec_movie_as_drawing.c
+++ b/swfdec/swfdec_movie_as_drawing.c
@@ -433,7 +433,7 @@ swfdec_sprite_movie_beginBitmapFill (SwfdecAsContext *cx,
SwfdecAsValue *rval)
{
SwfdecMovie *movie;
- SwfdecBitmapData *bitmap;
+ SwfdecAsObject *bitmap;
SwfdecPattern *pattern;
SwfdecDraw *draw;
SwfdecAsObject *mat = NULL;
@@ -443,10 +443,10 @@ swfdec_sprite_movie_beginBitmapFill (SwfdecAsContext *cx,
SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE, &movie, "O|Obb",
&bitmap, &mat, &repeat, &smoothing);
movie->draw_fill = NULL;
- if (!SWFDEC_IS_BITMAP_DATA (bitmap))
+ if (!SWFDEC_IS_BITMAP_DATA (bitmap->relay))
return;
- pattern = swfdec_bitmap_pattern_new (bitmap);
+ pattern = swfdec_bitmap_pattern_new (SWFDEC_BITMAP_DATA (bitmap->relay));
/* NB: This signal assumes that the pattern is destroyed before the movie is,
* because it is never removed anywhere */
g_signal_connect_swapped (pattern, "invalidate", G_CALLBACK (swfdec_movie_invalidate_last), movie);
diff --git a/swfdec/swfdec_sprite_movie_as.c b/swfdec/swfdec_sprite_movie_as.c
index 17dc8b7..1d421df 100644
--- a/swfdec/swfdec_sprite_movie_as.c
+++ b/swfdec/swfdec_sprite_movie_as.c
@@ -376,7 +376,7 @@ swfdec_sprite_movie_attachBitmap (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
SwfdecMovie *parent;
- SwfdecBitmapData *bitmap;
+ SwfdecAsObject *bitmap;
const char *snapping = SWFDEC_AS_STR_auto;
gboolean smoothing = FALSE;
int depth;
@@ -385,7 +385,7 @@ swfdec_sprite_movie_attachBitmap (SwfdecAsContext *cx, SwfdecAsObject *object,
SWFDEC_AS_CHECK (SWFDEC_TYPE_SPRITE_MOVIE, &parent, "oi|sb",
&bitmap, &depth, &snapping, &smoothing);
- if (!SWFDEC_IS_BITMAP_DATA (bitmap))
+ if (!SWFDEC_IS_BITMAP_DATA (bitmap->relay))
return;
if (swfdec_depth_classify (depth) == SWFDEC_DEPTH_CLASS_EMPTY)
return;
@@ -394,7 +394,7 @@ swfdec_sprite_movie_attachBitmap (SwfdecAsContext *cx, SwfdecAsObject *object,
if (movie)
swfdec_movie_remove (movie);
- swfdec_bitmap_movie_new (parent, bitmap, depth);
+ swfdec_bitmap_movie_new (parent, SWFDEC_BITMAP_DATA (bitmap->relay), depth);
SWFDEC_LOG ("created new BitmapMovie to parent %s at depth %d",
parent->name, depth);
}
More information about the Swfdec-commits
mailing list