[Swfdec-commits] 4 commits - swfdec/swfdec_as_strings.c swfdec/swfdec_bitmap_data.c swfdec/swfdec_bitmap_data.h test/image

Benjamin Otte company at kemper.freedesktop.org
Fri Jul 25 11:58:22 PDT 2008


 swfdec/swfdec_as_strings.c            |    1 
 swfdec/swfdec_bitmap_data.c           |   98 +++++++
 swfdec/swfdec_bitmap_data.h           |    5 
 test/image/Makefile.am                |    9 
 test/image/loadBitmap-clone-5.swf     |binary
 test/image/loadBitmap-clone-5.swf.png |binary
 test/image/loadBitmap-clone-6.swf     |binary
 test/image/loadBitmap-clone-6.swf.png |binary
 test/image/loadBitmap-clone-7.swf     |binary
 test/image/loadBitmap-clone-7.swf.png |binary
 test/image/loadBitmap-clone-8.swf     |binary
 test/image/loadBitmap-clone-8.swf.png |binary
 test/image/loadBitmap-clone.xml       |  422 ++++++++++++++++++++++++++++++++++
 13 files changed, 531 insertions(+), 4 deletions(-)

New commits:
commit 57aaf1faffd1b13814f99aff9637dd41934c4227
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Jul 25 20:57:21 2008 +0200

    add a test that makes use of BitmapData.loadBitmap and BitmapData.clone

diff --git a/test/image/Makefile.am b/test/image/Makefile.am
index 2ff7e97..2418fa3 100644
--- a/test/image/Makefile.am
+++ b/test/image/Makefile.am
@@ -191,6 +191,15 @@ EXTRA_DIST = \
 	image-jpeg-alpha.swf.png \
 	image-lossless-alpha.swf \
 	image-lossless-alpha.swf.png \
+	loadBitmap-clone-5.swf \
+	loadBitmap-clone-5.swf.png \
+	loadBitmap-clone-6.swf \
+	loadBitmap-clone-6.swf.png \
+	loadBitmap-clone-7.swf \
+	loadBitmap-clone-7.swf.png \
+	loadBitmap-clone-8.swf \
+	loadBitmap-clone-8.swf.png \
+	loadBitmap-clone.xml \
 	load-jpeg.as \
 	load-jpeg-5.swf \
 	load-jpeg-5.swf.png \
