[Swfdec-commits] 4 commits - swfdec/swfdec_actor.c swfdec/swfdec_actor.h swfdec/swfdec_player.c test/image

Benjamin Otte company at kemper.freedesktop.org
Tue Apr 1 03:07:58 PDT 2008


 swfdec/swfdec_actor.c                      |   16 +++++++++++++++
 swfdec/swfdec_actor.h                      |    1 
 swfdec/swfdec_player.c                     |   30 ++++++++++++++++++++++++++++-
 test/image/Makefile.am                     |   21 ++++++++++++++++++++
 test/image/focusrect-rotated-5.swf         |binary
 test/image/focusrect-rotated-5.swf.png     |binary
 test/image/focusrect-rotated-6.swf         |binary
 test/image/focusrect-rotated-6.swf.org.png |binary
 test/image/focusrect-rotated-6.swf.png     |binary
 test/image/focusrect-rotated-7.swf         |binary
 test/image/focusrect-rotated-7.swf.org.png |binary
 test/image/focusrect-rotated-7.swf.png     |binary
 test/image/focusrect-rotated-8.swf         |binary
 test/image/focusrect-rotated-8.swf.org.png |binary
 test/image/focusrect-rotated-8.swf.png     |binary
 test/image/focusrect-rotated.as            |   22 +++++++++++++++++++++
 test/image/focusrect-simple-5.swf          |binary
 test/image/focusrect-simple-5.swf.png      |binary
 test/image/focusrect-simple-6.swf          |binary
 test/image/focusrect-simple-6.swf.png      |binary
 test/image/focusrect-simple-7.swf          |binary
 test/image/focusrect-simple-7.swf.png      |binary
 test/image/focusrect-simple-8.swf          |binary
 test/image/focusrect-simple-8.swf.png      |binary
 test/image/focusrect-simple.as             |   19 ++++++++++++++++++
 25 files changed, 108 insertions(+), 1 deletion(-)

New commits:
commit 0d970062817bb0c0c9d71ec556ff693db0c4bfa6
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Apr 1 12:07:21 2008 +0200

    test that we draw focusrects properly on rotated movies

diff --git a/test/image/Makefile.am b/test/image/Makefile.am
index 8809c86..9419a9f 100644
--- a/test/image/Makefile.am
+++ b/test/image/Makefile.am
@@ -71,6 +71,18 @@ EXTRA_DIST = \
 	fillstyle-order.swf \
 	fillstyle-order.swf.png \
 	fillstyle-order.xml \
+	focusrect-rotated-5.swf \
+	focusrect-rotated-5.swf.png \
+	focusrect-rotated-6.swf \
+	focusrect-rotated-6.swf.org.png \
+	focusrect-rotated-6.swf.png \
+	focusrect-rotated-7.swf \
+	focusrect-rotated-7.swf.org.png \
+	focusrect-rotated-7.swf.png \
+	focusrect-rotated-8.swf \
+	focusrect-rotated-8.swf.org.png \
+	focusrect-rotated-8.swf.png \
+	focusrect-rotated.as \
 	focusrect-simple-5.swf \
 	focusrect-simple-5.swf.png \
 	focusrect-simple-6.swf \
