[Swfdec] 7 commits - libswfdec/swfdec_movie.c libswfdec/swfdec_sprite_movie_as.c test/image

Benjamin Otte company at kemper.freedesktop.org
Tue Nov 20 14:15:48 PST 2007


 libswfdec/swfdec_movie.c                         |    4 +
 libswfdec/swfdec_sprite_movie_as.c               |    7 ++
 test/image/Makefile.am                           |   76 +++++++++++++++++++++++
 test/image/clip-change-backward-5.swf            |binary
 test/image/clip-change-backward-5.swf.png        |binary
 test/image/clip-change-backward-6.swf            |binary
 test/image/clip-change-backward-6.swf.png        |binary
 test/image/clip-change-backward-7.swf            |binary
 test/image/clip-change-backward-7.swf.png        |binary
 test/image/clip-change-backward-8.swf            |binary
 test/image/clip-change-backward-8.swf.png        |binary
 test/image/clip-change-forward-5.swf             |binary
 test/image/clip-change-forward-5.swf.png         |binary
 test/image/clip-change-forward-6.swf             |binary
 test/image/clip-change-forward-6.swf.png         |binary
 test/image/clip-change-forward-7.swf             |binary
 test/image/clip-change-forward-7.swf.png         |binary
 test/image/clip-change-forward-8.swf             |binary
 test/image/clip-change-forward-8.swf.png         |binary
 test/image/clip-change-remove-5.swf              |binary
 test/image/clip-change-remove-5.swf.png          |binary
 test/image/clip-change-remove-6.swf              |binary
 test/image/clip-change-remove-6.swf.png          |binary
 test/image/clip-change-remove-7.swf              |binary
 test/image/clip-change-remove-7.swf.png          |binary
 test/image/clip-change-remove-8.swf              |binary
 test/image/clip-change-remove-8.swf.png          |binary
 test/image/clip-change-set-5.swf                 |binary
 test/image/clip-change-set-5.swf.png             |binary
 test/image/clip-change-set-6.swf                 |binary
 test/image/clip-change-set-6.swf.png             |binary
 test/image/clip-change-set-7.swf                 |binary
 test/image/clip-change-set-7.swf.png             |binary
 test/image/clip-change-set-8.swf                 |binary
 test/image/clip-change-set-8.swf.png             |binary
 test/image/clip-change.c                         |   75 ++++++++++++++++++++++
 test/image/mask-affected-by-clip-5.swf           |binary
 test/image/mask-affected-by-clip-5.swf.png       |binary
 test/image/mask-affected-by-clip-6.swf           |binary
 test/image/mask-affected-by-clip-6.swf.png       |binary
 test/image/mask-affected-by-clip-7.swf           |binary
 test/image/mask-affected-by-clip-7.swf.png       |binary
 test/image/mask-affected-by-clip-8.swf           |binary
 test/image/mask-affected-by-clip-8.swf.png       |binary
 test/image/mask-affected-by-clip.c               |   74 ++++++++++++++++++++++
 test/image/mask-clip-mask-5.swf                  |binary
 test/image/mask-clip-mask-5.swf.png              |binary
 test/image/mask-clip-mask-6.swf                  |binary
 test/image/mask-clip-mask-6.swf.png              |binary
 test/image/mask-clip-mask-7.swf                  |binary
 test/image/mask-clip-mask-7.swf.png              |binary
 test/image/mask-clip-mask-8.swf                  |binary
 test/image/mask-clip-mask-8.swf.png              |binary
 test/image/mask-clip-maskee-5.swf                |binary
 test/image/mask-clip-maskee-5.swf.png            |binary
 test/image/mask-clip-maskee-6.swf                |binary
 test/image/mask-clip-maskee-6.swf.png            |binary
 test/image/mask-clip-maskee-7.swf                |binary
 test/image/mask-clip-maskee-7.swf.png            |binary
 test/image/mask-clip-maskee-8.swf                |binary
 test/image/mask-clip-maskee-8.swf.png            |binary
 test/image/mask-clip.c                           |   76 +++++++++++++++++++++++
 test/image/mask-terminates-clip-mask-5.swf       |binary
 test/image/mask-terminates-clip-mask-5.swf.png   |binary
 test/image/mask-terminates-clip-mask-6.swf       |binary
 test/image/mask-terminates-clip-mask-6.swf.png   |binary
 test/image/mask-terminates-clip-mask-7.swf       |binary
 test/image/mask-terminates-clip-mask-7.swf.png   |binary
 test/image/mask-terminates-clip-mask-8.swf       |binary
 test/image/mask-terminates-clip-mask-8.swf.png   |binary
 test/image/mask-terminates-clip-maskee-5.swf     |binary
 test/image/mask-terminates-clip-maskee-5.swf.png |binary
 test/image/mask-terminates-clip-maskee-6.swf     |binary
 test/image/mask-terminates-clip-maskee-6.swf.png |binary
 test/image/mask-terminates-clip-maskee-7.swf     |binary
 test/image/mask-terminates-clip-maskee-7.swf.png |binary
 test/image/mask-terminates-clip-maskee-8.swf     |binary
 test/image/mask-terminates-clip-maskee-8.swf.png |binary
 test/image/mask-terminates-clip.c                |   76 +++++++++++++++++++++++
 79 files changed, 388 insertions(+)

New commits:
commit ff69d658cc484bd99d8b3ce6c9b00965d7101854
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Nov 20 15:13:44 2007 +0100

    test changing clip depth works as expected

diff --git a/test/image/Makefile.am b/test/image/Makefile.am
index 37e887c..9993ebc 100644
--- a/test/image/Makefile.am
+++ b/test/image/Makefile.am
@@ -8,6 +8,39 @@ image_LDFLAGS = $(SWFDEC_LIBS) $(CAIRO_LIBS)
 EXTRA_DIST = \
 	README \
 	bw.jpg \