diff --git a/test/image/loadBitmap-clone-5.swf b/test/image/loadBitmap-clone-5.swf
new file mode 100644
index 0000000..f22ba40
Binary files /dev/null and b/test/image/loadBitmap-clone-5.swf differ
diff --git a/test/image/loadBitmap-clone-5.swf.png b/test/image/loadBitmap-clone-5.swf.png
new file mode 100644
index 0000000..05d35f4
Binary files /dev/null and b/test/image/loadBitmap-clone-5.swf.png differ
diff --git a/test/image/loadBitmap-clone-6.swf b/test/image/loadBitmap-clone-6.swf
new file mode 100644
index 0000000..eb1c4a0
Binary files /dev/null and b/test/image/loadBitmap-clone-6.swf differ
diff --git a/test/image/loadBitmap-clone-6.swf.png b/test/image/loadBitmap-clone-6.swf.png
new file mode 100644
index 0000000..979047a
Binary files /dev/null and b/test/image/loadBitmap-clone-6.swf.png differ
diff --git a/test/image/loadBitmap-clone-7.swf b/test/image/loadBitmap-clone-7.swf
new file mode 100644
index 0000000..072b39c
Binary files /dev/null and b/test/image/loadBitmap-clone-7.swf differ
diff --git a/test/image/loadBitmap-clone-7.swf.png b/test/image/loadBitmap-clone-7.swf.png
new file mode 100644
index 0000000..0da2614
Binary files /dev/null and b/test/image/loadBitmap-clone-7.swf.png differ
diff --git a/test/image/loadBitmap-clone-8.swf b/test/image/loadBitmap-clone-8.swf
new file mode 100644
index 0000000..d8ecaac
Binary files /dev/null and b/test/image/loadBitmap-clone-8.swf differ
diff --git a/test/image/loadBitmap-clone-8.swf.png b/test/image/loadBitmap-clone-8.swf.png
new file mode 100644
index 0000000..c82a1b5
Binary files /dev/null and b/test/image/loadBitmap-clone-8.swf.png differ
diff --git a/test/image/loadBitmap-clone.xml b/test/image/loadBitmap-clone.xml
new file mode 100644
index 0000000..ff57927
--- /dev/null
+++ b/test/image/loadBitmap-clone.xml
@@ -0,0 +1,422 @@
+<?xml version="1.0"?>
+<swf version="8" compressed="1">
+  <Header framerate="1" frames="2">
+    <size>
+      <Rectangle left="0" right="4000" top="0" bottom="3000"/>
+    </size>
+    <tags>
+      <FileAttributes hasMetaData="0" useNetwork="0"/>
+      <DefineBitsJPEG2 objectID="1">
+        <data>
+          <data>/9j/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAyADIDAREAAhEBAxEB/8QAHQAAAgMAAgMAAAAAAAAAAAAAAAcICQoFBgIEC//EACsQAAEFAQACAQQBAgcAAAAAAAUBAgMEBgcACBEJEhMhFDEyFRYXIiQmQf/EAB4BAAIBBAMBAAAAAAAAAAAAAAAFCAIDBAkBBgcK/8QAMxEAAgEDAwMCAwgCAgMAAAAAAQIDBAURAAYhBxIxCBMUQVEiIzJCYXGBoRUzJbFSgsH/2gAMAwEAAhEDEQA/AN/Hho0eGjSE6z7Tet/CUi/1j7jy7mr50ctevsdoBBWrP2f3NrVb96GxYei/pGQxve53+1rVcqJ4vuF2tdpjE10uVBbojkiSurKekQ4+jVEkYP0wCTnVt5Yose5JHHnx3uqZx5x3EZxpcYD6gnpH1EzWzmE9p+Hn9DdmbXogYeh5ysavzPcjGR0Bd69Wu3XPcqNZ/FhlRzlajVVXNRV1Bu3a11k9m27jslfMSAIaS6UU8xJOBiKOZpDzxwp51QlVTSHtSeJm8YEikn9hnn+NS/jkjlYyWJ7JI3tRzJI3I9j2r+0c1zVVrkVP6Kiqi+dh1f15+GjR4aNH9P6+GjWcD6o/1SNqC3RD1O9VT0YTU1VhodR6vUbBat5eW+xjosvk2ztlpt0ktWaKzeJWop4Q9SzUWKtPcvwy0Iu+oTr6vTOmO39urFVbtq4FlaRwskVohnGIHeM5V6ufPdFG/wBmOLErK3coVVXVzI/w1OfvcAySYB9oHBAUEEGQgg8ghQVOCWGEjwv1q9eOV5Az2XtUVbanq8FQjuOl9A/7vrdAeIKraAYNNpp7kt04VtJJVERPnSylWG0QJ3oRAwhbpx+6X7JuPVe9S1+6bjV32pVhUXS4XKSSqp6RS2OynppWMKMz98dLGEDuQ8jFYo3MfFPSRk9zj3ZCAzySZcn9e5skEfID5eTgDTIoAPWL2NF3f80+rY6LlzHWRk+ng0+eQ9fKNrtlaAx9eLlVacgVqx2Ks50hGXEB82OmjtFSEdy+DEmfed49DOktis1Rdq57zQGkjdqZ7bW26hrZZ1UlIaedLUZIy7doZx3BBhirntQ5UtJTMp9xFIxwMKD/AAcZz+xzqOPH/dnpv01u31ufEtLrOo+oBa3XfJhtQTn1Ou5Xn7luaqwpgDMsbLksedbE7+djGQxhDFCt858YBM2HIQ8O6Veoq77O3Km0t311XeNp1Eii33CvmFXdbPSyzPDF71WsUJrEpmQpUAxRh0X4iGKAO0MaxamSglCFnlpWOSrEu8Sk8GNjyQB+T8JA+xhj9rWrltRn9tmgGxyhaiezGpDjdBnzY2dloeWDF6kV4aRpWYldHPVuVJ4p4JWKrXxva5F+F82LwzRVEMVRBIksE8aTQyxsGjlilUPHIjDIZHRgysCQVII4OnysGVWUgqwDKQQQQRkEEZBBByCODrnvLmudIv2Z6WnHuB9X6T9yskyeKOFIHIvw5tiKnKkLm/Kon3Nkcjm/tP2ifvyxUzpS089VLkRU0Ms8hHkRwo0jkZI57VOOfP6apdgis58IrMf2UEn+hr5/+Bi0+5013Xl5p7JvSmLmmPkXve+aybN3JCpGVsrvlyMbbtSMgaq/ENeOKCNGsiYjdGfVbecl7vl/v1xmL1t1uNZVgFjiJHlb4eNckFVhiEccajAVVGABrqVP3yv7jg90jd7c/mbLEeRhQT2j5AAKBgYHOe0f1FeX1vaLC+qPXS/TQ/GfXiUe3tZLk2Yp6vW6zrRALWI7wWGF3jQQfWNY50tPjscugvNGZY2I3OoHMJxGpQt/aL0A2xNsjpvt+lvCdu47zSU993GwTEkVfcIUmhtpUn7v/F0rQ0U0QZohXLXTx4Wcg9qhXsjUHz2gnH1x9fnj+/rqXpr69H0+sYCH5wfg/aMOAGDoQwamH49ho0Ehq7pH1x4sUX7TVrthZLPPbsvv6uUkWKWbxs2SKnCJEjZX7+6Ybh3y9TNU9RjQ9/etJSxbU76OkjyeyFYzuVHbtyA8zSGR2JkYE4U1NGG8t/HP9Yx+mfkSMj5aTXb9MJ71mMT7Bc2N2dVzDq2btncGUthSeeIMFhdKfyZoKbBlI0nF6HP6kCdFF4a1koIsWoEIATRkHdGlLOt3qLs7cXTDfYsG7qy317V1uhudjudtaX4astMtTV0qFop0Sanqoqqmqo6ymk7/AG5gZIZZqaSCZ0NwhZX+RyMjGTkEnx9DkHI+RGc4ONaRfoOdgLbz1H0HNDdmWzY4X0ovkATrD3STMx58aL2YWr9zlX7awq8dNAx0CKjaowXTrRtbDFGnmzz0ybnqNydLbdHVytNUWGsqrJ7jks700AiqKNmYk9wWCpWBc8hYQPAB1mWiUvTNGTn2JWjH17CqyKP2UuyADwFA4xjV3fkhNNdRN96MVd6F6l90yY9r3XCmCNMiYxFc53467pHoiIiqq/jR6/CIvz8fHwvmJcKUV1BW0RbtFZSVNKWPhRUQvF3HHPHfnVEie5HJH470dM/TuUr/APdY6/WHHsMCKNVGVqxKWitR7LkTpYqpSKJ1eeC3CxzHOStdZJDaiR7H/McjUc1378+c/qdXVO196yU13o3lFh3EFuNukPYahLdXgz0jllbtWdYmiLFWwr5wRxpHbkDLGGADAAMpA4Zfsuh/VWBUnnwfPztVz3qD6r5Sz1DuWgwfIsJVKl9j1vqO0Nc+zHQSLL54zc0Oj0VrUdhGdN1bDJEsTkiqUchfz0JUvepiAIGCxfqD3So2V6u+vXXbqFQbO2Badt7VjulRNUTyRW83VbLZ4GD114u9yuHuuIaKFl7zTw0vxdVJBR0kHxNVTQN2QIO3uY8YGMfPP4Rnjz4yfGR4xqAI30Kx/uv1q/7G7DkwbnfrtJCMrc45jXCDciT62JBRfwqWw6CzIVgkA0EdkgkJasrnYRpfZ3HyZbD3x9CsS6FmZidc/URtToBtakS9Vzbo3tU21EsliLQQXC7yxx+019vaUoRLVaZKhXkdkRJKtwaO3BhHNU0/Cxl/ngDyfIH6eeeMePHzxpv995Zn8qKSgMigjq1R1QdTqVqlQYKEjBFKEaICZ0CMgqhczmQo6tXGgsyBo0AocfBFVo042I9z9Ll46u7x6pb8q92btuLVtxrHWKKKMCKkt9FG7NTW+ggXCwUdOsjLFEv2QWZs5Y6XVsYxk88fr/A/Tjz8xnzzxZp9B7nt7O8X7tuJ4Xwjdz2R9QFIrVSK5Qx+bEhb1mJfhEd+LRKcHSK35aklFyfP3fcibxvR1a6uj6QU9yrEZDfbxW11N3Ajvo4UgoopBnk98tPUDPghV5znWPakKx1L/leoIQjwVjjRCR+0gkX/ANdXueSs0116t2nWI07VC5EyepdrzVbMMiI5ksFiN0Usb2r+la9jnNVF/wDF8NGsm/tt61af0k7sa148Xdt8I3puyfGnadeWatji1+Z09+mTSFrvwDLUr3WJp1aiUbj57thXU7dicfrB9bnpfuu5JavqlsO3PX1EkPubrstJGXqi8KYa80cKDvnDRKPj4lBkVkNThkZxGpnRqKdqlVJppW75iASaeQ/ikI5xBJ+KRgPupS0j5jd2jb1cxy3t+Eww/Z6OI3khGusac/y9kU7RHQS4UeDnwFzbk/llYtz7OWCB8vHjR8tqntdQ4VZ1D6QrE1xesiH0e6w7X9N/SXcNfY6BL91t3re62g+Gq6OZaDaW3rRHBFbJLtJIqGcSV89fcEtFHJ/ydQlF/lGp4LVBHWtI545FUhu5SAwwVIIOOQfHIxg5z9POpAabswauMe1LdWONsSNRkKxtajIomRRxsjjRkcbIoY44IIWMZDBDFFXhZHDFHGyG+6dw7o3xfbjuLclxrr3fbtUPU19xr5GkmnlfgDwEhhiQJFT08KRU9PAiQ08UcUcaLkNOvaQCABnA/wCj/wBf39car9Lj937W9Qp8e47RkKniNmGA0cZC+wDwQaZ6JaP6Ky3/AI8csNdXSiwzpW3S9hImIyAely/Uk96XPTVuzq3uOllWjqbftWjqI5L3uGaF1poYFYNJTUbMFFTXTqCkMEZ4yZJGREd1SVEz1MrU1NzIf9kmO6OmU/nl5wXwcxQ575D5xGHdNSXr9xbL+vXIMNyHIRKwPjQtcf8AyJFR1olfVPzEy16VEati8TvST3blh6fknsTSSvVXvXz6D7HZbdtyz2yw2inWltlooqegooFx93T00axp3EABnYL3yPgF5GZzyx0xhiSCJIo89kahRk5Y48sx/M7HLOx5ZiWPJ05PGurmjw0a6vsMXld+BvZjZAh2hBEYnQ2xxKtHYgka5qt+5qPRVjkaiqrJGK17V/aKi+GjVTnQvo48dKFbhjkm+23IZLs8tl4oJcW2BZPK9XyPiE2HOoI97lVXySVJJXr/AHSL8r54Tvz01dFeo1TJX7k2Pbf8nMSZbpavctFdKTnLTPQtFFO5P2jLPDJKW57+Wzgvb6csXjElO5JJNPI0SknksYgTAzMeWZoixPJOus5r6NoKS7E/pXsH0vYCo3tWQSOkp5llmNFRVjmtAoB1lzHon2vasjmvaqtejkVfnpFh9FXp4sNYlamzJLrJG4kjivV0ra6nV1PcpMAkhjkAOD2SiSM4wyMMg0i3Rn/bUVcw/wDFphEP5+GSBmHyIZiCMhgcnVo/EvXnkXrzmYsryjGisuPRPutTVa8f+IEZ3fuWzfuq389meZ6rJK+Ryq97nOd8uVVWTtrtVsslDT2yz2+itdupUEdNQ2+mhpKWBBwFjggSONBxyQuWPLEkk6zI4o4UEcUaRoucIihVGeScAAZJ5J8k8nnTq8YauaPDRo8NGjw0aPDRo8NGjw0aPDRo8NGv/9k=</data>
+        </data>
+      </DefineBitsJPEG2>
+      <Export>
+        <symbols>
+          <Symbol objectID="1" name="image"/>
+        </symbols>
+      </Export>
+      <!--
+bd = flash.display.BitmapData.loadBitmap ("image");
+trace (bd);
+
+for (x = 0; x < 50; x++) {
+  bd.setPixel32 (x, 49, 0xFF000000);
+  bd.setPixel32 (49, x, 0xFF000000);
+};
+
+for (y = 0; y < 3; y++) {
+  for (x = 0; x < 4; x++) {
+    for (i = 0; i < 85; i++) {
+      bd.setPixel32 (random (49), random (49), 0xFF000000 | (0x30000 * i) | (0xFF - 0x3 * i));
+    }
+    a = createEmptyMovieClip ("a" + getNextHighestDepth (), getNextHighestDepth ());
+    a.attachBitmap (bd, 0);
+    a._x = x * 50;
+    a._y = y * 50;
+    bd = bd.clone ();
+  }
+}
+-->
+      <DoAction>
+        <actions>
+          <Dictionary>
+            <strings>
+              <String value="bd"/>
+              <String value="flash"/>
+              <String value="display"/>
+              <String value="BitmapData"/>
+              <String value="image"/>
+              <String value="loadBitmap"/>
+              <String value="x"/>
+              <String value="setPixel32"/>
+              <String value="y"/>
+              <String value="i"/>
+              <String value="a"/>
+              <String value="getNextHighestDepth"/>
+              <String value="createEmptyMovieClip"/>
+              <String value="attachBitmap"/>
+              <String value="_x"/>
+              <String value="_y"/>
+              <String value="clone"/>
+            </strings>
+          </Dictionary>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="0"/>
+              <StackDictionaryLookup index="4"/>
+              <StackInteger value="1"/>
+              <StackDictionaryLookup index="1"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="2"/>
+            </items>
+          </PushData>
+          <GetMember/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="3"/>
+            </items>
+          </PushData>
+          <GetMember/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="5"/>
+            </items>
+          </PushData>
+          <CallMethod/>
+          <SetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="0"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <Trace/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="6"/>
+              <StackInteger value="0"/>
+            </items>
+          </PushData>
+          <SetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="6"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackInteger value="50"/>
+            </items>
+          </PushData>
+          <LessThanTyped/>
+          <LogicalNOT/>
+          <BranchIfTrue byteOffset="90"/>
+          <PushData>
+            <items>
+              <StackDouble value="4278190080.000000"/>
+              <StackInteger value="49"/>
+              <StackDictionaryLookup index="6"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackInteger value="3"/>
+              <StackDictionaryLookup index="0"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="7"/>
+            </items>
+          </PushData>
+          <CallMethod/>
+          <Pop/>
+          <PushData>
+            <items>
+              <StackDouble value="4278190080.000000"/>
+              <StackDictionaryLookup index="6"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackInteger value="49"/>
+              <StackInteger value="3"/>
+              <StackDictionaryLookup index="0"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="7"/>
+            </items>
+          </PushData>
+          <CallMethod/>
+          <Pop/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="6"/>
+            </items>
+          </PushData>
+          <Duplicate/>
+          <GetVariable/>
+          <Increment/>
+          <SetVariable/>
+          <BranchAlways byteOffset="65425"/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="8"/>
+              <StackInteger value="0"/>
+            </items>
+          </PushData>
+          <SetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="8"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackInteger value="3"/>
+            </items>
+          </PushData>
+          <LessThanTyped/>
+          <LogicalNOT/>
+          <BranchIfTrue byteOffset="319"/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="6"/>
+              <StackInteger value="0"/>
+            </items>
+          </PushData>
+          <SetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="6"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackInteger value="4"/>
+            </items>
+          </PushData>
+          <LessThanTyped/>
+          <LogicalNOT/>
+          <BranchIfTrue byteOffset="273"/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="9"/>
+              <StackInteger value="0"/>
+            </items>
+          </PushData>
+          <SetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="9"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackInteger value="85"/>
+            </items>
+          </PushData>
+          <LessThanTyped/>
+          <LogicalNOT/>
+          <BranchIfTrue byteOffset="91"/>
+          <PushData>
+            <items>
+              <StackDouble value="4278190080.000000"/>
+              <StackInteger value="196608"/>
+              <StackDictionaryLookup index="9"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <Mulitply/>
+          <OR/>
+          <PushData>
+            <items>
+              <StackInteger value="255"/>
+              <StackInteger value="3"/>
+              <StackDictionaryLookup index="9"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <Mulitply/>
+          <Substract/>
+          <OR/>
+          <PushData>
+            <items>
+              <StackInteger value="49"/>
+            </items>
+          </PushData>
+          <Random/>
+          <PushData>
+            <items>
+              <StackInteger value="49"/>
+            </items>
+          </PushData>
+          <Random/>
+          <PushData>
+            <items>
+              <StackInteger value="3"/>
+              <StackDictionaryLookup index="0"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="7"/>
+            </items>
+          </PushData>
+          <CallMethod/>
+          <Pop/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="9"/>
+            </items>
+          </PushData>
+          <Duplicate/>
+          <GetVariable/>
+          <Increment/>
+          <SetVariable/>
+          <BranchAlways byteOffset="65424"/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="10"/>
+              <StackInteger value="0"/>
+              <StackDictionaryLookup index="11"/>
+            </items>
+          </PushData>
+          <CallFunction/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="10"/>
+              <StackInteger value="0"/>
+              <StackDictionaryLookup index="11"/>
+            </items>
+          </PushData>
+          <CallFunction/>
+          <AddTyped/>
+          <PushData>
+            <items>
+              <StackInteger value="2"/>
+              <StackDictionaryLookup index="12"/>
+            </items>
+          </PushData>
+          <CallFunction/>
+          <SetVariable/>
+          <PushData>
+            <items>
+              <StackInteger value="0"/>
+              <StackDictionaryLookup index="0"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackInteger value="2"/>
+              <StackDictionaryLookup index="10"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="13"/>
+            </items>
+          </PushData>
+          <CallMethod/>
+          <Pop/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="10"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="14"/>
+              <StackDictionaryLookup index="6"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackInteger value="50"/>
+            </items>
+          </PushData>
+          <Mulitply/>
+          <SetMember/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="10"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="15"/>
+              <StackDictionaryLookup index="8"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackInteger value="50"/>
+            </items>
+          </PushData>
+          <Mulitply/>
+          <SetMember/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="0"/>
+              <StackInteger value="0"/>
+              <StackDictionaryLookup index="0"/>
+            </items>
+          </PushData>
+          <GetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="16"/>
+            </items>
+          </PushData>
+          <CallMethod/>
+          <SetVariable/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="6"/>
+            </items>
+          </PushData>
+          <Duplicate/>
+          <GetVariable/>
+          <Increment/>
+          <SetVariable/>
+          <BranchAlways byteOffset="65242"/>
+          <PushData>
+            <items>
+              <StackDictionaryLookup index="8"/>
+            </items>
+          </PushData>
+          <Duplicate/>
+          <GetVariable/>
+          <Increment/>
+          <SetVariable/>
+          <BranchAlways byteOffset="65196"/>
+          <EndAction/>
+        </actions>
+      </DoAction>
+      <ShowFrame/>
+      <End/>
+    </tags>
+  </Header>
+</swf>
commit 8a3815bdf3099c0d2ca9f948e434d1c184466511
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Jul 25 20:56:14 2008 +0200

    implement BitmapData.loadBitmap

