[Swfdec-commits] 3 commits - swfdec/swfdec_movie_asprops.c swfdec/swfdec_movie.c swfdec/swfdec_movie.h swfdec/swfdec_player.c swfdec/swfdec_resource.c swfdec/swfdec_sprite_movie_as.c
Benjamin Otte
company at kemper.freedesktop.org
Wed May 7 07:39:25 PDT 2008
swfdec/swfdec_movie.c | 31 +++++++++++++++----------------
swfdec/swfdec_movie.h | 3 ++-
swfdec/swfdec_movie_asprops.c | 25 ++++++++++++++++---------
swfdec/swfdec_player.c | 3 ++-
swfdec/swfdec_resource.c | 3 ++-
swfdec/swfdec_sprite_movie_as.c | 8 +++++++-
6 files changed, 44 insertions(+), 29 deletions(-)
New commits:
commit 6438586c8e06a6fbe626cc1bf9a2fa5812699b38
Author: Benjamin Otte <otte at gnome.org>
Date: Wed May 7 16:37:36 2008 +0200
updates matrices immediately
no more SWFDEC_MOVIE_INVALID_MATRIX, but instead people have to use
swfdec_movie_begin_update_matrix()/swfdec_movie_end_update_matrix() when
changing matrix parameters.
diff --git a/swfdec/swfdec_movie.c b/swfdec/swfdec_movie.c
index 7677aeb..8ff6213 100644
--- a/swfdec/swfdec_movie.c
+++ b/swfdec/swfdec_movie.c
@@ -217,11 +217,19 @@ swfdec_movie_update_extents (SwfdecMovie *movie)
}
}
-static void
-swfdec_movie_update_matrix (SwfdecMovie *movie)
+void
+swfdec_movie_begin_update_matrix (SwfdecMovie *movie)
+{
+ swfdec_movie_invalidate_next (movie);
+}
+
+void
+swfdec_movie_end_update_matrix (SwfdecMovie *movie)
{
double d, e;
+ swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_EXTENTS);
+
/* we operate on x0 and y0 when setting movie._x and movie._y */
if (movie->modified) {
movie->matrix.xx = movie->original_transform.xx;
@@ -255,9 +263,6 @@ swfdec_movie_do_update (SwfdecMovie *movie)
}
switch (movie->cache_state) {
- case SWFDEC_MOVIE_INVALID_MATRIX:
- swfdec_movie_update_matrix (movie);
- /* fall through */
case SWFDEC_MOVIE_INVALID_EXTENTS:
swfdec_movie_update_extents (movie);
/* fall through */
@@ -475,8 +480,6 @@ swfdec_movie_local_to_global (SwfdecMovie *movie, double *x, double *y)
g_return_if_fail (y != NULL);
do {
- if (movie->cache_state >= SWFDEC_MOVIE_INVALID_MATRIX)
- swfdec_movie_update (movie);
cairo_matrix_transform_point (&movie->matrix, x, y);
} while ((movie = movie->parent));
}
@@ -509,8 +512,6 @@ swfdec_movie_global_to_local_matrix (SwfdecMovie *movie, cairo_matrix_t *matrix)
cairo_matrix_init_identity (matrix);
while (movie) {
- if (movie->cache_state >= SWFDEC_MOVIE_INVALID_MATRIX)
- swfdec_movie_update (movie);
cairo_matrix_multiply (matrix, &movie->inverse_matrix, matrix);
movie = movie->parent;
}
@@ -524,8 +525,6 @@ swfdec_movie_local_to_global_matrix (SwfdecMovie *movie, cairo_matrix_t *matrix)
cairo_matrix_init_identity (matrix);
while (movie) {
- if (movie->cache_state >= SWFDEC_MOVIE_INVALID_MATRIX)
- swfdec_movie_update (movie);
cairo_matrix_multiply (matrix, matrix, &movie->matrix);
movie = movie->parent;
}
@@ -541,8 +540,6 @@ swfdec_movie_global_to_local (SwfdecMovie *movie, double *x, double *y)
if (movie->parent) {
swfdec_movie_global_to_local (movie->parent, x, y);
}
- if (movie->cache_state >= SWFDEC_MOVIE_INVALID_MATRIX)
- swfdec_movie_update (movie);
cairo_matrix_transform_point (&movie->inverse_matrix, x, y);
}
@@ -1452,13 +1449,14 @@ swfdec_movie_set_static_properties (SwfdecMovie *movie, const cairo_matrix_t *tr
return;
}
if (transform) {
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (movie);
movie->original_transform = *transform;
movie->matrix.x0 = movie->original_transform.x0;
movie->matrix.y0 = movie->original_transform.y0;
movie->xscale = swfdec_matrix_get_xscale (&movie->original_transform);
movie->yscale = swfdec_matrix_get_yscale (&movie->original_transform);
movie->rotation = swfdec_matrix_get_rotation (&movie->original_transform);
+ swfdec_movie_end_update_matrix (movie);
}
if (ctrans) {
swfdec_movie_invalidate_last (movie);
diff --git a/swfdec/swfdec_movie.h b/swfdec/swfdec_movie.h
index e23557d..0ef2a01 100644
--- a/swfdec/swfdec_movie.h
+++ b/swfdec/swfdec_movie.h
@@ -80,7 +80,6 @@ typedef enum {
SWFDEC_MOVIE_UP_TO_DATE = 0, /* everything OK */
SWFDEC_MOVIE_INVALID_CHILDREN, /* call update on children */
SWFDEC_MOVIE_INVALID_EXTENTS, /* recalculate extents */
- SWFDEC_MOVIE_INVALID_MATRIX /* matrix is invalid, recalculate */
} SwfdecMovieCacheState;
typedef void (*SwfdecMovieVariableListenerFunction) (SwfdecAsObject *object,
@@ -213,6 +212,8 @@ void swfdec_movie_invalidate (SwfdecMovie * movie,
void swfdec_movie_queue_update (SwfdecMovie * movie,
SwfdecMovieCacheState state);
void swfdec_movie_update (SwfdecMovie * movie);
+void swfdec_movie_begin_update_matrix(SwfdecMovie * movie);
+void swfdec_movie_end_update_matrix (SwfdecMovie * movie);
void swfdec_movie_local_to_global (SwfdecMovie * movie,
double * x,
double * y);
diff --git a/swfdec/swfdec_movie_asprops.c b/swfdec/swfdec_movie_asprops.c
index eb701c7..0724557 100644
--- a/swfdec/swfdec_movie_asprops.c
+++ b/swfdec/swfdec_movie_asprops.c
@@ -58,8 +58,9 @@ mc_x_set (SwfdecMovie *movie, const SwfdecAsValue *val)
movie->modified = TRUE;
d = SWFDEC_DOUBLE_TO_TWIPS (d);
if (d != movie->matrix.x0) {
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (movie);
movie->matrix.x0 = d;
+ swfdec_movie_end_update_matrix (movie);
}
}
@@ -86,8 +87,9 @@ mc_y_set (SwfdecMovie *movie, const SwfdecAsValue *val)
movie->modified = TRUE;
d = SWFDEC_DOUBLE_TO_TWIPS (d);
if (d != movie->matrix.y0) {
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (movie);
movie->matrix.y0 = d;
+ swfdec_movie_end_update_matrix (movie);
}
}
@@ -109,8 +111,9 @@ mc_xscale_set (SwfdecMovie *movie, const SwfdecAsValue *val)
}
movie->modified = TRUE;
if (movie->xscale != d) {
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (movie);
movie->xscale = d;
+ swfdec_movie_end_update_matrix (movie);
}
}
@@ -132,8 +135,9 @@ mc_yscale_set (SwfdecMovie *movie, const SwfdecAsValue *val)
}
movie->modified = TRUE;
if (movie->yscale != d) {
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (movie);
movie->yscale = d;
+ swfdec_movie_end_update_matrix (movie);
}
}
@@ -249,13 +253,14 @@ mc_width_set (SwfdecMovie *movie, const SwfdecAsValue *val)
d = 100 * d / cur;
if (d == movie->xscale)
return;
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (movie);
movie->xscale = d;
} else {
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (movie);
movie->xscale = 0;
movie->yscale = 0;
}
+ swfdec_movie_end_update_matrix (movie);
}
static void
@@ -290,13 +295,14 @@ mc_height_set (SwfdecMovie *movie, const SwfdecAsValue *val)
d = 100 * d / cur;
if (d == movie->yscale)
return;
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (movie);
movie->yscale = d;
} else {
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (movie);
movie->xscale = 0;
movie->yscale = 0;
}
+ swfdec_movie_end_update_matrix (movie);
}
static void
@@ -328,8 +334,9 @@ mc_rotation_set (SwfdecMovie *movie, const SwfdecAsValue *val)
}
movie->modified = TRUE;
if (movie->rotation != d) {
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (movie);
movie->rotation = d;
+ swfdec_movie_end_update_matrix (movie);
}
}
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index 89c75b1..78f3ed0 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -1879,9 +1879,10 @@ swfdec_player_update_drag_movie (SwfdecPlayer *player)
y = CLAMP (y, priv->mouse_drag_rect.y0, priv->mouse_drag_rect.y1);
SWFDEC_LOG ("mouse is at %g %g, originally (%g %g)", x, y, priv->mouse_x, priv->mouse_y);
if (x != movie->matrix.x0 || y != movie->matrix.y0) {
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (movie);
movie->matrix.x0 = x;
movie->matrix.y0 = y;
+ swfdec_movie_end_update_matrix (movie);
}
}
diff --git a/swfdec/swfdec_resource.c b/swfdec/swfdec_resource.c
index d9e1259..deb7d91 100644
--- a/swfdec/swfdec_resource.c
+++ b/swfdec/swfdec_resource.c
@@ -180,6 +180,7 @@ swfdec_resource_replace_movie (SwfdecSpriteMovie *movie, SwfdecResource *resourc
mov->depth, mov->parent, resource, NULL, mov->name);
if (copy == NULL)
return FALSE;
+ swfdec_movie_begin_update_matrix (copy);
copy->matrix = mov->matrix;
copy->original_name = mov->original_name;
copy->modified = mov->modified;
@@ -187,12 +188,12 @@ swfdec_resource_replace_movie (SwfdecSpriteMovie *movie, SwfdecResource *resourc
copy->yscale = mov->yscale;
copy->rotation = mov->rotation;
copy->lockroot = mov->lockroot;
+ swfdec_movie_end_update_matrix (copy);
/* FIXME: are events copied? If so, wouldn't that be a security issue? */
swfdec_movie_set_static_properties (copy, &mov->original_transform,
&mov->original_ctrans, mov->original_ratio, mov->clip_depth,
mov->blend_mode, NULL);
swfdec_movie_remove (mov);
- swfdec_movie_queue_update (copy, SWFDEC_MOVIE_INVALID_MATRIX);
return SWFDEC_SPRITE_MOVIE (copy);
}
diff --git a/swfdec/swfdec_sprite_movie_as.c b/swfdec/swfdec_sprite_movie_as.c
index 502797c..1b50643 100644
--- a/swfdec/swfdec_sprite_movie_as.c
+++ b/swfdec/swfdec_sprite_movie_as.c
@@ -653,7 +653,7 @@ swfdec_sprite_movie_createEmptyMovieClip (SwfdecAsContext *cx, SwfdecAsObject *o
static void
swfdec_sprite_movie_copy_props (SwfdecMovie *target, SwfdecMovie *src)
{
- swfdec_movie_queue_update (target, SWFDEC_MOVIE_INVALID_MATRIX);
+ swfdec_movie_begin_update_matrix (target);
target->matrix = src->matrix;
target->modified = src->modified;
target->xscale = src->xscale;
@@ -661,6 +661,7 @@ swfdec_sprite_movie_copy_props (SwfdecMovie *target, SwfdecMovie *src)
target->rotation = src->rotation;
target->lockroot = src->lockroot;
target->color_transform = src->color_transform;
+ swfdec_movie_end_update_matrix (target);
}
static gboolean
commit 01f03f94af28a0345e9ae2585ceb0bd65a8ae3db
Author: Benjamin Otte <otte at gnome.org>
Date: Wed May 7 16:33:57 2008 +0200
Video objects aren't actors, but they can be referenced
Something is seriously broken in our object system.
This patch makes Youtube work again (oops)
diff --git a/swfdec/swfdec_movie.c b/swfdec/swfdec_movie.c
index c88f598..7677aeb 100644
--- a/swfdec/swfdec_movie.c
+++ b/swfdec/swfdec_movie.c
@@ -29,6 +29,7 @@
#include "swfdec_movie.h"
#include "swfdec_as_context.h"
+#include "swfdec_as_internal.h"
#include "swfdec_as_strings.h"
#include "swfdec_button_movie.h"
#include "swfdec_debug.h"
@@ -45,7 +46,7 @@
#include "swfdec_system.h"
#include "swfdec_text_field_movie.h"
#include "swfdec_utils.h"
-#include "swfdec_as_internal.h"
+#include "swfdec_video_movie.h"
/*** MOVIE ***/
@@ -1033,7 +1034,7 @@ swfdec_movie_get_variable (SwfdecAsObject *object, SwfdecAsObject *orig,
ret = swfdec_movie_get_by_name (movie, variable, FALSE);
if (ret) {
- if (!SWFDEC_IS_ACTOR (ret) ||
+ if ((!SWFDEC_IS_ACTOR (ret) && !SWFDEC_IS_VIDEO_MOVIE (ret)) ||
(swfdec_movie_get_version (movie) <= 5 && SWFDEC_IS_TEXT_FIELD_MOVIE (ret)))
ret = movie;
SWFDEC_AS_VALUE_SET_OBJECT (val, SWFDEC_AS_OBJECT (ret));
commit 8bb00d8d8d8d8b2cb253ef8eeea1212939bfc96a
Author: Benjamin Otte <otte at gnome.org>
Date: Wed May 7 16:08:14 2008 +0200
copy more properties
I detected this while auditing code, it may as well be wrong, but I don't
think so as we copy ->matrix
diff --git a/swfdec/swfdec_sprite_movie_as.c b/swfdec/swfdec_sprite_movie_as.c
index b848bfb..502797c 100644
--- a/swfdec/swfdec_sprite_movie_as.c
+++ b/swfdec/swfdec_sprite_movie_as.c
@@ -655,6 +655,11 @@ swfdec_sprite_movie_copy_props (SwfdecMovie *target, SwfdecMovie *src)
{
swfdec_movie_queue_update (target, SWFDEC_MOVIE_INVALID_MATRIX);
target->matrix = src->matrix;
+ target->modified = src->modified;
+ target->xscale = src->xscale;
+ target->yscale = src->yscale;
+ target->rotation = src->rotation;
+ target->lockroot = src->lockroot;
target->color_transform = src->color_transform;
}
More information about the Swfdec-commits
mailing list