+	clip-change.c \
+	clip-change-backward-5.swf \
+	clip-change-backward-5.swf.png \
+	clip-change-backward-6.swf \
+	clip-change-backward-6.swf.png \
+	clip-change-backward-7.swf \
+	clip-change-backward-7.swf.png \
+	clip-change-backward-8.swf \
+	clip-change-backward-8.swf.png \
+	clip-change-forward-5.swf \
+	clip-change-forward-5.swf.png \
+	clip-change-forward-6.swf \
+	clip-change-forward-6.swf.png \
+	clip-change-forward-7.swf \
+	clip-change-forward-7.swf.png \
+	clip-change-forward-8.swf \
+	clip-change-forward-8.swf.png \
+	clip-change-remove-5.swf \
+	clip-change-remove-5.swf.png \
+	clip-change-remove-6.swf \
+	clip-change-remove-6.swf.png \
+	clip-change-remove-7.swf \
+	clip-change-remove-7.swf.png \
+	clip-change-remove-8.swf \
+	clip-change-remove-8.swf.png \
+	clip-change-set-5.swf \
+	clip-change-set-5.swf.png \
+	clip-change-set-6.swf \
+	clip-change-set-6.swf.png \
+	clip-change-set-7.swf \
+	clip-change-set-7.swf.png \
+	clip-change-set-8.swf \
+	clip-change-set-8.swf.png \
 	clip-transparent.swf \
 	clip-transparent.swf.png \
 	clip-transparent.xml \
