[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