diff --git a/test/image/focusrect-rotated-5.swf b/test/image/focusrect-rotated-5.swf
new file mode 100644
index 0000000..e5afc1f
Binary files /dev/null and b/test/image/focusrect-rotated-5.swf differ
diff --git a/test/image/focusrect-rotated-5.swf.png b/test/image/focusrect-rotated-5.swf.png
new file mode 100644
index 0000000..72208c2
Binary files /dev/null and b/test/image/focusrect-rotated-5.swf.png differ
diff --git a/test/image/focusrect-rotated-6.swf b/test/image/focusrect-rotated-6.swf
new file mode 100644
index 0000000..8b91642
Binary files /dev/null and b/test/image/focusrect-rotated-6.swf differ
diff --git a/test/image/focusrect-rotated-6.swf.org.png b/test/image/focusrect-rotated-6.swf.org.png
new file mode 100644
index 0000000..7c61471
Binary files /dev/null and b/test/image/focusrect-rotated-6.swf.org.png differ
diff --git a/test/image/focusrect-rotated-6.swf.png b/test/image/focusrect-rotated-6.swf.png
new file mode 100644
index 0000000..66c4e73
Binary files /dev/null and b/test/image/focusrect-rotated-6.swf.png differ
diff --git a/test/image/focusrect-rotated-7.swf b/test/image/focusrect-rotated-7.swf
new file mode 100644
index 0000000..e267139
Binary files /dev/null and b/test/image/focusrect-rotated-7.swf differ
diff --git a/test/image/focusrect-rotated-7.swf.org.png b/test/image/focusrect-rotated-7.swf.org.png
new file mode 100644
index 0000000..4a8b828
Binary files /dev/null and b/test/image/focusrect-rotated-7.swf.org.png differ
diff --git a/test/image/focusrect-rotated-7.swf.png b/test/image/focusrect-rotated-7.swf.png
new file mode 100644
index 0000000..66c4e73
Binary files /dev/null and b/test/image/focusrect-rotated-7.swf.png differ
diff --git a/test/image/focusrect-rotated-8.swf b/test/image/focusrect-rotated-8.swf
new file mode 100644
index 0000000..e8f1c1c
Binary files /dev/null and b/test/image/focusrect-rotated-8.swf differ
diff --git a/test/image/focusrect-rotated-8.swf.org.png b/test/image/focusrect-rotated-8.swf.org.png
new file mode 100644
index 0000000..6737cce
Binary files /dev/null and b/test/image/focusrect-rotated-8.swf.org.png differ
diff --git a/test/image/focusrect-rotated-8.swf.png b/test/image/focusrect-rotated-8.swf.png
new file mode 100644
index 0000000..66c4e73
Binary files /dev/null and b/test/image/focusrect-rotated-8.swf.png differ
diff --git a/test/image/focusrect-rotated.as b/test/image/focusrect-rotated.as
new file mode 100644
index 0000000..55131f1
--- /dev/null
+++ b/test/image/focusrect-rotated.as
@@ -0,0 +1,22 @@
+// makeswf -v 7 -s 200x150 -r 1 -o focusrect-rotated.swf focusrect-rotated.as
+
+rectangle = function (mc, color, x, y, w, h)
+{
+  mc.beginFill (color);
+  mc.moveTo (x, y);
+  mc.lineTo (x, y + h);
+  mc.lineTo (x + w, y + h);
+  mc.lineTo (x + w, y);
+  mc.lineTo (x, y);
+  mc.endFill ();
+};
+
+createEmptyMovieClip ("a", 0);
+rectangle (a, 0xff, 0, 0, 50, 50);
+a.focusEnabled = true;
+Selection.setFocus (a);
+a._x = 50;
+a._y = 50;
+a._rotation = 45;
+
+setInterval (function () { Selection.setFocus (a); }, 100);
commit 5c9a5386ac410df497a2e549587a2179daf96126
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Apr 1 11:22:43 2008 +0200

    remove comment

diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index 54efa57..d18a1d3 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -2637,7 +2637,6 @@ static void
 swfdec_player_render_focusrect (SwfdecPlayer *player, cairo_t *cr, SwfdecRect *inval)
 {
 #define LINE_WIDTH (3.0)
-  //(3 * SWFDEC_TWIPS_SCALE_FACTOR)
   SwfdecMovie *movie = SWFDEC_MOVIE (player->priv->focus);
   SwfdecRect rect = movie->extents;
   double w, h;
commit 0dfac1f31e219df36f058767b54c6654d7203a1a
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Apr 1 11:22:26 2008 +0200

    add a test for drawing focusrects

diff --git a/test/image/Makefile.am b/test/image/Makefile.am
index 8349615..8809c86 100644
--- a/test/image/Makefile.am
+++ b/test/image/Makefile.am
@@ -71,6 +71,15 @@ EXTRA_DIST = \
 	fillstyle-order.swf \
 	fillstyle-order.swf.png \
 	fillstyle-order.xml \
+	focusrect-simple-5.swf \
+	focusrect-simple-5.swf.png \
+	focusrect-simple-6.swf \
+	focusrect-simple-6.swf.png \
+	focusrect-simple-7.swf \
+	focusrect-simple-7.swf.png \
+	focusrect-simple-8.swf \
+	focusrect-simple-8.swf.png \
+	focusrect-simple.as \
 	gradient-beginGradientFill.as \
 	gradient-beginGradientFill-5.swf \
 	gradient-beginGradientFill-5.swf.png \
diff --git a/test/image/focusrect-simple-5.swf b/test/image/focusrect-simple-5.swf
new file mode 100644
index 0000000..ea484bf
Binary files /dev/null and b/test/image/focusrect-simple-5.swf differ
diff --git a/test/image/focusrect-simple-5.swf.png b/test/image/focusrect-simple-5.swf.png
new file mode 100644
index 0000000..889ef37
Binary files /dev/null and b/test/image/focusrect-simple-5.swf.png differ
diff --git a/test/image/focusrect-simple-6.swf b/test/image/focusrect-simple-6.swf
new file mode 100644
index 0000000..a1749fb
Binary files /dev/null and b/test/image/focusrect-simple-6.swf differ
diff --git a/test/image/focusrect-simple-6.swf.png b/test/image/focusrect-simple-6.swf.png
new file mode 100644
index 0000000..cdf4637
Binary files /dev/null and b/test/image/focusrect-simple-6.swf.png differ
diff --git a/test/image/focusrect-simple-7.swf b/test/image/focusrect-simple-7.swf
new file mode 100644
index 0000000..6b4c828
Binary files /dev/null and b/test/image/focusrect-simple-7.swf differ
diff --git a/test/image/focusrect-simple-7.swf.png b/test/image/focusrect-simple-7.swf.png
new file mode 100644
index 0000000..7ace283
Binary files /dev/null and b/test/image/focusrect-simple-7.swf.png differ
diff --git a/test/image/focusrect-simple-8.swf b/test/image/focusrect-simple-8.swf
new file mode 100644
index 0000000..a770c54
Binary files /dev/null and b/test/image/focusrect-simple-8.swf differ
diff --git a/test/image/focusrect-simple-8.swf.png b/test/image/focusrect-simple-8.swf.png
new file mode 100644
index 0000000..f1ef7b1
Binary files /dev/null and b/test/image/focusrect-simple-8.swf.png differ
diff --git a/test/image/focusrect-simple.as b/test/image/focusrect-simple.as
new file mode 100644
index 0000000..55e31c9
--- /dev/null
+++ b/test/image/focusrect-simple.as
@@ -0,0 +1,19 @@
+// makeswf -v 7 -s 200x150 -r 1 -o focusrect-simple.swf focusrect-simple.as
+
+rectangle = function (mc, color, x, y, w, h)
+{
+  mc.beginFill (color);
+  mc.moveTo (x, y);
+  mc.lineTo (x, y + h);
+  mc.lineTo (x + w, y + h);
+  mc.lineTo (x + w, y);
+  mc.lineTo (x, y);
+  mc.endFill ();
+};
+
+createEmptyMovieClip ("a", 0);
+rectangle (a, 0xff, 0, 0, 50, 50);
+a.focusEnabled = true;
+Selection.setFocus (a);
+a._x = 50;
+a._y = 50;
commit 362840d3fc97f63fbb61a81349871843d1d78b6d
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Apr 1 11:21:33 2008 +0200

    draw focusrects

diff --git a/swfdec/swfdec_actor.c b/swfdec/swfdec_actor.c
index c01ec99..a30cfd7 100644
--- a/swfdec/swfdec_actor.c
+++ b/swfdec/swfdec_actor.c
@@ -316,3 +316,19 @@ swfdec_actor_get_mouse_events (SwfdecActor *actor)
     return FALSE;
 }
 