diff --git a/test/image/clip-change-backward-5.swf b/test/image/clip-change-backward-5.swf
new file mode 100644
index 0000000..7128c6d
Binary files /dev/null and b/test/image/clip-change-backward-5.swf differ
diff --git a/test/image/clip-change-backward-5.swf.png b/test/image/clip-change-backward-5.swf.png
new file mode 100644
index 0000000..bb40989
Binary files /dev/null and b/test/image/clip-change-backward-5.swf.png differ
diff --git a/test/image/clip-change-backward-6.swf b/test/image/clip-change-backward-6.swf
new file mode 100644
index 0000000..b0af9e3
Binary files /dev/null and b/test/image/clip-change-backward-6.swf differ
diff --git a/test/image/clip-change-backward-6.swf.png b/test/image/clip-change-backward-6.swf.png
new file mode 100644
index 0000000..c217c9e
Binary files /dev/null and b/test/image/clip-change-backward-6.swf.png differ
diff --git a/test/image/clip-change-backward-7.swf b/test/image/clip-change-backward-7.swf
new file mode 100644
index 0000000..0d7f60f
Binary files /dev/null and b/test/image/clip-change-backward-7.swf differ
diff --git a/test/image/clip-change-backward-7.swf.png b/test/image/clip-change-backward-7.swf.png
new file mode 100644
index 0000000..d746e2f
Binary files /dev/null and b/test/image/clip-change-backward-7.swf.png differ
diff --git a/test/image/clip-change-backward-8.swf b/test/image/clip-change-backward-8.swf
new file mode 100644
index 0000000..da6d318
Binary files /dev/null and b/test/image/clip-change-backward-8.swf differ
diff --git a/test/image/clip-change-backward-8.swf.png b/test/image/clip-change-backward-8.swf.png
new file mode 100644
index 0000000..b79e227
Binary files /dev/null and b/test/image/clip-change-backward-8.swf.png differ
diff --git a/test/image/clip-change-forward-5.swf b/test/image/clip-change-forward-5.swf
new file mode 100644
index 0000000..5340404
Binary files /dev/null and b/test/image/clip-change-forward-5.swf differ
diff --git a/test/image/clip-change-forward-5.swf.png b/test/image/clip-change-forward-5.swf.png
new file mode 100644
index 0000000..1efb023
Binary files /dev/null and b/test/image/clip-change-forward-5.swf.png differ
diff --git a/test/image/clip-change-forward-6.swf b/test/image/clip-change-forward-6.swf
new file mode 100644
index 0000000..3652a08
Binary files /dev/null and b/test/image/clip-change-forward-6.swf differ
diff --git a/test/image/clip-change-forward-6.swf.png b/test/image/clip-change-forward-6.swf.png
new file mode 100644
index 0000000..b479443
Binary files /dev/null and b/test/image/clip-change-forward-6.swf.png differ
diff --git a/test/image/clip-change-forward-7.swf b/test/image/clip-change-forward-7.swf
new file mode 100644
index 0000000..d0afe67
Binary files /dev/null and b/test/image/clip-change-forward-7.swf differ
diff --git a/test/image/clip-change-forward-7.swf.png b/test/image/clip-change-forward-7.swf.png
new file mode 100644
index 0000000..eb777d4
Binary files /dev/null and b/test/image/clip-change-forward-7.swf.png differ
diff --git a/test/image/clip-change-forward-8.swf b/test/image/clip-change-forward-8.swf
new file mode 100644
index 0000000..b20a5b7
Binary files /dev/null and b/test/image/clip-change-forward-8.swf differ
diff --git a/test/image/clip-change-forward-8.swf.png b/test/image/clip-change-forward-8.swf.png
new file mode 100644
index 0000000..9c5c666
Binary files /dev/null and b/test/image/clip-change-forward-8.swf.png differ
diff --git a/test/image/clip-change-remove-5.swf b/test/image/clip-change-remove-5.swf
new file mode 100644
index 0000000..8a7a63f
Binary files /dev/null and b/test/image/clip-change-remove-5.swf differ
diff --git a/test/image/clip-change-remove-5.swf.png b/test/image/clip-change-remove-5.swf.png
new file mode 100644
index 0000000..7f31154
Binary files /dev/null and b/test/image/clip-change-remove-5.swf.png differ
diff --git a/test/image/clip-change-remove-6.swf b/test/image/clip-change-remove-6.swf
new file mode 100644
index 0000000..2eb8e3e
Binary files /dev/null and b/test/image/clip-change-remove-6.swf differ
diff --git a/test/image/clip-change-remove-6.swf.png b/test/image/clip-change-remove-6.swf.png
new file mode 100644
index 0000000..acc5d24
Binary files /dev/null and b/test/image/clip-change-remove-6.swf.png differ
diff --git a/test/image/clip-change-remove-7.swf b/test/image/clip-change-remove-7.swf
new file mode 100644
index 0000000..264c9c9
Binary files /dev/null and b/test/image/clip-change-remove-7.swf differ
diff --git a/test/image/clip-change-remove-7.swf.png b/test/image/clip-change-remove-7.swf.png
new file mode 100644
index 0000000..b726a19
Binary files /dev/null and b/test/image/clip-change-remove-7.swf.png differ
diff --git a/test/image/clip-change-remove-8.swf b/test/image/clip-change-remove-8.swf
new file mode 100644
index 0000000..19f8831
Binary files /dev/null and b/test/image/clip-change-remove-8.swf differ
diff --git a/test/image/clip-change-remove-8.swf.png b/test/image/clip-change-remove-8.swf.png
new file mode 100644
index 0000000..68636e8
Binary files /dev/null and b/test/image/clip-change-remove-8.swf.png differ
diff --git a/test/image/clip-change-set-5.swf b/test/image/clip-change-set-5.swf
new file mode 100644
index 0000000..204a57a
Binary files /dev/null and b/test/image/clip-change-set-5.swf differ
diff --git a/test/image/clip-change-set-5.swf.png b/test/image/clip-change-set-5.swf.png
new file mode 100644
index 0000000..f28aef6
Binary files /dev/null and b/test/image/clip-change-set-5.swf.png differ
diff --git a/test/image/clip-change-set-6.swf b/test/image/clip-change-set-6.swf
new file mode 100644
index 0000000..6a34bbc
Binary files /dev/null and b/test/image/clip-change-set-6.swf differ
diff --git a/test/image/clip-change-set-6.swf.png b/test/image/clip-change-set-6.swf.png
new file mode 100644
index 0000000..7338cc3
Binary files /dev/null and b/test/image/clip-change-set-6.swf.png differ
diff --git a/test/image/clip-change-set-7.swf b/test/image/clip-change-set-7.swf
new file mode 100644
index 0000000..792f874
Binary files /dev/null and b/test/image/clip-change-set-7.swf differ
diff --git a/test/image/clip-change-set-7.swf.png b/test/image/clip-change-set-7.swf.png
new file mode 100644
index 0000000..8295ce4
Binary files /dev/null and b/test/image/clip-change-set-7.swf.png differ
diff --git a/test/image/clip-change-set-8.swf b/test/image/clip-change-set-8.swf
new file mode 100644
index 0000000..bacc051
Binary files /dev/null and b/test/image/clip-change-set-8.swf differ
diff --git a/test/image/clip-change-set-8.swf.png b/test/image/clip-change-set-8.swf.png
new file mode 100644
index 0000000..ffb33bb
Binary files /dev/null and b/test/image/clip-change-set-8.swf.png differ
diff --git a/test/image/clip-change.c b/test/image/clip-change.c
new file mode 100644
index 0000000..9e7da16
--- /dev/null
+++ b/test/image/clip-change.c
@@ -0,0 +1,75 @@
+/* gcc `pkg-config --libs --cflags libming` clip-change.c -o clip-change && ./clip-change
+ */
+
+#include <ming.h>
+
+static SWFBlock
+get_rectangle (int r, int g, int b)
+{
+  SWFShape shape;
+  SWFFillStyle fill;
+
+  shape = newSWFShape ();
+  fill = SWFShape_addSolidFillStyle (shape, r, g, b, 255);
+  SWFShape_setRightFillStyle (shape, fill);
+  SWFShape_drawLineTo (shape, 100, 0);
+  SWFShape_drawLineTo (shape, 100, 100);
+  SWFShape_drawLineTo (shape, 0, 100);
+  SWFShape_drawLineTo (shape, 0, 0);
+
+  return (SWFBlock) shape;
+}
+
+static void
+do_movie (int version, int reverse)
+{
+  const char *suffixes[4] = { "forward", "backward", "remove", "set" };
+  char name[100];
+  SWFMovie movie;
+  SWFDisplayItem item, clip;
+
+  movie = newSWFMovieWithVersion (version);
+  SWFMovie_setRate (movie, 1);
+  SWFMovie_setDimension (movie, 200, 150);
+
+  clip = SWFMovie_add (movie, get_rectangle (255, 0, 0));
+  SWFDisplayItem_setDepth (clip, 0);
+  if (reverse != 3)
+    SWFDisplayItem_setMaskLevel (clip, (reverse & 1) ? 3 : 2);
+
+  item = SWFMovie_add (movie, get_rectangle (0, 255, 0));
+  SWFDisplayItem_moveTo (item, 0, 50);
+  SWFDisplayItem_setDepth (item, 2);
+
+  item = SWFMovie_add (movie, get_rectangle (0, 0, 255));
+  SWFDisplayItem_moveTo (item, 50, 0);
+  SWFDisplayItem_setDepth (item, 3);
+
+  SWFMovie_nextFrame (movie);
+  if (reverse != 2)
+    SWFDisplayItem_setMaskLevel (clip, (reverse & 1) ? 2 : 3);
+  else
+    SWFDisplayItem_setMaskLevel (clip, 0);
+  SWFMovie_nextFrame (movie);
+
+  sprintf (name, "clip-change-%s-%d.swf", suffixes[reverse], version);
+  SWFMovie_save (movie, name);
+}
+
+int
+main (int argc, char **argv)
+{
+  int i;
+
+  if (Ming_init ())
+    return 1;
+
+  for (i = 8; i >= 5; i--) {
+    do_movie (i, 0);
+    do_movie (i, 1);
+    do_movie (i, 2);
+    do_movie (i, 3);
+  }
+
+  return 0;
+}
commit 0e35e7b5a43d174629969343435fa2f207c46d51
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Nov 20 15:02:56 2007 +0100

    test that clip depths get terminated correctly