diff --git a/swfdec/swfdec_bitmap_data.c b/swfdec/swfdec_bitmap_data.c
index ecc4ab9..975d621 100644
--- a/swfdec/swfdec_bitmap_data.c
+++ b/swfdec/swfdec_bitmap_data.c
@@ -24,12 +24,15 @@
 
 #include "swfdec_bitmap_data.h"
 #include "swfdec_as_context.h"
+#include "swfdec_as_frame_internal.h"
 #include "swfdec_as_internal.h"
 #include "swfdec_as_native_function.h"
 #include "swfdec_as_strings.h"
 #include "swfdec_color.h"
 #include "swfdec_debug.h"
+#include "swfdec_image.h"
 #include "swfdec_rectangle.h"
+#include "swfdec_resource.h"
 
 enum {
   INVALIDATE,
@@ -127,13 +130,45 @@ swfdec_bitmap_data_new (SwfdecAsContext *context, gboolean transparent, guint wi
   return bitmap;
 }
 
-// static
 SWFDEC_AS_NATIVE (1100, 40, swfdec_bitmap_data_loadBitmap)
 void
 swfdec_bitmap_data_loadBitmap (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  SWFDEC_STUB ("BitmapData.loadBitmap (static)");
+  SwfdecBitmapData *bitmap;
+  SwfdecImage *image;
+  const char *name;
+  cairo_surface_t *isurface;
+  cairo_t *cr;
+
+  SWFDEC_AS_CHECK (0, NULL, "s", &name);
+
+  g_assert (SWFDEC_IS_MOVIE (cx->frame->target));
+  image = swfdec_resource_get_export (SWFDEC_MOVIE (cx->frame->target)->resource, name);
+  if (!SWFDEC_IS_IMAGE (image)) {
+    SWFDEC_ERROR ("loadBitmap cannot find image with name %s", name);
+    return;
+  }
+
+  /* FIXME: improve this to not create an image if there is one cached */
+  isurface = swfdec_image_create_surface (image, NULL);
+  if (isurface == NULL)
+    return;
+
+  /* FIXME: use image directly instead of doing a copy and then deleting it */
+  bitmap = swfdec_bitmap_data_new (cx, 
+      cairo_image_surface_get_format (isurface) != CAIRO_FORMAT_RGB24,
+      cairo_image_surface_get_width (isurface),
+      cairo_image_surface_get_height (isurface));
+  if (bitmap == NULL)
+    return;
+
+  cr = cairo_create (bitmap->surface);
+  cairo_set_source_surface (cr, isurface, 0, 0);
+  cairo_paint (cr);
+  cairo_destroy (cr);
+  cairo_surface_destroy (isurface);
+  SWFDEC_AS_VALUE_SET_OBJECT (ret, SWFDEC_AS_OBJECT (bitmap));
 }
 
 // properties
commit 489cecb4f96de276166248aac023310c5dab42a5
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Jul 25 20:05:19 2008 +0200

    implement BitmapData.clone

diff --git a/swfdec/swfdec_as_strings.c b/swfdec/swfdec_as_strings.c
index 3d07ab2..f41bf7a 100644
--- a/swfdec/swfdec_as_strings.c
+++ b/swfdec/swfdec_as_strings.c
@@ -525,5 +525,6 @@ const char swfdec_as_strings[] =
   SWFDEC_AS_CONSTANT_STRING ("System")
   SWFDEC_AS_CONSTANT_STRING ("__resolve")
   SWFDEC_AS_CONSTANT_STRING ("Rectangle")
+  SWFDEC_AS_CONSTANT_STRING ("BitmapData")
   /* add more here */
 ;
diff --git a/swfdec/swfdec_bitmap_data.c b/swfdec/swfdec_bitmap_data.c
index 79bd68f..ecc4ab9 100644
--- a/swfdec/swfdec_bitmap_data.c
+++ b/swfdec/swfdec_bitmap_data.c
@@ -93,6 +93,40 @@ swfdec_bitmap_data_init (SwfdecBitmapData *transform)
 {
 }
 
+SwfdecBitmapData *
+swfdec_bitmap_data_new (SwfdecAsContext *context, gboolean transparent, guint width, guint height)
+{
+  SwfdecBitmapData *bitmap;
+  SwfdecAsValue val;
+
+  g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), NULL);
+  g_return_val_if_fail (width > 0, NULL);
+  g_return_val_if_fail (height > 0, NULL);
+
+  if (!swfdec_as_context_try_use_mem (context, width * height * 4))
+    return NULL;
+
+  bitmap = g_object_new (SWFDEC_TYPE_BITMAP_DATA, "context", context, NULL);
+  bitmap->surface = cairo_image_surface_create (
+      transparent ? CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24, width, height);
+
+  swfdec_as_object_get_variable (context->global, SWFDEC_AS_STR_flash, &val);
+  if (SWFDEC_AS_VALUE_IS_OBJECT (&val)) {
+    swfdec_as_object_get_variable (SWFDEC_AS_VALUE_GET_OBJECT (&val), 
+	SWFDEC_AS_STR_display, &val);
+    if (SWFDEC_AS_VALUE_IS_OBJECT (&val)) {
+      swfdec_as_object_get_variable (SWFDEC_AS_VALUE_GET_OBJECT (&val), 
+	  SWFDEC_AS_STR_BitmapData, &val);
+      if (SWFDEC_AS_VALUE_IS_OBJECT (&val)) {
+	swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (bitmap),
+	    SWFDEC_AS_VALUE_GET_OBJECT (&val));
+      }
+    }
+  }
+
+  return bitmap;
+}
+
 // static
 SWFDEC_AS_NATIVE (1100, 40, swfdec_bitmap_data_loadBitmap)
 void
