static void swfdec_as_super_call (SwfdecAsFunction *function, SwfdecAsObject *thisp, gboolean construct, SwfdecAsObject *super_reference, guint n_args, const SwfdecAsValue *args, SwfdecAsValue *return_value) { SwfdecAsSuper *super = SWFDEC_AS_SUPER (function); SwfdecAsFunction *fun; SwfdecAsValue val; if (super->object == NULL) { SWFDEC_WARNING ("super () called without an object."); return; } swfdec_as_object_get_variable (super->object, SWFDEC_AS_STR___constructor__, &val); if (!SWFDEC_AS_VALUE_IS_OBJECT (&val) || !SWFDEC_IS_AS_FUNCTION (fun = (SwfdecAsFunction *) SWFDEC_AS_VALUE_GET_OBJECT (&val))) return; if (construct) { SWFDEC_FIXME ("What happens with \"new super()\"?"); } swfdec_as_function_call_full (fun, super->thisp, construct || swfdec_as_context_is_constructing (swfdec_gc_object_get_context (super)), super->object->prototype, n_args, args, return_value); }
void swfdec_bitmap_data_construct (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { SwfdecBitmapData *bitmap; int w, h; gboolean transparent = TRUE; guint color = 0; if (!swfdec_as_context_is_constructing (cx)) return; SWFDEC_AS_CHECK (SWFDEC_TYPE_BITMAP_DATA, &bitmap, "ii|bi", &w, &h, &transparent, &color); if (w > 2880 || w <= 0 || h > 2880 || h <= 0) { SWFDEC_FIXME ("the constructor should return undefined here"); return; } if (!swfdec_as_context_try_use_mem (cx, w * h * 4)) return; bitmap->surface = cairo_image_surface_create ( transparent ? CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24, w, h); if (color) { cairo_t *cr = cairo_create (bitmap->surface); swfdec_color_set_source (cr, transparent ? color : SWFDEC_COLOR_OPAQUE (color)); cairo_paint (cr); cairo_destroy (cr); } }
void swfdec_test_test_new (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval) { SwfdecTestTest *test; const char *filename = NULL; if (!swfdec_as_context_is_constructing (cx)) return; SWFDEC_AS_CHECK (0, NULL, "|s", &filename); test = g_object_new (SWFDEC_TYPE_TEST_TEST, "context", cx, NULL); swfdec_test_do_reset (test, filename); swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (test)); SWFDEC_AS_VALUE_SET_OBJECT (retval, object); }
void swfdec_color_transform_as_construct (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { SwfdecColorTransformAs *transform; if (!swfdec_as_context_is_constructing (cx)) 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; SWFDEC_AS_CHECK (0, NULL, "nnnnnnnn", &transform->ra, &transform->ga, &transform->ba, &transform->aa, &transform->rb, &transform->gb, &transform->bb, &transform->ab); }