diff --git a/test/image/Makefile.am b/test/image/Makefile.am
index 2f60523..37e887c 100644
--- a/test/image/Makefile.am
+++ b/test/image/Makefile.am
@@ -128,6 +128,23 @@ EXTRA_DIST = \
 	mask-remove-clip-7.swf.png \
 	mask-remove-clip-8.swf \
 	mask-remove-clip-8.swf.png \
+	mask-terminates-clip.c \
+	mask-terminates-clip-mask-5.swf \
+	mask-terminates-clip-mask-5.swf.png \
+	mask-terminates-clip-mask-6.swf \
+	mask-terminates-clip-mask-6.swf.png \
+	mask-terminates-clip-mask-7.swf \
+	mask-terminates-clip-mask-7.swf.png \
+	mask-terminates-clip-mask-8.swf \
+	mask-terminates-clip-mask-8.swf.png \
+	mask-terminates-clip-maskee-5.swf \
+	mask-terminates-clip-maskee-5.swf.png \
+	mask-terminates-clip-maskee-6.swf \
+	mask-terminates-clip-maskee-6.swf.png \
+	mask-terminates-clip-maskee-7.swf \
+	mask-terminates-clip-maskee-7.swf.png \
+	mask-terminates-clip-maskee-8.swf \
+	mask-terminates-clip-maskee-8.swf.png \
 	mask-textfield.as \
 	mask-textfield-5.swf \
 	mask-textfield-5.swf.png \
diff --git a/test/image/mask-terminates-clip-mask-5.swf b/test/image/mask-terminates-clip-mask-5.swf
new file mode 100644
index 0000000..5002326
Binary files /dev/null and b/test/image/mask-terminates-clip-mask-5.swf differ
diff --git a/test/image/mask-terminates-clip-mask-5.swf.png b/test/image/mask-terminates-clip-mask-5.swf.png
new file mode 100644
index 0000000..3ce7aab
Binary files /dev/null and b/test/image/mask-terminates-clip-mask-5.swf.png differ
diff --git a/test/image/mask-terminates-clip-mask-6.swf b/test/image/mask-terminates-clip-mask-6.swf
new file mode 100644
index 0000000..d8a9dbb
Binary files /dev/null and b/test/image/mask-terminates-clip-mask-6.swf differ
diff --git a/test/image/mask-terminates-clip-mask-6.swf.png b/test/image/mask-terminates-clip-mask-6.swf.png
new file mode 100644
index 0000000..779e155
Binary files /dev/null and b/test/image/mask-terminates-clip-mask-6.swf.png differ
diff --git a/test/image/mask-terminates-clip-mask-7.swf b/test/image/mask-terminates-clip-mask-7.swf
new file mode 100644
index 0000000..0ffede5
Binary files /dev/null and b/test/image/mask-terminates-clip-mask-7.swf differ
diff --git a/test/image/mask-terminates-clip-mask-7.swf.png b/test/image/mask-terminates-clip-mask-7.swf.png
new file mode 100644
index 0000000..b3c4017
Binary files /dev/null and b/test/image/mask-terminates-clip-mask-7.swf.png differ
diff --git a/test/image/mask-terminates-clip-mask-8.swf b/test/image/mask-terminates-clip-mask-8.swf
new file mode 100644
index 0000000..acf49a1
Binary files /dev/null and b/test/image/mask-terminates-clip-mask-8.swf differ
diff --git a/test/image/mask-terminates-clip-mask-8.swf.png b/test/image/mask-terminates-clip-mask-8.swf.png
new file mode 100644
index 0000000..b26ba7b
Binary files /dev/null and b/test/image/mask-terminates-clip-mask-8.swf.png differ
diff --git a/test/image/mask-terminates-clip-maskee-5.swf b/test/image/mask-terminates-clip-maskee-5.swf
new file mode 100644
index 0000000..003ea45
Binary files /dev/null and b/test/image/mask-terminates-clip-maskee-5.swf differ
diff --git a/test/image/mask-terminates-clip-maskee-5.swf.png b/test/image/mask-terminates-clip-maskee-5.swf.png
new file mode 100644
index 0000000..be6d409
Binary files /dev/null and b/test/image/mask-terminates-clip-maskee-5.swf.png differ
diff --git a/test/image/mask-terminates-clip-maskee-6.swf b/test/image/mask-terminates-clip-maskee-6.swf
new file mode 100644
index 0000000..5f54552
Binary files /dev/null and b/test/image/mask-terminates-clip-maskee-6.swf differ
diff --git a/test/image/mask-terminates-clip-maskee-6.swf.png b/test/image/mask-terminates-clip-maskee-6.swf.png
new file mode 100644
index 0000000..081c0a9
Binary files /dev/null and b/test/image/mask-terminates-clip-maskee-6.swf.png differ
diff --git a/test/image/mask-terminates-clip-maskee-7.swf b/test/image/mask-terminates-clip-maskee-7.swf
new file mode 100644
index 0000000..58f13c2
Binary files /dev/null and b/test/image/mask-terminates-clip-maskee-7.swf differ
diff --git a/test/image/mask-terminates-clip-maskee-7.swf.png b/test/image/mask-terminates-clip-maskee-7.swf.png
new file mode 100644
index 0000000..a1696d2
Binary files /dev/null and b/test/image/mask-terminates-clip-maskee-7.swf.png differ
diff --git a/test/image/mask-terminates-clip-maskee-8.swf b/test/image/mask-terminates-clip-maskee-8.swf
new file mode 100644
index 0000000..190b2f9
Binary files /dev/null and b/test/image/mask-terminates-clip-maskee-8.swf differ
diff --git a/test/image/mask-terminates-clip-maskee-8.swf.png b/test/image/mask-terminates-clip-maskee-8.swf.png
new file mode 100644
index 0000000..a90bedd
Binary files /dev/null and b/test/image/mask-terminates-clip-maskee-8.swf.png differ
diff --git a/test/image/mask-terminates-clip.c b/test/image/mask-terminates-clip.c
new file mode 100644
index 0000000..c9bf074
--- /dev/null
+++ b/test/image/mask-terminates-clip.c
@@ -0,0 +1,76 @@
+/* gcc `pkg-config --libs --cflags libming` mask-terminates-clip.c -o mask-terminates-clip && ./mask-terminates-clip
+ */
+
+#include <ming.h>
+
+static SWFBlock
+get_rectangle (int r, int g, int b)
+{
+  SWFMovieClip clip;
+  SWFShape shape;
+  SWFFillStyle fill;
+
+  clip = newSWFMovieClip ();
+  shape = newSWFShape ();
+  fill = SWFShape_addSolidFillStyle (shape, r, g, b, 255);
+  SWFShape_setRightFillStyle (shape, fill);
+  SWFShape_drawLineTo (shape, 100, 0);
+  SWFShape_drawLineTo (shape, 100, 100);
+  SWFShape_drawLineTo (shape, 0, 100);
+  SWFShape_drawLineTo (shape, 0, 0);
+
+  SWFMovieClip_add (clip, (SWFBlock) shape);
+  SWFMovieClip_nextFrame (clip);
+  return (SWFBlock) clip;
+}
+
+static void
+do_movie (int version, int reverse)
+{
+  char name[100];
+  SWFMovie movie;
+  SWFDisplayItem item;
+
+  movie = newSWFMovieWithVersion (version);
+  SWFMovie_setRate (movie, 1);
+  SWFMovie_setDimension (movie, 200, 150);
+
+  item = SWFMovie_add (movie, get_rectangle (255, 0, 0));
+  SWFDisplayItem_setDepth (item, 0);
+  SWFDisplayItem_setName (item, "a");
+  SWFDisplayItem_setMaskLevel (item, 2);
+
+  item = SWFMovie_add (movie, get_rectangle (0, 255, 0));
+  SWFDisplayItem_moveTo (item, 0, 50);
+  SWFDisplayItem_setDepth (item, 1);
+  SWFDisplayItem_setName (item, "b");
+
+  item = SWFMovie_add (movie, get_rectangle (0, 0, 255));
+  SWFDisplayItem_moveTo (item, 50, 0);
+  SWFDisplayItem_setDepth (item, 3);
+  SWFDisplayItem_setName (item, "c");
+
+  SWFMovie_add (movie, (SWFBlock) newSWFAction (
+	reverse ? "a.setMask (c); a.setMask (null);" : "c.setMask (a); c.setMask (null);"
+	));
+  SWFMovie_nextFrame (movie);
+
+  sprintf (name, "mask-terminates-clip-%s-%d.swf", reverse ? "mask" : "maskee", version);
+  SWFMovie_save (movie, name);
+}
+
+int
+main (int argc, char **argv)
+{
+  int i;
+
+  if (Ming_init ())
+    return 1;
+
+  for (i = 8; i >= 5; i--) {
+    do_movie (i, 0);
+    do_movie (i, 1);
+  }
+
+  return 0;
+}
commit 8edfa12eacffccd4209e0f97bdb4c42e059c03a4
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Nov 20 15:00:45 2007 +0100

    also unset clip depth of mask, not just of the masked movie