+gboolean
+swfdec_actor_has_focusrect (SwfdecActor *actor)
+{
+  g_return_val_if_fail (SWFDEC_IS_ACTOR (actor), FALSE);
+
+  if (!SWFDEC_IS_BUTTON_MOVIE (actor) &&
+      !SWFDEC_IS_SPRITE_MOVIE (actor))
+    return FALSE;
+
+  if (actor->focusrect == SWFDEC_FLASH_MAYBE) {
+    actor = SWFDEC_ACTOR (swfdec_movie_get_root (SWFDEC_MOVIE (actor)));
+  }
+  g_assert (actor->focusrect != SWFDEC_FLASH_MAYBE);
+
+  return actor->focusrect != SWFDEC_FLASH_NO;
+}
diff --git a/swfdec/swfdec_actor.h b/swfdec/swfdec_actor.h
index d315f6e..fac49f2 100644
--- a/swfdec/swfdec_actor.h
+++ b/swfdec/swfdec_actor.h
@@ -85,6 +85,7 @@ void		swfdec_actor_queue_script	(SwfdecActor *		actor,
   						 SwfdecEventType	condition);
 
 gboolean	swfdec_actor_get_mouse_events	(SwfdecActor *		actor);
+gboolean	swfdec_actor_has_focusrect	(SwfdecActor *		actor);
 
 
 G_END_DECLS
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index 520580c..54efa57 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -2633,6 +2633,31 @@ swfdec_player_key_release (SwfdecPlayer *player, guint keycode, guint character)
   return ret;
 }
 
+static void
+swfdec_player_render_focusrect (SwfdecPlayer *player, cairo_t *cr, SwfdecRect *inval)
+{
+#define LINE_WIDTH (3.0)
+  //(3 * SWFDEC_TWIPS_SCALE_FACTOR)
+  SwfdecMovie *movie = SWFDEC_MOVIE (player->priv->focus);
+  SwfdecRect rect = movie->extents;
+  double w, h;
+
+  cairo_save (cr);
+  /* I wonder why this has to be yellow... */
+  cairo_set_source_rgb (cr, 1.0, 1.0, 0.0);
+  if (movie->parent)
+    swfdec_movie_rect_local_to_global (movie->parent, &rect);
+  swfdec_player_global_to_stage (player, &rect.x0, &rect.y0);
+  swfdec_player_global_to_stage (player, &rect.x1, &rect.y1);
+  cairo_set_line_width (cr, LINE_WIDTH);
+  w = MAX (rect.x1 - rect.x0 - LINE_WIDTH, 0);
+  h = MAX (rect.y1 - rect.y0 - LINE_WIDTH, 0);
+  cairo_rectangle (cr, rect.x0 + LINE_WIDTH / 2, rect.y0 + LINE_WIDTH / 2, w, h);
+  cairo_stroke (cr);
+  cairo_restore (cr);
+#undef LINE_WIDTH
+}
+
 /**
  * swfdec_player_render:
  * @player: a #SwfdecPlayer
@@ -2689,8 +2714,12 @@ swfdec_player_render (SwfdecPlayer *player, cairo_t *cr,
   for (walk = priv->roots; walk; walk = walk->next) {
     swfdec_movie_render (walk->data, cr, &trans, &real);
   }
-  SWFDEC_INFO ("=== %p: END RENDER ===", player);
   cairo_restore (cr);
+  /* NB: we render the focusrect after restoring, so the focusrect doesn't scale */
+  if (priv->focus && swfdec_actor_has_focusrect (priv->focus))
+    swfdec_player_render_focusrect (player, cr, &real);
+
+  SWFDEC_INFO ("=== %p: END RENDER ===", player);
 }
 
 /**


More information about the Swfdec-commits mailing list