@@ -467,7 +501,26 @@ void
 swfdec_bitmap_data_clone (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  SWFDEC_STUB ("BitmapData.clone");
+  SwfdecBitmapData *bitmap, *clone;
+  cairo_t *cr;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_BITMAP_DATA, &bitmap, "");
+
+  if (bitmap->surface == NULL)
+    return;
+
+  clone = swfdec_bitmap_data_new (cx,
+      cairo_image_surface_get_format (bitmap->surface) != CAIRO_FORMAT_RGB24,
+      cairo_image_surface_get_width (bitmap->surface),
+      cairo_image_surface_get_height (bitmap->surface));
+  if (clone == NULL)
+    return;
+
+  cr = cairo_create (clone->surface);
+  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_NATIVE (1100, 22, swfdec_bitmap_data_do_dispose)
diff --git a/swfdec/swfdec_bitmap_data.h b/swfdec/swfdec_bitmap_data.h
index 2653d65..425e315 100644
--- a/swfdec/swfdec_bitmap_data.h
+++ b/swfdec/swfdec_bitmap_data.h
@@ -46,6 +46,11 @@ struct _SwfdecBitmapDataClass {
 
 GType			swfdec_bitmap_data_get_type		(void);
 
+SwfdecBitmapData *	swfdec_bitmap_data_new			(SwfdecAsContext *	context,
+								 gboolean		transparent,
+								 guint			width,
+								 guint			height);
+
 
 G_END_DECLS
 #endif
commit d05c016ba1bdc79f6d299b9ffcee699a56f0036b
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Jul 25 19:38:32 2008 +0200

    BitmapData objects are transparent by default

diff --git a/swfdec/swfdec_bitmap_data.c b/swfdec/swfdec_bitmap_data.c
index 52bafd1..79bd68f 100644
--- a/swfdec/swfdec_bitmap_data.c
+++ b/swfdec/swfdec_bitmap_data.c
@@ -520,12 +520,14 @@ swfdec_bitmap_data_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
     SWFDEC_FIXME ("the constructor should return undefined here");
     return;
   }
+  if (argc < 3)
+    transparent = TRUE;
 
   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));


More information about the Swfdec-commits mailing list