diff --git a/libswfdec/swfdec_sprite_movie_as.c b/libswfdec/swfdec_sprite_movie_as.c
index 49cc39f..549661c 100644
--- a/libswfdec/swfdec_sprite_movie_as.c
+++ b/libswfdec/swfdec_sprite_movie_as.c
@@ -564,6 +564,13 @@ swfdec_sprite_movie_setMask (SwfdecAsContext *cx, SwfdecAsObject *object,
     mask->masked_by = NULL;
     mask->mask_of = movie;
     swfdec_movie_invalidate (mask);
+    if (mask->clip_depth) {
+      g_assert (mask->parent);
+      swfdec_movie_invalidate (mask->parent);
+      mask->clip_depth = 0;
+    } else {
+      swfdec_movie_invalidate (mask);
+    }
   }
 }
 
commit f5ebe8fcf28fb651881cefabaf0b09eaa56a6773
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Nov 20 14:57:21 2007 +0100

    update to show the differences better

diff --git a/test/image/mask-clip-mask-5.swf b/test/image/mask-clip-mask-5.swf
index 8704afc..ed39179 100644
Binary files a/test/image/mask-clip-mask-5.swf and b/test/image/mask-clip-mask-5.swf differ
diff --git a/test/image/mask-clip-mask-5.swf.png b/test/image/mask-clip-mask-5.swf.png
index 8d0b3cd..ed58510 100644
Binary files a/test/image/mask-clip-mask-5.swf.png and b/test/image/mask-clip-mask-5.swf.png differ
diff --git a/test/image/mask-clip-mask-6.swf b/test/image/mask-clip-mask-6.swf
index 589c342..ea8dbd7 100644
Binary files a/test/image/mask-clip-mask-6.swf and b/test/image/mask-clip-mask-6.swf differ
diff --git a/test/image/mask-clip-mask-6.swf.png b/test/image/mask-clip-mask-6.swf.png
index 9c90f63..f83d475 100644
Binary files a/test/image/mask-clip-mask-6.swf.png and b/test/image/mask-clip-mask-6.swf.png differ
diff --git a/test/image/mask-clip-mask-7.swf b/test/image/mask-clip-mask-7.swf
index bce3f46..256116d 100644
Binary files a/test/image/mask-clip-mask-7.swf and b/test/image/mask-clip-mask-7.swf differ
diff --git a/test/image/mask-clip-mask-7.swf.png b/test/image/mask-clip-mask-7.swf.png
index e0c0804..b47d602 100644
Binary files a/test/image/mask-clip-mask-7.swf.png and b/test/image/mask-clip-mask-7.swf.png differ
diff --git a/test/image/mask-clip-mask-8.swf b/test/image/mask-clip-mask-8.swf
index 5bca159..0553fcd 100644
Binary files a/test/image/mask-clip-mask-8.swf and b/test/image/mask-clip-mask-8.swf differ
diff --git a/test/image/mask-clip-mask-8.swf.png b/test/image/mask-clip-mask-8.swf.png
index 8234a76..89a993c 100644
Binary files a/test/image/mask-clip-mask-8.swf.png and b/test/image/mask-clip-mask-8.swf.png differ
diff --git a/test/image/mask-clip-maskee-5.swf b/test/image/mask-clip-maskee-5.swf
index 23b7a21..379e7b6 100644
Binary files a/test/image/mask-clip-maskee-5.swf and b/test/image/mask-clip-maskee-5.swf differ
diff --git a/test/image/mask-clip-maskee-5.swf.png b/test/image/mask-clip-maskee-5.swf.png
index 1e79316..c2a759f 100644
Binary files a/test/image/mask-clip-maskee-5.swf.png and b/test/image/mask-clip-maskee-5.swf.png differ
diff --git a/test/image/mask-clip-maskee-6.swf b/test/image/mask-clip-maskee-6.swf
index 0196b6c..35490be 100644
Binary files a/test/image/mask-clip-maskee-6.swf and b/test/image/mask-clip-maskee-6.swf differ
diff --git a/test/image/mask-clip-maskee-6.swf.png b/test/image/mask-clip-maskee-6.swf.png
index f0db8e4..f1b6cc7 100644
Binary files a/test/image/mask-clip-maskee-6.swf.png and b/test/image/mask-clip-maskee-6.swf.png differ
diff --git a/test/image/mask-clip-maskee-7.swf b/test/image/mask-clip-maskee-7.swf
index e2b0aa7..f011e50 100644
Binary files a/test/image/mask-clip-maskee-7.swf and b/test/image/mask-clip-maskee-7.swf differ
diff --git a/test/image/mask-clip-maskee-7.swf.png b/test/image/mask-clip-maskee-7.swf.png
index 6a41da6..b202326 100644
Binary files a/test/image/mask-clip-maskee-7.swf.png and b/test/image/mask-clip-maskee-7.swf.png differ
diff --git a/test/image/mask-clip-maskee-8.swf b/test/image/mask-clip-maskee-8.swf
index 6f28387..760174a 100644
Binary files a/test/image/mask-clip-maskee-8.swf and b/test/image/mask-clip-maskee-8.swf differ
diff --git a/test/image/mask-clip-maskee-8.swf.png b/test/image/mask-clip-maskee-8.swf.png
index c3aa7a4..d4c5c0e 100644
Binary files a/test/image/mask-clip-maskee-8.swf.png and b/test/image/mask-clip-maskee-8.swf.png differ
diff --git a/test/image/mask-clip.c b/test/image/mask-clip.c
index 5bea68e..44cf5a0 100644
--- a/test/image/mask-clip.c
+++ b/test/image/mask-clip.c
@@ -41,11 +41,11 @@ do_movie (int version, int reverse)
   SWFDisplayItem_setMaskLevel (item, 2);
 
   item = SWFMovie_add (movie, get_rectangle (0, 255, 0));
-  SWFDisplayItem_moveTo (item, 50, 0);
+  SWFDisplayItem_moveTo (item, 0, 50);
   SWFDisplayItem_setDepth (item, 1);
   SWFDisplayItem_setName (item, "b");
 
-  item = SWFMovie_add (movie, get_rectangle (0, 255, 0));
+  item = SWFMovie_add (movie, get_rectangle (0, 0, 255));
   SWFDisplayItem_moveTo (item, 50, 0);
   SWFDisplayItem_setDepth (item, 3);
   SWFDisplayItem_setName (item, "c");
commit 75eae9e6bb75b08a64352bf00c3e3c829b9add91
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Nov 20 14:53:34 2007 +0100

    and another test that lay here

diff --git a/test/image/Makefile.am b/test/image/Makefile.am
index be9b413..2f60523 100644
--- a/test/image/Makefile.am
+++ b/test/image/Makefile.am
@@ -93,6 +93,23 @@ EXTRA_DIST = \
 	mask-and-clip-8-8.swf.png \
 	mask-and-clip-9-8.swf \
 	mask-and-clip-9-8.swf.png \
+	mask-clip.c \
+	mask-clip-mask-5.swf \
+	mask-clip-mask-5.swf.png \
+	mask-clip-mask-6.swf \
+	mask-clip-mask-6.swf.png \
+	mask-clip-mask-7.swf \
+	mask-clip-mask-7.swf.png \
+	mask-clip-mask-8.swf \
+	mask-clip-mask-8.swf.png \
+	mask-clip-maskee-5.swf \
+	mask-clip-maskee-5.swf.png \
+	mask-clip-maskee-6.swf \
+	mask-clip-maskee-6.swf.png \
+	mask-clip-maskee-7.swf \
+	mask-clip-maskee-7.swf.png \
+	mask-clip-maskee-8.swf \
+	mask-clip-maskee-8.swf.png \
 	mask-different-parent.as \
 	mask-different-parent-5.swf \
 	mask-different-parent-5.swf.png \
diff --git a/test/image/mask-clip-mask-5.swf b/test/image/mask-clip-mask-5.swf
new file mode 100644
index 0000000..8704afc
Binary files /dev/null and b/test/image/mask-clip-mask-5.swf differ
diff --git a/test/image/mask-clip-mask-5.swf.png b/test/image/mask-clip-mask-5.swf.png
new file mode 100644
index 0000000..8d0b3cd
Binary files /dev/null and b/test/image/mask-clip-mask-5.swf.png differ
diff --git a/test/image/mask-clip-mask-6.swf b/test/image/mask-clip-mask-6.swf
new file mode 100644
index 0000000..589c342
Binary files /dev/null and b/test/image/mask-clip-mask-6.swf differ
diff --git a/test/image/mask-clip-mask-6.swf.png b/test/image/mask-clip-mask-6.swf.png
new file mode 100644
index 0000000..9c90f63
Binary files /dev/null and b/test/image/mask-clip-mask-6.swf.png differ
diff --git a/test/image/mask-clip-mask-7.swf b/test/image/mask-clip-mask-7.swf
new file mode 100644
index 0000000..bce3f46
Binary files /dev/null and b/test/image/mask-clip-mask-7.swf differ
diff --git a/test/image/mask-clip-mask-7.swf.png b/test/image/mask-clip-mask-7.swf.png
new file mode 100644
index 0000000..e0c0804
Binary files /dev/null and b/test/image/mask-clip-mask-7.swf.png differ
diff --git a/test/image/mask-clip-mask-8.swf b/test/image/mask-clip-mask-8.swf
new file mode 100644
index 0000000..5bca159
Binary files /dev/null and b/test/image/mask-clip-mask-8.swf differ
diff --git a/test/image/mask-clip-mask-8.swf.png b/test/image/mask-clip-mask-8.swf.png
new file mode 100644
index 0000000..8234a76
Binary files /dev/null and b/test/image/mask-clip-mask-8.swf.png differ
diff --git a/test/image/mask-clip-maskee-5.swf b/test/image/mask-clip-maskee-5.swf
new file mode 100644
index 0000000..23b7a21
Binary files /dev/null and b/test/image/mask-clip-maskee-5.swf differ
diff --git a/test/image/mask-clip-maskee-5.swf.png b/test/image/mask-clip-maskee-5.swf.png
new file mode 100644
index 0000000..1e79316
Binary files /dev/null and b/test/image/mask-clip-maskee-5.swf.png differ
diff --git a/test/image/mask-clip-maskee-6.swf b/test/image/mask-clip-maskee-6.swf
new file mode 100644
index 0000000..0196b6c
Binary files /dev/null and b/test/image/mask-clip-maskee-6.swf differ
diff --git a/test/image/mask-clip-maskee-6.swf.png b/test/image/mask-clip-maskee-6.swf.png
new file mode 100644
index 0000000..f0db8e4
Binary files /dev/null and b/test/image/mask-clip-maskee-6.swf.png differ
diff --git a/test/image/mask-clip-maskee-7.swf b/test/image/mask-clip-maskee-7.swf
new file mode 100644
index 0000000..e2b0aa7
Binary files /dev/null and b/test/image/mask-clip-maskee-7.swf differ
diff --git a/test/image/mask-clip-maskee-7.swf.png b/test/image/mask-clip-maskee-7.swf.png
new file mode 100644
index 0000000..6a41da6
Binary files /dev/null and b/test/image/mask-clip-maskee-7.swf.png differ
diff --git a/test/image/mask-clip-maskee-8.swf b/test/image/mask-clip-maskee-8.swf
new file mode 100644
index 0000000..6f28387
Binary files /dev/null and b/test/image/mask-clip-maskee-8.swf differ
diff --git a/test/image/mask-clip-maskee-8.swf.png b/test/image/mask-clip-maskee-8.swf.png
new file mode 100644
index 0000000..c3aa7a4
Binary files /dev/null and b/test/image/mask-clip-maskee-8.swf.png differ
diff --git a/test/image/mask-clip.c b/test/image/mask-clip.c
new file mode 100644
index 0000000..5bea68e
--- /dev/null
+++ b/test/image/mask-clip.c
@@ -0,0 +1,76 @@
+/* gcc `pkg-config --libs --cflags libming` mask-clip.c -o mask-clip && ./mask-clip
+ */
+
+#include <ming.h>
+
+static SWFBlock
+get_rectangle (int r, int g, int b)
+{
+  SWFMovieClip clip;
+  SWFShape shape;
+  SWFFillStyle fill;
+
+  clip = newSWFMovieClip ();
+  shape = newSWFShape ();
+  fill = SWFShape_addSolidFillStyle (shape, r, g, b, 255);
+  SWFShape_setRightFillStyle (shape, fill);
+  SWFShape_drawLineTo (shape, 100, 0);
+  SWFShape_drawLineTo (shape, 100, 100);
+  SWFShape_drawLineTo (shape, 0, 100);
+  SWFShape_drawLineTo (shape, 0, 0);
+
+  SWFMovieClip_add (clip, (SWFBlock) shape);
+  SWFMovieClip_nextFrame (clip);
+  return (SWFBlock) clip;
+}
+
+static void
+do_movie (int version, int reverse)
+{
+  char name[100];
+  SWFMovie movie;
+  SWFDisplayItem item;
+
+  movie = newSWFMovieWithVersion (version);
+  SWFMovie_setRate (movie, 1);
+  SWFMovie_setDimension (movie, 200, 150);
+
+  item = SWFMovie_add (movie, get_rectangle (255, 0, 0));
+  SWFDisplayItem_setDepth (item, 0);
+  SWFDisplayItem_setName (item, "a");
+  SWFDisplayItem_setMaskLevel (item, 2);
+
+  item = SWFMovie_add (movie, get_rectangle (0, 255, 0));
+  SWFDisplayItem_moveTo (item, 50, 0);
+  SWFDisplayItem_setDepth (item, 1);
+  SWFDisplayItem_setName (item, "b");
+
+  item = SWFMovie_add (movie, get_rectangle (0, 255, 0));
+  SWFDisplayItem_moveTo (item, 50, 0);
+  SWFDisplayItem_setDepth (item, 3);
+  SWFDisplayItem_setName (item, "c");
+
+  SWFMovie_add (movie, (SWFBlock) newSWFAction (
+	reverse ? "c.setMask (b);" : "b.setMask (c);"
+	));
+  SWFMovie_nextFrame (movie);
+
+  sprintf (name, "mask-clip-%s-%d.swf", reverse ? "mask" : "maskee", version);
+  SWFMovie_save (movie, name);
+}
+
+int
+main (int argc, char **argv)
+{
+  int i;
+
+  if (Ming_init ())
+    return 1;
+
+  for (i = 8; i >= 5; i--) {
+    do_movie (i, 0);
+    do_movie (i, 1);
+  }
+
+  return 0;
+}
commit d32cb706d27af3ba09d3c85c69e1437030cd8661
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Nov 20 14:46:49 2007 +0100

    add another test

diff --git a/test/image/Makefile.am b/test/image/Makefile.am
index bf4e192..be9b413 100644
--- a/test/image/Makefile.am
+++ b/test/image/Makefile.am
@@ -51,6 +51,15 @@ EXTRA_DIST = \
 	load-jpeg-7.swf.png \
 	load-jpeg-8.swf \
 	load-jpeg-8.swf.png \
+	mask-affected-by-clip.c \
+	mask-affected-by-clip-5.swf \
+	mask-affected-by-clip-5.swf.png \
+	mask-affected-by-clip-6.swf \
+	mask-affected-by-clip-6.swf.png \
+	mask-affected-by-clip-7.swf \
+	mask-affected-by-clip-7.swf.png \
+	mask-affected-by-clip-8.swf \
+	mask-affected-by-clip-8.swf.png \
 	mask-and-clip.c \
 	mask-and-clip-0-8.swf \
 	mask-and-clip-0-8.swf.png \
diff --git a/test/image/mask-affected-by-clip-5.swf b/test/image/mask-affected-by-clip-5.swf
new file mode 100644
index 0000000..b109c07
Binary files /dev/null and b/test/image/mask-affected-by-clip-5.swf differ
diff --git a/test/image/mask-affected-by-clip-5.swf.png b/test/image/mask-affected-by-clip-5.swf.png
new file mode 100644
index 0000000..9a47f72
Binary files /dev/null and b/test/image/mask-affected-by-clip-5.swf.png differ
diff --git a/test/image/mask-affected-by-clip-6.swf b/test/image/mask-affected-by-clip-6.swf
new file mode 100644
index 0000000..d4d0f87
Binary files /dev/null and b/test/image/mask-affected-by-clip-6.swf differ
diff --git a/test/image/mask-affected-by-clip-6.swf.png b/test/image/mask-affected-by-clip-6.swf.png
new file mode 100644
index 0000000..3094937
Binary files /dev/null and b/test/image/mask-affected-by-clip-6.swf.png differ
diff --git a/test/image/mask-affected-by-clip-7.swf b/test/image/mask-affected-by-clip-7.swf
new file mode 100644
index 0000000..da356c0
Binary files /dev/null and b/test/image/mask-affected-by-clip-7.swf differ
diff --git a/test/image/mask-affected-by-clip-7.swf.png b/test/image/mask-affected-by-clip-7.swf.png
new file mode 100644
index 0000000..0277bd5
Binary files /dev/null and b/test/image/mask-affected-by-clip-7.swf.png differ
diff --git a/test/image/mask-affected-by-clip-8.swf b/test/image/mask-affected-by-clip-8.swf
new file mode 100644
index 0000000..7d40ed6
Binary files /dev/null and b/test/image/mask-affected-by-clip-8.swf differ
diff --git a/test/image/mask-affected-by-clip-8.swf.png b/test/image/mask-affected-by-clip-8.swf.png
new file mode 100644
index 0000000..1f4d160
Binary files /dev/null and b/test/image/mask-affected-by-clip-8.swf.png differ
diff --git a/test/image/mask-affected-by-clip.c b/test/image/mask-affected-by-clip.c
new file mode 100644
index 0000000..45cd0c3
--- /dev/null
+++ b/test/image/mask-affected-by-clip.c
@@ -0,0 +1,74 @@
+/* gcc `pkg-config --libs --cflags libming` mask-affected-by-clip.c -o mask-affected-by-clip && ./mask-affected-by-clip
+ */
+
+#include <ming.h>
+
+static SWFBlock
+get_rectangle (int r, int g, int b)
+{
+  SWFMovieClip clip;
+  SWFShape shape;
+  SWFFillStyle fill;
+
+  clip = newSWFMovieClip ();
+  shape = newSWFShape ();
+  fill = SWFShape_addSolidFillStyle (shape, r, g, b, 255);
+  SWFShape_setRightFillStyle (shape, fill);
+  SWFShape_drawLineTo (shape, 100, 0);
+  SWFShape_drawLineTo (shape, 100, 100);
+  SWFShape_drawLineTo (shape, 0, 100);
+  SWFShape_drawLineTo (shape, 0, 0);
+
+  SWFMovieClip_add (clip, (SWFBlock) shape);
+  SWFMovieClip_nextFrame (clip);
+  return (SWFBlock) clip;
+}
+
+static void
+do_movie (int version)
+{
+  char name[100];
+  SWFMovie movie;
+  SWFDisplayItem item;
+
+  movie = newSWFMovieWithVersion (version);
+  SWFMovie_setRate (movie, 1);
+  SWFMovie_setDimension (movie, 200, 150);
+
+  item = SWFMovie_add (movie, get_rectangle (255, 0, 0));
+  SWFDisplayItem_setDepth (item, 0);
+  SWFDisplayItem_setMaskLevel (item, 2);
+
+  item = SWFMovie_add (movie, get_rectangle (0, 255, 0));
+  SWFDisplayItem_moveTo (item, 50, 25);
+  SWFDisplayItem_setDepth (item, 1);
+  SWFDisplayItem_setName (item, "b");
+
+  item = SWFMovie_add (movie, get_rectangle (0, 0, 255));
+  SWFDisplayItem_moveTo (item, 25, 50);
+  SWFDisplayItem_setDepth (item, 3);
+  SWFDisplayItem_setName (item, "c");
+
+  SWFMovie_add (movie, (SWFBlock) newSWFAction (
+	"c.setMask (b);"
+	));
+  SWFMovie_nextFrame (movie);
+
+  sprintf (name, "mask-affected-by-clip-%d.swf", version);
+  SWFMovie_save (movie, name);
+}
+
+int
+main (int argc, char **argv)
+{
+  int i;
+
+  if (Ming_init ())
+    return 1;
+
+  for (i = 8; i >= 5; i--) {
+    do_movie (i);
+  }
+
+  return 0;
+}
commit 28d614b8c2b909a9a27eb9b06c57e1eb916b8129
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Nov 20 12:46:27 2007 +0100

    update the movie's matrix before computing the to/from-global matrix

diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index a3772c8..0fbf8a2 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -571,6 +571,8 @@ 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;
   }
@@ -584,6 +586,8 @@ 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;
   }


More information about the Swfdec mailing list