cvs: phpdoc /en/functions ming.xml /fr/functions ming.xml
| From: | Egon Schmid | Date: | Thu, 18 Oct 2001 06:44:05 +0000 |
| Subject: | cvs: phpdoc /en/functions ming.xml /fr/functions ming.xml | ||
| Groups: | php.doc | ||
| Request: | Send a blank email to phpdoc+get-969338076@lists.php.net to get a copy of this message | ||
eschmid Thu Oct 18 02:44:05 2001 EDT
Modified files:
/phpdoc/en/functions ming.xml
/phpdoc/fr/functions ming.xml
Log:
Damien please check your newlines.
Index: phpdoc/en/functions/ming.xml diff -u phpdoc/en/functions/ming.xml:1.23 phpdoc/en/functions/ming.xml:1.24 --- phpdoc/en/functions/ming.xml:1.23 Wed Oct 17 20:20:45 2001 +++ phpdoc/en/functions/ming.xml Thu Oct 18 02:44:03 2001 @@ -1 +1,4257 @@ -<?xml encoding="iso-8859-1"?><!-- $Revision: 1.23 $ --> <reference id="ref.ming"> <title>Ming functions for Flash</title> <titleabbrev>Ming (flash)</titleabbrev> <partintro> &warn.experimental; <sect1 id="ming.intro"> <title>Introduction</title> <simpara> Ming is an open-source (LGPL) library which allows you to create SWF ("Flash") format movies. Ming supports almost all of Flash 4's features, including: shapes, gradients, bitmaps (pngs and jpegs), morphs ("shape tweens"), text, buttons, actions, sprites ("movie clips"), streaming mp3, and color transforms--the only thing that's missing is sound events. </simpara> <simpara> Ming is not an acronym. </simpara> <simpara> Note that all values specifying length, distance, size, etc. are in "twips", twenty units per pixel. That's pretty much arbitrary, though, since the player scales the movie to whatever pixel size is specified in the embed/object tag, or the entire frame if not embedded. </simpara> <simpara> Ming offers a number of advantages over the existing PHP/libswf module. You can use Ming anywhere you can compile the code, whereas libswf is closed-source and only available for a few platforms, Windows not one of them. Ming provides some insulation from the mundane details of the SWF file format, wrapping the movie elements in PHP objects. Also, Ming is still being maintained; if there's a feature that you want to see, just let us know <ulink url="mailto:&email.ming;">&email.ming;</ulink>. </simpara> <simpara> Ming was added in PHP 4.0.5. </simpara> </sect1> <sect1 id="ming.install"> <title>Installation</title> <para> To use Ming with PHP, you first need to build and install the Ming library. Source code and installation instructions are available at the Ming home page : <ulink url="&url.ming;">&url.ming;</ulink> along with examples, a small tutorial, and the latest news. </para> <para> Download the ming archive. Unpack the archive. Go in the Ming directory. make. make install. </para> <para> This will build <filename>libming.so</filename> and install it into <filename>/usr/lib/</filename>, and copy <filename>ming.h</filename> into <filename>/usr/include/</filename>. Edit the <literal>PREFIX=</literal> line in the <filename>Makefile</filename> to change the installation directory. </para> <sect2 id="ming.install.php.unix"> <title>built into php (unix)</title> <para> <literallayout> mkdir <phpdir>/ext/ming cp php_ext/* <phpdir>/ext/ming cd <phpdir> ./buildconf ./configure --with-ming <other config options> </literallayout> Build and install php as usual, Restart web server if necessary </para> </sect2> <sect2 id="ming.install.php-module.unix"> <title>built into php (unix)</title> <para> download <filename>php_ming.so.gz</filename>. uncompress it and copy it to your php modules directory. (you can find your php module directory by running <command>php-config --extension-dir</command>). Now either just add <literal>extension=php_ming.so</literal> to your <filename>php.ini</filename> file, or put <literal>dl('php_ming.so');</literal> at the head of all of your Ming scripts. </para> </sect2> </sect1> <sect1 id="ming.use"> <title>How to use Ming</title> <simpara> Ming introduces 13 new object in PHP, all with matching methods and attributes. To use them, you need to know about <link linkend="language.oop">objects</link>. </simpara> <itemizedlist> <listitem> <simpara> <function>swfmovie</function>. </simpara> </listitem> <listitem> <simpara> <function>swfshape</function>. </simpara> </listitem> <listitem> <simpara> <function>swfdisplayitem</function>. </simpara> </listitem> <listitem> <simpara> <function>swfgradient</function>. </simpara> </listitem> <listitem> <simpara> <function>swfbitmap</function>. </simpara> </listitem> <listitem> <simpara> <function>swffill</function>. </simpara> </listitem> <listitem> <simpara> <function>swfmorph</function>. </simpara> </listitem> <listitem> <simpara> <function>swftext</function>. </simpara> </listitem> <listitem> <simpara> <function>swffont</function>. </simpara> </listitem> <listitem> <simpara> <function>swftextfield</function>. </simpara> </listitem> <listitem> <simpara> <function>swfsprite</function>. </simpara> </listitem> <listitem> <simpara> <function>swfbutton</function>. </simpara> </listitem> <listitem> <simpara> <function>swfaction</function>. </simpara> </listitem> </itemizedlist> </sect1> </partintro> <!-- SWFMovie --> <refentry id="function.swfmovie"> <refnamediv> <refname>SWFMovie</refname> <refpurpose>Creates a new movie object, representing an SWF version 4 movie.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfmovie</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie</function> creates a new movie object, representing an SWF version 4 movie. </para> <simpara> SWFMovie has the following methods : <function>swfmovie->output</function>,<function>swfmovie->save</function>, <function>swfmovie->add</function>, <function>swfmovie->remove</function>, <function>swfmovie->nextframe</function>, <function>swfmovie->setbackground</function>, <function>swfmovie->setrate</function>, <function>swfmovie->setdimension</function>, <function>swfmovie->setframes</function> and <function>swfmovie->streammp3</function>. </simpara> <simpara> See examples in : <function>swfdisplayitem->rotateto</function>, <function>swfshape->setline</function>, <function>swfshape->addfill</function>... Any example will use this object. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.output"> <refnamediv> <refname>SWFMovie->output</refname> <refpurpose>Dumps your lovingly prepared movie out.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->output</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->output</function> dumps your lovingly prepared movie out. In PHP, preceding this with the command <programlisting role="php"><?phpheader('Content-type: application/x-shockwave-flash'); ?> </programlisting> convinces the browser to display this as a flash movie. </para> <simpara> See also <function>swfmovie->save</function>. </simpara> <simpara> See examples in : <function>swfmovie->streammp3</function>, <function>swfdisplayitem->rotateto</function>, <function>swfaction</function>... Any example will use this method. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.save"> <refnamediv> <refname>SWFMovie->save</refname> <refpurpose>Saves your movie in a file.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->save</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->save</function> saves your movie to the file named <parameter>filename</parameter>. </para> <simpara> See also <function>output</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.add"> <refnamediv> <refname>SWFMovie->add</refname> <refpurpose>Adds any type of data to a movie.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->add</function></funcdef> <paramdef>ressource <parameter>instance</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->add</function> adds <parameter>instance</parameter> to the current movie. <parameter>instance</parameter> is any type of data : Shapes, text, fonts, etc. must all be add'ed to the movie to make this work. </para> <para> For displayable types (shape, text, button, sprite), this returns an <function>SWFDisplayItem</function>, a handle to the object in a display list. Thus, you can add the same shape to a movie multiple times and get separate handles back for each separate instance. </para> <simpara> See also all other objects (adding this later), and <function>swfmovie->remove</function> </simpara> <simpara> See examples in : <function>swfdisplayitem->rotateto</function> and <function>swfshape->addfill</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.remove"> <refnamediv> <refname>SWFMovie->remove</refname> <refpurpose>Removes the object instance from the display list.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->remove</function></funcdef> <paramdef>resource <parameter>instance</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->remove</function> removes the object instance <parameter>instance</parameter> from the display list. </para> <simpara> See also <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.setbackground"> <refnamediv> <refname>SWFMovie->setbackground</refname> <refpurpose>Sets the background color.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setbackground</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->setbackground</function> sets the background color. Why is there no rgba version? Think about it. (Actually, that's not such a dumb question after all- you might want to let the html background show through. There's a way to do that, but it only works on IE4. Search the <ulink url="&url.macromedia;">&url.macromedia;</ulink> site for details.) </para> </refsect1> </refentry> <refentry id="function.swfmovie.setrate"> <refnamediv> <refname>SWFMovie->setrate</refname> <refpurpose>Sets the animation's frame rate.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setrate</function></funcdef> <paramdef>int <parameter>rate</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->setrate</function> sets the frame rate to <parameter>rate</parameter>, in frame per seconds. Animation will slow down if the player can't render frames fast enough- unless there's a streaming sound, in which case display frames are sacrificed to keep sound from skipping. </para> </refsect1> </refentry> <refentry id="function.swfmovie.setdimension"> <refnamediv> <refname>SWFMovie->setdimension</refname> <refpurpose>Sets the movie's width and height.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setdimension</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->setdimension</function> sets the movie's width to <parameter>width</parameter> and height to <parameter>height</parameter>. </para> </refsect1> </refentry> <refentry id="function.swfmovie.setframes"> <refnamediv> <refname>SWFMovie->setframes</refname> <refpurpose>Sets the total number of frames in the animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setframes</function></funcdef> <paramdef>string <parameter>numberofframes</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->setframes</function> sets the total number of frames in the animation to <parameter>numberofframes</parameter>. </para> </refsect1> </refentry> <refentry id="function.swfmovie.nextframe"> <refnamediv> <refname>SWFMovie->nextframe</refname> <refpurpose>Moves to the next frame of the animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->nextframe</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->setframes</function> moves to the next frame of the animation. </para> </refsect1> </refentry> <refentry id="function.swfmovie.streammp3"> <refnamediv> <refname>SWFMovie->streammp3</refname> <refpurpose>Streams a MP3 file.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->streammp3</function></funcdef> <paramdef>string <parameter>mp3FileName</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->streammp3</function> streams the mp3 file <parameter>mp3FileName</parameter>. Not very robust in dealing with oddities (can skip over an initial ID3 tag, but that's about it). Like <function>SWFShape->addJpegFill</function>, this isn't a stable function- we'll probably need to make a separate SWFSound object to contain sound types. </para> <para> Note that the movie isn't smart enough to put enough frames in to contain the entire mp3 stream- you'll have to add (length of song * frames per second) frames to get the entire stream in. </para> <para> Yes, now you can use ming to put that rock and roll devil worship music into your SWF files. Just don't tell the RIAA. <example> <title><function>swfmovie->streammp3</function> example</title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setRate(12.0); $m->streamMp3("distortobass.mp3");// use your own MP3 // 11.85 seconds at 12.0 fps = 142 frames $m->setFrames(142); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry><!-- SWFDisplayItem --> <refentry id="function.swfdisplayitem"> <refnamediv> <refname>SWFDisplayItem</refname> <refpurpose>Creates a new displayitem object.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfdisplayitem</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem</function> creates a new swfdisplayitem object. </para> <para> Here's where all the animation takes place. After you define a shape, a text object, a sprite, or a button, you add it to the movie, then use the returned handle to move, rotate, scale, or skew the thing. </para> <simpara> SWFDisplayItem has the following methods : <function>swfdisplayitem->move</function>, <function>swfdisplayitem->moveto</function>, <function>swfdisplayitem->scaleto</function>, <function>swfdisplayitem->scale</function>, <function>swfdisplayitem->rotate</function>, <function>swfdisplayitem->rotateto</function>, <function>swfdisplayitem->skewxto</function>, <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewyto</function> <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->setdepth</function> <function>swfdisplayitem->remove</function>, <function>swfdisplayitem->setname</function> <function>swfdisplayitem->setratio</function>, <function>swfdisplayitem->addcolor</function> and <function>swfdisplayitem->multcolor</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.moveto"> <refnamediv> <refname>SWFDisplayItem->moveTo</refname> <refpurpose>Moves object in global coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->moveto</function> moves the current object to (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->move</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.move"> <refnamediv> <refname>SWFDisplayItem->move</refname> <refpurpose>Moves object in relative coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->move</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->move</function> moves the current object by (<parameter>dx</parameter>,<parameter>dy</parameter>) from its current position. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->moveto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.scaleto"> <refnamediv> <refname>SWFDisplayItem->scaleTo</refname> <refpurpose>Scales the object in global coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->scaleto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->scaleto</function> scales the current object to (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->scale</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.scale"> <refnamediv> <refname>SWFDisplayItem->scale</refname> <refpurpose>Scales the object in relative coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->scale</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->scale</function> scales the current object by (<parameter>dx</parameter>,<parameter>dy</parameter>) from its current size. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->scaleto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.rotateto"> <refnamediv> <refname>SWFDisplayItem->rotateTo</refname> <refpurpose>Rotates the object in global coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->rotateto</function></funcdef> <paramdef>float <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->rotateto</function> set the current object rotation to <parameter>degrees</parameter> degrees in global coordinates. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <para> This example bring three rotating string from the background to the foreground. Pretty nice. <example> <title><function>swfdisplayitem->rotateto</function> example</title> <programlisting role="php"><?php $thetext = "ming!"; $f = new SWFFont("Bauhaus 93.fdb"); $m = new SWFMovie(); $m->setRate(24.0); $m->setDimension(2400, 1600); $m->setBackground(0xff, 0xff, 0xff); // functions with huge numbers of arbitrary // arguments are always a good idea! Really! function text($r, $g, $b, $a, $rot, $x, $y, $scale, $string) { global $f, $m; $t = new SWFText(); $t->setFont($f); $t->setColor($r, $g, $b, $a); $t->setHeight(960); $t->moveTo(-($f->getWidth($string))/2, $f->getAscent()/2); $t->addString($string); // we can add properties just like a normal php var, // as long as the names aren't already used. // e.g., we can't set $i->scale, because that's a function $i = $m->add($t); $i->x = $x; $i->y = $y; $i->rot = $rot; $i->s = $scale; $i->rotateTo($rot); $i->scale($scale, $scale); // but the changes are local to the function, so we have to // return the changed object. kinda weird.. return $i; } function step($i) { $oldrot = $i->rot; $i->rot = 19*$i->rot/20; $i->x = (19*$i->x + 1200)/20; $i->y = (19*$i->y + 800)/20; $i->s = (19*$i->s + 1.0)/20; $i->rotateTo($i->rot); $i->scaleTo($i->s, $i->s); $i->moveTo($i->x, $i->y); return $i; } // see? it sure paid off in legibility: $i1 = text(0xff, 0x33, 0x33, 0xff, 900, 1200, 800, 0.03, $thetext); $i2 = text(0x00, 0x33, 0xff, 0x7f, -560, 1200, 800, 0.04, $thetext); $i3 = text(0xff, 0xff, 0xff, 0x9f, 180, 1200, 800, 0.001, $thetext); for($i=1; $i<=100; ++$i) { $i1 = step($i1); $i2 = step($i2); $i3 = step($i3); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <simpara> See also <function>swfdisplayitem->rotate</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.rotate"> <refnamediv> <refname>SWFDisplayItem->Rotate</refname> <refpurpose>Rotates in relative coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->rotate</function></funcdef> <paramdef>float <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->rotate</function> rotates the current object by <parameter>ddegrees</parameter> degrees from its current rotation. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->rotateto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewxto"> <refnamediv> <refname>SWFDisplayItem->skewXTo</refname> <refpurpose>Sets the X-skew.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewxto</function></funcdef> <paramdef>float <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->skewxto</function> sets the x-skew to <parameter>degrees</parameter>. For <parameter>degrees</parameter> is 1.0, it means a 45-degree forward slant. More is more forward, less is more backward. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewy</function> and <function>swfdisplayitem->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewx"> <refnamediv> <refname>SWFDisplayItem->skewX</refname> <refpurpose>Sets the X-skew.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewx</function></funcdef> <paramdef>float <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->skewx</function> adds <parameter>ddegrees</parameter> to current x-skew. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewy</function> and <function>swfdisplayitem->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewyto"> <refnamediv> <refname>SWFDisplayItem->skewYTo</refname> <refpurpose>Sets the Y-skew.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewyto</function></funcdef> <paramdef>float <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->skewyto</function> sets the y-skew to <parameter>degrees</parameter>. For <parameter>degrees</parameter> is 1.0, it means a 45-degree forward slant. More is more upward, less is more downward. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->skewy</function>, <function>swfdisplayitem->skewx</function> and <function>swfdisplayitem->skewxto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewy"> <refnamediv> <refname>SWFDisplayItem->skewY</refname> <refpurpose>Sets the Y-skew.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewy</function></funcdef> <paramdef>float <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->skewy</function> adds <parameter>ddegrees</parameter> to current y-skew. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->skewx</function> and <function>swfdisplayitem->skewxto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setdepth"> <refnamediv> <refname>SWFDisplayItem->setDepth</refname> <refpurpose>Sets z-order</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setdepth</function></funcdef> <paramdef>float <parameter>depth</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->rotate</function> sets the object's z-order to <parameter>depth</parameter>. Depth defaults to the order in which instances are created (by add'ing a shape/text to a movie)- newer ones are on top of older ones. If two objects are given the same depth, only the later-defined one can be moved. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.remove"> <refnamediv> <refname>SWFDisplayItem->remove</refname> <refpurpose>Removes the object from the movie</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->remove</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->remove</function> removes this object from the movie's display list. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setname"> <refnamediv> <refname>SWFDisplayItem->setName</refname> <refpurpose>Sets the object's name</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setname</function></funcdef> <paramdef>string <parameter>name</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->setname</function> sets the object's name to <parameter>name</parameter>, for targetting with action script. Only useful on sprites. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setratio"> <refnamediv> <refname>SWFDisplayItem->setRatio</refname> <refpurpose>Sets the object's ratio.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setratio</function></funcdef> <paramdef>float <parameter>ratio</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->setratio</function> sets the object's ratio to <parameter>ratio</parameter>. Obviously only useful for morphs. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <para> This simple example will morph nicely three concentric circles. <example> <title><function>swfdisplayitem->setname</function> example</title> <programlisting role="php"><?php $p = new SWFMorph(); $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(0.16, 0xff, 0xff, 0xff); $g->addEntry(0.32, 0, 0, 0); $g->addEntry(0.48, 0xff, 0xff, 0xff); $g->addEntry(0.64, 0, 0, 0); $g->addEntry(0.80, 0xff, 0xff, 0xff); $g->addEntry(1.00, 0, 0, 0); $s = $p->getShape1(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.05); $s->setLeftFill($f); $s->movePenTo(-160, -120); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(0.16, 0xff, 0, 0); $g->addEntry(0.32, 0, 0, 0); $g->addEntry(0.48, 0, 0xff, 0); $g->addEntry(0.64, 0, 0, 0); $g->addEntry(0.80, 0, 0, 0xff); $g->addEntry(1.00, 0, 0, 0); $s = $p->getShape2(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.05); $f->skewXTo(1.0); $s->setLeftFill($f); $s->movePenTo(-160, -120); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m = new SWFMovie(); $m->setDimension(320, 240); $i = $m->add($p); $i->moveTo(160, 120); for($n=0; $n<=1.001; $n+=0.01) { $i->setRatio($n); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfdisplayitem.addcolor"> <refnamediv> <refname>SWFDisplayItem->addColor</refname> <refpurpose>Adds the given color to this item's color transform.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->addcolor</function></funcdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->addcolor</function> adds the color to this item's color transform. The color is given in its RGB form. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.multcolor"> <refnamediv> <refname>SWFDisplayItem->multColor</refname> <refpurpose>Multiplies the item's color transform.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->multcolor</function></funcdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->multcolor</function> multiplies the item's color transform by the given values. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <para> This simple example will modify your picture's atmospher to Halloween (use a landscape or bright picture). <example> <title><function>swfdisplayitem->multcolor</function> example</title> <programlisting role="php"><?php $b = new SWFBitmap("backyard.jpg"); // note use your own picture :-) $s = new SWFShape(); $s->setRightFill($s->addFill($b)); $s->drawLine($b->getWidth(), 0); $s->drawLine(0, $b->getHeight()); $s->drawLine(-$b->getWidth(), 0); $s->drawLine(0, -$b->getHeight()); $m = new SWFMovie(); $m->setDimension($b->getWidth(), $b->getHeight()); $i = $m->add($s); for($n=0; $n<=20; ++$n) { $i->multColor(1.0-$n/10, 1.0, 1.0); $i->addColor(0xff*$n/20, 0, 0); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <!-- SWFShape --> <refentry id="function.swfshape"> <refnamediv> <refname>SWFShape</refname> <refpurpose>Creates a new shape object.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfshape</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfshape</function> creates a new shape object. </para> <simpara> SWFShape has the following methods : <function>swfshape->setline</function>, <function>swfshape->addfill</function>, <function>swfshape->setleftfill</function>, <function>swfshape->setrightfill</function>, <function>swfshape->movepento</function>, <function>swfshape->movepen</function>, <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->drawcurveto</function> and <function>swfshape->drawcurve</function>. </simpara> <para> This simple example will draw a big red elliptic quadrant. <example> <title><function>swfshape</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); $s->setLine(40, 0x7f, 0, 0); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->movePenTo(200, 200); $s->drawLineTo(6200, 200); $s->drawLineTo(6200, 4600); $s->drawCurveTo(200, 4600, 200, 200); $m = new SWFMovie(); $m->setDimension(6400, 4800); $m->setRate(12.0); $m->add($s); $m->nextFrame(); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.setline"> <refnamediv> <refname>SWFShape->setLine</refname> <refpurpose>Sets the shape's line style.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setline</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfshape->setline</function> sets the shape's line style. <parameter>width</parameter> is the line's width. If <parameter>width</parameter> is 0, the line's style is removed (then, all other arguments are ignored). If <parameter>width</parameter> > 0, then line's color is set to <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter>. Last parameter <parameter>a</parameter> is optional. </para> <simpara> <function>swfshape->setline</function> accepts 1, 4 or 5 arguments (not 3 or 2). </simpara> <para> You must declare all line styles before you use them (see example). </para> <para> This simple example will draw a big "!#%*@", in funny colors and gracious style. <example> <title><function>swfshape->setline</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); $f1 = $s->addFill(0xff, 0, 0); $f2 = $s->addFill(0xff, 0x7f, 0); $f3 = $s->addFill(0xff, 0xff, 0); $f4 = $s->addFill(0, 0xff, 0); $f5 = $s->addFill(0, 0, 0xff); // bug: have to declare all line styles before you use them $s->setLine(40, 0x7f, 0, 0); $s->setLine(40, 0x7f, 0x3f, 0); $s->setLine(40, 0x7f, 0x7f, 0); $s->setLine(40, 0, 0x7f, 0); $s->setLine(40, 0, 0, 0x7f); $f = new SWFFont('Techno.fdb'); $s->setRightFill($f1); $s->setLine(40, 0x7f, 0, 0); $s->drawGlyph($f, '!'); $s->movePen($f->getWidth('!'), 0); $s->setRightFill($f2); $s->setLine(40, 0x7f, 0x3f, 0); $s->drawGlyph($f, '#'); $s->movePen($f->getWidth('#'), 0); $s->setRightFill($f3); $s->setLine(40, 0x7f, 0x7f, 0); $s->drawGlyph($f, '%'); $s->movePen($f->getWidth('%'), 0); $s->setRightFill($f4); $s->setLine(40, 0, 0x7f, 0); $s->drawGlyph($f, '*'); $s->movePen($f->getWidth('*'), 0); $s->setRightFill($f5); $s->setLine(40, 0, 0, 0x7f); $s->drawGlyph($f, '@'); $m = new SWFMovie(); $m->setDimension(3000,2000); $m->setRate(12.0); $i = $m->add($s); $i->moveTo(1500-$f->getWidth("!#%*@")/2, 1000+$f->getAscent()/2); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.addfill"> <refnamediv> <refname>SWFShape->addFill</refname> <refpurpose>Adds a solid fill to the shape.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>SWFbitmap <parameter>bitmap</parameter></paramdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>SWFGradient <parameter>gradient</parameter></paramdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfshape->addfill</function> adds a solid fill to the shape's list of fill styles. <function>swfshape->addfill</function> accepts three different types of arguments. </para> <para> <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> is a color (RGB mode). Last parameter <parameter>a</parameter> is optional. </para> <para> The <parameter>bitmap</parameter> argument is an <function>swfbitmap</function> object. The <parameter>flags</parameter> argument can be one of the following values : SWFFILL_CLIPPED_BITMAP or SWFFILL_TILED_BITMAP. Default is SWFFILL_TILED_BITMAP. I think. </para> <para> The <parameter>gradient</parameter> argument is an <function>swfgradient</function> object. The flags argument can be one of the following values : SWFFILL_RADIAL_GRADIENT or SWFFILL_LINEAR_GRADIENT. Default is SWFFILL_LINEAR_GRADIENT. I'm sure about this one. Really. </para> <para> <function>swfshape->addfill</function> returns an <function>swffill</function> object for use with the <function>swfshape->setleftfill</function> and <function>swfshape->setrightfill</function> functions described below. </para> <simpara> See also <function>swfshape->setleftfill</function> and <function>swfshape->setrightfill</function>. </simpara> <para> This simple example will draw a frame on a bitmap. Ah, here's another buglet in the flash player- it doesn't seem to care about the second shape's bitmap's transformation in a morph. According to spec, the bitmap should stretch along with the shape in this example.. <example> <title><function>swfshape->addfill</function> example</title> <programlisting role="php"><?php $p = new SWFMorph(); $b = new SWFBitmap("alphafill.jpg"); // use your own bitmap $width = $b->getWidth(); $height = $b->getHeight(); $s = $p->getShape1(); $f = $s->addFill($b, SWFFILL_TILED_BITMAP); $f->moveTo(-$width/2, -$height/4); $f->scaleTo(1.0, 0.5); $s->setLeftFill($f); $s->movePenTo(-$width/2, -$height/4); $s->drawLine($width, 0); $s->drawLine(0, $height/2); $s->drawLine(-$width, 0); $s->drawLine(0, -$height/2); $s = $p->getShape2(); $f = $s->addFill($b, SWFFILL_TILED_BITMAP); // these two have no effect! $f->moveTo(-$width/4, -$height/2); $f->scaleTo(0.5, 1.0); $s->setLeftFill($f); $s->movePenTo(-$width/4, -$height/2); $s->drawLine($width/2, 0); $s->drawLine(0, $height); $s->drawLine(-$width/2, 0); $s->drawLine(0, -$height); $m = new SWFMovie(); $m->setDimension($width, $height); $i = $m->add($p); $i->moveTo($width/2, $height/2); for($n=0; $n<1.001; $n+=0.03) { $i->setRatio($n); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.setleftfill"> <refnamediv> <refname>SWFShape->setLeftFill</refname> <refpurpose>Sets left rasterizing color.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setleftfill</function></funcdef> <paramdef>swfgradient <parameter>fill</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setleftfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> What this nonsense is about is, every edge segment borders at most two fills. When rasterizing the object, it's pretty handy to know what those fills are ahead of time, so the swf format requires these to be specified. </para> <para> <function>swfshape->setleftfill</function> sets the fill on the left side of the edge- that is, on the interior if you're defining the outline of the shape in a counter-clockwise fashion. The fill object is an SWFFill object returned from one of the addFill functions above. </para> <para> This seems to be reversed when you're defining a shape in a morph, though. If your browser crashes, just try setting the fill on the other side. </para> <simpara> Shortcut for <literal>swfshape->setleftfill($s->addfill($r, $g, $b [, $a]));</literal>. </simpara> <simpara> See also <function>swfshape->setrightfill</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.setrightfill"> <refnamediv> <refname>SWFShape->setRightFill</refname> <refpurpose>Sets right rasterizing color.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setrightfill</function></funcdef> <paramdef>swfgradient <parameter>fill</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setrightfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> See also <function>swfshape->setleftfill</function>. </simpara> <simpara> Shortcut for <literal>swfshape->setrightfill($s->addfill($r, $g, $b [, $a]));</literal>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.movepento"> <refnamediv> <refname>SWFShape->movePenTo</refname> <refpurpose>Moves the shape's pen.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->movepento</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->setrightfill</function> move the shape's pen to (<parameter>x</parameter>,<parameter>y</parameter>) in the shape's coordinate space. </simpara> <simpara> See also <function>swfshape->movepen</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->drawlineto</function> and <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.movepen"> <refnamediv> <refname>SWFShape->movePen</refname> <refpurpose>Moves the shape's pen (relative).</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->movepen</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->setrightfill</function> move the shape's pen from coordinates (current x,current y) to (current x + <parameter>dx</parameter>, current y + <parameter>dy</parameter>) in the shape's coordinate space. </simpara> <simpara> See also <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->drawlineto</function> and <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawlineto"> <refnamediv> <refname>SWFShape->drawLineTo</refname> <refpurpose>Draws a line.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawlineto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->setrightfill</function> draws a line (using the current line style, set by <function>swfshape->setline</function>) from the current pen position to point (<parameter>x</parameter>,<parameter>y</parameter>) in the shape's coordinate space. </simpara> <simpara> See also <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->movepen</function> and <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawline"> <refnamediv> <refname>SWFShape->drawLine</refname> <refpurpose>Draws a line (relative).</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawline</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->setrightfill</function> draws a line (using the current line style set by <function>swfshape->setline</function>) from the current pen position to displacement (<parameter>dx</parameter>,<parameter>dy</parameter>). </simpara> <simpara> See also <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->movepen</function> and <function>swfshape->drawlineto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawcurveto"> <refnamediv> <refname>SWFShape->drawCurveTo</refname> <refpurpose>Draws a curve.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawcurveto</function></funcdef> <paramdef>int <parameter>controlx</parameter></paramdef> <paramdef>int <parameter>controly</parameter></paramdef> <paramdef>int <parameter>anchorx</parameter></paramdef> <paramdef>int <parameter>anchory</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->drawcurveto</function> draws a quadratic curve (using the current line style, set by <function>swfshape->setline</function>) from the current pen position to (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) using (<parameter>controlx</parameter>,<parameter>controly</parameter>) as a control point. That is, head towards the control point, then smoothly turn to the anchor point. </simpara> <simpara> See also <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->movepento</function> and <function>swfshape->movepen</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawcurve"> <refnamediv> <refname>SWFShape->drawCurve</refname> <refpurpose>Draws a curve (relative).</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawcurve</function></funcdef> <paramdef>int <parameter>controldx</parameter></paramdef> <paramdef>int <parameter>controldy</parameter></paramdef> <paramdef>int <parameter>anchordx</parameter></paramdef> <paramdef>int <parameter>anchordy</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->drawcurve</function> draws a quadratic curve (using the current line style,set by <function>swfshape->setline</function>) from the current pen position to the relative position (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) using relative control point (<parameter>controlx</parameter>,<parameter>controly</parameter>). That is, head towards the control point, then smoothly turn to the anchor point. </simpara> <simpara> See also <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->movepento</function> and <function>swfshape->movepen</function>. </simpara> </refsect1> </refentry><!-- SWFGradient --> <refentry id="function.swfgradient"> <refnamediv> <refname>SWFGradient</refname> <refpurpose>Creates a gradient object</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfgradient</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfgradient</function> creates a new SWFGradient object. </para> <simpara> After you've added the entries to your gradient, you can use the gradient in a shape fill with the <function>swfshape->addfill</function> method. </simpara> <simpara> SWFGradient has the following methods : <function>swfgradient->addentry</function>. </simpara> <para> This simple example will draw a big black-to-white gradient as background, and a redish disc in its center. <example> <title><function>swfgradient</function> example</title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setDimension(320, 240); $s = new SWFShape(); // first gradient- black to white $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(1.0, 0xff, 0xff, 0xff); $f = $s->addFill($g, SWFFILL_LINEAR_GRADIENT); $f->scaleTo(0.01); $f->moveTo(160, 120); $s->setRightFill($f); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m->add($s); $s = new SWFShape(); // second gradient- radial gradient from red to transparent $g = new SWFGradient(); $g->addEntry(0.0, 0xff, 0, 0, 0xff); $g->addEntry(1.0, 0xff, 0, 0, 0); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.005); $f->moveTo(160, 120); $s->setRightFill($f); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfgradient.addentry"> <refnamediv> <refname>SWFGradient->addEntry</refname> <refpurpose>Adds an entry to the gradient list.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfgradient->addentry</function></funcdef> <paramdef>float <parameter>ratio</parameter></paramdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfgradient->addentry</function> adds an entry to the gradient list. <parameter>ratio</parameter> is a number between 0 and 1 indicating where in the gradient this color appears. Thou shalt add entries in order of increasing ratio. </para> <para> <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> is a color (RGB mode). Last parameter <parameter>a</parameter> is optional. </para> </refsect1> </refentry><!-- SWFBitmap --> <refentry id="function.swfbitmap"> <refnamediv> <refname>SWFBitmap</refname> <refpurpose>Loads Bitmap object</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfbitmap</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> <paramdef>int <parameter><optional>alphafilename</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbitmap</function> creates a new SWFBitmap object from the Jpeg or DBL file named <parameter>filename</parameter>. <parameter>alphafilename</parameter> indicates a MSK file to be used as an alpha mask for a Jpeg image. </para> <note> <para> We can only deal with baseline (frame 0) jpegs, no baseline optimized or progressive scan jpegs! </para> </note> <simpara> SWFBitmap has the following methods : <function>swfbitmap->getwidth</function> and <function>swfbitmap->getheight</function>. </simpara> <para> You can't import png images directly, though- have to use the png2dbl utility to make a dbl ("define bits lossless") file from the png. The reason for this is that I don't want a dependency on the png library in ming- autoconf should solve this, but that's not set up yet. <example> <title>Import PNG files</title> <programlisting role="php"><?php $s = new SWFShape(); $f = $s->addFill(new SWFBitmap("png.dbl")); $s->setRightFill($f); $s->drawLine(32, 0); $s->drawLine(0, 32); $s->drawLine(-32, 0); $s->drawLine(0, -32); $m = new SWFMovie(); $m->setDimension(32, 32); $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> And you can put an alpha mask on a jpeg fill. <example> <title><function>swfbitmap</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); // .msk file generated with "gif2mask" utility $f = $s->addFill(new SWFBitmap("alphafill.jpg", "alphafill.msk")); $s->setRightFill($f); $s->drawLine(640, 0); $s->drawLine(0, 480); $s->drawLine(-640, 0); $s->drawLine(0, -480); $c = new SWFShape(); $c->setRightFill($c->addFill(0x99, 0x99, 0x99)); $c->drawLine(40, 0); $c->drawLine(0, 40); $c->drawLine(-40, 0); $c->drawLine(0, -40); $m = new SWFMovie(); $m->setDimension(640, 480); $m->setBackground(0xcc, 0xcc, 0xcc); // draw checkerboard background for($y=0; $y<480; $y+=40) { for($x=0; $x<640; $x+=80) { $i = $m->add($c); $i->moveTo($x, $y); } $y+=40; for($x=40; $x<640; $x+=80) { $i = $m->add($c); $i->moveTo($x, $y); } } $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfbitmap.getwidth"> <refnamediv> <refname>SWFBitmap->getWidth</refname> <refpurpose>Returns the bitmap's width.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swfbitmap->getwidth</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbitmap->getwidth</function> returns the bitmap's width in pixels. </para> <para> See also <function>swfbitmap->getheight</function>. </para> </refsect1> </refentry> <refentry id="function.swfbitmap.getheight"> <refnamediv> <refname>SWFBitmap->getHeight</refname> <refpurpose>Returns the bitmap's height.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swfbitmap->getheight</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbitmap->getheight</function> returns the bitmap's height in pixels. </para> <para> See also <function>swfbitmap->getwidth</function>. </para> </refsect1> </refentry><!-- SWFFill --> <refentry id="function.swffill"> <refnamediv> <refname>SWFFill</refname> <refpurpose>Loads SWFFill object</refpurpose> </refnamediv> <refsect1> <title>Description</title> <para> The <function>swffill</function> object allows you to transform (scale, skew, rotate) bitmap and gradient fills. <function>swffill</function> objects are created by the <function>swfshape->addfill</function> methods. </para> <simpara> SWFFill has the following methods : <function>swffill->moveto</function> and <function>swffill->scaleto</function>, <function>swffill->rotateto</function>, <function>swffill->skewxto</function> and <function>swffill->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swffill.moveto"> <refnamediv> <refname>SWFFill->moveTo</refname> <refpurpose>Moves fill origin</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffill->moveto</function> moves fill's origin to (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. </para> </refsect1> </refentry> <refentry id="function.swffill.scaleto"> <refnamediv> <refname>SWFFill->scaleTo</refname> <refpurpose>Sets fill's scale</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->scaleto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffill->scaleto</function> sets fill's scale to <parameter>x</parameter> in the x-direction, <parameter>y</parameter> in the y-direction. </para> </refsect1> </refentry> <refentry id="function.swffill.rotateto"> <refnamediv> <refname>SWFFill->rotateTo</refname> <refpurpose>Sets fill's rotation</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->rotateto</function></funcdef> <paramdef>float <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffill->rotateto</function> sets fill's rotation to <parameter>degrees</parameter> degrees. </para> </refsect1> </refentry> <refentry id="function.swffill.skewxto"> <refnamediv> <refname>SWFFill->skewXTo</refname> <refpurpose>Sets fill x-skew</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->skewxto</function></funcdef> <paramdef>float <parameter>x</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffill->skewxto</function> sets fill x-skew to <parameter>x</parameter>. For <parameter>x</parameter> is 1.0, it is a is a 45-degree forward slant. More is more forward, less is more backward. </para> </refsect1> </refentry> <refentry id="function.swffill.skewyto"> <refnamediv> <refname>SWFFill->skewYTo</refname> <refpurpose>Sets fill y-skew</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->skewyto</function></funcdef> <paramdef>float <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffill->skewyto</function> sets fill y-skew to <parameter>y</parameter>. For <parameter>y</parameter> is 1.0, it is a is a 45-degree upward slant. More is more upward, less is more downward. </para> </refsect1> </refentry><!-- SWFMorph --> <refentry id="function.swfmorph"> <refnamediv> <refname>SWFMorph</refname> <refpurpose>Creates a new SWFMorph object.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfmorph</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmorph</function> creates a new SWFMorph object. </para> <para> Also called a "shape tween". This thing lets you make those tacky twisting things that make your computer choke. Oh, joy! </para> <para> The methods here are sort of weird. It would make more sense to just have newSWFMorph(shape1, shape2);, but as things are now, shape2 needs to know that it's the second part of a morph. (This, because it starts writing its output as soon as it gets drawing commands- if it kept its own description of its shapes and wrote on completion this and some other things would be much easier.) </para> <simpara> SWFMorph has the following methods : <function>swfmorph->getshape1</function> and <function>swfmorph->getshape1</function>. </simpara> <para> This simple example will morph a big red square into a smaller blue black-bordered square. <example> <title><function>swfmorph</function> example</title> <programlisting role="php"><?php $p = new SWFMorph(); $s = $p->getShape1(); $s->setLine(0,0,0,0); /* Note that this is backwards from normal shapes (left instead of right). I have no idea why, but this seems to work.. */ $s->setLeftFill($s->addFill(0xff, 0, 0)); $s->movePenTo(-1000,-1000); $s->drawLine(2000,0); $s->drawLine(0,2000); $s->drawLine(-2000,0); $s->drawLine(0,-2000); $s = $p->getShape2(); $s->setLine(60,0,0,0); $s->setLeftFill($s->addFill(0, 0, 0xff)); $s->movePenTo(0,-1000); $s->drawLine(1000,1000); $s->drawLine(-1000,1000); $s->drawLine(-1000,-1000); $s->drawLine(1000,-1000); $m = new SWFMovie(); $m->setDimension(3000,2000); $m->setBackground(0xff, 0xff, 0xff); $i = $m->add($p); $i->moveTo(1500,1000); for($r=0.0; $r<=1.0; $r+=0.1) { $i->setRatio($r); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfmorph.getshape1"> <refnamediv> <refname>SWFMorph->getshape1</refname> <refpurpose>Gets a handle to the starting shape</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>mixed <function>swfmorph->getshape1</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmorph->getshape1</function> gets a handle to the morph's starting shape. <function>swfmorph->getshape1</function> returns an <function>swfshape</function> object. </para> </refsect1> </refentry> <refentry id="function.swfmorph.getshape2"> <refnamediv> <refname>SWFMorph->getshape2</refname> <refpurpose>Gets a handle to the ending shape</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>mixed <function>swfmorph->getshape2</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmorph->getshape2</function> gets a handle to the morph's ending shape. <function>swfmorph->getshape2</function> returns an <function>swfshape</function> object. </para> </refsect1> </refentry><!-- SWFText --> <refentry id="function.swftext"> <refnamediv> <refname>SWFText</refname> <refpurpose>Creates a new SWFText object.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swftext</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext</function> creates a new SWFText object, fresh for manipulating. </para> <simpara> SWFText has the following methods : <function>swftext->setfont</function>, <function>swftext->setheight</function>, <function>swftext->setspacing</function>, <function>swftext->setcolor</function>, <function>swftext->moveto</function>, <function>swftext->addstring</function> and <function>swftext->getwidth</function>. </simpara> <para> This simple example will draw a big yellow "PHP generates Flash with Ming" text, on white background. <example> <title><function>swftext</function> example</title> <programlisting role="php"><?php $f = new SWFFont("Techno.fdb"); $t = new SWFText(); $t->setFont($f); $t->moveTo(200, 2400); $t->setColor(0xff, 0xff, 0); $t->setHeight(1200); $t->addString("PHP generates Flash with Ming!!"); $m = new SWFMovie(); $m->setDimension(5400, 3600); $m->add($t); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swftext.setfont"> <refnamediv> <refname>SWFText->setFont</refname> <refpurpose>Sets the current font</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setfont</function></funcdef> <paramdef>string <parameter>font</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->setfont</function> sets the current font to <parameter>font</parameter>. </para> </refsect1> </refentry> <refentry id="function.swftext.setheight"> <refnamediv> <refname>SWFText->setHeight</refname> <refpurpose>Sets the current font height</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setheight</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->setheight</function> sets the current font height to <parameter>height</parameter>. Default is 240. </para> </refsect1> </refentry> <refentry id="function.swftext.setspacing"> <refnamediv> <refname>SWFText->setSpacing</refname> <refpurpose>Sets the current font spacing</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setspacing</function></funcdef> <paramdef>float <parameter>spacing</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->setspacing</function> sets the current font spacing to <parameter>spacing</parameter><parameter>spacing</parameter>. Default is 1.0. 0 is all of the letters written at the same point. This doesn't really work that well because it inflates the advance across the letter, doesn't add the same amount of spacing between the letters. I should try and explain that better, prolly. Or just fix the damn thing to do constant spacing. This was really just a way to figure out how letter advances work, anyway.. So nyah. </para> </refsect1> </refentry> <refentry id="function.swftext.setcolor"> <refnamediv> <refname>SWFText->setColor</refname> <refpurpose>Sets the current font color</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setcolor</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->setspacing</function> changes the current text color. Default is black. I think. Color is represented using the RGB system. </para> </refsect1> </refentry> <refentry id="function.swftext.moveto"> <refnamediv> <refname>SWFText->moveTo</refname> <refpurpose>Moves the pen</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->moveto</function> moves the pen (or cursor, if that makes more sense) to (<parameter>x</parameter>,<parameter>y</parameter>) in text object's coordinate space. If either is zero, though, value in that dimension stays the same. Annoying, should be fixed. </para> </refsect1> </refentry> <refentry id="function.swftext.addstring"> <refnamediv> <refname>SWFText->addString</refname> <refpurpose>Draws a string</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->addstring</function> draws the string <parameter>string</parameter> at the current pen (cursor) location. Pen is at the baseline of the text; i.e., ascending text is in the -y direction. </para> </refsect1> </refentry> <refentry id="function.swftext.getwidth"> <refnamediv> <refname>SWFText->getWidth</refname> <refpurpose>Computes string's width</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->addstring</function> returns the rendered width of the <parameter>string</parameter> string at the text object's current font, scale, and spacing settings. </para> </refsect1> </refentry><!-- SWFFont --> <refentry id="function.swffont"> <refnamediv> <refname>SWFFont</refname> <refpurpose>Loads a font definition</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swffont</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> If <parameter>filename</parameter> is the name of an FDB file (i.e., it ends in ".fdb"), load the font definition found in said file. Otherwise, create a browser-defined font reference. </para> <para> FDB ("font definition block") is a very simple wrapper for the SWF DefineFont2 block which contains a full description of a font. One may create FDB files from SWT Generator template files with the included makefdb utility- look in the util directory off the main ming distribution directory. </para> <para> Browser-defined fonts don't contain any information about the font other than its name. It is assumed that the font definition will be provided by the movie player. The fonts _serif, _sans, and _typewriter should always be available. For example: <programlisting role="php"><?php$f = newSWFFont("_sans"); ?> </programlisting> will give you the standard sans-serif font, probably the same as what you'd get with <literal><font name="sans-serif"></literal> in HTML. </para> <para> <function>swffont</function> returns a reference to the font definition, for use in the <function>SWFText->setFont</function> and the <function>SWFTextField->setFont</function> methods. </para> <simpara> SWFFont has the following methods : <function>swffont->getwidth</function>. </simpara> </refsect1> </refentry> <refentry id="function.swffont.getwidth"> <refnamediv> <refname>swffont->getwidth</refname> <refpurpose>Returns the string's width</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swffont->getwidth</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffont->getwidth</function> returns the string <parameter>string</parameter>'s width, using font's default scaling. You'll probably want to use the <function>SWFText</function> version of this method which uses the text object's scale. </para> </refsect1> </refentry><!-- SWFTextField --> <refentry id="function.swftextfield"> <refnamediv> <refname>SWFTextField</refname> <refpurpose>Creates a text field object</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swftextfield</function></funcdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield</function> creates a new text field object. Text Fields are less flexible than <function>swftext</function> objects- they can't be rotated, scaled non-proportionally, or skewed, but they can be used as form entries, and they can use browser-defined fonts. </para> <para> The optional flags change the text field's behavior. It has the following possibles values : <itemizedlist> <listitem> <simpara> SWFTEXTFIELD_NOEDIT indicates that the field shouldn't be user-editable </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_PASSWORD obscures the data entry </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_DRAWBOX draws the outline of the textfield </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_MULTILINE allows multiple lines </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_WORDWRAP allows text to wrap </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_NOSELECT makes the field non-selectable </simpara> </listitem> </itemizedlist> Flags are combined with the bitwise <link linkend="language.operators.bitwise">OR</link> operation. For example, <programlisting role="php"><?php$t = newSWFTextField(SWFTEXTFIELD_PASSWORD | SWFTEXTFIELD_NOEDIT); ?> </programlisting> creates a totally useless non-editable password field. </para> <simpara> SWFTextField has the following methods : <function>swftextfield->setfont</function>, <function>swftextfield->setbounds</function>, <function>swftextfield->align</function>, <function>swftextfield->setheight</function>, <function>swftextfield->setleftmargin</function>, <function>swftextfield->setrightmargin</function>, <function>swftextfield->setmargins</function>, <function>swftextfield->setindentation</function>, <function>swftextfield->setlinespacing</function>, <function>swftextfield->setcolor</function>, <function>swftextfield->setname</function> and <function>swftextfield->addstring</function>. </simpara> </refsect1> </refentry> <refentry id="function.swftextfield.setfont"> <refnamediv> <refname>SWFTextField->setFont</refname> <refpurpose>Sets the text field font</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setfont</function></funcdef> <paramdef>string <parameter>font</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setfont</function> sets the text field font to the [browser-defined?] <parameter>font</parameter> font. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setbounds"> <refnamediv> <refname>SWFTextField->setbounds</refname> <refpurpose>Sets the text field width and height</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setbounds</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setbounds</function> sets the text field width to <parameter>width</parameter> and height to <parameter>height</parameter>. If you don't set the bounds yourself, Ming makes a poor guess at what the bounds are. </para> </refsect1> </refentry> <refentry id="function.swftextfield.align"> <refnamediv> <refname>SWFTextField->align</refname> <refpurpose>Sets the text field alignment</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->align</function></funcdef> <paramdef>int <parameter>alignement</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->align</function> sets the text field alignment to <parameter>alignement</parameter>. Valid values for <parameter>alignement</parameter> are : SWFTEXTFIELD_ALIGN_LEFT, SWFTEXTFIELD_ALIGN_RIGHT, SWFTEXTFIELD_ALIGN_CENTER and SWFTEXTFIELD_ALIGN_JUSTIFY. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setheight"> <refnamediv> <refname>SWFTextField->setHeight</refname> <refpurpose>Sets the font height of this text field font.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setheight</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setheight</function> sets the font height of this text field font to the given height <parameter>height</parameter>. Default is 240. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setleftmargin"> <refnamediv> <refname>SWFTextField->setLeftMargin</refname> <refpurpose>Sets the left margin width of the text field.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setleftmargin</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setleftmargin</function> sets the left margin width of the text field to <parameter>width</parameter>. Default is 0. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setrightmargin"> <refnamediv> <refname>SWFTextField->setrightMargin</refname> <refpurpose>Sets the right margin width of the text field.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setrightmargin</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setrightmargin</function> sets the right margin width of the text field to <parameter>width</parameter>. Default is 0. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setmargins"> <refnamediv> <refname>SWFTextField->setMargins</refname> <refpurpose>Sets the margins width of the text field.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setmargins</function></funcdef> <paramdef>int <parameter>left</parameter></paramdef> <paramdef>int <parameter>right</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setmargins</function> set both margins at once, for the man on the go. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setindentation"> <refnamediv> <refname>SWFTextField->setindentation</refname> <refpurpose>Sets the indentation of the first line.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setindentation</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setindentation</function> sets the indentation of the first line in the text field, to <parameter>width</parameter>. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setlinespacing"> <refnamediv> <refname>SWFTextField->setLineSpacing</refname> <refpurpose>Sets the line spacing of the text field.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setlinespacing</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setlinespacing</function> sets the line spacing of the text field to the height of <parameter>height</parameter>. Default is 40. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setcolor"> <refnamediv> <refname>SWFTextField->setcolor</refname> <refpurpose>Sets the color of the text field. </refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setcolor</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setcolor</function> sets the color of the text field. Default is fully opaque black. Color is represented using RGB system. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setname"> <refnamediv> <refname>SWFTextField->setname</refname> <refpurpose>Sets the variable name</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setname</function></funcdef> <paramdef>string <parameter>name</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setname</function> sets the variable name of this text field to <parameter>name</parameter>, for form posting and action scripting purposes. </para> </refsect1> </refentry> <refentry id="function.swftextfield.addstring"> <refnamediv> <refname>SWFTextField->addstring</refname> <refpurpose>Concatenates the given string to the text field</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setname</function> concatenates the string <parameter>string</parameter> to the text field. </para> </refsect1> </refentry> <!-- SWFSprite --> <refentry id="function.swfsprite"> <refnamediv> <refname>SWFSprite</refname> <refpurpose>Creates a movie clip (a sprite)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfsprite</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfsprite</function> are also known as a "movie clip", this allows one to create objects which are animated in their own timelines. Hence, the sprite has most of the same methods as the movie. </para> <simpara> <function>swfsprite</function> has the following methods : <function>swfsprite->add</function>, <function>swfsprite->remove</function>, <function>swfsprite->nextframe</function> and <function>swfsprite->setframes</function>. </simpara> <para> This simple example will spin gracefully a big red square. <example> <title><function>swfsprite</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->movePenTo(-500,-500); $s->drawLineTo(500,-500); $s->drawLineTo(500,500); $s->drawLineTo(-500,500); $s->drawLineTo(-500,-500); $p = new SWFSprite(); $i = $p->add($s); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $m = new SWFMovie(); $i = $m->add($p); $i->moveTo(1500,1000); $i->setName("blah"); $m->setBackground(0xff, 0xff, 0xff); $m->setDimension(3000,2000); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfsprite.add"> <refnamediv> <refname>SWFSprite->add</refname> <refpurpose>Adds an object to a sprite</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->add</function></funcdef> <paramdef>ressource <parameter>object</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfsprite->add</function> adds a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function>, a <function>swfaction</function> or a <function>swfsprite</function> object. </para> <para> For displayable types (<function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function>, <function>swfaction</function> or <function>swfsprite</function>), this returns a handle to the object in a display list. </para> </refsect1> </refentry> <refentry id="function.swfsprite.remove"> <refnamediv> <refname>SWFSprite->remove</refname> <refpurpose>Removes an object to a sprite</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->remove</function></funcdef> <paramdef>ressource <parameter>object</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfsprite->remove</function> remove a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function>, a <function>swfaction</function> or a <function>swfsprite</function> object from the sprite. </para> </refsect1> </refentry> <refentry id="function.swfsprite.setframes"> <refnamediv> <refname>SWFSprite->setframes</refname> <refpurpose>Sets the total number of frames in the animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->setframes</function></funcdef> <paramdef>int <parameter>numberofframes</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfsprite->setframes</function> sets the total number of frames in the animation to <parameter>numberofframes</parameter>. </para> </refsect1> </refentry> <refentry id="function.swfsprite.nextframe"> <refnamediv> <refname>SWFSprite->nextframe</refname> <refpurpose>Moves to the next frame of the animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->nextframe</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfsprite->setframes</function> moves to the next frame of the animation. </para> </refsect1> </refentry><!-- SWFButton --> <refentry id="function.swfbutton"> <refnamediv> <refname>SWFbutton</refname> <refpurpose>Creates a new Button.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfbutton</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton</function> creates a new Button. Roll over it, click it, see it call action code. Swank. </para> <simpara> SWFButton has the following methods : <function>swfbutton->addshape</function>, <function>swfbutton->setup</function>, <function>swfbutton->setover</function> <function>swfbutton->setdown</function>, <function>swfbutton->sethit</function> <function>swfbutton->setaction</function> and <function>swfbutton->addaction</function>. </simpara> <para> This simple example will show your usual interactions with buttons : rollover, rollon, mouseup, mousedown, noaction. <example> <title><function>swfbutton</function> example</title> <programlisting role="php"><?php $f = new SWFFont("_serif"); $p = new SWFSprite(); function label($string) { global $f; $t = new SWFTextField(); $t->setFont($f); $t->addString($string); $t->setHeight(200); $t->setBounds(3200,200); return $t; } function addLabel($string) { global $p; $i = $p->add(label($string)); $p->nextFrame(); $p->remove($i); } $p->add(new SWFAction("stop();")); addLabel("NO ACTION"); addLabel("SWFBUTTON_MOUSEUP"); addLabel("SWFBUTTON_MOUSEDOWN"); addLabel("SWFBUTTON_MOUSEOVER"); addLabel("SWFBUTTON_MOUSEOUT"); addLabel("SWFBUTTON_MOUSEUPOUTSIDE"); addLabel("SWFBUTTON_DRAGOVER"); addLabel("SWFBUTTON_DRAGOUT"); function rect($r, $g, $b) { $s = new SWFShape(); $s->setRightFill($s->addFill($r, $g, $b)); $s->drawLine(600,0); $s->drawLine(0,600); $s->drawLine(-600,0); $s->drawLine(0,-600); return $s; } $b = new SWFButton(); $b->addShape(rect(0xff, 0, 0), SWFBUTTON_UP | SWFBUTTON_HIT); $b->addShape(rect(0, 0xff, 0), SWFBUTTON_OVER); $b->addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(1);"), SWFBUTTON_MOUSEUP); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(2);"), SWFBUTTON_MOUSEDOWN); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(3);"), SWFBUTTON_MOUSEOVER); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(4);"), SWFBUTTON_MOUSEOUT); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(5);"), SWFBUTTON_MOUSEUPOUTSIDE); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(6);"), SWFBUTTON_DRAGOVER); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(7);"), SWFBUTTON_DRAGOUT); $m = new SWFMovie(); $m->setDimension(4000,3000); $i = $m->add($p); $i->setName("label"); $i->moveTo(400,1900); $i = $m->add($b); $i->moveTo(400,900); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> This simple example will enables you to drag draw a big red button on the windows. No drag-and-drop, just moving around. <example> <title><function>swfbutton->addaction</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->drawLine(1000,0); $s->drawLine(0,1000); $s->drawLine(-1000,0); $s->drawLine(0,-1000); $b = new SWFButton(); $b->addShape($s, SWFBUTTON_HIT | SWFBUTTON_UP | SWFBUTTON_DOWN | SWFBUTTON_OVER); $b->addAction(new SWFAction("startDrag('/test', 0);"), // '0' means don't lock to mouse SWFBUTTON_MOUSEDOWN); $b->addAction(new SWFAction("stopDrag();"), SWFBUTTON_MOUSEUP | SWFBUTTON_MOUSEUPOUTSIDE); $p = new SWFSprite(); $p->add($b); $p->nextFrame(); $m = new SWFMovie(); $i = $m->add($p); $i->setName('test'); $i->moveTo(1000,1000); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfbutton.addshape"> <refnamediv> <refname>SWFbutton->addShape</refname> <refpurpose>Adds a shape to a button</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->addshape</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> <paramdef>int <parameter>flags</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->addshape</function> adds the shape <parameter>shape</parameter> to this button. The following <parameter>flags</parameter>' values are valid: SWFBUTTON_UP, SWFBUTTON_OVER, SWFBUTTON_DOWN or SWFBUTTON_HIT. SWFBUTTON_HIT isn't ever displayed, it defines the hit region for the button. That is, everywhere the hit shape would be drawn is considered a "touchable" part of the button. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setup"> <refnamediv> <refname>SWFbutton->setUp</refname> <refpurpose>Alias for addShape(shape, SWFBUTTON_UP)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setup</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->setup</function> alias for addShape(shape, SWFBUTTON_UP). </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setover"> <refnamediv> <refname>SWFbutton->setOver</refname> <refpurpose>Alias for addShape(shape, SWFBUTTON_OVER)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setover</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->setover</function> alias for addShape(shape, SWFBUTTON_OVER). </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setdown"> <refnamediv> <refname>SWFbutton->setdown</refname> <refpurpose>Alias for addShape(shape, SWFBUTTON_DOWN))</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setdown</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->setdown</function> alias for addShape(shape, SWFBUTTON_DOWN). </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.sethit"> <refnamediv> <refname>SWFbutton->setHit</refname> <refpurpose>Alias for addShape(shape, SWFBUTTON_HIT)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->sethit</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->sethit</function> alias for addShape(shape, SWFBUTTON_HIT). </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.addaction"> <refnamediv> <refname>SWFbutton->addAction</refname> <refpurpose>Adds an action</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->addaction</function></funcdef> <paramdef>ressource <parameter>action</parameter></paramdef> <paramdef>int <parameter>flags</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->addaction</function> adds the action <parameter>action</parameter> to this button for the given conditions. The following <parameter>flags</parameter> are valid: SWFBUTTON_MOUSEOVER, SWFBUTTON_MOUSEOUT, SWFBUTTON_MOUSEUP, SWFBUTTON_MOUSEUPOUTSIDE, SWFBUTTON_MOUSEDOWN, SWFBUTTON_DRAGOUT and SWFBUTTON_DRAGOVER. </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setaction"> <refnamediv> <refname>SWFbutton->setAction</refname> <refpurpose>Sets the action</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setaction</function></funcdef> <paramdef>ressource <parameter>action</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->setaction</function> sets the action to be performed when the button is clicked. Alias for addAction(shape, SWFBUTTON_MOUSEUP). <parameter>action</parameter> is a <function>swfaction</function>. </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry><!-- SWFAction --> <refentry id="function.swfaction"> <refnamediv> <refname>SWFAction</refname> <refpurpose>Creates a new Action.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfaction</function></funcdef> <paramdef>string <parameter>script</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfaction</function> creates a new Action, and compiles the given script into an SWFAction object. </para> <para> The script syntax is based on the C language, but with a lot taken out- the SWF bytecode machine is just too simpleminded to do a lot of things we might like. For instance, we can't implement function calls without a tremendous amount of hackery because the jump bytecode has a hardcoded offset value. No pushing your calling address to the stack and returning- every function would have to know exactly where to return to. </para> <para> So what's left? The compiler recognises the following tokens: <itemizedlist> <listitem> <simpara> break </simpara> </listitem> <listitem> <simpara> for </simpara> </listitem> <listitem> <simpara> continue </simpara> </listitem> <listitem> <simpara> if </simpara> </listitem> <listitem> <simpara> else </simpara> </listitem> <listitem> <simpara> do </simpara> </listitem> <listitem> <simpara> while </simpara> </listitem> </itemizedlist> </para> <para> There is no typed data; all values in the SWF action machine are stored as strings. The following functions can be used in expressions: <variablelist> <varlistentry> <term>time()</term> <listitem> <simpara> Returns the number of milliseconds (?) elapsed since the movie started. </simpara> </listitem> </varlistentry> <varlistentry> <term>random(seed)</term> <listitem> <simpara> Returns a pseudo-random number in the range 0-seed. </simpara> </listitem> </varlistentry> <varlistentry> <term>length(expr)</term> <listitem> <simpara> Returns the length of the given expression. </simpara> </listitem> </varlistentry> <varlistentry> <term>int(number)</term> <listitem> <simpara> Returns the given number rounded down to the nearest integer. </simpara> </listitem> </varlistentry> <varlistentry> <term>concat(expr, expr)</term> <listitem> <simpara> Returns the concatenation of the given expressions. </simpara> </listitem> </varlistentry> <varlistentry> <term>ord(expr)</term> <listitem> <simpara> Returns the ASCII code for the given character </simpara> </listitem> </varlistentry> <varlistentry> <term>chr(num)</term> <listitem> <simpara> Returns the character for the given ASCII code </simpara> </listitem> </varlistentry> <varlistentry> <term>substr(string, location, length)</term> <listitem> <simpara> Returns the substring of length length at location location of the given string string. </simpara> </listitem> </varlistentry> </variablelist> </para> <para> Additionally, the following commands may be used: <variablelist> <varlistentry> <term>duplicateClip(clip, name, depth)</term> <listitem> <simpara> Duplicate the named movie clip (aka sprite). The new movie clip has name name and is at depth depth. </simpara> </listitem> </varlistentry> <varlistentry> <term>removeClip(expr)</term> <listitem> <simpara> Removes the named movie clip. </simpara> </listitem> </varlistentry> <varlistentry> <term>trace(expr)</term> <listitem> <simpara> Write the given expression to the trace log. Doubtful that the browser plugin does anything with this. </simpara> </listitem> </varlistentry> <varlistentry> <term>startDrag(target, lock, [left, top, right, bottom])</term> <listitem> <simpara> Start dragging the movie clip target. The lock argument indicates whether to lock the mouse (?)- use 0 (&false;) or 1 (&true;). Optional parameters define a bounding area for the dragging. </simpara> </listitem> </varlistentry> <varlistentry> <term>stopDrag()</term> <listitem> <simpara> Stop dragging my heart around. And this movie clip, too. </simpara> </listitem> </varlistentry> <varlistentry> <term>callFrame(expr)</term> <listitem> <simpara> Call the named frame as a function. </simpara> </listitem> </varlistentry> <varlistentry> <term>getURL(url, target, [method])</term> <listitem> <simpara> Load the given url into the named target. The target argument can be a frame name (I think), or one of the magical values "_level0" (replaces current movie) or "_level1" (loads new movie on top of current movie). The optional method argument can be post or get if you want to submit variables back to the server. </simpara> </listitem> </varlistentry> <varlistentry> <term>loadMovie(url, target)</term> <listitem> <simpara> Same as above, more or less. Come to think of it, I don't quite know what the difference is. </simpara> </listitem> </varlistentry> <varlistentry> <term>nextFrame()</term> <listitem> <simpara> Go to the next frame. </simpara> </listitem> </varlistentry> <varlistentry> <term>prevFrame()</term> <listitem> <simpara> Go to the last (or, rather, previous) frame. </simpara> </listitem> </varlistentry> <varlistentry> <term>play()</term> <listitem> <simpara> Start playing the movie. </simpara> </listitem> </varlistentry> <varlistentry> <term>stop()</term> <listitem> <simpara> Stop playing the movie. </simpara> </listitem> </varlistentry> <varlistentry> <term>toggleQuality()</term> <listitem> <simpara> Toggle between high and low quality. </simpara> </listitem> </varlistentry> <varlistentry> <term>stopSounds()</term> <listitem> <simpara> Stop playing all sounds. </simpara> </listitem> </varlistentry> <varlistentry> <term>gotoFrame(num)</term> <listitem> <simpara> Go to frame number num. Frame numbers start at 0. </simpara> </listitem> </varlistentry> <varlistentry> <term>gotoFrame(name)</term> <listitem> <simpara> Go to the frame named name. Which does a lot of good, since I haven't added frame labels yet. </simpara> </listitem> </varlistentry> <varlistentry> <term>setTarget(expr)</term> <listitem> <simpara> Sets the context for action. Or so they say- I really have no idea what this does. </simpara> </listitem> </varlistentry> </variablelist> And there's one weird extra thing. The expression frameLoaded(num) can be used in if statements and while loops to check if the given frame number has been loaded yet. Well, it's supposed to, anyway, but I've never tested it and I seriously doubt it actually works. You can just use /:framesLoaded instead. </para> <para> Movie clips (all together now- aka sprites) have properties. You can read all of them (or can you?), you can set some of them, and here they are: <itemizedlist> <listitem> <simpara> x </simpara> </listitem> <listitem> <simpara> y </simpara> </listitem> <listitem> <simpara> xScale </simpara> </listitem> <listitem> <simpara> yScale </simpara> </listitem> <listitem> <simpara> currentFrame - (read-only) </simpara> </listitem> <listitem> <simpara> totalFrames - (read-only) </simpara> </listitem> <listitem> <simpara> alpha - transparency level </simpara> </listitem> <listitem> <simpara> visible - 1=on, 0=off (?) </simpara> </listitem> <listitem> <simpara> width - (read-only) </simpara> </listitem> <listitem> <simpara> height - (read-only) </simpara> </listitem> <listitem> <simpara> rotation </simpara> </listitem> <listitem> <simpara> target - (read-only) (???) </simpara> </listitem> <listitem> <simpara> framesLoaded - (read-only) </simpara> </listitem> <listitem> <simpara> name </simpara> </listitem> <listitem> <simpara> dropTarget - (read-only) (???) </simpara> </listitem> <listitem> <simpara> url - (read-only) (???) </simpara> </listitem> <listitem> <simpara> highQuality - 1=high, 0=low (?) </simpara> </listitem> <listitem> <simpara> focusRect - (???) </simpara> </listitem> <listitem> <simpara> soundBufTime - (???) </simpara> </listitem> </itemizedlist> So, setting a sprite's x position is as simple as <literal>/box.x = 100;</literal>. Why the slash in front of the box, though? That's how flash keeps track of the sprites in the movie, just like a unix filesystem- here it shows that box is at the top level. If the sprite named box had another sprite named biff inside of it, you'd set its x position with /box/biff.x = 100;. At least, I think so; correct me if I'm wrong here. </para> <para> This simple example will move the red square across the window. <example> <title><function>swfaction</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); $f = $s->addFill(0xff, 0, 0); $s->setRightFill($f); $s->movePenTo(-500,-500); $s->drawLineTo(500,-500); $s->drawLineTo(500,500); $s->drawLineTo(-500,500); $s->drawLineTo(-500,-500); $p = new SWFSprite(); $i = $p->add($s); $i->setDepth(1); $p->nextFrame(); for($n=0; $n<5; ++$n) { $i->rotate(-15); $p->nextFrame(); } $m = new SWFMovie(); $m->setBackground(0xff, 0xff, 0xff); $m->setDimension(6000,4000); $i = $m->add($p); $i->setDepth(1); $i->moveTo(-500,2000); $i->setName("box"); $m->add(new SWFAction("/box.x += 3;")); $m->nextFrame(); $m->add(new SWFAction("gotoFrame(0); play();")); $m->nextFrame(); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> This simple example tracks down your mouse on the screen. <example> <title><function>swfaction</function> example</title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setRate(36.0); $m->setDimension(1200, 800); $m->setBackground(0, 0, 0); /* mouse tracking sprite - empty, but follows mouse so we can get its x and y coordinates */ $i = $m->add(new SWFSprite()); $i->setName('mouse'); $m->add(new SWFAction(" startDrag('/mouse', 1); /* '1' means lock sprite to the mouse */ ")); /* might as well turn off antialiasing, since these are just squares. */ $m->add(new SWFAction(" this.quality = 0; ")); /* morphing box */ $r = new SWFMorph(); $s = $r->getShape1(); /* Note this is backwards from normal shapes. No idea why. */ $s->setLeftFill($s->addFill(0xff, 0xff, 0xff)); $s->movePenTo(-40, -40); $s->drawLine(80, 0); $s->drawLine(0, 80); $s->drawLine(-80, 0); $s->drawLine(0, -80); $s = $r->getShape2(); $s->setLeftFill($s->addFill(0x00, 0x00, 0x00)); $s->movePenTo(-1, -1); $s->drawLine(2, 0); $s->drawLine(0, 2); $s->drawLine(-2, 0); $s->drawLine(0, -2); /* sprite container for morphing box - this is just a timeline w/ the box morphing */ $box = new SWFSprite(); $box->add(new SWFAction(" stop(); ")); $i = $box->add($r); for($n=0; $n<=20; ++$n) { $i->setRatio($n/20); $box->nextFrame(); } /* this container sprite allows us to use the same action code many times */ $cell = new SWFSprite(); $i = $cell->add($box); $i->setName('box'); $cell->add(new SWFAction(" setTarget('box'); /* ...x means the x coordinate of the parent, i.e. (..).x */ dx = (/mouse.x + random(6)-3 - ...x)/5; dy = (/mouse.y + random(6)-3 - ...y)/5; gotoFrame(int(dx*dx + dy*dy)); ")); $cell->nextFrame(); $cell->add(new SWFAction(" gotoFrame(0); play(); ")); $cell->nextFrame(); /* finally, add a bunch of the cells to the movie */ for($x=0; $x<12; ++$x) { for($y=0; $y<8; ++$y) { $i = $m->add($cell); $i->moveTo(100*$x+50, 100*$y+50); } } $m->nextFrame(); $m->add(new SWFAction(" gotoFrame(1); play(); ")); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> Same as above, but with nice colored balls... <example> <title><function>swfaction</function> example</title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setDimension(11000, 8000); $m->setBackground(0x00, 0x00, 0x00); $m->add(new SWFAction("this.quality = 0;/frames.visible = 0;startDrag('/mouse', 1); ")); // mouse tracking sprite $t = new SWFSprite(); $i = $m->add($t); $i->setName('mouse'); $g = new SWFGradient(); $g->addEntry(0, 0xff, 0xff, 0xff, 0xff); $g->addEntry(0.1, 0xff, 0xff, 0xff, 0xff); $g->addEntry(0.5, 0xff, 0xff, 0xff, 0x5f); $g->addEntry(1.0, 0xff, 0xff, 0xff, 0); // gradient shape thing $s = new SWFShape(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.03); $s->setRightFill($f); $s->movePenTo(-600, -600); $s->drawLine(1200, 0); $s->drawLine(0, 1200); $s->drawLine(-1200, 0); $s->drawLine(0, -1200); // need to make this a sprite so we can multColor it $p = new SWFSprite(); $p->add($s); $p->nextFrame(); // put the shape in here, each frame a different color $q = new SWFSprite(); $q->add(new SWFAction("gotoFrame(random(7)+1); stop();")); $i = $q->add($p); $i->multColor(1.0, 1.0, 1.0); $q->nextFrame(); $i->multColor(1.0, 0.5, 0.5); $q->nextFrame(); $i->multColor(1.0, 0.75, 0.5); $q->nextFrame(); $i->multColor(1.0, 1.0, 0.5); $q->nextFrame(); $i->multColor(0.5, 1.0, 0.5); $q->nextFrame(); $i->multColor(0.5, 0.5, 1.0); $q->nextFrame(); $i->multColor(1.0, 0.5, 1.0); $q->nextFrame(); // finally, this one contains the action code $p = new SWFSprite(); $i = $p->add($q); $i->setName('frames'); $p->add(new SWFAction("dx = (/:mousex-/:lastx)/3 + random(10)-5;dy = (/:mousey-/:lasty)/3;x = /:mousex;y = /:mousey;alpha = 100; ")); $p->nextFrame(); $p->add(new SWFAction("this.x = x;this.y = y;this.alpha = alpha;x += dx;y += dy;dy += 3;alpha -= 8; ")); $p->nextFrame(); $p->add(new SWFAction("prevFrame(); play();")); $p->nextFrame(); $i = $m->add($p); $i->setName('frames'); $m->nextFrame(); $m->add(new SWFAction("lastx = mousex;lasty = mousey;mousex = /mouse.x;mousey = /mouse.y;++num;if(num == 11) num = 1;removeClip('char' & num);duplicateClip(/frames, 'char' & num, num); ")); $m->nextFrame(); $m->add(new SWFAction("prevFrame(); play();")); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> This simple example will handles keyboard actions. (You'll probably have to click in the window to give it focus. And you'll probably have to leave your mouse in the frame, too. If you know how to give buttons focus programatically, feel free to share, won't you?) <example> <title><function>swfaction</function> example</title> <programlisting role="php"><?php /* sprite has one letter per frame */ $p = new SWFSprite(); $p->add(new SWFAction("stop();")); $chars = "abcdefghijklmnopqrstuvwxyz". "ABCDEFGHIJKLMNOPQRSTUVWXYZ". "1234567890!@#$%^&*()_+-=/[]{}|;:,.<>?`~"; $f = new SWFFont("_sans"); for($n=0; $n < strlen($chars); ++$n) { $c = substr($chars, $n, 1); if($i) $p->remove($i); $t = new SWFTextField(); $t->setFont($f); $t->setHeight(240); $t->setBounds(600,240); $t->align(SWFTEXTFIELD_ALIGN_CENTER); $t->addString($c); $i = $p->add($t); $p->labelFrame($c); $p->nextFrame(); } /* hit region for button - the entire frame */ $s = new SWFShape(); $s->setFillStyle0($s->addSolidFill(0, 0, 0, 0)); $s->drawLine(600, 0); $s->drawLine(0, 400); $s->drawLine(-600, 0); $s->drawLine(0, -400); /* button checks for pressed key, sends sprite to the right frame */ $b = new SWFButton(); $b->addShape($s, SWFBUTTON_HIT); for($n=0; $naddAction(new SWFAction("setTarget('/char');gotoFrame('$c'); "), SWFBUTTON_KEYPRESS($c)); } $m = new SWFMovie(); $m->setDimension(600,400); $i = $m->add($p); $i->setName('char'); $i->moveTo(0,80); $m->add($b); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> </reference><!-- Keep this comment at the end of the fileLocal variables:mode: sgmlsgml-omittag:tsgml-shorttag:tsgml-minimize-attributes:nilsgml-always-quote-attributes:tsgml-indent-step:1sgml-indent-data:tsgml-parent-document:nilsgml-default-dtd-file:"../../manual.ced"sgml-exposed-tags:nilsgml-local-catalogs:nilsgml-local-ecat-files:nilEnd:vim600: syn=xml fen fdm=syntax fdl=2 sivim: et tw=78 syn=sgmlvi: ts=1 sw=1--> \ No newline at end of file +<?xml encoding="iso-8859-1"?> +<!-- $Revision: 1.24 $ --> + <reference id="ref.ming"> + <title>Ming functions for Flash</title> + <titleabbrev>Ming (flash)</titleabbrev> + + <partintro> + &warn.experimental; + <sect1 id="ming.intro"> + <title>Introduction</title> + <simpara> + Ming is an open-source (LGPL) library which allows you to create SWF + ("Flash") format movies. Ming supports almost all of Flash 4's features, + including: shapes, gradients, bitmaps (pngs and jpegs), morphs ("shape + tweens"), text, buttons, actions, sprites ("movie clips"), streaming mp3, + and color transforms--the only thing that's missing is sound events. + </simpara> + <simpara> + Ming is not an acronym. + </simpara> + <simpara> + Note that all values specifying length, distance, size, etc. are in "twips", + twenty units per pixel. That's pretty much arbitrary, though, since the player + scales the movie to whatever pixel size is specified in the embed/object tag, + or the entire frame if not embedded. + </simpara> + <simpara> + Ming offers a number of advantages over the existing PHP/libswf module. + You can use Ming anywhere you can compile the code, whereas libswf is + closed-source and only available for a few platforms, Windows not one of + them. Ming provides some insulation from the mundane details of the SWF + file format, wrapping the movie elements in PHP objects. Also, Ming is + still being maintained; if there's a feature that you want to see, just + let us know <ulink url="mailto:&email.ming;">&email.ming;</ulink>. + </simpara> + <simpara> + Ming was added in PHP 4.0.5. + </simpara> + </sect1> + + <sect1 id="ming.install"> + <title>Installation</title> + <para> + To use Ming with PHP, you first need to build and install the Ming + library. Source code and installation instructions are available at the + Ming home page : <ulink url="&url.ming;">&url.ming;</ulink> + along with examples, a small tutorial, and the latest news. + </para> + <para> + Download the ming archive. Unpack the archive. Go in the + Ming directory. make. make install. + </para> + <para> + This will build <filename>libming.so</filename> and install it + into <filename>/usr/lib/</filename>, and copy + <filename>ming.h</filename> into <filename>/usr/include/</filename>. + Edit the <literal>PREFIX=</literal> line in the + <filename>Makefile</filename> to change the installation directory. + </para> + <sect2 id="ming.install.php.unix"> + <title>built into php (unix)</title> + <para> + <literallayout> + mkdir <phpdir>/ext/ming + cp php_ext/* <phpdir>/ext/ming + cd <phpdir> + ./buildconf + ./configure --with-ming <other config options> + </literallayout> + Build and install php as usual, + Restart web server if necessary + </para> + </sect2> + <sect2 id="ming.install.php-module.unix"> + <title>built into php (unix)</title> + <para> + download <filename>php_ming.so.gz</filename>. + uncompress it and copy it to your php modules directory. + (you can find your php module directory by running + <command>php-config --extension-dir</command>). + Now either just add <literal>extension=php_ming.so</literal> + to your <filename>php.ini</filename> file, or put + <literal>dl('php_ming.so');</literal> at the head of all of your + Ming scripts. + </para> + </sect2> + </sect1> + <sect1 id="ming.use"> + <title>How to use Ming</title> + <simpara> + Ming introduces 13 new object in PHP, all with matching methods and + attributes. To use them, you need to know about + <link linkend="language.oop">objects</link>. + </simpara> + <itemizedlist> + <listitem> + <simpara> + <function>swfmovie</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfshape</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfdisplayitem</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfgradient</function>. + </simpara> + </listitem> + + <listitem> + <simpara> + <function>swfbitmap</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swffill</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfmorph</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swftext</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swffont</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swftextfield</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfsprite</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfbutton</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfaction</function>. + </simpara> + </listitem> + </itemizedlist> + </sect1> + </partintro> + +<!-- SWFMovie --> + + <refentry id="function.swfmovie"> + <refnamediv> + <refname>SWFMovie</refname> + <refpurpose>Creates a new movie object, representing an SWF version 4 movie.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfmovie</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie</function> creates a new movie object, + representing an SWF version 4 movie. + </para> + <simpara> + SWFMovie has the following methods : + <function>swfmovie->output</function>,<function>swfmovie->save</function>, + <function>swfmovie->add</function>, <function>swfmovie->remove</function>, + <function>swfmovie->nextframe</function>, <function>swfmovie->setbackground</function>, + <function>swfmovie->setrate</function>, <function>swfmovie->setdimension</function>, + <function>swfmovie->setframes</function> and <function>swfmovie->streammp3</function>. + </simpara> + <simpara> + See examples in : + <function>swfdisplayitem->rotateto</function>, <function>swfshape->setline</function>, + <function>swfshape->addfill</function>... Any example will use this object. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.output"> + <refnamediv> + <refname>SWFMovie->output</refname> + <refpurpose>Dumps your lovingly prepared movie out.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->output</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->output</function> dumps your lovingly prepared movie out. + In PHP, preceding this with the command + <programlisting role="php"> +<?php +header('Content-type: application/x-shockwave-flash'); +?> + </programlisting> + convinces the browser to display this as a flash movie. + </para> + <simpara> + See also + <function>swfmovie->save</function>. + </simpara> + <simpara> + See examples in : + <function>swfmovie->streammp3</function>, + <function>swfdisplayitem->rotateto</function>, + <function>swfaction</function>... + Any example will use this method. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.save"> + <refnamediv> + <refname>SWFMovie->save</refname> + <refpurpose>Saves your movie in a file.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->save</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->save</function> saves your movie to the + file named <parameter>filename</parameter>. + </para> + <simpara> + See also + <function>output</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.add"> + <refnamediv> + <refname>SWFMovie->add</refname> + <refpurpose>Adds any type of data to a movie.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->add</function></funcdef> + <paramdef>ressource <parameter>instance</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->add</function> adds <parameter>instance</parameter> to + the current movie. <parameter>instance</parameter> is any type of data : + Shapes, text, fonts, etc. must all be add'ed to the movie to make this work. + </para> + <para> + For displayable types (shape, text, button, sprite), this returns an + <function>SWFDisplayItem</function>, a handle to the object in a display + list. Thus, you can add the same shape to a movie multiple + times and get separate handles back for each separate instance. + </para> + <simpara> + See also all other objects (adding this later), and + <function>swfmovie->remove</function> + </simpara> + <simpara> + See examples in : + <function>swfdisplayitem->rotateto</function> and + <function>swfshape->addfill</function>. + </simpara> + + </refsect1> + </refentry> + + <refentry id="function.swfmovie.remove"> + <refnamediv> + <refname>SWFMovie->remove</refname> + <refpurpose>Removes the object instance from the display list.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->remove</function></funcdef> + <paramdef>resource <parameter>instance</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->remove</function> removes the object instance + <parameter>instance</parameter> from the display list. + </para> + <simpara> + See also + <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setbackground"> + <refnamediv> + <refname>SWFMovie->setbackground</refname> + <refpurpose>Sets the background color.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setbackground</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->setbackground</function> sets the background color. Why is + there no rgba version? Think about it. (Actually, that's not such a dumb + question after all- you might want to let the html background show through. + There's a way to do that, but it only works on IE4. Search the + <ulink url="&url.macromedia;">&url.macromedia;</ulink> site for + details.) + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setrate"> + <refnamediv> + <refname>SWFMovie->setrate</refname> + <refpurpose>Sets the animation's frame rate.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setrate</function></funcdef> + <paramdef>int <parameter>rate</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->setrate</function> sets the frame rate to + <parameter>rate</parameter>, in frame per seconds. + Animation will slow down if the player can't render frames fast enough- unless + there's a streaming sound, in which case display frames are sacrificed to + keep sound from skipping. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setdimension"> + <refnamediv> + <refname>SWFMovie->setdimension</refname> + <refpurpose>Sets the movie's width and height.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setdimension</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->setdimension</function> sets the movie's width + to <parameter>width</parameter> and height to <parameter>height</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setframes"> + <refnamediv> + <refname>SWFMovie->setframes</refname> + <refpurpose>Sets the total number of frames in the animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setframes</function></funcdef> + <paramdef>string <parameter>numberofframes</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->setframes</function> sets the total number of frames + in the animation to <parameter>numberofframes</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.nextframe"> + <refnamediv> + <refname>SWFMovie->nextframe</refname> + <refpurpose>Moves to the next frame of the animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->nextframe</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->setframes</function> moves to the next frame of + the animation. + </para> + </refsect1> + </refentry> + + + <refentry id="function.swfmovie.streammp3"> + <refnamediv> + <refname>SWFMovie->streammp3</refname> + <refpurpose>Streams a MP3 file.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->streammp3</function></funcdef> + <paramdef>string <parameter>mp3FileName</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->streammp3</function> streams the mp3 file + <parameter>mp3FileName</parameter>. Not very robust in dealing with + oddities (can skip over an initial ID3 tag, but that's about it). + Like <function>SWFShape->addJpegFill</function>, this isn't a stable function- we'll + probably need to make a separate SWFSound object to contain sound types. + </para> + <para> + Note that the movie isn't smart enough to put enough frames in to contain + the entire mp3 stream- you'll have to add (length of song * frames per second) + frames to get the entire stream in. + </para> + <para> + Yes, now you can use ming to put that rock and roll devil worship music + into your SWF files. Just don't tell the RIAA. + <example> + <title><function>swfmovie->streammp3</function> example</title> + <programlisting role="php"> +<?php + $m = new SWFMovie(); + $m->setRate(12.0); + $m->streamMp3("distortobass.mp3"); +// use your own MP3 + + // 11.85 seconds at 12.0 fps = 142 frames + $m->setFrames(142); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + +<!-- SWFDisplayItem --> + + <refentry id="function.swfdisplayitem"> + <refnamediv> + <refname>SWFDisplayItem</refname> + <refpurpose>Creates a new displayitem object.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfdisplayitem</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem</function> creates a new swfdisplayitem object. + </para> + <para> + Here's where all the animation takes place. After you define a shape, + a text object, a sprite, or a button, you add it to the movie, then use + the returned handle to move, rotate, scale, or skew the thing. + </para> + <simpara> + SWFDisplayItem has the following methods : <function>swfdisplayitem->move</function>, + <function>swfdisplayitem->moveto</function>, <function>swfdisplayitem->scaleto</function>, + <function>swfdisplayitem->scale</function>, <function>swfdisplayitem->rotate</function>, + <function>swfdisplayitem->rotateto</function>, <function>swfdisplayitem->skewxto</function>, + <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewyto</function> + <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->setdepth</function> + <function>swfdisplayitem->remove</function>, <function>swfdisplayitem->setname</function> + <function>swfdisplayitem->setratio</function>, <function>swfdisplayitem->addcolor</function> + and <function>swfdisplayitem->multcolor</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.moveto"> + <refnamediv> + <refname>SWFDisplayItem->moveTo</refname> + <refpurpose>Moves object in global coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->moveto</function> moves the current object to + (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->move</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.move"> + <refnamediv> + <refname>SWFDisplayItem->move</refname> + <refpurpose>Moves object in relative coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->move</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->move</function> moves the current object by + (<parameter>dx</parameter>,<parameter>dy</parameter>) from its + current position. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->moveto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.scaleto"> + <refnamediv> + <refname>SWFDisplayItem->scaleTo</refname> + <refpurpose>Scales the object in global coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->scaleto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->scaleto</function> scales the current object to + (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->scale</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.scale"> + <refnamediv> + <refname>SWFDisplayItem->scale</refname> + <refpurpose>Scales the object in relative coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->scale</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->scale</function> scales the current object by + (<parameter>dx</parameter>,<parameter>dy</parameter>) from its + current size. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->scaleto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.rotateto"> + <refnamediv> + <refname>SWFDisplayItem->rotateTo</refname> + <refpurpose>Rotates the object in global coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->rotateto</function></funcdef> + <paramdef>float <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->rotateto</function> set the current object + rotation to <parameter>degrees</parameter> degrees in global coordinates. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <para> + This example bring three rotating string from the background to the + foreground. Pretty nice. + <example> + <title><function>swfdisplayitem->rotateto</function> example</title> + <programlisting role="php"> +<?php + $thetext = "ming!"; + + $f = new SWFFont("Bauhaus 93.fdb"); + + $m = new SWFMovie(); + $m->setRate(24.0); + $m->setDimension(2400, 1600); + $m->setBackground(0xff, 0xff, 0xff); + + // functions with huge numbers of arbitrary + // arguments are always a good idea! Really! + + function text($r, $g, $b, $a, $rot, $x, $y, $scale, $string) + { + global $f, $m; + + $t = new SWFText(); + $t->setFont($f); + $t->setColor($r, $g, $b, $a); + $t->setHeight(960); + $t->moveTo(-($f->getWidth($string))/2, $f->getAscent()/2); + $t->addString($string); + + // we can add properties just like a normal php var, + // as long as the names aren't already used. + // e.g., we can't set $i->scale, because that's a function + + $i = $m->add($t); + $i->x = $x; + $i->y = $y; + $i->rot = $rot; + $i->s = $scale; + $i->rotateTo($rot); + $i->scale($scale, $scale); + + // but the changes are local to the function, so we have to + // return the changed object. kinda weird.. + + return $i; + } + + function step($i) + { + $oldrot = $i->rot; + $i->rot = 19*$i->rot/20; + $i->x = (19*$i->x + 1200)/20; + $i->y = (19*$i->y + 800)/20; + $i->s = (19*$i->s + 1.0)/20; + + $i->rotateTo($i->rot); + $i->scaleTo($i->s, $i->s); + $i->moveTo($i->x, $i->y); + + return $i; + } + + // see? it sure paid off in legibility: + + $i1 = text(0xff, 0x33, 0x33, 0xff, 900, 1200, 800, 0.03, $thetext); + $i2 = text(0x00, 0x33, 0xff, 0x7f, -560, 1200, 800, 0.04, $thetext); + $i3 = text(0xff, 0xff, 0xff, 0x9f, 180, 1200, 800, 0.001, $thetext); + + for($i=1; $i<=100; ++$i) + { + $i1 = step($i1); + $i2 = step($i2); + $i3 = step($i3); + + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <simpara> + See also + <function>swfdisplayitem->rotate</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.rotate"> + <refnamediv> + <refname>SWFDisplayItem->Rotate</refname> + <refpurpose>Rotates in relative coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->rotate</function></funcdef> + <paramdef>float <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->rotate</function> rotates the current object + by <parameter>ddegrees</parameter> degrees from its current rotation. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->rotateto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewxto"> + <refnamediv> + <refname>SWFDisplayItem->skewXTo</refname> + <refpurpose>Sets the X-skew.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewxto</function></funcdef> + <paramdef>float <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->skewxto</function> sets the + x-skew to <parameter>degrees</parameter>. For <parameter>degrees</parameter> + is 1.0, it means a 45-degree forward slant. More is more forward, + less is more backward. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->skewx</function>, + <function>swfdisplayitem->skewy</function> and + <function>swfdisplayitem->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewx"> + <refnamediv> + <refname>SWFDisplayItem->skewX</refname> + <refpurpose>Sets the X-skew.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewx</function></funcdef> + <paramdef>float <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->skewx</function> adds <parameter>ddegrees</parameter> + to current x-skew. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->skewx</function>, + <function>swfdisplayitem->skewy</function> and + <function>swfdisplayitem->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewyto"> + <refnamediv> + <refname>SWFDisplayItem->skewYTo</refname> + <refpurpose>Sets the Y-skew.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewyto</function></funcdef> + <paramdef>float <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->skewyto</function> sets the + y-skew to <parameter>degrees</parameter>. For <parameter>degrees</parameter> + is 1.0, it means a 45-degree forward slant. More is more upward, + less is more downward. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->skewy</function>, + <function>swfdisplayitem->skewx</function> and + <function>swfdisplayitem->skewxto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewy"> + <refnamediv> + <refname>SWFDisplayItem->skewY</refname> + <refpurpose>Sets the Y-skew.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewy</function></funcdef> + <paramdef>float <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->skewy</function> adds <parameter>ddegrees</parameter> + to current y-skew. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->skewyto</function>, + <function>swfdisplayitem->skewx</function> and + <function>swfdisplayitem->skewxto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setdepth"> + <refnamediv> + <refname>SWFDisplayItem->setDepth</refname> + <refpurpose>Sets z-order</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setdepth</function></funcdef> + <paramdef>float <parameter>depth</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->rotate</function> sets the object's + z-order to <parameter>depth</parameter>. Depth defaults to the + order in which instances are created (by add'ing a shape/text to + a movie)- newer ones are on top of older ones. If two objects are + given the same depth, only the later-defined one can be moved. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.remove"> + <refnamediv> + <refname>SWFDisplayItem->remove</refname> + <refpurpose>Removes the object from the movie</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->remove</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->remove</function> removes this object from + the movie's display list. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setname"> + <refnamediv> + <refname>SWFDisplayItem->setName</refname> + <refpurpose>Sets the object's name</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setname</function></funcdef> + <paramdef>string <parameter>name</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->setname</function> sets the object's name to + <parameter>name</parameter>, for targetting with action script. + Only useful on sprites. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setratio"> + <refnamediv> + <refname>SWFDisplayItem->setRatio</refname> + <refpurpose>Sets the object's ratio.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setratio</function></funcdef> + <paramdef>float <parameter>ratio</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->setratio</function> sets the object's ratio + to <parameter>ratio</parameter>. Obviously only useful for morphs. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <para> + This simple example will morph nicely three concentric circles. + <example> + <title><function>swfdisplayitem->setname</function> example</title> + <programlisting role="php"> +<?php + + $p = new SWFMorph(); + + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(0.16, 0xff, 0xff, 0xff); + $g->addEntry(0.32, 0, 0, 0); + $g->addEntry(0.48, 0xff, 0xff, 0xff); + $g->addEntry(0.64, 0, 0, 0); + $g->addEntry(0.80, 0xff, 0xff, 0xff); + $g->addEntry(1.00, 0, 0, 0); + + $s = $p->getShape1(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.05); + $s->setLeftFill($f); + $s->movePenTo(-160, -120); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(0.16, 0xff, 0, 0); + $g->addEntry(0.32, 0, 0, 0); + $g->addEntry(0.48, 0, 0xff, 0); + $g->addEntry(0.64, 0, 0, 0); + $g->addEntry(0.80, 0, 0, 0xff); + $g->addEntry(1.00, 0, 0, 0); + + $s = $p->getShape2(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.05); + $f->skewXTo(1.0); + $s->setLeftFill($f); + $s->movePenTo(-160, -120); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m = new SWFMovie(); + $m->setDimension(320, 240); + $i = $m->add($p); + $i->moveTo(160, 120); + + for($n=0; $n<=1.001; $n+=0.01) + { + $i->setRatio($n); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.addcolor"> + <refnamediv> + <refname>SWFDisplayItem->addColor</refname> + <refpurpose>Adds the given color to this item's color transform.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->addcolor</function></funcdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->addcolor</function> adds the color to + this item's color transform. The color is given in its RGB form. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.multcolor"> + <refnamediv> + <refname>SWFDisplayItem->multColor</refname> + <refpurpose>Multiplies the item's color transform.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->multcolor</function></funcdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->multcolor</function> multiplies the item's + color transform by the given values. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <para> + This simple example will modify your picture's atmospher + to Halloween (use a landscape or bright picture). + <example> + <title><function>swfdisplayitem->multcolor</function> example</title> + <programlisting role="php"> +<?php + + $b = new SWFBitmap("backyard.jpg"); + // note use your own picture :-) + $s = new SWFShape(); + $s->setRightFill($s->addFill($b)); + $s->drawLine($b->getWidth(), 0); + $s->drawLine(0, $b->getHeight()); + $s->drawLine(-$b->getWidth(), 0); + $s->drawLine(0, -$b->getHeight()); + + $m = new SWFMovie(); + $m->setDimension($b->getWidth(), $b->getHeight()); + + $i = $m->add($s); + + for($n=0; $n<=20; ++$n) + { + $i->multColor(1.0-$n/10, 1.0, 1.0); + $i->addColor(0xff*$n/20, 0, 0); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + +<!-- SWFShape --> + + <refentry id="function.swfshape"> + <refnamediv> + <refname>SWFShape</refname> + <refpurpose>Creates a new shape object.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfshape</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfshape</function> creates a new shape object. + </para> + <simpara> + SWFShape has the following methods : <function>swfshape->setline</function>, + <function>swfshape->addfill</function>, <function>swfshape->setleftfill</function>, + <function>swfshape->setrightfill</function>, <function>swfshape->movepento</function>, + <function>swfshape->movepen</function>, <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, <function>swfshape->drawcurveto</function> + and <function>swfshape->drawcurve</function>. + </simpara> + <para> + This simple example will draw a big red elliptic quadrant. + <example> + <title><function>swfshape</function> example</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $s->setLine(40, 0x7f, 0, 0); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(200, 200); + $s->drawLineTo(6200, 200); + $s->drawLineTo(6200, 4600); + $s->drawCurveTo(200, 4600, 200, 200); + + $m = new SWFMovie(); + $m->setDimension(6400, 4800); + $m->setRate(12.0); + $m->add($s); + $m->nextFrame(); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setline"> + <refnamediv> + <refname>SWFShape->setLine</refname> + <refpurpose>Sets the shape's line style.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setline</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfshape->setline</function> sets the shape's line style. + <parameter>width</parameter> is the line's width. If <parameter>width</parameter> + is 0, the line's style is removed (then, all other arguments are ignored). + If <parameter>width</parameter> > 0, then line's color is set to + <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter>. + Last parameter <parameter>a</parameter> is optional. + </para> + <simpara> + <function>swfshape->setline</function> accepts 1, 4 or 5 arguments + (not 3 or 2). + </simpara> + <para> + You must declare all line styles before you use them (see example). + </para> + <para> + This simple example will draw a big "!#%*@", in funny colors and + gracious style. + <example> + <title><function>swfshape->setline</function> example</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f1 = $s->addFill(0xff, 0, 0); + $f2 = $s->addFill(0xff, 0x7f, 0); + $f3 = $s->addFill(0xff, 0xff, 0); + $f4 = $s->addFill(0, 0xff, 0); + $f5 = $s->addFill(0, 0, 0xff); + + // bug: have to declare all line styles before you use them + $s->setLine(40, 0x7f, 0, 0); + $s->setLine(40, 0x7f, 0x3f, 0); + $s->setLine(40, 0x7f, 0x7f, 0); + $s->setLine(40, 0, 0x7f, 0); + $s->setLine(40, 0, 0, 0x7f); + + $f = new SWFFont('Techno.fdb'); + + $s->setRightFill($f1); + $s->setLine(40, 0x7f, 0, 0); + $s->drawGlyph($f, '!'); + $s->movePen($f->getWidth('!'), 0); + + $s->setRightFill($f2); + $s->setLine(40, 0x7f, 0x3f, 0); + $s->drawGlyph($f, '#'); + $s->movePen($f->getWidth('#'), 0); + + $s->setRightFill($f3); + $s->setLine(40, 0x7f, 0x7f, 0); + $s->drawGlyph($f, '%'); + $s->movePen($f->getWidth('%'), 0); + + $s->setRightFill($f4); + $s->setLine(40, 0, 0x7f, 0); + $s->drawGlyph($f, '*'); + $s->movePen($f->getWidth('*'), 0); + + $s->setRightFill($f5); + $s->setLine(40, 0, 0, 0x7f); + $s->drawGlyph($f, '@'); + + $m = new SWFMovie(); + $m->setDimension(3000,2000); + $m->setRate(12.0); + $i = $m->add($s); + $i->moveTo(1500-$f->getWidth("!#%*@")/2, 1000+$f->getAscent()/2); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.addfill"> + <refnamediv> + <refname>SWFShape->addFill</refname> + <refpurpose>Adds a solid fill to the shape.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>SWFbitmap <parameter>bitmap</parameter></paramdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>SWFGradient <parameter>gradient</parameter></paramdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfshape->addfill</function> adds a solid fill to the shape's list + of fill styles. <function>swfshape->addfill</function> accepts three different + types of arguments. + </para> + <para> + <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> + is a color (RGB mode). Last parameter <parameter>a</parameter> is optional. + </para> + <para> + The <parameter>bitmap</parameter> argument is an <function>swfbitmap</function> object. + The <parameter>flags</parameter> argument can be one + of the following values : SWFFILL_CLIPPED_BITMAP or SWFFILL_TILED_BITMAP. + Default is SWFFILL_TILED_BITMAP. I think. + </para> + <para> + The <parameter>gradient</parameter> argument is an <function>swfgradient</function> + object. The flags argument can be one of the following values : + SWFFILL_RADIAL_GRADIENT or SWFFILL_LINEAR_GRADIENT. Default is + SWFFILL_LINEAR_GRADIENT. I'm sure about this one. Really. + </para> + <para> + <function>swfshape->addfill</function> returns an <function>swffill</function> + object for use with the <function>swfshape->setleftfill</function> + and <function>swfshape->setrightfill</function> functions + described below. + </para> + <simpara> + See also + <function>swfshape->setleftfill</function> and + <function>swfshape->setrightfill</function>. + </simpara> + <para> + This simple example will draw a frame on a bitmap. Ah, here's another buglet in + the flash player- it doesn't seem to care about the second shape's bitmap's + transformation in a morph. According to spec, the bitmap should stretch + along with the shape in this example.. + <example> + <title><function>swfshape->addfill</function> example</title> + <programlisting role="php"> +<?php + + $p = new SWFMorph(); + + $b = new SWFBitmap("alphafill.jpg"); + // use your own bitmap + $width = $b->getWidth(); + $height = $b->getHeight(); + + $s = $p->getShape1(); + $f = $s->addFill($b, SWFFILL_TILED_BITMAP); + $f->moveTo(-$width/2, -$height/4); + $f->scaleTo(1.0, 0.5); + $s->setLeftFill($f); + $s->movePenTo(-$width/2, -$height/4); + $s->drawLine($width, 0); + $s->drawLine(0, $height/2); + $s->drawLine(-$width, 0); + $s->drawLine(0, -$height/2); + + $s = $p->getShape2(); + $f = $s->addFill($b, SWFFILL_TILED_BITMAP); + + // these two have no effect! + $f->moveTo(-$width/4, -$height/2); + $f->scaleTo(0.5, 1.0); + + $s->setLeftFill($f); + $s->movePenTo(-$width/4, -$height/2); + $s->drawLine($width/2, 0); + $s->drawLine(0, $height); + $s->drawLine(-$width/2, 0); + $s->drawLine(0, -$height); + + $m = new SWFMovie(); + $m->setDimension($width, $height); + $i = $m->add($p); + $i->moveTo($width/2, $height/2); + + for($n=0; $n<1.001; $n+=0.03) + { + $i->setRatio($n); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setleftfill"> + <refnamediv> + <refname>SWFShape->setLeftFill</refname> + <refpurpose>Sets left rasterizing color.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setleftfill</function></funcdef> + <paramdef>swfgradient <parameter>fill</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setleftfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + What this nonsense is about is, every edge segment borders at most two fills. + When rasterizing the object, it's pretty handy to know what those fills are + ahead of time, so the swf format requires these to be specified. + </para> + <para> + <function>swfshape->setleftfill</function> sets the fill on the left side of + the edge- that is, on the interior if you're defining the outline of the shape in a counter-clockwise + fashion. The fill object is an SWFFill object returned from one of the addFill + functions above. + </para> + <para> + This seems to be reversed when you're defining a shape in a morph, though. + If your browser crashes, just try setting the fill on the other side. + </para> + <simpara> + Shortcut for <literal>swfshape->setleftfill($s->addfill($r, $g, $b [, $a]));</literal>. + </simpara> + <simpara> + See also + <function>swfshape->setrightfill</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setrightfill"> + <refnamediv> + <refname>SWFShape->setRightFill</refname> + <refpurpose>Sets right rasterizing color.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setrightfill</function></funcdef> + <paramdef>swfgradient <parameter>fill</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setrightfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + See also + <function>swfshape->setleftfill</function>. + </simpara> + <simpara> + Shortcut for <literal>swfshape->setrightfill($s->addfill($r, $g, $b [, $a]));</literal>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.movepento"> + <refnamediv> + <refname>SWFShape->movePenTo</refname> + <refpurpose>Moves the shape's pen.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->movepento</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->setrightfill</function> move the shape's pen to + (<parameter>x</parameter>,<parameter>y</parameter>) in the shape's + coordinate space. + </simpara> + <simpara> + See also + <function>swfshape->movepen</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->drawlineto</function> and + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.movepen"> + <refnamediv> + <refname>SWFShape->movePen</refname> + <refpurpose>Moves the shape's pen (relative).</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->movepen</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->setrightfill</function> move the shape's pen from + coordinates (current x,current y) to (current x + <parameter>dx</parameter>, + current y + <parameter>dy</parameter>) in the shape's coordinate space. + </simpara> + <simpara> + See also + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->drawlineto</function> and + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawlineto"> + <refnamediv> + <refname>SWFShape->drawLineTo</refname> + <refpurpose>Draws a line.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawlineto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->setrightfill</function> draws a line (using the + current line style, set by <function>swfshape->setline</function>) from the current + pen position to point (<parameter>x</parameter>,<parameter>y</parameter>) + in the shape's coordinate space. + </simpara> + <simpara> + See also + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->movepen</function> and + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawline"> + <refnamediv> + <refname>SWFShape->drawLine</refname> + <refpurpose>Draws a line (relative).</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawline</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->setrightfill</function> draws a line (using the current line style + set by <function>swfshape->setline</function>) from the current pen position to + displacement (<parameter>dx</parameter>,<parameter>dy</parameter>). + </simpara> + <simpara> + See also + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->movepen</function> and + <function>swfshape->drawlineto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawcurveto"> + <refnamediv> + <refname>SWFShape->drawCurveTo</refname> + <refpurpose>Draws a curve.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawcurveto</function></funcdef> + <paramdef>int <parameter>controlx</parameter></paramdef> + <paramdef>int <parameter>controly</parameter></paramdef> + <paramdef>int <parameter>anchorx</parameter></paramdef> + <paramdef>int <parameter>anchory</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->drawcurveto</function> draws a quadratic curve + (using the current line style, set by <function>swfshape->setline</function>) + from the current pen position to + (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) + using (<parameter>controlx</parameter>,<parameter>controly</parameter>) + as a control point. That is, head towards the control point, + then smoothly turn to the anchor point. + </simpara> + <simpara> + See also + <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, + <function>swfshape->movepento</function> and + <function>swfshape->movepen</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawcurve"> + <refnamediv> + <refname>SWFShape->drawCurve</refname> + <refpurpose>Draws a curve (relative).</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawcurve</function></funcdef> + <paramdef>int <parameter>controldx</parameter></paramdef> + <paramdef>int <parameter>controldy</parameter></paramdef> + <paramdef>int <parameter>anchordx</parameter></paramdef> + <paramdef>int <parameter>anchordy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->drawcurve</function> draws a quadratic curve + (using the current line style,set by <function>swfshape->setline</function>) + from the current pen position to the relative position + (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) + using relative control point + (<parameter>controlx</parameter>,<parameter>controly</parameter>). + That is, head towards the control point, then smoothly turn to the + anchor point. + </simpara> + <simpara> + See also + <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, + <function>swfshape->movepento</function> and + <function>swfshape->movepen</function>. + </simpara> + </refsect1> + </refentry> + +<!-- SWFGradient --> + + <refentry id="function.swfgradient"> + <refnamediv> + <refname>SWFGradient</refname> + <refpurpose>Creates a gradient object</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfgradient</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfgradient</function> creates a new SWFGradient object. + </para> + <simpara> + After you've added the entries to your gradient, you can use the gradient + in a shape fill with the <function>swfshape->addfill</function> method. + </simpara> + <simpara> + SWFGradient has the following methods : <function>swfgradient->addentry</function>. + </simpara> + <para> + This simple example will draw a big black-to-white gradient as background, + and a redish disc in its center. + <example> + <title><function>swfgradient</function> example</title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setDimension(320, 240); + + $s = new SWFShape(); + + // first gradient- black to white + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(1.0, 0xff, 0xff, 0xff); + + $f = $s->addFill($g, SWFFILL_LINEAR_GRADIENT); + $f->scaleTo(0.01); + $f->moveTo(160, 120); + $s->setRightFill($f); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m->add($s); + + $s = new SWFShape(); + + // second gradient- radial gradient from red to transparent + $g = new SWFGradient(); + $g->addEntry(0.0, 0xff, 0, 0, 0xff); + $g->addEntry(1.0, 0xff, 0, 0, 0); + + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.005); + $f->moveTo(160, 120); + $s->setRightFill($f); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfgradient.addentry"> + <refnamediv> + <refname>SWFGradient->addEntry</refname> + <refpurpose>Adds an entry to the gradient list.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfgradient->addentry</function></funcdef> + <paramdef>float <parameter>ratio</parameter></paramdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfgradient->addentry</function> adds an entry to the gradient list. + <parameter>ratio</parameter> is a number between 0 and 1 indicating where in + the gradient this color appears. Thou shalt add entries in order of increasing ratio. + </para> + <para> + <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> + is a color (RGB mode). Last parameter <parameter>a</parameter> is optional. + </para> + </refsect1> + </refentry> + +<!-- SWFBitmap --> + + <refentry id="function.swfbitmap"> + <refnamediv> + <refname>SWFBitmap</refname> + <refpurpose>Loads Bitmap object</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfbitmap</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + <paramdef>int <parameter><optional>alphafilename</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbitmap</function> creates a new SWFBitmap object from + the Jpeg or DBL file named <parameter>filename</parameter>. + <parameter>alphafilename</parameter> indicates a MSK file to + be used as an alpha mask for a Jpeg image. + </para> + <note> + <para> + We can only deal with baseline (frame 0) jpegs, no baseline optimized or + progressive scan jpegs! + </para> + </note> + <simpara> + SWFBitmap has the following methods : <function>swfbitmap->getwidth</function> + and <function>swfbitmap->getheight</function>. + </simpara> + <para> + You can't import png images directly, though- have to use the png2dbl + utility to make a dbl ("define bits lossless") file from the png. + The reason for this is that I don't want a dependency on the png library + in ming- autoconf should solve this, but that's not set up yet. + <example> + <title>Import PNG files</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f = $s->addFill(new SWFBitmap("png.dbl")); + $s->setRightFill($f); + + $s->drawLine(32, 0); + $s->drawLine(0, 32); + $s->drawLine(-32, 0); + $s->drawLine(0, -32); + + $m = new SWFMovie(); + $m->setDimension(32, 32); + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + And you can put an alpha mask on a jpeg fill. + <example> + <title><function>swfbitmap</function> example</title> + <programlisting role="php"> +<?php + + $s = new SWFShape(); + + // .msk file generated with "gif2mask" utility + $f = $s->addFill(new SWFBitmap("alphafill.jpg", "alphafill.msk")); + $s->setRightFill($f); + + $s->drawLine(640, 0); + $s->drawLine(0, 480); + $s->drawLine(-640, 0); + $s->drawLine(0, -480); + + $c = new SWFShape(); + $c->setRightFill($c->addFill(0x99, 0x99, 0x99)); + $c->drawLine(40, 0); + $c->drawLine(0, 40); + $c->drawLine(-40, 0); + $c->drawLine(0, -40); + + $m = new SWFMovie(); + $m->setDimension(640, 480); + $m->setBackground(0xcc, 0xcc, 0xcc); + + // draw checkerboard background + for($y=0; $y<480; $y+=40) + { + for($x=0; $x<640; $x+=80) + { + $i = $m->add($c); + $i->moveTo($x, $y); + } + + $y+=40; + + for($x=40; $x<640; $x+=80) + { + $i = $m->add($c); + $i->moveTo($x, $y); + } + } + + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbitmap.getwidth"> + <refnamediv> + <refname>SWFBitmap->getWidth</refname> + <refpurpose>Returns the bitmap's width.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swfbitmap->getwidth</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbitmap->getwidth</function> returns the bitmap's width in pixels. + </para> + <para> + See also + <function>swfbitmap->getheight</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbitmap.getheight"> + <refnamediv> + <refname>SWFBitmap->getHeight</refname> + <refpurpose>Returns the bitmap's height.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swfbitmap->getheight</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbitmap->getheight</function> returns the bitmap's height in pixels. + </para> + <para> + See also + <function>swfbitmap->getwidth</function>. + </para> + </refsect1> + </refentry> + +<!-- SWFFill --> + + <refentry id="function.swffill"> + <refnamediv> + <refname>SWFFill</refname> + <refpurpose>Loads SWFFill object</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <para> + The <function>swffill</function> object allows you to transform + (scale, skew, rotate) bitmap and gradient fills. <function>swffill</function> + objects are created by the <function>swfshape->addfill</function> methods. + </para> + <simpara> + SWFFill has the following methods : <function>swffill->moveto</function> + and <function>swffill->scaleto</function>, <function>swffill->rotateto</function>, + <function>swffill->skewxto</function> and <function>swffill->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swffill.moveto"> + <refnamediv> + <refname>SWFFill->moveTo</refname> + <refpurpose>Moves fill origin</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffill->moveto</function> moves fill's origin to + (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.scaleto"> + <refnamediv> + <refname>SWFFill->scaleTo</refname> + <refpurpose>Sets fill's scale</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->scaleto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffill->scaleto</function> sets fill's scale to + <parameter>x</parameter> in the x-direction, + <parameter>y</parameter> in the y-direction. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.rotateto"> + <refnamediv> + <refname>SWFFill->rotateTo</refname> + <refpurpose>Sets fill's rotation</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->rotateto</function></funcdef> + <paramdef>float <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffill->rotateto</function> sets fill's rotation to + <parameter>degrees</parameter> degrees. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.skewxto"> + <refnamediv> + <refname>SWFFill->skewXTo</refname> + <refpurpose>Sets fill x-skew</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->skewxto</function></funcdef> + <paramdef>float <parameter>x</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffill->skewxto</function> sets fill x-skew to <parameter>x</parameter>. + For <parameter>x</parameter> is 1.0, it is a is a 45-degree + forward slant. More is more forward, less is more backward. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.skewyto"> + <refnamediv> + <refname>SWFFill->skewYTo</refname> + <refpurpose>Sets fill y-skew</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->skewyto</function></funcdef> + <paramdef>float <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffill->skewyto</function> sets fill y-skew to <parameter>y</parameter>. + For <parameter>y</parameter> is 1.0, it is a is a 45-degree + upward slant. More is more upward, less is more downward. + </para> + </refsect1> + </refentry> + +<!-- SWFMorph --> + + <refentry id="function.swfmorph"> + <refnamediv> + <refname>SWFMorph</refname> + <refpurpose>Creates a new SWFMorph object.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfmorph</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmorph</function> creates a new SWFMorph object. + </para> + <para> + Also called a "shape tween". This thing lets you make those tacky + twisting things that make your computer choke. Oh, joy! + </para> + <para> + The methods here are sort of weird. It would make more sense to just + have newSWFMorph(shape1, shape2);, but as things are now, shape2 needs + to know that it's the second part of a morph. (This, because it starts + writing its output as soon as it gets drawing commands- if it kept its + own description of its shapes and wrote on completion this and some + other things would be much easier.) + </para> + <simpara> + SWFMorph has the following methods : <function>swfmorph->getshape1</function> + and <function>swfmorph->getshape1</function>. + </simpara> + <para> + This simple example will morph a big red square into a smaller + blue black-bordered square. + <example> + <title><function>swfmorph</function> example</title> + <programlisting role="php"> +<?php + $p = new SWFMorph(); + + $s = $p->getShape1(); + $s->setLine(0,0,0,0); + + /* Note that this is backwards from normal shapes (left instead of right). + I have no idea why, but this seems to work.. */ + + $s->setLeftFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(-1000,-1000); + $s->drawLine(2000,0); + $s->drawLine(0,2000); + $s->drawLine(-2000,0); + $s->drawLine(0,-2000); + + $s = $p->getShape2(); + $s->setLine(60,0,0,0); + $s->setLeftFill($s->addFill(0, 0, 0xff)); + $s->movePenTo(0,-1000); + $s->drawLine(1000,1000); + $s->drawLine(-1000,1000); + $s->drawLine(-1000,-1000); + $s->drawLine(1000,-1000); + + $m = new SWFMovie(); + $m->setDimension(3000,2000); + $m->setBackground(0xff, 0xff, 0xff); + + $i = $m->add($p); + $i->moveTo(1500,1000); + + for($r=0.0; $r<=1.0; $r+=0.1) + { + $i->setRatio($r); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmorph.getshape1"> + <refnamediv> + <refname>SWFMorph->getshape1</refname> + <refpurpose>Gets a handle to the starting shape</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>swfmorph->getshape1</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmorph->getshape1</function> gets a handle to the morph's + starting shape. <function>swfmorph->getshape1</function> returns an + <function>swfshape</function> object. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmorph.getshape2"> + <refnamediv> + <refname>SWFMorph->getshape2</refname> + <refpurpose>Gets a handle to the ending shape</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>swfmorph->getshape2</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmorph->getshape2</function> gets a handle to the morph's + ending shape. <function>swfmorph->getshape2</function> returns an + <function>swfshape</function> object. + </para> + </refsect1> + </refentry> + +<!-- SWFText --> + + <refentry id="function.swftext"> + <refnamediv> + <refname>SWFText</refname> + <refpurpose>Creates a new SWFText object.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swftext</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext</function> creates a new SWFText object, + fresh for manipulating. + </para> + <simpara> + SWFText has the following methods : <function>swftext->setfont</function>, + <function>swftext->setheight</function>, <function>swftext->setspacing</function>, + <function>swftext->setcolor</function>, <function>swftext->moveto</function>, + <function>swftext->addstring</function> and <function>swftext->getwidth</function>. + </simpara> + <para> + This simple example will draw a big yellow "PHP generates Flash with Ming" + text, on white background. + <example> + <title><function>swftext</function> example</title> + <programlisting role="php"> +<?php + $f = new SWFFont("Techno.fdb"); + $t = new SWFText(); + $t->setFont($f); + $t->moveTo(200, 2400); + $t->setColor(0xff, 0xff, 0); + $t->setHeight(1200); + $t->addString("PHP generates Flash with Ming!!"); + + $m = new SWFMovie(); + $m->setDimension(5400, 3600); + + $m->add($t); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setfont"> + <refnamediv> + <refname>SWFText->setFont</refname> + <refpurpose>Sets the current font</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setfont</function></funcdef> + <paramdef>string <parameter>font</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->setfont</function> sets the current font to + <parameter>font</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setheight"> + <refnamediv> + <refname>SWFText->setHeight</refname> + <refpurpose>Sets the current font height</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setheight</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->setheight</function> sets the current font height to + <parameter>height</parameter>. Default is 240. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setspacing"> + <refnamediv> + <refname>SWFText->setSpacing</refname> + <refpurpose>Sets the current font spacing</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setspacing</function></funcdef> + <paramdef>float <parameter>spacing</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->setspacing</function> sets the current font spacing to + <parameter>spacing</parameter><parameter>spacing</parameter>. Default is 1.0. + 0 is all of the letters written at the same point. This doesn't really work + that well because it inflates the advance across the letter, doesn't add + the same amount of spacing between the letters. I should try and explain + that better, prolly. Or just fix the damn thing to do constant spacing. + This was really just a way to figure out how letter advances work, + anyway.. So nyah. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setcolor"> + <refnamediv> + <refname>SWFText->setColor</refname> + <refpurpose>Sets the current font color</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setcolor</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->setspacing</function> changes the current text color. + Default is black. I think. Color is represented using the RGB system. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.moveto"> + <refnamediv> + <refname>SWFText->moveTo</refname> + <refpurpose>Moves the pen</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->moveto</function> moves the pen (or cursor, if + that makes more sense) to (<parameter>x</parameter>,<parameter>y</parameter>) + in text object's coordinate space. If either is zero, though, value + in that dimension stays the same. Annoying, should be fixed. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.addstring"> + <refnamediv> + <refname>SWFText->addString</refname> + <refpurpose>Draws a string</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->addstring</function> draws the string <parameter>string</parameter> + at the current pen (cursor) location. Pen is at the baseline of the text; + i.e., ascending text is in the -y direction. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.getwidth"> + <refnamediv> + <refname>SWFText->getWidth</refname> + <refpurpose>Computes string's width</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->addstring</function> returns the rendered width of the + <parameter>string</parameter> string at the text object's current font, + scale, and spacing settings. + </para> + </refsect1> + </refentry> + +<!-- SWFFont --> + + <refentry id="function.swffont"> + <refnamediv> + <refname>SWFFont</refname> + <refpurpose>Loads a font definition</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swffont</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + If <parameter>filename</parameter> is the name of an FDB file + (i.e., it ends in ".fdb"), load the font definition found in said + file. Otherwise, create a browser-defined font reference. + </para> + <para> + FDB ("font definition block") is a very simple wrapper for the SWF DefineFont2 + block which contains a full description of a font. One may create FDB files from + SWT Generator template files with the included makefdb utility- look in the + util directory off the main ming distribution directory. + </para> + <para> + Browser-defined fonts don't contain any information about the font other + than its name. It is assumed that the font definition will be provided by + the movie player. The fonts _serif, _sans, and _typewriter should always + be available. For example: + <programlisting role="php"> +<?php +$f = newSWFFont("_sans"); +?> + </programlisting> + will give you the standard sans-serif font, probably the same as what you'd get + with <literal><font name="sans-serif"></literal> in HTML. + </para> + <para> + <function>swffont</function> returns a reference to the font + definition, for use in the <function>SWFText->setFont</function> + and the <function>SWFTextField->setFont</function> methods. + </para> + <simpara> + SWFFont has the following methods : <function>swffont->getwidth</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swffont.getwidth"> + <refnamediv> + <refname>swffont->getwidth</refname> + <refpurpose>Returns the string's width</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swffont->getwidth</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffont->getwidth</function> returns the string + <parameter>string</parameter>'s width, using font's default scaling. + You'll probably want to use the <function>SWFText</function> version of this method which + uses the text object's scale. + </para> + </refsect1> + </refentry> + +<!-- SWFTextField --> + + <refentry id="function.swftextfield"> + <refnamediv> + <refname>SWFTextField</refname> + <refpurpose>Creates a text field object</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swftextfield</function></funcdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield</function> creates a new text field object. + Text Fields are less flexible than <function>swftext</function> objects- + they can't be rotated, scaled non-proportionally, or skewed, but they can + be used as form entries, and they can use browser-defined fonts. + </para> + <para> + The optional flags change the text field's behavior. It has the following + possibles values : + <itemizedlist> + <listitem> + <simpara> + SWFTEXTFIELD_NOEDIT indicates that the field shouldn't be user-editable + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_PASSWORD obscures the data entry + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_DRAWBOX draws the outline of the textfield + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_MULTILINE allows multiple lines + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_WORDWRAP allows text to wrap + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_NOSELECT makes the field non-selectable + </simpara> + </listitem> + </itemizedlist> + Flags are combined with the bitwise + <link linkend="language.operators.bitwise">OR</link> operation. For example, + <programlisting role="php"> +<?php +$t = newSWFTextField(SWFTEXTFIELD_PASSWORD | SWFTEXTFIELD_NOEDIT); +?> + </programlisting> + creates a totally useless non-editable password field. + </para> + <simpara> + SWFTextField has the following methods : <function>swftextfield->setfont</function>, + <function>swftextfield->setbounds</function>, <function>swftextfield->align</function>, + <function>swftextfield->setheight</function>, <function>swftextfield->setleftmargin</function>, + <function>swftextfield->setrightmargin</function>, <function>swftextfield->setmargins</function>, + <function>swftextfield->setindentation</function>, <function>swftextfield->setlinespacing</function>, + <function>swftextfield->setcolor</function>, <function>swftextfield->setname</function> and + <function>swftextfield->addstring</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setfont"> + <refnamediv> + <refname>SWFTextField->setFont</refname> + <refpurpose>Sets the text field font</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setfont</function></funcdef> + <paramdef>string <parameter>font</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setfont</function> sets the text field font to + the [browser-defined?] <parameter>font</parameter> font. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setbounds"> + <refnamediv> + <refname>SWFTextField->setbounds</refname> + <refpurpose>Sets the text field width and height</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setbounds</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setbounds</function> sets the text field width + to <parameter>width</parameter> and height to <parameter>height</parameter>. + If you don't set the bounds yourself, Ming makes a poor guess at what + the bounds are. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.align"> + <refnamediv> + <refname>SWFTextField->align</refname> + <refpurpose>Sets the text field alignment</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->align</function></funcdef> + <paramdef>int <parameter>alignement</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->align</function> sets the text field alignment + to <parameter>alignement</parameter>. Valid values for + <parameter>alignement</parameter> are : SWFTEXTFIELD_ALIGN_LEFT, + SWFTEXTFIELD_ALIGN_RIGHT, SWFTEXTFIELD_ALIGN_CENTER and + SWFTEXTFIELD_ALIGN_JUSTIFY. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setheight"> + <refnamediv> + <refname>SWFTextField->setHeight</refname> + <refpurpose>Sets the font height of this text field font.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setheight</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setheight</function> sets the font height of this text field + font to the given height <parameter>height</parameter>. Default is 240. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setleftmargin"> + <refnamediv> + <refname>SWFTextField->setLeftMargin</refname> + <refpurpose>Sets the left margin width of the text field.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setleftmargin</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setleftmargin</function> sets the left margin width + of the text field to <parameter>width</parameter>. Default is 0. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setrightmargin"> + <refnamediv> + <refname>SWFTextField->setrightMargin</refname> + <refpurpose>Sets the right margin width of the text field.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setrightmargin</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setrightmargin</function> sets the right margin width + of the text field to <parameter>width</parameter>. Default is 0. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setmargins"> + <refnamediv> + <refname>SWFTextField->setMargins</refname> + <refpurpose>Sets the margins width of the text field.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setmargins</function></funcdef> + <paramdef>int <parameter>left</parameter></paramdef> + <paramdef>int <parameter>right</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setmargins</function> set both margins at once, + for the man on the go. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setindentation"> + <refnamediv> + <refname>SWFTextField->setindentation</refname> + <refpurpose>Sets the indentation of the first line.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setindentation</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setindentation</function> sets the indentation of + the first line in the text field, to <parameter>width</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setlinespacing"> + <refnamediv> + <refname>SWFTextField->setLineSpacing</refname> + <refpurpose>Sets the line spacing of the text field.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setlinespacing</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setlinespacing</function> sets the line spacing + of the text field to the height of <parameter>height</parameter>. Default is 40. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setcolor"> + <refnamediv> + <refname>SWFTextField->setcolor</refname> + <refpurpose>Sets the color of the text field. </refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setcolor</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setcolor</function> sets the color of the text field. + Default is fully opaque black. Color is represented using RGB system. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setname"> + <refnamediv> + <refname>SWFTextField->setname</refname> + <refpurpose>Sets the variable name</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setname</function></funcdef> + <paramdef>string <parameter>name</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setname</function> sets the variable name of this + text field to <parameter>name</parameter>, for form posting and action + scripting purposes. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.addstring"> + <refnamediv> + <refname>SWFTextField->addstring</refname> + <refpurpose>Concatenates the given string to the text field</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setname</function> concatenates the string + <parameter>string</parameter> to the text field. + </para> + </refsect1> + </refentry> + +<!-- SWFSprite --> + + <refentry id="function.swfsprite"> + <refnamediv> + <refname>SWFSprite</refname> + <refpurpose>Creates a movie clip (a sprite)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfsprite</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfsprite</function> are also known as a "movie clip", + this allows one to create objects which are animated in their own + timelines. Hence, the sprite has most of the same methods as the movie. + </para> + <simpara> + <function>swfsprite</function> has the following methods : + <function>swfsprite->add</function>, + <function>swfsprite->remove</function>, <function>swfsprite->nextframe</function> + and <function>swfsprite->setframes</function>. + </simpara> + <para> + This simple example will spin gracefully a big red square. + <example> + <title><function>swfsprite</function> example</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(-500,-500); + $s->drawLineTo(500,-500); + $s->drawLineTo(500,500); + $s->drawLineTo(-500,500); + $s->drawLineTo(-500,-500); + + $p = new SWFSprite(); + $i = $p->add($s); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + + $m = new SWFMovie(); + $i = $m->add($p); + $i->moveTo(1500,1000); + $i->setName("blah"); + + $m->setBackground(0xff, 0xff, 0xff); + $m->setDimension(3000,2000); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.add"> + <refnamediv> + <refname>SWFSprite->add</refname> + <refpurpose>Adds an object to a sprite</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->add</function></funcdef> + <paramdef>ressource <parameter>object</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfsprite->add</function> adds a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function>, + a <function>swfaction</function> or a <function>swfsprite</function> object. + </para> + <para> + For displayable types (<function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function>, + <function>swfaction</function> or <function>swfsprite</function>), + this returns a handle to the object in a display list. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.remove"> + <refnamediv> + <refname>SWFSprite->remove</refname> + <refpurpose>Removes an object to a sprite</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->remove</function></funcdef> + <paramdef>ressource <parameter>object</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfsprite->remove</function> remove a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function>, + a <function>swfaction</function> or a <function>swfsprite</function> object + from the sprite. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.setframes"> + <refnamediv> + <refname>SWFSprite->setframes</refname> + <refpurpose>Sets the total number of frames in the animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->setframes</function></funcdef> + <paramdef>int <parameter>numberofframes</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfsprite->setframes</function> sets the total number of frames + in the animation to <parameter>numberofframes</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.nextframe"> + <refnamediv> + <refname>SWFSprite->nextframe</refname> + <refpurpose>Moves to the next frame of the animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->nextframe</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfsprite->setframes</function> moves to the next frame of + the animation. + </para> + </refsect1> + </refentry> + +<!-- SWFButton --> + + <refentry id="function.swfbutton"> + <refnamediv> + <refname>SWFbutton</refname> + <refpurpose>Creates a new Button.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfbutton</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton</function> creates a new Button. + Roll over it, click it, see it call action code. Swank. + </para> + <simpara> + SWFButton has the following methods : <function>swfbutton->addshape</function>, + <function>swfbutton->setup</function>, <function>swfbutton->setover</function> + <function>swfbutton->setdown</function>, <function>swfbutton->sethit</function> + <function>swfbutton->setaction</function> and + <function>swfbutton->addaction</function>. + </simpara> + <para> + This simple example will show your usual interactions with buttons : + rollover, rollon, mouseup, mousedown, noaction. + <example> + <title><function>swfbutton</function> example</title> + <programlisting role="php"> +<?php + + $f = new SWFFont("_serif"); + + $p = new SWFSprite(); + + function label($string) + { + global $f; + + $t = new SWFTextField(); + $t->setFont($f); + $t->addString($string); + $t->setHeight(200); + $t->setBounds(3200,200); + return $t; + } + function addLabel($string) + { + global $p; + + $i = $p->add(label($string)); + $p->nextFrame(); + $p->remove($i); + } + + $p->add(new SWFAction("stop();")); + addLabel("NO ACTION"); + addLabel("SWFBUTTON_MOUSEUP"); + addLabel("SWFBUTTON_MOUSEDOWN"); + addLabel("SWFBUTTON_MOUSEOVER"); + addLabel("SWFBUTTON_MOUSEOUT"); + addLabel("SWFBUTTON_MOUSEUPOUTSIDE"); + addLabel("SWFBUTTON_DRAGOVER"); + addLabel("SWFBUTTON_DRAGOUT"); + + function rect($r, $g, $b) + { + $s = new SWFShape(); + $s->setRightFill($s->addFill($r, $g, $b)); + $s->drawLine(600,0); + $s->drawLine(0,600); + $s->drawLine(-600,0); + $s->drawLine(0,-600); + + return $s; + } + + $b = new SWFButton(); + $b->addShape(rect(0xff, 0, 0), SWFBUTTON_UP | SWFBUTTON_HIT); + $b->addShape(rect(0, 0xff, 0), SWFBUTTON_OVER); + $b->addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(1);"), + SWFBUTTON_MOUSEUP); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(2);"), + SWFBUTTON_MOUSEDOWN); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(3);"), + SWFBUTTON_MOUSEOVER); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(4);"), + SWFBUTTON_MOUSEOUT); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(5);"), + SWFBUTTON_MOUSEUPOUTSIDE); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(6);"), + SWFBUTTON_DRAGOVER); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(7);"), + SWFBUTTON_DRAGOUT); + + $m = new SWFMovie(); + $m->setDimension(4000,3000); + + $i = $m->add($p); + $i->setName("label"); + $i->moveTo(400,1900); + + $i = $m->add($b); + $i->moveTo(400,900); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + This simple example will enables you to drag draw a big red button + on the windows. No drag-and-drop, just moving around. + <example> + <title><function>swfbutton->addaction</function> example</title> + <programlisting role="php"> +<?php + + $s = new SWFShape(); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->drawLine(1000,0); + $s->drawLine(0,1000); + $s->drawLine(-1000,0); + $s->drawLine(0,-1000); + + $b = new SWFButton(); + $b->addShape($s, SWFBUTTON_HIT | SWFBUTTON_UP | SWFBUTTON_DOWN | SWFBUTTON_OVER); + + $b->addAction(new SWFAction("startDrag('/test', 0);"), // '0' means don't lock to mouse + SWFBUTTON_MOUSEDOWN); + + $b->addAction(new SWFAction("stopDrag();"), + SWFBUTTON_MOUSEUP | SWFBUTTON_MOUSEUPOUTSIDE); + + $p = new SWFSprite(); + $p->add($b); + $p->nextFrame(); + + $m = new SWFMovie(); + $i = $m->add($p); + $i->setName('test'); + $i->moveTo(1000,1000); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.addshape"> + <refnamediv> + <refname>SWFbutton->addShape</refname> + <refpurpose>Adds a shape to a button</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->addshape</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + <paramdef>int <parameter>flags</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->addshape</function> adds the shape + <parameter>shape</parameter> to this button. The following + <parameter>flags</parameter>' values are valid: + SWFBUTTON_UP, SWFBUTTON_OVER, SWFBUTTON_DOWN or SWFBUTTON_HIT. + SWFBUTTON_HIT isn't ever displayed, it defines the hit region for the button. + That is, everywhere the hit shape would be drawn is considered a "touchable" + part of the button. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setup"> + <refnamediv> + <refname>SWFbutton->setUp</refname> + <refpurpose>Alias for addShape(shape, SWFBUTTON_UP)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setup</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->setup</function> alias for addShape(shape, SWFBUTTON_UP). + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setover"> + <refnamediv> + <refname>SWFbutton->setOver</refname> + <refpurpose>Alias for addShape(shape, SWFBUTTON_OVER)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setover</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->setover</function> alias for addShape(shape, SWFBUTTON_OVER). + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setdown"> + <refnamediv> + <refname>SWFbutton->setdown</refname> + <refpurpose>Alias for addShape(shape, SWFBUTTON_DOWN))</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setdown</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->setdown</function> alias for addShape(shape, SWFBUTTON_DOWN). + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.sethit"> + <refnamediv> + <refname>SWFbutton->setHit</refname> + <refpurpose>Alias for addShape(shape, SWFBUTTON_HIT)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->sethit</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->sethit</function> alias for addShape(shape, SWFBUTTON_HIT). + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.addaction"> + <refnamediv> + <refname>SWFbutton->addAction</refname> + <refpurpose>Adds an action</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->addaction</function></funcdef> + <paramdef>ressource <parameter>action</parameter></paramdef> + <paramdef>int <parameter>flags</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->addaction</function> adds the action + <parameter>action</parameter> to this button for the given conditions. + The following <parameter>flags</parameter> are valid: + SWFBUTTON_MOUSEOVER, SWFBUTTON_MOUSEOUT, SWFBUTTON_MOUSEUP, + SWFBUTTON_MOUSEUPOUTSIDE, SWFBUTTON_MOUSEDOWN, SWFBUTTON_DRAGOUT and + SWFBUTTON_DRAGOVER. + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setaction"> + <refnamediv> + <refname>SWFbutton->setAction</refname> + <refpurpose>Sets the action</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setaction</function></funcdef> + <paramdef>ressource <parameter>action</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->setaction</function> sets the action to be performed + when the button is clicked. Alias for addAction(shape, SWFBUTTON_MOUSEUP). + <parameter>action</parameter> is a <function>swfaction</function>. + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + +<!-- SWFAction --> + + <refentry id="function.swfaction"> + <refnamediv> + <refname>SWFAction</refname> + <refpurpose>Creates a new Action.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfaction</function></funcdef> + <paramdef>string <parameter>script</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfaction</function> creates a new Action, and + compiles the given script into an SWFAction object. + </para> + <para> + The script syntax is based on the C language, but with a lot taken out- the SWF + bytecode machine is just too simpleminded to do a lot of things we might like. + For instance, we can't implement function calls without a tremendous + amount of hackery because the jump bytecode has a hardcoded offset + value. No pushing your calling address to the stack and returning- + every function would have to know exactly where to return to. + </para> + <para> + So what's left? The compiler recognises the following tokens: + <itemizedlist> + <listitem> + <simpara> + break + </simpara> + </listitem> + <listitem> + <simpara> + for + </simpara> + </listitem> + <listitem> + <simpara> + continue + </simpara> + </listitem> + <listitem> + <simpara> + if + </simpara> + </listitem> + <listitem> + <simpara> + else + </simpara> + </listitem> + <listitem> + <simpara> + do + </simpara> + </listitem> + <listitem> + <simpara> + while + </simpara> + </listitem> + </itemizedlist> + </para> + <para> + There is no typed data; all values in the SWF action machine are stored as strings. + The following functions can be used in expressions: + <variablelist> + <varlistentry> + <term>time()</term> + <listitem> + <simpara> + Returns the number of milliseconds (?) elapsed since the movie started. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>random(seed)</term> + <listitem> + <simpara> + Returns a pseudo-random number in the range 0-seed. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>length(expr)</term> + <listitem> + <simpara> + Returns the length of the given expression. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>int(number)</term> + <listitem> + <simpara> + Returns the given number rounded down to the nearest integer. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>concat(expr, expr)</term> + <listitem> + <simpara> + Returns the concatenation of the given expressions. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>ord(expr)</term> + <listitem> + <simpara> + Returns the ASCII code for the given character + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>chr(num)</term> + <listitem> + <simpara> + Returns the character for the given ASCII code + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>substr(string, location, length)</term> + <listitem> + <simpara> + Returns the substring of length length at location location of + the given string string. + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + Additionally, the following commands may be used: + <variablelist> + <varlistentry> + <term>duplicateClip(clip, name, depth)</term> + <listitem> + <simpara> + Duplicate the named movie clip (aka sprite). The new movie clip has name name + and is at depth depth. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>removeClip(expr)</term> + <listitem> + <simpara> + Removes the named movie clip. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>trace(expr)</term> + <listitem> + <simpara> + Write the given expression to the trace log. Doubtful that the browser + plugin does anything with this. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>startDrag(target, lock, [left, top, right, bottom])</term> + <listitem> + <simpara> + Start dragging the movie clip target. The lock argument indicates whether + to lock the mouse (?)- use 0 (&false;) or 1 (&true;). Optional parameters + define a bounding area for the dragging. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stopDrag()</term> + <listitem> + <simpara> + Stop dragging my heart around. And this movie clip, too. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>callFrame(expr)</term> + <listitem> + <simpara> + Call the named frame as a function. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>getURL(url, target, [method])</term> + <listitem> + <simpara> + Load the given url into the named target. The target argument can be a + frame name (I think), or one of the magical values "_level0" (replaces + current movie) or "_level1" (loads new movie on top of current movie). + The optional method argument can be post or get if you want to submit + variables back to the server. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>loadMovie(url, target)</term> + <listitem> + <simpara> + Same as above, more or less. Come to think of it, I don't quite know what + the difference is. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>nextFrame()</term> + <listitem> + <simpara> + Go to the next frame. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>prevFrame()</term> + <listitem> + <simpara> + Go to the last (or, rather, previous) frame. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>play()</term> + <listitem> + <simpara> + Start playing the movie. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stop()</term> + <listitem> + <simpara> + Stop playing the movie. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>toggleQuality()</term> + <listitem> + <simpara> + Toggle between high and low quality. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stopSounds()</term> + <listitem> + <simpara> + Stop playing all sounds. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>gotoFrame(num)</term> + <listitem> + <simpara> + Go to frame number num. Frame numbers start at 0. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>gotoFrame(name)</term> + <listitem> + <simpara> + Go to the frame named name. Which does a lot of good, since I + haven't added frame labels yet. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>setTarget(expr)</term> + <listitem> + <simpara> + Sets the context for action. Or so they say- I really have no + idea what this does. + </simpara> + </listitem> + </varlistentry> + </variablelist> + And there's one weird extra thing. The expression frameLoaded(num) can be used + in if statements and while loops to check if the given frame number has been + loaded yet. Well, it's supposed to, anyway, but I've never tested it and I + seriously doubt it actually works. You can just use /:framesLoaded instead. + </para> + <para> + Movie clips (all together now- aka sprites) have properties. You can + read all of them (or can you?), you can set some of them, and here + they are: + <itemizedlist> + <listitem> + <simpara> + x + </simpara> + </listitem> + <listitem> + <simpara> + y + </simpara> + </listitem> + <listitem> + <simpara> + xScale + </simpara> + </listitem> + <listitem> + <simpara> + yScale + </simpara> + </listitem> + <listitem> + <simpara> + currentFrame - (read-only) + </simpara> + </listitem> + <listitem> + <simpara> + totalFrames - (read-only) + </simpara> + </listitem> + <listitem> + <simpara> + alpha - transparency level + </simpara> + </listitem> + <listitem> + <simpara> + visible - 1=on, 0=off (?) + </simpara> + </listitem> + <listitem> + <simpara> + width - (read-only) + </simpara> + </listitem> + <listitem> + <simpara> + height - (read-only) + </simpara> + </listitem> + <listitem> + <simpara> + rotation + </simpara> + </listitem> + <listitem> + <simpara> + target - (read-only) (???) + </simpara> + </listitem> + <listitem> + <simpara> + framesLoaded - (read-only) + </simpara> + </listitem> + <listitem> + <simpara> + name + </simpara> + </listitem> + <listitem> + <simpara> + dropTarget - (read-only) (???) + </simpara> + </listitem> + <listitem> + <simpara> + url - (read-only) (???) + </simpara> + </listitem> + <listitem> + <simpara> + highQuality - 1=high, 0=low (?) + </simpara> + </listitem> + <listitem> + <simpara> + focusRect - (???) + </simpara> + </listitem> + <listitem> + <simpara> + soundBufTime - (???) + </simpara> + </listitem> + </itemizedlist> + So, setting a sprite's x position is as simple as <literal>/box.x = 100;</literal>. + Why the slash in front of the box, though? That's how flash keeps + track of the sprites in the movie, just like a unix filesystem- + here it shows that box is at the top level. If the sprite named + box had another sprite named biff inside of it, you'd set its x + position with /box/biff.x = 100;. At least, I think so; correct + me if I'm wrong here. + </para> + <para> + This simple example will move the red square across the window. + <example> + <title><function>swfaction</function> example</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f = $s->addFill(0xff, 0, 0); + $s->setRightFill($f); + + $s->movePenTo(-500,-500); + $s->drawLineTo(500,-500); + $s->drawLineTo(500,500); + $s->drawLineTo(-500,500); + $s->drawLineTo(-500,-500); + + $p = new SWFSprite(); + $i = $p->add($s); + $i->setDepth(1); + $p->nextFrame(); + + for($n=0; $n<5; ++$n) + { + $i->rotate(-15); + $p->nextFrame(); + } + + $m = new SWFMovie(); + $m->setBackground(0xff, 0xff, 0xff); + $m->setDimension(6000,4000); + + $i = $m->add($p); + $i->setDepth(1); + $i->moveTo(-500,2000); + $i->setName("box"); + + $m->add(new SWFAction("/box.x += 3;")); + $m->nextFrame(); + $m->add(new SWFAction("gotoFrame(0); play();")); + $m->nextFrame(); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + This simple example tracks down your mouse on the screen. + <example> + <title><function>swfaction</function> example</title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setRate(36.0); + $m->setDimension(1200, 800); + $m->setBackground(0, 0, 0); + + /* mouse tracking sprite - empty, but follows mouse so we can + get its x and y coordinates */ + + $i = $m->add(new SWFSprite()); + $i->setName('mouse'); + + $m->add(new SWFAction(" + startDrag('/mouse', 1); /* '1' means lock sprite to the mouse */ + ")); + + + /* might as well turn off antialiasing, since these are just squares. */ + + $m->add(new SWFAction(" + this.quality = 0; + ")); + + /* morphing box */ + $r = new SWFMorph(); + $s = $r->getShape1(); + + /* Note this is backwards from normal shapes. No idea why. */ + $s->setLeftFill($s->addFill(0xff, 0xff, 0xff)); + $s->movePenTo(-40, -40); + $s->drawLine(80, 0); + $s->drawLine(0, 80); + $s->drawLine(-80, 0); + $s->drawLine(0, -80); + + $s = $r->getShape2(); + + $s->setLeftFill($s->addFill(0x00, 0x00, 0x00)); + $s->movePenTo(-1, -1); + $s->drawLine(2, 0); + $s->drawLine(0, 2); + $s->drawLine(-2, 0); + $s->drawLine(0, -2); + + + /* sprite container for morphing box - + this is just a timeline w/ the box morphing */ + + $box = new SWFSprite(); + $box->add(new SWFAction(" + stop(); + ")); + $i = $box->add($r); + + for($n=0; $n<=20; ++$n) + { + $i->setRatio($n/20); + $box->nextFrame(); + } + + + /* this container sprite allows us to use the same action code many times */ + + $cell = new SWFSprite(); + $i = $cell->add($box); + $i->setName('box'); + + $cell->add(new SWFAction(" + + setTarget('box'); + + /* ...x means the x coordinate of the parent, i.e. (..).x */ + dx = (/mouse.x + random(6)-3 - ...x)/5; + dy = (/mouse.y + random(6)-3 - ...y)/5; + gotoFrame(int(dx*dx + dy*dy)); + + ")); + + $cell->nextFrame(); + $cell->add(new SWFAction(" + + gotoFrame(0); + play(); + + ")); + + $cell->nextFrame(); + + + /* finally, add a bunch of the cells to the movie */ + + for($x=0; $x<12; ++$x) + { + for($y=0; $y<8; ++$y) + { + $i = $m->add($cell); + $i->moveTo(100*$x+50, 100*$y+50); + } + } + + $m->nextFrame(); + + $m->add(new SWFAction(" + + gotoFrame(1); + play(); + + ")); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + Same as above, but with nice colored balls... + <example> + <title><function>swfaction</function> example</title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setDimension(11000, 8000); + $m->setBackground(0x00, 0x00, 0x00); + + $m->add(new SWFAction(" + +this.quality = 0; +/frames.visible = 0; +startDrag('/mouse', 1); + + ")); + + // mouse tracking sprite + $t = new SWFSprite(); + $i = $m->add($t); + $i->setName('mouse'); + + $g = new SWFGradient(); + $g->addEntry(0, 0xff, 0xff, 0xff, 0xff); + $g->addEntry(0.1, 0xff, 0xff, 0xff, 0xff); + $g->addEntry(0.5, 0xff, 0xff, 0xff, 0x5f); + $g->addEntry(1.0, 0xff, 0xff, 0xff, 0); + + // gradient shape thing + $s = new SWFShape(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.03); + $s->setRightFill($f); + $s->movePenTo(-600, -600); + $s->drawLine(1200, 0); + $s->drawLine(0, 1200); + $s->drawLine(-1200, 0); + $s->drawLine(0, -1200); + + // need to make this a sprite so we can multColor it + $p = new SWFSprite(); + $p->add($s); + $p->nextFrame(); + + // put the shape in here, each frame a different color + $q = new SWFSprite(); + $q->add(new SWFAction("gotoFrame(random(7)+1); stop();")); + $i = $q->add($p); + + $i->multColor(1.0, 1.0, 1.0); + $q->nextFrame(); + $i->multColor(1.0, 0.5, 0.5); + $q->nextFrame(); + $i->multColor(1.0, 0.75, 0.5); + $q->nextFrame(); + $i->multColor(1.0, 1.0, 0.5); + $q->nextFrame(); + $i->multColor(0.5, 1.0, 0.5); + $q->nextFrame(); + $i->multColor(0.5, 0.5, 1.0); + $q->nextFrame(); + $i->multColor(1.0, 0.5, 1.0); + $q->nextFrame(); + + // finally, this one contains the action code + $p = new SWFSprite(); + $i = $p->add($q); + $i->setName('frames'); + $p->add(new SWFAction(" + +dx = (/:mousex-/:lastx)/3 + random(10)-5; +dy = (/:mousey-/:lasty)/3; +x = /:mousex; +y = /:mousey; +alpha = 100; + + ")); + $p->nextFrame(); + + $p->add(new SWFAction(" + +this.x = x; +this.y = y; +this.alpha = alpha; +x += dx; +y += dy; +dy += 3; +alpha -= 8; + + ")); + $p->nextFrame(); + + $p->add(new SWFAction("prevFrame(); play();")); + $p->nextFrame(); + + $i = $m->add($p); + $i->setName('frames'); + $m->nextFrame(); + + $m->add(new SWFAction(" + +lastx = mousex; +lasty = mousey; +mousex = /mouse.x; +mousey = /mouse.y; + +++num; + +if(num == 11) + num = 1; + +removeClip('char' & num); +duplicateClip(/frames, 'char' & num, num); + + ")); + + $m->nextFrame(); + $m->add(new SWFAction("prevFrame(); play();")); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + This simple example will handles keyboard actions. + (You'll probably have to click in the window to give it focus. + And you'll probably have to leave your mouse in the frame, too. + If you know how to give buttons focus programatically, feel free + to share, won't you?) + <example> + <title><function>swfaction</function> example</title> + <programlisting role="php"> +<?php + + /* sprite has one letter per frame */ + + $p = new SWFSprite(); + $p->add(new SWFAction("stop();")); + + $chars = "abcdefghijklmnopqrstuvwxyz". + "ABCDEFGHIJKLMNOPQRSTUVWXYZ". + "1234567890!@#$%^&*()_+-=/[]{}|;:,.<>?`~"; + + $f = new SWFFont("_sans"); + + for($n=0; $nremove($i); + $t = new SWFTextField(); + $t->setFont($f); + $t->setHeight(240); + $t->setBounds(600,240); + $t->align(SWFTEXTFIELD_ALIGN_CENTER); + $t->addString($c); + $i = $p->add($t); + $p->labelFrame($c); + $p->nextFrame(); + } + + + /* hit region for button - the entire frame */ + + $s = new SWFShape(); + $s->setFillStyle0($s->addSolidFill(0, 0, 0, 0)); + $s->drawLine(600, 0); + $s->drawLine(0, 400); + $s->drawLine(-600, 0); + $s->drawLine(0, -400); + + + /* button checks for pressed key, sends sprite to the right frame */ + + $b = new SWFButton(); + $b->addShape($s, SWFBUTTON_HIT); + + for($n=0; $naddAction(new SWFAction(" + +setTarget('/char'); +gotoFrame('$c'); + + "), SWFBUTTON_KEYPRESS($c)); + } + + $m = new SWFMovie(); + $m->setDimension(600,400); + $i = $m->add($p); + $i->setName('char'); + $i->moveTo(0,80); + + $m->add($b); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); + +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + </reference> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +--> Index: phpdoc/fr/functions/ming.xml diff -u phpdoc/fr/functions/ming.xml:1.6 phpdoc/fr/functions/ming.xml:1.7 --- phpdoc/fr/functions/ming.xml:1.6 Wed Oct 17 20:40:32 2001 +++ phpdoc/fr/functions/ming.xml Thu Oct 18 02:44:04 2001 @@ -1 +1,4255 @@ -<!-- $Revision: 1.6 $ --> <reference id="ref.ming"> <title>Ming pour Flash</title> <titleabbrev>Ming (Flash)</titleabbrev> <partintro> &warn.experimental; <sect1 id="ming.intro"> <title>Introduction</title> <simpara> Ming est une librairie open-source (LGPL) qui vous permet de créer des animations au format Flash. Ming supporte toutes les fonctionnalités de Flash 4 : les formes (shapes), les gradients, les images bitmaps (JPEG et PNG), les morphing (transformations d'une forme en une autre), les textes, actions, sprites (mini animations), le streaming MP3 et les transformations de couleurs. Le seul ajout futur est celui des événements sons. </simpara> <simpara> Ming n'est pas un acronyme. </simpara> <simpara> Notez que toutes les distances spécifiées (longueurs, distances, tailles...) sont en "twips", c'est-à-dire 20 unités par pixels. C'est plus ou moins arbitraire, car le lecteur Flash fait une mise à l'échelle avec les valeurs qui lui sont fournis dans la balise embed, ou la frame courante si la balise embed n'est pas utilisée. </simpara> <simpara> Ming propose de nombreux avantages par rapport à l'extension swf. Vous pouvez utiliser Ming sur tous les OS où vous pouvez compiler le code, tandis que swf est limité à Windows. Ming vous évite la déconcertante complexité du format SWF, en transformant les éléments des animations en objets PHP. Enfin, Ming est toujours en cours de développement et surveillé par son auteur : si vous souhaitez une nouvelle fonctionnalité, dites le lui : <ulink url="mailto:&email.ming;">&email.ming;</ulink>. </simpara> <simpara> Ming et tous les objets cités ont été ajouté en PHP 4.0.5. </simpara> </sect1> <sect1 id="ming.install"> <title>Installation</title> <para> Pour utiliser Ming avec PHP, vous devez d'abord installer la librairy Ming. Le code source et les instructions d'installation sont disponible sur la page d'accueil de Ming : <ulink url="&url.ming;">&url.ming;</ulink>, avec des exemples un tutorial et l'actualité Ming. </para> <para> Téléchargez l'archive Ming. Décompressez la et allez dans le dossier Ming. Faites "make", puis "make install". </para> <para> Cela va compiler le fichier <filename>libming.so</filename> et l'installer dans <filename>/usr/lib/</filename>, et copier <filename>ming.h</filename> into <filename>/usr/include/</filename>. Editez la ligne <literal>PREFIX=</literal> dans le fichier <filename>Makefile</filename> pour indiquer votre dossier d'installation. </para> <sect2 id="ming.install.php.unix"> <title>Compilation CGI avec PHP (Unix)</title> <para> <literallayout> mkdir <phpdir>/ext/ming cp php_ext/* <phpdir>/ext/ming cd <phpdir> ./buildconf ./configure --with-ming <other config options> Compilez et installez PHP comme d'habitude. Redémarrez votre serveur web si nécessaire. </literallayout> </para> </sect2> <sect2 id="ming.install.php_module.unix"> <title>Compilation en module avec PHP (Unix)</title> <para> téléchargez <filename>php_ming.so.gz</filename>. Décompressez le et copiez le dans votre dossier de modules PHP (vous pouvez trouver votre dossier de module PHP en utilisant la commande <command>php-config --extension-dir</command>). Ensuite, ajoutez la ligne <literal>extension=php_ming.so</literal> dans votre fichier <filename>php.ini</filename>, ou bien ajoutez <literal>dl('php_ming.so');</literal> en haut de tous vos scripts Ming. </para> </sect2> </sect1> <sect1 id="ming.use"> <title>Comment utiliser Ming</title> <simpara> Ming introduit 13 objet en PHP. Pour les utilisez, vous devez être familier avec les <link linkend="language.oop">objets</link>. </simpara> <itemizedlist> <listitem> <simpara> <function>swfmovie</function>. </simpara> </listitem> <listitem> <simpara> <function>swfshape</function>. </simpara> </listitem> <listitem> <simpara> <function>swfdisplayitem</function>. </simpara> </listitem> <listitem> <simpara> <function>swfgradient</function>. </simpara> </listitem> <listitem> <simpara> <function>swfbitmap</function>. </simpara> </listitem> <listitem> <simpara> <function>swffill</function>. </simpara> </listitem> <listitem> <simpara> <function>swfmorph</function>. </simpara> </listitem> <listitem> <simpara> <function>swftext</function>. </simpara> </listitem> <listitem> <simpara> <function>swffont</function>. </simpara> </listitem> <listitem> <simpara> <function>swftextfield</function>. </simpara> </listitem> <listitem> <simpara> <function>swfsprite</function>. </simpara> </listitem> <listitem> <simpara> <function>swfbutton</function>. </simpara> </listitem> <listitem> <simpara> <function>swfaction</function>. </simpara> </listitem> </itemizedlist> </sect1> </partintro><!-- SWFMovie --> <refentry id="function.swfmovie"> <refnamediv> <refname>SWFMovie</refname> <refpurpose>Crée un objet 'animation'.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfmovie</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie</function> Crée un objet 'animation', représentant une animation Flash version 4. </para> <simpara> SWFMovie a les méthodes suivantes : <function>swfmovie->output</function>,<function>swfmovie->save</function>, <function>swfmovie->add</function>, <function>swfmovie->remove</function>, <function>swfmovie->nextframe</function>, <function>swfmovie->setbackground</function>, <function>swfmovie->setrate</function>, <function>swfmovie->setdimension</function>, <function>swfmovie->setframes</function> et <function>swfmovie->streammp3</function>. </simpara> <simpara> Des exemples d'utilisation dans : <function>swfdisplayitem->rotateto</function>, <function>swfshape->setline</function>, <function>swfshape->addfill</function>... En fait, tous les exemples utilisent cet objet. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.output"> <refnamediv> <refname>SWFMovie->output</refname> <refpurpose>Envoie votre animation au navigateur.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->output</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->output</function> envoie votre animation au navigateur. En PHP, faîte le précéder de la fonction <function>header</function>. <programlisting role="php"><?php header('Content-type: application/x-shockwave-flash');?> </programlisting> Cela indique au navigateur que l'animation qui arrive est en Flash. </para> <simpara> Voir aussi <function>swfmovie->save</function>. </simpara> <simpara> Des exemples d'utilisation dans : <function>swfmovie->streammp3</function>, <function>swfdisplayitem->rotateto</function>, <function>swfaction</function>... En fait, tous les exemples utilisent cette méthode. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.save"> <refnamediv> <refname>SWFMovie->save</refname> <refpurpose>Sauve dans un fichier.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->save</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->save</function> sauve votre animation dans le fichier <parameter>filename</parameter>. </para> <simpara> Voir aussi <function>swfmovie->output</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.add"> <refnamediv> <refname>SWFMovie->add</refname> <refpurpose>Ajoute un objet dans une animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->add</function></funcdef> <paramdef>ressource <parameter>instance</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->add</function> ajoute l'objet <parameter>instance</parameter> dans l'animation courante. <parameter>instance</parameter> peut être de n'importe quel type : forme (shape), texte (text), police (font), etc... Ils doivent être ajouté à une animation pour être utilisé. </para> <para> Pour les objets affichables (formes, textes, boutons, sprites), <function>swfmovie->add</function> retourne un objet <function>swfdisplayitem</function> de la liste d'affichage. Ainsi, vous pouvez ajouter la même forme plusieurs fois dans la même animation, et obtenir des ressources différentes pour chaque instance. </para> <simpara> Voir aussi tous les autres objets et <function>swfmovie->remove</function> </simpara> <simpara> Des exemples d'utilisation dans : <function>swfdisplayitem->rotateto</function> et <function>swfshape->addfill</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.remove"> <refnamediv> <refname>SWFMovie->remove</refname> <refpurpose>Supprime un objet d'une animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->remove</function></funcdef> <paramdef>ressource <parameter>instance</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->remove</function> supprime l'objet <parameter>instance</parameter> de la liste d'affichage, pour l'animation courante. L'objet ne sera plus disponible pour être affiché ou utilisé. </para> <simpara> Voir aussi <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.setbackground"> <refnamediv> <refname>SWFMovie->setbackground</refname> <refpurpose>Modifie la couleur de fond.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setbackground</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->setbackground</function> modifie la couleur de fond. Pourquoi est-ce que cette fonction n'accepte pas de canal alpha? (réflechissez quelques instants :-) ). En fait, cela ne serait pas si stupide : vous pouvez laisser apercevoir le fond HTML à travers l'animation. Il y a un moyen de faire cela, mais cela ne fonctionne qu'avec IE 4. Recherchez sur le site de <ulink url="&url.macromedia;">&url.macromedia;</ulink> pour plus de détails. </para> </refsect1> </refentry> <refentry id="function.swfmovie.setrate"> <refnamediv> <refname>SWFMovie->setrate</refname> <refpurpose>Modifie la vitesse de l'animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setrate</function></funcdef> <paramdef>int <parameter>rate</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->setrate</function> fixe la vitesse de l'animation à <parameter>rate</parameter> images par secondes. L'animation ralentira d'elle-même si le lecteur Flash ne peut pas afficher suffisamment rapidement, à moins qu'il n'y ait du son en stream, auquel cas les images sont sacrifiées pour garder un son fluide. </para> </refsect1> </refentry> <refentry id="function.swfmovie.setdimension"> <refnamediv> <refname>SWFMovie->setdimension</refname> <refpurpose>Modifie les dimensions de l'animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setdimension</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->setdimension</function> modifie les dimensions de l'animation : <parameter>width</parameter> est la largeur et <parameter>height</parameter> la hauteur. </para> </refsect1> </refentry> <refentry id="function.swfmovie.setframes"> <refnamediv> <refname>SWFMovie->setframes</refname> <refpurpose>Modifie le nombre total d'images dans l'animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setframes</function></funcdef> <paramdef>string <parameter>numberofframes</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->setframes</function> modifie le nombre total d'images dans l'animation, et le fixe à <parameter>numberofframes</parameter>. </para> </refsect1> </refentry> <refentry id="function.swfmovie.nextframe"> <refnamediv> <refname>SWFMovie->nextframe</refname> <refpurpose>Passe à l'image suivante.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->nextframe</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->setframes</function> passe à l'image suivante de l'animation. </para> </refsect1> </refentry> <refentry id="function.swfmovie.streammp3"> <refnamediv> <refname>SWFMovie->streammp3</refname> <refpurpose>Envoie un fichier MP3 en streaming.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->streammp3</function></funcdef> <paramdef>string <parameter>mp3FileName</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->streammp3</function> envoie le fichier MP3<parameter>mp3FileName</parameter> en stream audio. <function>swfmovie->streammp3</function> n'est pas très robuste, et se prend facilement les pieds dans le tapis (elle peut éviter la balise initiale ID3, mais c'est bien tout). Tout comme swfshape->addjpegfill(), ce n'est pas une fonction stable. Il faudra sûrement faire un objet séparé, pour gérer les types de son. </para> <para> Notez que l'animation n'est pas suffisamment intelligente pour ajouter un nombre suffisant d'images, afin de correspondre à la durée totale du stream MP3. Il vous faudra ajouter des images jusqu'à durée de la musique multiplié par le nombre d'images par secondes. </para> <para> Oui, vous pouvez utiliser Ming pour mettre un rock-'n-roll endiablé dans vos animation. Evitez d'en parler à l'RIAA ou la SACEM. <example> <title>Exemple avec <function>swfmovie->streammp3</function></title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setRate(12.0); $m->streamMp3("distortobass.mp3");// utilisez vos propres MP3// assurez-vous d'avoir les droits// 11.85 secondes avec 12.0 images par seconde = 142 frames $m->setFrames(142); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry><!-- SWFDisplayItem --> <refentry id="function.swfdisplayitem"> <refnamediv> <refname>SWFDisplayItem</refname> <refpurpose>Crée un nouvel objet d'affichage displayitem.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfdisplayitem</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem</function> crée un nouvel objet d'affichage displayitem. </para> <para> C'est là que toute l'animation prend vie. Une fois que vous avez défini une forme, un texte, un sprite ou un bouton, vous l'ajoutez à une animation, puis vous utilisez la ressource retournée pour déplacer, étirer, contracter, faire tourner ou incliner la forme. </para> <simpara> SWFDisplayItem a les méthodes suivantes : <function>swfdisplayitem->move</function>, <function>swfdisplayitem->moveto</function>, <function>swfdisplayitem->scaleto</function>, <function>swfdisplayitem->scale</function>, <function>swfdisplayitem->rotate</function>, <function>swfdisplayitem->rotateto</function>, <function>swfdisplayitem->skewxto</function>, <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewyto</function> <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->setdepth</function> <function>swfdisplayitem->remove</function>, <function>swfdisplayitem->setname</function> <function>swfdisplayitem->setratio</function>, <function>swfdisplayitem->addcolor</function> et <function>swfdisplayitem->multcolor</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.moveto"> <refnamediv> <refname>SWFDisplayItem->moveTo</refname> <refpurpose>Déplace un objet en coordonnées globales.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->moveto</function> déplace la forme courante jusqu'au point de coordonnées globales (<parameter>x</parameter>,<parameter>y</parameter>). </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->move</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.move"> <refnamediv> <refname>SWFDisplayItem->move</refname> <refpurpose>Déplace un objet en coordonnées relatives.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->move</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->move</function> déplace la forme courante de <parameter>dx</parameter> et <parameter>dy</parameter> unités, depuis sa position courante. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->moveto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.scaleto"> <refnamediv> <refname>SWFDisplayItem->scaleTo</refname> <refpurpose>Etire un objet en coordonnées globales.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->scaleto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->scaleto</function> étire un objet jusqu'au dimensions (<parameter>x</parameter>,<parameter>y</parameter>). </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->scale</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.scale"> <refnamediv> <refname>SWFDisplayItem->scale</refname> <refpurpose>Etire un objet relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->scale</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->scale</function> étire un objet de (<parameter>dx</parameter>,<parameter>dy</parameter>), à partir de sa taille courante. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->scaleto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.rotateto"> <refnamediv> <refname>SWFDisplayItem->rotateTo</refname> <refpurpose>Tourne un objet en angle absolu.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->rotateto</function></funcdef> <paramdef>double <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->rotateto</function> tourne l'objet jusqu'à l'angle absolu<parameter>degrees</parameter>, en degrés. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <para> Cet exemple amène trois chaînes tournoyantes depuis le fond de l'écran. Plutôt sympa. <example> <title>Exemple avec <function>swfdisplayitem->rotateto</function></title> <programlisting role="php"><?php $thetext = "ming!"; $f = new SWFFont("Bauhaus 93.fdb"); $m = new SWFMovie(); $m->setRate(24.0); $m->setDimension(2400, 1600); $m->setBackground(0xff, 0xff, 0xff); // Les fonctions avec un nombre d'arguments sont vraiment une bonne idées. // Sincèrement! function text($r, $g, $b, $a, $rot, $x, $y, $scale, $string) { global $f, $m; $t = new SWFText(); $t->setFont($f); $t->setColor($r, $g, $b, $a); $t->setHeight(960); $t->moveTo(-($f->getWidth($string))/2, $f->getAscent()/2); $t->addString($string); // On peut ajouter des propriétés comme pour une variable PHP standard // tant que les noms ne sont pas déjà pris. // e.g., vous ne pouvez pas utilisez $i->scale, car c'est une fonction. $i = $m->add($t); $i->x = $x; $i->y = $y; $i->rot = $rot; $i->s = $scale; $i->rotateTo($rot); $i->scale($scale, $scale); // mais les modification sont locales à une fonction, donc il faut // retourner l'objet modifié. Pas pratique... return $i; } function step($i) { $oldrot = $i->rot; $i->rot = 19*$i->rot/20; $i->x = (19*$i->x + 1200)/20; $i->y = (19*$i->y + 800)/20; $i->s = (19*$i->s + 1.0)/20; $i->rotateTo($i->rot); $i->scaleTo($i->s, $i->s); $i->moveTo($i->x, $i->y); return $i; } // Alors? Ça valait la peine, non? $i1 = text(0xff, 0x33, 0x33, 0xff, 900, 1200, 800, 0.03, $thetext); $i2 = text(0x00, 0x33, 0xff, 0x7f, -560, 1200, 800, 0.04, $thetext); $i3 = text(0xff, 0xff, 0xff, 0x9f, 180, 1200, 800, 0.001, $thetext); for($i=1; $i<=100; ++$i) { $i1 = step($i1); $i2 = step($i2); $i3 = step($i3); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <simpara> Voir aussi <function>swfdisplayitem->rotate</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.rotate"> <refnamediv> <refname>SWFDisplayItem->Rotate</refname> <refpurpose>Fait tourner une forme relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->rotate</function></funcdef> <paramdef>double <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->rotate</function> fait tourner la forme de <parameter>ddegrees</parameter> degrés, en plus de sa rotation courante. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->rotateto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewxto"> <refnamediv> <refname>SWFDisplayItem->skewXTo</refname> <refpurpose>Incline suivant les X.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewxto</function></funcdef> <paramdef>double <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->skewxto</function> modifie l'inclinaison (x-skew) à <parameter>degrees</parameter>. Si <parameter>degrees</parameter> vaut 1.0, l'angle sera de 45¡, en avant. S'il vaut plus, ce sera plus penché, et s'il vaut moins, ce sera plus droit. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewy</function> and <function>swfdisplayitem->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewx"> <refnamediv> <refname>SWFDisplayItem->skewX</refname> <refpurpose>Incline suivant les X relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewx</function></funcdef> <paramdef>double <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->skewx</function> ajoute <parameter>ddegrees</parameter> à l'inclinaison courante (x-skew). </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewy</function> and <function>swfdisplayitem->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewyto"> <refnamediv> <refname>SWFDisplayItem->skewYTo</refname> <refpurpose>Incline suivant les Y.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewyto</function></funcdef> <paramdef>double <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->skewyto</function> modifie l'inclinaison (y-skew) à <parameter>degrees</parameter>. Si <parameter>degrees</parameter> vaut 1.0, l'angle sera de 45¡, en haut. S'il vaut plus, ce sera plus penché, et s'il vaut moins, ce sera plus droit. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->skewy</function>, <function>swfdisplayitem->skewx</function> and <function>swfdisplayitem->skewxto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewy"> <refnamediv> <refname>SWFDisplayItem->skewY</refname> <refpurpose>Incline suivant les Y relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewy</function></funcdef> <paramdef>double <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->skewy</function> ajoute <parameter>ddegrees</parameter> à l'inclinaison courante (y-skew). </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->skewx</function> and <function>swfdisplayitem->skewxto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setdepth"> <refnamediv> <refname>SWFDisplayItem->setDepth</refname> <refpurpose>Modifie la place en profondeur (z-order)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setdepth</function></funcdef> <paramdef>double <parameter>depth</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->rotate</function> place l'objet à la profondeur <parameter>depth</parameter>. Par défaut, l'objet est placé au niveau où il a été ajouté dans l'animation. Les objets les plus anciens sont placés tout en bas, et les nouveaux sont superposés. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.remove"> <refnamediv> <refname>SWFDisplayItem->remove</refname> <refpurpose>Supprime un objet d'une animation</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->remove</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->remove</function> supprime cet objet de la liste d'affichage. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setname"> <refnamediv> <refname>SWFDisplayItem->setName</refname> <refpurpose>Nomme un objet</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setname</function></funcdef> <paramdef>string <parameter>name</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->setname</function> donne à l'objet courant le nom de <parameter>name</parameter>. Cela servira à repérer les acteurs d'un script d'action. Cela ne sert qu'avec les sprites. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setratio"> <refnamediv> <refname>SWFDisplayItem->setRatio</refname> <refpurpose>Modifie le ratio de l'objet.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setratio</function></funcdef> <paramdef>double <parameter>ratio</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->setratio</function> modifie le ratio de l'objet, et le fixe à <parameter>ratio</parameter>. Uniquement utile pour les morphings. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <para> Cet exemple simple effectue un morphing délicat de trois cercles concentriques. <example> <title>Exemple <function>swfdisplayitem->setname</function></title> <programlisting role="php"><?php $p = new SWFMorph(); $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(0.16, 0xff, 0xff, 0xff); $g->addEntry(0.32, 0, 0, 0); $g->addEntry(0.48, 0xff, 0xff, 0xff); $g->addEntry(0.64, 0, 0, 0); $g->addEntry(0.80, 0xff, 0xff, 0xff); $g->addEntry(1.00, 0, 0, 0); $s = $p->getShape1(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.05); $s->setLeftFill($f); $s->movePenTo(-160, -120); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(0.16, 0xff, 0, 0); $g->addEntry(0.32, 0, 0, 0); $g->addEntry(0.48, 0, 0xff, 0); $g->addEntry(0.64, 0, 0, 0); $g->addEntry(0.80, 0, 0, 0xff); $g->addEntry(1.00, 0, 0, 0); $s = $p->getShape2(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.05); $f->skewXTo(1.0); $s->setLeftFill($f); $s->movePenTo(-160, -120); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m = new SWFMovie(); $m->setDimension(320, 240); $i = $m->add($p); $i->moveTo(160, 120); for($n=0; $n<=1.001; $n+=0.01) { $i->setRatio($n); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfdisplayitem.addcolor"> <refnamediv> <refname>SWFDisplayItem->addColor</refname> <refpurpose>Ajoute une couleur à une transoformation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->addcolor</function></funcdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->addcolor</function> ajoute une couleur à la transformations courante. La couleur est donnée sous la forme RGB. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.multcolor"> <refnamediv> <refname>SWFDisplayItem->multColor</refname> <refpurpose>Multiplie la couleur de transformation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->multcolor</function></funcdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->multcolor</function> multiplie la couleur de transformation par les valeurs données. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <para> Cet exemple simple modifie l'atmosphère de votre image, et en fait une scène d'Halloween (utilisez un paysage ou une image claire pour un meilleur effet) <example> <title>Exemple avec <function>swfdisplayitem->multcolor</function></title> <programlisting role="php"><?php $b = new SWFBitmap("backyard.jpg"); // Utilisez une de vos images $s = new SWFShape(); $s->setRightFill($s->addFill($b)); $s->drawLine($b->getWidth(), 0); $s->drawLine(0, $b->getHeight()); $s->drawLine(-$b->getWidth(), 0); $s->drawLine(0, -$b->getHeight()); $m = new SWFMovie(); $m->setDimension($b->getWidth(), $b->getHeight()); $i = $m->add($s); for($n=0; $n<=20; ++$n) { $i->multColor(1.0-$n/10, 1.0, 1.0); $i->addColor(0xff*$n/20, 0, 0); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry><!-- SWFShape --> <refentry id="function.swfshape"> <refnamediv> <refname>SWFShape</refname> <refpurpose>Crée une nouvelle forme.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfshape</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfshape</function> crée une nouvelle forme. </para> <simpara> SWFShape a les méthodes suivantes : <function>swfshape->setline</function>, <function>swfshape->addfill</function>, <function>swfshape->setleftfill</function>, <function>swfshape->setrightfill</function>, <function>swfshape->movepento</function>, <function>swfshape->movepen</function>, <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->drawcurveto</function> et <function>swfshape->drawcurve</function>. </simpara> <para> Ce exemple simple dessine un quadrant d'ellipse rouge. <example> <title>Exemple avec <function>swfshape</function></title> <programlisting role="php"><?php $s = new SWFShape(); $s->setLine(40, 0x7f, 0, 0); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->movePenTo(200, 200); $s->drawLineTo(6200, 200); $s->drawLineTo(6200, 4600); $s->drawCurveTo(200, 4600, 200, 200); $m = new SWFMovie(); $m->setDimension(6400, 4800); $m->setRate(12.0); $m->add($s); $m->nextFrame(); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.setline"> <refnamediv> <refname>SWFShape->setLine</refname> <refpurpose>Modifie le style de ligne de la forme.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setline</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfshape->setline</function> modifie le style de ligne de la forme. <parameter>width</parameter> est la largeur de la ligne. Si <parameter>width</parameter> vaut 0, le style est supprimé (et tous les autres arguments sont ignorés). Si <parameter>width</parameter> > 0, alors la couleur de la ligne devient (<parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter>). Les couleurs sont représentées en RGB. Le dernier paramètre <parameter>a</parameter> est optionnel. </para> <simpara> <function>swfshape->setline</function> accepte 1, 4 ou 5 arguments (mais jamais 3 ou 2). </simpara> <para> Vous devez déclarer un style avant de l'utiliser (voir exemple). </para> <para> Cet exemple enfantin dessine une chaîne "!#%*@", dans des couleurs marrantes et un style rigolo. <example> <title>Exemple <function>swfshape->setline</function></title> <programlisting role="php"><?php $s = new SWFShape(); $f1 = $s->addFill(0xff, 0, 0); $f2 = $s->addFill(0xff, 0x7f, 0); $f3 = $s->addFill(0xff, 0xff, 0); $f4 = $s->addFill(0, 0xff, 0); $f5 = $s->addFill(0, 0, 0xff); // erreur : il faut déclarer tous les styles avant // de les utiliser. $s->setLine(40, 0x7f, 0, 0); $s->setLine(40, 0x7f, 0x3f, 0); $s->setLine(40, 0x7f, 0x7f, 0); $s->setLine(40, 0, 0x7f, 0); $s->setLine(40, 0, 0, 0x7f); $f = new SWFFont('Techno.fdb'); $s->setRightFill($f1); $s->setLine(40, 0x7f, 0, 0); $s->drawGlyph($f, '!'); $s->movePen($f->getWidth('!'), 0); $s->setRightFill($f2); $s->setLine(40, 0x7f, 0x3f, 0); $s->drawGlyph($f, '#'); $s->movePen($f->getWidth('#'), 0); $s->setRightFill($f3); $s->setLine(40, 0x7f, 0x7f, 0); $s->drawGlyph($f, '%'); $s->movePen($f->getWidth('%'), 0); $s->setRightFill($f4); $s->setLine(40, 0, 0x7f, 0); $s->drawGlyph($f, '*'); $s->movePen($f->getWidth('*'), 0); $s->setRightFill($f5); $s->setLine(40, 0, 0, 0x7f); $s->drawGlyph($f, '@'); $m = new SWFMovie(); $m->setDimension(3000,2000); $m->setRate(12.0); $i = $m->add($s);// note la chaine est ici!!! $i->moveTo(1500-$f->getWidth("!#%*@")/2, 1000+$f->getAscent()/2); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.addfill"> <refnamediv> <refname>SWFShape->addFill</refname> <refpurpose>Ajoute un remplissage plein à la forme.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>SWFbitmap <parameter>bitmap</parameter></paramdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>SWFGradient <parameter>gradient</parameter></paramdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfshape->addfill</function> ajoute un remplissage plein à la forme. <function>swfshape->addfill</function> accepte trois différents types d'arguments. </para> <para> <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> est une couleur (format RGB). Le dernier paramètre <parameter>a</parameter> est optionnel. </para> <para> L'argument <parameter>bitmap</parameter> est un objet <function>swfbitmap</function>. Le paramètre <parameter>flags</parameter> peut être l'un des suivants : SWFFILL_CLIPPED_BITMAP ou SWFFILL_TILED_BITMAP. Par défault, c'est SWFFILL_TILED_BITMAP. Je crois. </para> <para> L'argument <parameter>gradient</parameter> est un objet <function>swfgradient</function>. L'argument <parameter>flags</parameter> peut alors prendre l'une des valeurs suivantes : SWFFILL_RADIAL_GRADIENT ou SWFFILL_LINEAR_GRADIENT. Par défaut, c'est SWFFILL_LINEAR_GRADIENT. Cette fois ci, j'en suis sûr. </para> <para> <function>swfshape->addfill</function> retourne un objet <function>swffill</function> à utiliser avec <function>swfshape->setleftfill</function>, et <function>swfshape->setrightfill</function> décrite un peu plus loin. </para> <simpara> Voir aussi <function>swfshape->setleftfill</function> et <function>swfshape->setrightfill</function>. </simpara> <para> Ceci est un exemple simple qui affiche un cadre sur une bitmap. Ah, il y a un petit bug dans le lecteur Flash : il ne semble pas faire grand cas de la transformation de la seconde forme en morphing. Suivant les specs, la bitmap devrait s'étirer avec la forme dans cet exemple... <example> <title>Exemple avec <function>swfshape->addfill</function></title> <programlisting role="php"><?php $p = new SWFMorph(); $b = new SWFBitmap("alphafill.jpg"); // utilisez vos propres bitmaps! $width = $b->getWidth(); $height = $b->getHeight(); $s = $p->getShape1(); $f = $s->addFill($b, SWFFILL_TILED_BITMAP); $f->moveTo(-$width/2, -$height/4); $f->scaleTo(1.0, 0.5); $s->setLeftFill($f); $s->movePenTo(-$width/2, -$height/4); $s->drawLine($width, 0); $s->drawLine(0, $height/2); $s->drawLine(-$width, 0); $s->drawLine(0, -$height/2); $s = $p->getShape2(); $f = $s->addFill($b, SWFFILL_TILED_BITMAP); // ces déplacements n'ont aucun effet $f->moveTo(-$width/4, -$height/2); $f->scaleTo(0.5, 1.0); $s->setLeftFill($f); $s->movePenTo(-$width/4, -$height/2); $s->drawLine($width/2, 0); $s->drawLine(0, $height); $s->drawLine(-$width/2, 0); $s->drawLine(0, -$height); $m = new SWFMovie(); $m->setDimension($width, $height); $i = $m->add($p); $i->moveTo($width/2, $height/2); for($n=0; $n<1.001; $n+=0.03) { $i->setRatio($n); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.setleftfill"> <refnamediv> <refname>SWFShape->setLeftFill</refname> <refpurpose>Modifie la couleur de rastérisation de gauche.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setleftfill</function></funcdef> <paramdef>swfgradient <parameter>fill</parameter></paramdef> </funcprototype> </funcsynopsis> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setleftfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> Tout ce sac de noeud fait qu'il y a deux couleurs de remplissage des lignes. Lorsque l'objet est rasterisé, il est pratique de savoir à l'avance quelle sont les remplissages, et le format SWF les demande. </para> <para> <function>swfshape->setleftfill</function> affecte à la couleur de rastérisation de gauche, c'est-à-dire l'intérieur d'un objet, si vous définissez les contours d'un objet dans le sens inverse des aiguilles d'une montre. L'objet de remplissage est un objet <function>swffill</function>, retourné par la fonction <function>swfshape->addfill</function> ci-dessus. </para> <para> Cela semble être le contraire lorsque vous défnissez une forme dans un morphing. Si votre navigateur crashe, essayez de placer le remplissage sur l'autre côté. </para> <simpara> Raccourci pour <literal>swfshape->setleftfill($s->addfill($r, $g, $b [, $a]));</literal>. </simpara> <simpara> Voir aussi <function>swfshape->setrightfill</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.setrightfill"> <refnamediv> <refname>SWFShape->setRightFill</refname> <refpurpose>Modifie la couleur de rastériation de droite.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setrightfill</function></funcdef> <paramdef>swfgradient <parameter>fill</parameter></paramdef> </funcprototype> </funcsynopsis> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setrightfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> Voir aussi <function>swfshape->setleftfill</function>. </simpara> <simpara> Raccourci pour <literal>swfshape->setrightfill($s->addfill($r, $g, $b [, $a]));</literal>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.movepento"> <refnamediv> <refname>SWFShape->movePenTo</refname> <refpurpose>Déplace le stylo.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->movepento</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->setrightfill</function> déplace le stylo dans la forme jusqu'au coordonnées globales (<parameter>x</parameter>,<parameter>y</parameter>). </simpara> <simpara> Voir aussi <function>swfshape->movepen</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->drawlineto</function> et <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.movepen"> <refnamediv> <refname>SWFShape->movePen</refname> <refpurpose>Déplace le stylo relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->movepen</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->setrightfill</function> déplace le stylo dans la forme depuis les coordonnées (current x,current y) jusqu'au coordonnées (current x + <parameter>dx</parameter>, current y + <parameter>dy</parameter>), dans l'espace de coordonnées de la forme. </simpara> <simpara> Voir aussi <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->drawlineto</function> et <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawlineto"> <refnamediv> <refname>SWFShape->drawLineTo</refname> <refpurpose>Dessine une ligne.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawlineto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->setrightfill</function> dessine une ligne (avec le style courant de ligne, modifié par <function>swfshape->setline</function>) depuis le point courant jusqu'au point (<parameter>x</parameter>,<parameter>y</parameter>) dans l'espace de coordonnées de la forme. </simpara> <simpara> Voir aussi <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->movepen</function> et <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawline"> <refnamediv> <refname>SWFShape->drawLine</refname> <refpurpose>Dessine une ligne relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawline</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->setrightfill</function> dessine une ligne (avec le style courant de ligne, modifié par <function>swfshape->setline</function>) depuis le point courant, et sur le déplacement de (<parameter>dx</parameter>,<parameter>dy</parameter>). </simpara> <simpara> Voir aussi <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->movepen</function> et <function>swfshape->drawlineto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawcurveto"> <refnamediv> <refname>SWFShape->drawCurveTo</refname> <refpurpose>Dessine une courbe.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawcurveto</function></funcdef> <paramdef>int <parameter>controlx</parameter></paramdef> <paramdef>int <parameter>controly</parameter></paramdef> <paramdef>int <parameter>anchorx</parameter></paramdef> <paramdef>int <parameter>anchory</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->drawcurveto</function> dessine une courbe quadratique (avec le style courant de ligne, modifié par <function>swfshape->setline</function>) depuis le point courant jusqu'au point (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) en utilisant (<parameter>controlx</parameter>,<parameter>controly</parameter>) comme point de contrôle. C'est-à-dire qu'il commence en allant vers le point de contrôle, puis se dirigie sur le point d'ancrrage. </simpara> <simpara> Voir aussi <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->movepento</function> et <function>swfshape->movepen</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawcurve"> <refnamediv> <refname>SWFShape->drawCurve</refname> <refpurpose>Dessine une courbe relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawcurve</function></funcdef> <paramdef>int <parameter>controldx</parameter></paramdef> <paramdef>int <parameter>controldy</parameter></paramdef> <paramdef>int <parameter>anchordx</parameter></paramdef> <paramdef>int <parameter>anchordy</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->drawcurve</function> dessine une courbe quadratique (avec le style courant de ligne, modifié par <function>swfshape->setline</function>) depuis le point courant jusqu'au point (<parameter>anchordx</parameter>,<parameter>anchordy</parameter>) relativement au point courant, et en utilisant le point de contrôle (<parameter>controldx</parameter>,<parameter>controldy</parameter>). C'est-à-dire qu'il commence en allant vers le point de contrôle, puis se dirigie sur le point d'ancrrage. </simpara> <simpara> Voir aussi <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->movepento</function> et <function>swfshape->movepen</function>. </simpara> </refsect1> </refentry><!-- SWFGradient --> <refentry id="function.swfgradient"> <refnamediv> <refname>SWFGradient</refname> <refpurpose>Crée un objet gradient</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfgradient</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfgradient</function> crée un nouvel objet gradient. </para> <simpara> Une fois que vous avez ajouté les couleurs à votre gradient, vous pouvez l'utiliser dans des formes, avec la fonction <function>swfshape->addfill</function>. </simpara> <simpara> SWFGradient a la méthode suivante : <function>swfgradient->addentry</function>. </simpara> <para> Cet exemple simple affiche un gradient noir-blanc comme fond, et un gradient concentrique au centre. <example> <title>Exemple avec <function>swfgradient</function></title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setDimension(320, 240); $s = new SWFShape(); // gradient noir-blanc $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(1.0, 0xff, 0xff, 0xff); $f = $s->addFill($g, SWFFILL_LINEAR_GRADIENT); $f->scaleTo(0.01); $f->moveTo(160, 120); $s->setRightFill($f); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m->add($s); $s = new SWFShape(); // gradient radial : rouge vers transparent $g = new SWFGradient(); $g->addEntry(0.0, 0xff, 0, 0, 0xff); $g->addEntry(1.0, 0xff, 0, 0, 0); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.005); $f->moveTo(160, 120); $s->setRightFill($f); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfgradient.addentry"> <refnamediv> <refname>SWFGradient->addEntry</refname> <refpurpose>Ajoute une couleur à la liste du gradient.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfgradient->addentry</function></funcdef> <paramdef>double <parameter>ratio</parameter></paramdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfgradient->addentry</function> ajoute une couleur à la liste des couleurs du gradient. <parameter>ratio</parameter> est un nombre de 0 à 1, qui indique l'ordre d'apparition des couleurs. Vous devez ajouter les couleurs dans l'ordre croissant de ratio. </para> <para> <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> représente une couleur, au format RGB. Le dernier paramètre <parameter>a</parameter> est optionnel. </para> </refsect1> </refentry><!-- SWFBitmap --> <refentry id="function.swfbitmap"> <refnamediv> <refname>SWFBitmap</refname> <refpurpose>Crée un objet bitmap</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfbitmap</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> <paramdef>int <parameter><optional>alphafilename</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbitmap</function> crée un objet bitmap à partir d'un fichier JPEG ou DBL, nommé <parameter>filename</parameter>. <parameter>alphafilename</parameter> indique un fichier de masque à utiliser comme canal alpha sur une image JPEG. </para> <note> <para> Seule les JPEG baseline (frame 0) sont supportés. Les baseline optimisée ou les JPEG progressives ne sont pas supportées. </para> </note> <simpara> SWFBitmap a les méthodes suivantes : <function>swfbitmap->getwidth</function> et <function>swfbitmap->getheight</function>. </simpara> <para> Il n'est pas possible d'importer directement des images PNG, il faut utiliser l'utilitaire de conversion <filename>png2dbl</filename> pour en faire un fichier .dbl ("define bits lossless"). La raison est que l'auteur ne souhaite pas de dépendance avec la librairie PNG. Le fichier d'autoconfiguration devrait régler ce problème, mais il n'est pas encore fait. <example> <title>Importation de fichiers PNG sous Ming</title> <programlisting role="php"><?php $s = new SWFShape(); $f = $s->addFill(new SWFBitmap("png.dbl")); $s->setRightFill($f); $s->drawLine(32, 0); $s->drawLine(0, 32); $s->drawLine(-32, 0); $s->drawLine(0, -32); $m = new SWFMovie(); $m->setDimension(32, 32); $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> Et vous pouvez ajouter un masque alpha sur une image JPEG. <example> <title>Exemple avec <function>swfbitmap</function></title> <programlisting role="php"><?php $s = new SWFShape(); //les fichiers .msk sont générés par l'utilitaire "gif2mask" $f = $s->addFill(new SWFBitmap("alphafill.jpg", "alphafill.msk")); $s->setRightFill($f); $s->drawLine(640, 0); $s->drawLine(0, 480); $s->drawLine(-640, 0); $s->drawLine(0, -480); $c = new SWFShape(); $c->setRightFill($c->addFill(0x99, 0x99, 0x99)); $c->drawLine(40, 0); $c->drawLine(0, 40); $c->drawLine(-40, 0); $c->drawLine(0, -40); $m = new SWFMovie(); $m->setDimension(640, 480); $m->setBackground(0xcc, 0xcc, 0xcc); // décide un fond à damier for($y=0; $y<480; $y+=40) { for($x=0; $x<640; $x+=80) { $i = $m->add($c); $i->moveTo($x, $y); } $y+=40; for($x=40; $x<640; $x+=80) { $i = $m->add($c); $i->moveTo($x, $y); } } $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfbitmap.getwidth"> <refnamediv> <refname>SWFBitmap->getWidth</refname> <refpurpose>Retourne la largeur d'une bitmap.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swfbitmap->getwidth</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbitmap->getwidth</function> retourne la largeur d'une bitmap, en pixels. </para> <para> Voir aussi <function>swfbitmap->getheight</function>. </para> </refsect1> </refentry> <refentry id="function.swfbitmap.getheight"> <refnamediv> <refname>SWFBitmap->getHeight</refname> <refpurpose>Retourne la hauteur d'une bitmap.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swfbitmap->getheight</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbitmap->getheight</function> retourne la hauteur d'une bitmap, en pixels. </para> <para> Voir aussi <function>swfbitmap->getwidth</function>. </para> </refsect1> </refentry><!-- SWFFill --> <refentry id="function.swffill"> <refnamediv> <refname>SWFFill</refname> <refpurpose>Crée un objet de remplissage</refpurpose> </refnamediv> <refsect1> <title>Description</title> <para> <function>swffill</function> vous permet de transformer une image bitmap ou un gradient. Les objets <function>swffill</function> sont créé par <function>swfshape->addfill</function>. </para> <simpara> SWFFill a les méthodes suivantes : <function>swffill->moveto</function>,<function>swffill->scaleto</function>, <function>swffill->rotateto</function>, <function>swffill->skewxto</function> et <function>swffill->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swffill.moveto"> <refnamediv> <refname>SWFFill->moveTo</refname> <refpurpose>Déplace l'origine de l'objet SWFFill</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffill->moveto</function> déplace l'origine de la forme jusqu'au point de coordonnées globales (<parameter>x</parameter>,<parameter>y</parameter>). </para> </refsect1> </refentry> <refentry id="function.swffill.scaleto"> <refnamediv> <refname>SWFFill->scaleTo</refname> <refpurpose>Modifie l'échelle de la forme</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->scaleto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffill->scaleto</function> modifie l'échelle de la forme de <parameter>x</parameter> dans le sens des abscisses et <parameter>y</parameter> dans le sens des ordonnées. </para> </refsect1> </refentry> <refentry id="function.swffill.rotateto"> <refnamediv> <refname>SWFFill->rotateTo</refname> <refpurpose>Tourne la forme</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->rotateto</function></funcdef> <paramdef>double <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffill->rotateto</function> tourne la forme depuis sont orientation initiale jusqu'à un angle de <parameter>degrees</parameter> degrés. </para> </refsect1> </refentry> <refentry id="function.swffill.skewxto"> <refnamediv> <refname>SWFFill->skewXTo</refname> <refpurpose>Incline (abscisses)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->skewxto</function></funcdef> <paramdef>double <parameter>x</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffill->skewxto</function> incline la forme de <parameter>x</parameter> suivant l'axe des abscisses. Si <parameter>x</parameter> vaut 1.0, l'inclinaison sera de 45¡ degrés, en avant. Si <parameter>x</parameter> vaut plus, l'inclinaison sera plus forte, et sinon, la forme sera plus droite. </para> </refsect1> </refentry> <refentry id="function.swffill.skewyto"> <refnamediv> <refname>SWFFill->skewYTo</refname> <refpurpose>Incline (ordonnées)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->skewyto</function></funcdef> <paramdef>double <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffill->skewyto</function> incline la forme de <parameter>y</parameter> suivant l'axe des abscisses. Si <parameter>y</parameter> vaut 1.0, l'inclinaison sera de 45¡ degrés, en avant. Si <parameter>x</parameter> vaut plus, l'inclinaison sera plus forte, et sinon, la forme sera plus droite. </para> </refsect1> </refentry><!-- SWFMorph --> <refentry id="function.swfmorph"> <refnamediv> <refname>SWFMorph</refname> <refpurpose>Crée un morphing.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfmorph</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmorph</function> crée un morphing. </para> <para> <function>swfmorph</function> s'appelle aussi "shape tween". C'est cet objet qui permet toutes ces superbes animations qui mettent à genou votre ordinateur. Joie! </para> <para> Les méthodes ici sont plutôt bizarres. Il serait tellement plus logique d'avoir seulement <literal>new SWFMorph(shape1, shape2);</literal>, mais, telles que sont les choses aujourd'hui, la deuxième forme a besoin de savoir qu'elle est l'aboutissement d'un morphing. (Tout cela, parceque Flash commence à dessiner aussitôt qu'il a les commandes de dessins. S'il conservait les descriptions de ses propres formes, et attendait leur totalité avant d'écrire, ceci et bien d'autres choses serait tellement plus simple). </para> <simpara> SWFMorph a les méthodes suivantes : <function>swfmorph->getshape1</function> et <function>swfmorph->getshape1</function>. </simpara> <para> Cet exemple simple effectue le morphing d'une gros carré rouge en un carré plus petit, bleu et bordé de noir. <example> <title>Exemple avec <function>swfmorph</function></title> <programlisting role="php"><?php $p = new SWFMorph(); $s = $p->getShape1(); $s->setLine(0,0,0,0); /* Notez que cela se fait dans l'ordre inverse de l'ordre habituel (gauche au lieu de droite), mais je n'ai aucune idée de pourquoi... */ $s->setLeftFill($s->addFill(0xff, 0, 0)); $s->movePenTo(-1000,-1000); $s->drawLine(2000,0); $s->drawLine(0,2000); $s->drawLine(-2000,0); $s->drawLine(0,-2000); $s = $p->getShape2(); $s->setLine(60,0,0,0); $s->setLeftFill($s->addFill(0, 0, 0xff)); $s->movePenTo(0,-1000); $s->drawLine(1000,1000); $s->drawLine(-1000,1000); $s->drawLine(-1000,-1000); $s->drawLine(1000,-1000); $m = new SWFMovie(); $m->setDimension(3000,2000); $m->setBackground(0xff, 0xff, 0xff); $i = $m->add($p); $i->moveTo(1500,1000); for($r=0.0; $r<=1.0; $r+=0.1) { $i->setRatio($r); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfmorph.getshape1"> <refnamediv> <refname>SWFMorph->getshape1</refname> <refpurpose>Sélectionne la forme de départ</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>mixed <function>swfmorph->getshape1</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmorph->getshape1</function> sélectionne la forme de début de morphing. <function>swfmorph->getshape1</function> retourne un objet <function>swfshape</function>. </para> </refsect1> </refentry> <refentry id="function.swfmorph.getshape2"> <refnamediv> <refname>SWFMorph->getshape2</refname> <refpurpose>Sélectionne la forme de fin</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>mixed <function>swfmorph->getshape2</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmorph->getshape2</function> sélectionne la forme de début de morphing. <function>swfmorph->getshape2</function> retourne un objet <function>swfshape</function>. </para> </refsect1> </refentry><!-- SWFText --> <refentry id="function.swftext"> <refnamediv> <refname>SWFText</refname> <refpurpose>Crée un nouvel objet texte.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swftext</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext</function> crée un nouvel objet texte, prêt à être manipulé. </para> <simpara> SWFText a les méthodes suivantes : <function>swftext->setfont</function>, <function>swftext->setheight</function>, <function>swftext->setspacing</function>, <function>swftext->setcolor</function>, <function>swftext->moveto</function>, <function>swftext->addstring</function> et <function>swftext->getwidth</function>. </simpara> <para> Cet exemple simple va afficher la phrase "PHP fait du Flash avec Ming" sur un fond blanc. <example> <title>Exemle avec <function>swftext</function></title> <programlisting role="php"><?php $f = new SWFFont("Techno.fdb"); $t = new SWFText(); $t->setFont($f); $t->moveTo(200, 2400); $t->setColor(0xff, 0xff, 0); $t->setHeight(1200); $t->addString("PHP fait du Flash avec Ming!!"); $m = new SWFMovie(); $m->setDimension(5400, 3600); $m->add($t); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swftext.setfont"> <refnamediv> <refname>SWFText->setFont</refname> <refpurpose>Sélectionne la police courante</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setfont</function></funcdef> <paramdef>string <parameter>font</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->setfont</function> remplace la police courante par <parameter>font</parameter>. </para> </refsect1> </refentry> <refentry id="function.swftext.setheight"> <refnamediv> <refname>SWFText->setHeight</refname> <refpurpose>Modifie la hauteur de la police courante</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setheight</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->setheight</function> fixe la hauteur courante de la police courante à <parameter>height</parameter>. Par défaut, c'est 240. </para> </refsect1> </refentry> <refentry id="function.swftext.setspacing"> <refnamediv> <refname>SWFText->setSpacing</refname> <refpurpose>Modifie l'espacement de police</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setspacing</function></funcdef> <paramdef>double <parameter>spacing</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->setspacing</function> fixe l'espacement de police à <parameter>spacing</parameter><parameter>spacing</parameter>. Par défaut, c'est 1.0. 0 signifie que toutes les lettres seront écrites au même point. Cela fonctionne pas terrible, car l'avance des lettres augmente, et l'espacement entre lettre n'est pas toujours le même. Il faudra que je l'explique plus clairement. Ou bien que je corrige les erreurs. </para> </refsect1> </refentry> <refentry id="function.swftext.setcolor"> <refnamediv> <refname>SWFText->setColor</refname> <refpurpose>Modifie la couleur de la police</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setcolor</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->setspacing</function> change la couleur de la police courante. Par défaut, c'est noir. La couleur est représentée avec la convention RGB. </para> </refsect1> </refentry> <refentry id="function.swftext.moveto"> <refnamediv> <refname>SWFText->moveTo</refname> <refpurpose>Déplace le stylo de texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->moveto</function> déplace le style (ou le curseur, si ça a un sens) jusqu'au coordonnées (<parameter>x</parameter>,<parameter>y</parameter>) dans l'espace de coordonnées du texte. Si <parameter>x</parameter> ou <parameter>y</parameter> vaut 0, la valeur de coordonnées de la dimension reste la même. C'est ennuyeux, et cela devrait être corrigé. </para> </refsect1> </refentry> <refentry id="function.swftext.addstring"> <refnamediv> <refname>SWFText->addString</refname> <refpurpose>Ajoute du texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->addstring</function> ajoute le texte <parameter>string</parameter> au texte courant, et le dessine. Le stylo est situé sur la ligne de base du texte, c'est-à-dire que le texte sera écrit horizontalement. </para> </refsect1> </refentry> <refentry id="function.swftext.getwidth"> <refnamediv> <refname>SWFText->getWidth</refname> <refpurpose>Calcule la longueur d'une chaîne</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->addstring</function> retourne la taille de la chaîne <parameter>string</parameter>, une fois qu'elle est dessinée avec la police et l'espaceement courant. </para> </refsect1> </refentry><!-- SWFFont --> <refentry id="function.swffont"> <refnamediv> <refname>SWFFont</refname> <refpurpose>Charge une police</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swffont</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> </funcprototype> </funcsynopsis> <para> si <parameter>filename</parameter> est le nom d'un fichier FDB (i.e., si le nom de fichier se termine par ".fdb"), charge la police. </para> <para> FDB ("font definition block") est un petit utilitaire pour Flash DefineFont2 qui contient une description complète de la police. Vous pouvez créer des fichiers FDB à partir du "SWT Generator", qui est inclus avec les utilitaires makefdb - regardez dans le dossier utilitaire de Ming. </para> <para> Les polices utilisateurs ne contiennent aucune information autre que le nom de la police. On suppose que la police sera elle-même accessible au lecteur. Les polices "_serif", "_sans", et "_typewriter" doivent être universellement disponibles. Par exemple : <programlisting role="php"><?php$f = newSWFFont("_sans");?> </programlisting> vous donne la police standard "sans-serif", probablement identique à celle que vous obtenez avec le code <literal><font name="sans-serif"></literal>. </para> <para> <function>swffont</function> retourne une ressource de police, à utiliser avec les méthodes <function>swftext->setfont</function> et <function>swftextfield->setfont</function>. </para> <simpara> SWFFont a les méthodes suivantes : <function>swffont->getwidth</function>. </simpara> </refsect1> </refentry> <refentry id="function.swffont.getwidth"> <refnamediv> <refname>swffont->getwidth</refname> <refpurpose>Retourne la taille de la chaîne</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swffont->getwidth</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffont->getwidth</function> retourne la taille de la chaîne <parameter>string</parameter>, avec la police courante. Vous utiliserez plutôt la même méthode de l'objet <function>swftext</function>, qui utilise les paramètres de l'objet. </para> </refsect1> </refentry><!-- SWFTextField --> <refentry id="function.swftextfield"> <refnamediv> <refname>SWFTextField</refname> <refpurpose>Crée un nouveau champs texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swftextfield</function></funcdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield</function> crée un nouveau champs texte. Les champs textes sont moins souples que les <function>swftext</function>, car ils ne peuvent être tournés, mis à l'échelle ou incliné, mais ils peuvent être utilisés sous forme de champs de formulaire, et ils peuvent utiliser des polices navigateur. </para> <para> Les flags optionnels modifient les comportements du champs. Ils peuvent prendre les valeurs suivantes : <itemizedlist> <listitem> <simpara> SWFTEXTFIELD_NOEDIT : indique que le champs ne doit pas être éditable. </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_PASSWORD : indique que c'est un champs mot de passe </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_DRAWBOX : dessine le contour du champs </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_MULTILINE : autorise les lignes multiples </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_WORDWRAP : autorise la mise en forme du texte </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_NOSELECT : rend le champs non-sélectionnable </simpara> </listitem> </itemizedlist> Les flags peuvent être combinés avec l'opérateur <link linkend="language.operators.bitwise">OR</link>. Par exemple : <programlisting role="php"><?php$t = newSWFTextField(SWFTEXTFIELD_PASSWORD | SWFTEXTFIELD_NOEDIT);?> </programlisting> crée un champs de mot de passe totalement inéditable (et inutile). </para> <simpara> SWFTextField a les méthodes suivantes : <function>swftextfield->setfont</function>, <function>swftextfield->setbounds</function>, <function>swftextfield->align</function>, <function>swftextfield->setheight</function>, <function>swftextfield->setleftmargin</function>, <function>swftextfield->setrightmargin</function>, <function>swftextfield->setmargins</function>, <function>swftextfield->setindentation</function>, <function>swftextfield->setlinespacing</function>, <function>swftextfield->setcolor</function>, <function>swftextfield->setname</function> et <function>swftextfield->addstring</function>. </simpara> </refsect1> </refentry> <refentry id="function.swftextfield.setfont"> <refnamediv> <refname>SWFTextField->setFont</refname> <refpurpose>Modifie la police du champs</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setfont</function></funcdef> <paramdef>string <parameter>font</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setfont</function> remplace la police courante par la police <parameter>font</parameter> (police client?). </para> </refsect1> </refentry> <refentry id="function.swftextfield.setbounds"> <refnamediv> <refname>SWFTextField->setbounds</refname> <refpurpose>Sélectionne la largeur et hauteur du champs</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setbounds</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setbounds</function> fixe la longueu du champs à <parameter>width</parameter> et sa hauteur à <parameter>height</parameter>. Si vous ne fixez pas les bords vous-mêmes, Ming tentera de les deviner lui-même (mais ne le laissez pas faire!!). </para> </refsect1> </refentry> <refentry id="function.swftextfield.align"> <refnamediv> <refname>SWFTextField->align</refname> <refpurpose>Modifie l'alignement du texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->align</function></funcdef> <paramdef>int <parameter>alignement</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->align</function> change l'alignement du texte par <parameter>alignement</parameter>. Les valeurs valides pour <parameter>alignement</parameter> sont : SWFTEXTFIELD_ALIGN_LEFT, SWFTEXTFIELD_ALIGN_RIGHT, SWFTEXTFIELD_ALIGN_CENTER et SWFTEXTFIELD_ALIGN_JUSTIFY. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setheight"> <refnamediv> <refname>SWFTextField->setHeight</refname> <refpurpose>Modifie la hauteur de la police du champs texte.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setheight</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setheight</function> modifie la hauteur de la police du champs texte par <parameter>height</parameter>. Par défaut, c'est 240. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setleftmargin"> <refnamediv> <refname>SWFTextField->setLeftMargin</refname> <refpurpose>Modifie la marge de gauche.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setleftmargin</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setleftmargin</function> modifie la marge de gauche du champs texte à <parameter>width</parameter>. Par défaut, c'est 0. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setrightmargin"> <refnamediv> <refname>SWFTextField->setrightMargin</refname> <refpurpose>Modifie la marge de droite.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setrightmargin</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setrightmargin</function> modifie la marge de gauche du champs texte à <parameter>width</parameter>. Par défaut, c'est </para> </refsect1> </refentry> <refentry id="function.swftextfield.setmargins"> <refnamediv> <refname>SWFTextField->setMargins</refname> <refpurpose>Modifie les marges du champs texte.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setmargins</function></funcdef> <paramdef>int <parameter>left</parameter></paramdef> <paramdef>int <parameter>right</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setmargins</function> modifie les deux marges du champs texte : <parameter>left</parameter> sera la nouvelle largeur de la marge de gauche, et <parameter>right</parameter>, celle de gauche. Par défaut, elles sont toutes les deux à 0. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setindentation"> <refnamediv> <refname>SWFTextField->setindentation</refname> <refpurpose>Modifie l'indentation de la première ligne.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setindentation</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setindentation</function> modifie l'indentation de la première ligne du champs texte, en la fixant à <parameter>width</parameter>. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setlinespacing"> <refnamediv> <refname>SWFTextField->setLineSpacing</refname> <refpurpose>Modifie l'espacement de lignes.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setlinespacing</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setlinespacing</function> modifie l'espacement de lignes, en le fixant à <parameter>height</parameter>. Par défaut, c'est 40. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setcolor"> <refnamediv> <refname>SWFTextField->setcolor</refname> <refpurpose>Modifie la couleur du champs texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setcolor</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setcolor</function> modifie la couleur du champs texte, en la remplaçant par la couleur fournie. Par défaut, c'est noir opaque. Les couleurs sont représentées en convention RGB. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setname"> <refnamediv> <refname>SWFTextField->setname</refname> <refpurpose>Nomme le champs texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setname</function></funcdef> <paramdef>string <parameter>name</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setname</function> baptise le champs texte <parameter>name</parameter>. Cela servira pour les formulaires et les actions. </para> </refsect1> </refentry> <refentry id="function.swftextfield.addstring"> <refnamediv> <refname>SWFTextField->addstring</refname> <refpurpose>Ajoute au texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setname</function> concatène la chaîne <parameter>string</parameter> avec la chaîne courante. </para> </refsect1> </refentry><!-- SWFSprite --> <refentry id="function.swfsprite"> <refnamediv> <refname>SWFSprite</refname> <refpurpose>Crée un sprite</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfsprite</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfsprite</function> sont aussi connue sous le nom de "clip" : ils permettent la création d'objet animé dans une animation, avec un scénario propre. De ce fait, un sprite a les mêmes méthodes qu'une animation. </para> <simpara> <function>swfsprite</function> a les méthodes suivantes : <function>swfsprite->add</function>, <function>swfsprite->remove</function>, <function>swfsprite->nextframe</function> et <function>swfsprite->setframes</function>. </simpara> <para> Ce exemple pratique fait tourner un superbe carré rouge. <example> <title>Exemple de <function>swfsprite</function></title> <programlisting role="php"><?php $s = new SWFShape(); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->movePenTo(-500,-500); $s->drawLineTo(500,-500); $s->drawLineTo(500,500); $s->drawLineTo(-500,500); $s->drawLineTo(-500,-500); $p = new SWFSprite(); $i = $p->add($s); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $m = new SWFMovie(); $i = $m->add($p); $i->moveTo(1500,1000); $i->setName("blah"); $m->setBackground(0xff, 0xff, 0xff); $m->setDimension(3000,2000); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfsprite.add"> <refnamediv> <refname>SWFSprite->add</refname> <refpurpose>Ajoute un objet à un sprite</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>mixed <function>swfsprite->add</function></funcdef> <paramdef>ressource <parameter>object</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfsprite->add</function> ajoute une <function>swfshape</function>, un <function>swfbutton</function>, un <function>swftext</function>, une <function>swfaction</function> ou une autre animation <function>swfsprite</function>. </para> <para> Pour les objets affichables (<function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function>, <function>swfaction</function> or <function>swfsprite</function>), cela retourne une ressource sur l'objet dans la liste d'affichage. </para> </refsect1> </refentry> <refentry id="function.swfsprite.remove"> <refnamediv> <refname>SWFSprite->remove</refname> <refpurpose>Supprime un objet dans un sprite</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->remove</function></funcdef> <paramdef>ressource <parameter>object</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfsprite->remove</function> supprime une <function>swfshape</function>, un <function>swfbutton</function>, un <function>swftext</function>, une <function>swfaction</function> ou un <function>swfsprite</function> du sprite courant. </para> </refsect1> </refentry> <refentry id="function.swfsprite.setframes"> <refnamediv> <refname>SWFSprite->setframes</refname> <refpurpose>Fixe le nombre maximum d'image dans le sprite.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->setframes</function></funcdef> <paramdef>int <parameter>numberofframes</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfsprite->setframes</function> fixe le nombre total d'images de l'animation à <parameter>numberofframes</parameter>. </para> </refsect1> </refentry> <refentry id="function.swfsprite.nextframe"> <refnamediv> <refname>SWFSprite->nextframe</refname> <refpurpose>Va à la prochaine image du sprite.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->nextframe</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfsprite->setframes</function> se déplace à la prochaine image du sprite. </para> </refsect1> </refentry><!-- SWFButton --> <refentry id="function.swfbutton"> <refnamediv> <refname>SWFbutton</refname> <refpurpose>Crée un nouveau bouton.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfbutton</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton</function> crée un nouveau bouton. Cliquez-le, passez la souris dessus, et appelez des actions. Facile! </para> <simpara> SWFButton a les méthodes suivantes : <function>swfbutton->addshape</function>, <function>swfbutton->setup</function>, <function>swfbutton->setover</function> <function>swfbutton->setdown</function>, <function>swfbutton->sethit</function> <function>swfbutton->setaction</function> et <function>swfbutton->addaction</function>. </simpara> <para> Cet exemple simplissime vous montre comme faire un roll-over, un roll-on, un clic, un relaché de souris, et rien du tout (pas d'action). <example> <title>Exemple avec <function>swfbutton</function></title> <programlisting role="php"><?php $f = new SWFFont("_serif"); $p = new SWFSprite(); function label($string) { global $f; $t = new SWFTextField(); $t->setFont($f); $t->addString($string); $t->setHeight(200); $t->setBounds(3200,200); return $t; } function addLabel($string) { global $p; $i = $p->add(label($string)); $p->nextFrame(); $p->remove($i); } $p->add(new SWFAction("stop();")); addLabel("NO ACTION"); addLabel("SWFBUTTON_MOUSEUP"); addLabel("SWFBUTTON_MOUSEDOWN"); addLabel("SWFBUTTON_MOUSEOVER"); addLabel("SWFBUTTON_MOUSEOUT"); addLabel("SWFBUTTON_MOUSEUPOUTSIDE"); addLabel("SWFBUTTON_DRAGOVER"); addLabel("SWFBUTTON_DRAGOUT"); function rect($r, $g, $b) { $s = new SWFShape(); $s->setRightFill($s->addFill($r, $g, $b)); $s->drawLine(600,0); $s->drawLine(0,600); $s->drawLine(-600,0); $s->drawLine(0,-600); return $s; } $b = new SWFButton(); $b->addShape(rect(0xff, 0, 0), SWFBUTTON_UP | SWFBUTTON_HIT); $b->addShape(rect(0, 0xff, 0), SWFBUTTON_OVER); $b->addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(1);"), SWFBUTTON_MOUSEUP); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(2);"), SWFBUTTON_MOUSEDOWN); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(3);"), SWFBUTTON_MOUSEOVER); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(4);"), SWFBUTTON_MOUSEOUT); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(5);"), SWFBUTTON_MOUSEUPOUTSIDE); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(6);"), SWFBUTTON_DRAGOVER); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(7);"), SWFBUTTON_DRAGOUT); $m = new SWFMovie(); $m->setDimension(4000,3000); $i = $m->add($p); $i->setName("label"); $i->moveTo(400,1900); $i = $m->add($b); $i->moveTo(400,900); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> Cet exemple simple illustre le déplacement d'un gros bouton rouge dans la fenêtre. Ce n'est pas du tirer-déposer, mais juste du tirer. <example> <title>Exemple avec <function>swfbutton->addaction</function></title> <programlisting role="php"><?php $s = new SWFShape(); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->drawLine(1000,0); $s->drawLine(0,1000); $s->drawLine(-1000,0); $s->drawLine(0,-1000); $b = new SWFButton(); $b->addShape($s, SWFBUTTON_HIT | SWFBUTTON_UP | SWFBUTTON_DOWN | SWFBUTTON_OVER); $b->addAction(new SWFAction("startDrag('/test', 0);"), SWFBUTTON_MOUSEDOWN);// '0' signifie : ne pas verrouiller la souris $b->addAction(new SWFAction("stopDrag();"), SWFBUTTON_MOUSEUP | SWFBUTTON_MOUSEUPOUTSIDE); $p = new SWFSprite(); $p->add($b); $p->nextFrame(); $m = new SWFMovie(); $i = $m->add($p); $i->setName('test'); $i->moveTo(1000,1000); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfbutton.addshape"> <refnamediv> <refname>SWFbutton->addShape</refname> <refpurpose>Ajoute une forme à un bouton</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->addshape</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> <paramdef>int <parameter>flags</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->addshape</function> ajoute la forme <parameter>shape</parameter> au bouton. Les valeurs possibles de <parameter>flags</parameter> sont : SWFBUTTON_UP, SWFBUTTON_OVER, SWFBUTTON_DOWN ou SWFBUTTON_HIT. SWFBUTTON_HIT n'est même pas affiché, elle désigne la région du clic d'un bouton. C'est-à-dire que tous points où le bouton est déssiné est considéré comme accessible. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setup"> <refnamediv> <refname>SWFbutton->setUp</refname> <refpurpose>Alias de SWFbutton->addShape(shape, SWFBUTTON_UP)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setup</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->setup</function> est un alias pour <literal>SWFbutton->addShape(shape, SWFBUTTON_UP)</literal>. </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setover"> <refnamediv> <refname>SWFbutton->setOver</refname> <refpurpose>Alias de addShape(shape, SWFBUTTON_OVER)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setover</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->setover</function> est un alias pour <literal>addShape(shape, SWFBUTTON_OVER)</literal>. </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setdown"> <refnamediv> <refname>SWFbutton->setDown</refname> <refpurpose>Alias de addShape(shape, SWFBUTTON_DOWN)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setdown</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->setdown</function> est un alias pour <literal>addShape(shape, SWFBUTTON_DOWN)</literal>. </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.sethit"> <refnamediv> <refname>SWFbutton->setHit</refname> <refpurpose>Alias de addShape(shape, SWFBUTTON_HIT)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->sethit</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->sethit</function> est un alias pour <literal>addShape(shape, SWFBUTTON_HIT)</literal>. </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.addaction"> <refnamediv> <refname>SWFbutton->addAction</refname> <refpurpose>Ajoute une action au bouton</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->addaction</function></funcdef> <paramdef>ressource <parameter>action</parameter></paramdef> <paramdef>int <parameter>flags</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->setaction</function> ajoute l'action <parameter>action</parameter> (créée par <function>swfaction</function>) au bouton courant, dans les conditions précisées par <parameter>flags</parameter>. Les valeurs valides de <parameter>flags</parameter> sont : SWFBUTTON_MOUSEOVER, SWFBUTTON_MOUSEOUT, SWFBUTTON_MOUSEUP, SWFBUTTON_MOUSEUPOUTSIDE, SWFBUTTON_MOUSEDOWN, SWFBUTTON_DRAGOUT et SWFBUTTON_DRAGOVER </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setaction"> <refnamediv> <refname>SWFbutton->setAction</refname> <refpurpose>Assigne l'action du bouton</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setaction</function></funcdef> <paramdef>ressource <parameter>action</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->setaction</function> assigne l'action qui sera exécutée lorsque le bouton sera cliqué. C'est un alias de <literal>addAction(shape, SWFBUTTON_MOUSEUP)</literal>. <parameter>action</parameter> est une <function>swfaction</function>. </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry><!-- SWFAction --> <refentry id="function.swfaction"> <refnamediv> <refname>SWFAction</refname> <refpurpose>Crée une nouvelle action.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfaction</function></funcdef> <paramdef>string <parameter>script</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfaction</function> crée une nouvelle action, et compile le script <parameter>script</parameter>. </para> <para> La syntaxe du script est basée sur le langage C, mais il utilise aussi beaucoup de notions propres à SWF : le bytecode SWF est trop simpliste pour faire l'essentiel de ce que l'on veut. Par exemple, il n'est pas possible de faire des fonctions sans descendre profondément dans les entrailles de la machine, car le bytecode de saut est écrit en dur. Pas moyen de pousser une adresse dans la pile, ou de dépiler - Chaque fonction doit savoir exactement où elle retourne. </para> <para> Alors, que reste-t-il? Le compilateur reconnaît les mots suivants : <itemizedlist> <listitem> <simpara> break </simpara> </listitem> <listitem> <simpara> for </simpara> </listitem> <listitem> <simpara> continue </simpara> </listitem> <listitem> <simpara> if </simpara> </listitem> <listitem> <simpara> else </simpara> </listitem> <listitem> <simpara> do </simpara> </listitem> <listitem> <simpara> while </simpara> </listitem> </itemizedlist> </para> <para> Il n'y a pas de type de données : toutes les valeurs de SWF sont stockées comme des chaînes de caractères. Les fonctions suivantes peuvent être utilisées dans les expressions : <variablelist> <varlistentry> <term>time()</term> <listitem> <simpara> Retourne le nombre de milli-secondes depuis le début de l'animation. </simpara> </listitem> </varlistentry> <varlistentry> <term>random(seed)</term> <listitem> <simpara> Retourne un nombre pseudo-aléatoire, entre 0 et seed. </simpara> </listitem> </varlistentry> <varlistentry> <term>length(expr)</term> <listitem> <simpara> Retourne la taille de l'expression donnée. </simpara> </listitem> </varlistentry> <varlistentry> <term>int(number)</term> <listitem> <simpara> Retourne le nombre number, arrondi à l'entier inférieur le plus proche. </simpara> </listitem> </varlistentry> <varlistentry> <term>concat(expr, expr)</term> <listitem> <simpara> Retourne la concaténation des deux expressions. </simpara> </listitem> </varlistentry> <varlistentry> <term>ord(expr)</term> <listitem> <simpara> Retourne le code ASCII du caractère expr. </simpara> </listitem> </varlistentry> <varlistentry> <term>chr(num)</term> <listitem> <simpara> Retourne le caractère pour le code ASCII num. </simpara> </listitem> </varlistentry> <varlistentry> <term>substr(string, location, length)</term> <listitem> <simpara> Retourne la sous-chaîne, extraite de string, de longueur length et commençant au caractère location. </simpara> </listitem> </varlistentry> </variablelist> </para> <para> De plus, les commandes suivantes sont accessibles : <variablelist> <varlistentry> <term>duplicateClip(clip, name, depth)</term> <listitem> <simpara> Duplique le sprite nommé clip. La nouvelle animation a le nouveau nom name et la profondeur depth. </simpara> </listitem> </varlistentry> <varlistentry> <term>removeClip(expr)</term> <listitem> <simpara> Supprime l'animation nommée expr. </simpara> </listitem> </varlistentry> <varlistentry> <term>trace(expr)</term> <listitem> <simpara> Ecrit l'expression expr dans le fichier de d'historique. Il est peut probable que le navigateur ou le lecteur ne fasse quoi que ce soit avec. </simpara> </listitem> </varlistentry> <varlistentry> <term>startDrag(target, lock, [left, top, right, bottom])</term> <listitem> <simpara> Comment à déplacer l'animation target. L'argument lock indique si le déplacement verrouille la souris (utilisez 0, &false;) ou 1 (&true;)). Les paramètres optionnels délimitent la zone de déplacement. </simpara> </listitem> </varlistentry> <varlistentry> <term>stopDrag()</term> <listitem> <simpara> Cesse le déplacement de l'animation. </simpara> </listitem> </varlistentry> <varlistentry> <term>callFrame(expr)</term> <listitem> <simpara> Appelle l'image expr comme une fonction. </simpara> </listitem> </varlistentry> <varlistentry> <term>getURL(url, target, [method])</term> <listitem> <simpara> Charge l'URL url dans l'objet target. target peut être l'image courante (je pense) ou une des valeurs magiques "_level0" (remplace l'animation courante) ou "_level1" (charge une nouvelle animation à la place de la courante). L'argument optionnel method peut être post ou get, si vous voulez envoyer des variables au serveur. </simpara> </listitem> </varlistentry> <varlistentry> <term>loadMovie(url, target)</term> <listitem> <simpara> La même chose que ci-dessus, plus ou moins. En fait, je ne sais pas trop quelle est la différence. </simpara> </listitem> </varlistentry> <varlistentry> <term>nextFrame()</term> <listitem> <simpara> Va à l'image suivante. </simpara> </listitem> </varlistentry> <varlistentry> <term>prevFrame()</term> <listitem> <simpara> Va à l'image précédente. </simpara> </listitem> </varlistentry> <varlistentry> <term>play()</term> <listitem> <simpara> Joue l'animation. </simpara> </listitem> </varlistentry> <varlistentry> <term>stop()</term> <listitem> <simpara> Cesse de jouer l'animation. </simpara> </listitem> </varlistentry> <varlistentry> <term>toggleQuality()</term> <listitem> <simpara> Passe de haute en basse qualité (et vice-versa). </simpara> </listitem> </varlistentry> <varlistentry> <term>stopSounds()</term> <listitem> <simpara> Cesse de jouer les sons. </simpara> </listitem> </varlistentry> <varlistentry> <term>gotoFrame(num)</term> <listitem> <simpara> Va à l'image numéro num. Les images sont numérotées à partir de 0. </simpara> </listitem> </varlistentry> <varlistentry> <term>gotoFrame(name)</term> <listitem> <simpara> Va à l'image nommée name. Ce qui est carrément cool, car les labels ne sont pas encore supportés pour les images. </simpara> </listitem> </varlistentry> <varlistentry> <term>setTarget(expr)</term> <listitem> <simpara> Modifie le contexte de l'action. C'est ce qu'ils disent, mais je n'ai pas trop d'idées là-dessus. </simpara> </listitem> </varlistentry> </variablelist> Et il y a un truc bizarre : l'expression frameLoaded(num) peut être utilise dans les conditions if et dans les boucles while pour vérifier si une image a été chargée. En tous cas, c'est ce qu'il est supposé faire, mais je ne l'ai jamais testé, et je doute sérieusement que cela fonctionne. Vous pouvez utiliser plutôt /:framesLoaded à la place. </para> <para> Les sprites ont des propriétés. Vous pouvez les lire toutes (vraiment?), en modifier quelques unes. Les voici : <itemizedlist> <listitem> <simpara> x </simpara> </listitem> <listitem> <simpara> y </simpara> </listitem> <listitem> <simpara> xScale </simpara> </listitem> <listitem> <simpara> yScale </simpara> </listitem> <listitem> <simpara> currentFrame - (lecture seule) </simpara> </listitem> <listitem> <simpara> totalFrames - (lecture seule) </simpara> </listitem> <listitem> <simpara> alpha - Niveau de transparence </simpara> </listitem> <listitem> <simpara> visible - 1=on, 0=off (?) </simpara> </listitem> <listitem> <simpara> width - (lecture seule) </simpara> </listitem> <listitem> <simpara> height - (lecture seule) </simpara> </listitem> <listitem> <simpara> rotation </simpara> </listitem> <listitem> <simpara> target - (lecture seule) (???) </simpara> </listitem> <listitem> <simpara> framesLoaded - (lecture seule) </simpara> </listitem> <listitem> <simpara> name </simpara> </listitem> <listitem> <simpara> dropTarget - (lecture seule) (???) </simpara> </listitem> <listitem> <simpara> url - (lecture seule) (???) </simpara> </listitem> <listitem> <simpara> highQuality - 1=high, 0=low (?) </simpara> </listitem> <listitem> <simpara> focusRect - (???) </simpara> </listitem> <listitem> <simpara> soundBufTime - (???) </simpara> </listitem> </itemizedlist> Modifier la position d'un sprite est aussi simple que <literal>/box.x = 100;</literal>. Pourquoi le slash initial? C'est comme cela que Flash garde la trace des sprites dans les animations, un peu comme des fichiers sous Unix. Si le sprite qui s'appelle box a lui-même un autre sprite appelé biff, vous pouvez y accéder avec la commande <literal>/box/biff.x = 100;</literal>. En tous cas, ça marche pour moi. Corrigez moi si c'est faux!. </para> <para> Cet exemple simple va déplacer le gros carré rouge dans la fenêtre. <example> <title>Exemple avec <function>swfaction</function></title> <programlisting role="php"><?php $s = new SWFShape(); $f = $s->addFill(0xff, 0, 0); $s->setRightFill($f); $s->movePenTo(-500,-500); $s->drawLineTo(500,-500); $s->drawLineTo(500,500); $s->drawLineTo(-500,500); $s->drawLineTo(-500,-500); $p = new SWFSprite(); $i = $p->add($s); $i->setDepth(1); $p->nextFrame(); for($n=0; $n<5; ++$n) { $i->rotate(-15); $p->nextFrame(); } $m = new SWFMovie(); $m->setBackground(0xff, 0xff, 0xff); $m->setDimension(6000,4000); $i = $m->add($p); $i->setDepth(1); $i->moveTo(-500,2000); $i->setName("box"); $m->add(new SWFAction("/box.x += 3;")); $m->nextFrame(); $m->add(new SWFAction("gotoFrame(0); play();")); $m->nextFrame(); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> Cet exemple suit votre souris sur l'écran. <example> <title>Exemple avec <function>swfaction</function></title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setRate(36.0); $m->setDimension(1200, 800); $m->setBackground(0, 0, 0); /* sprite de suivi de souris : vide, mais il suit la souris de manière à ce que nous connaissions ses coordonnées*/ $i = $m->add(new SWFSprite()); $i->setName('mouse'); $m->add(new SWFAction(" startDrag('/mouse', 1); /* '1' signifie verrouiller la souris */ ")); /* On peut tout simplement virer l'anti-aliasing, car il n'y a que des gros carrés, finalement */ $m->add(new SWFAction(" this.quality = 0; ")); /* boîte de morphing */ $r = new SWFMorph(); $s = $r->getShape1(); /* Notez que ce n'est pas pratique pour les formes habituelles. Aucune idée de pourquoi */ $s->setLeftFill($s->addFill(0xff, 0xff, 0xff)); $s->movePenTo(-40, -40); $s->drawLine(80, 0); $s->drawLine(0, 80); $s->drawLine(-80, 0); $s->drawLine(0, -80); $s = $r->getShape2(); $s->setLeftFill($s->addFill(0x00, 0x00, 0x00)); $s->movePenTo(-1, -1); $s->drawLine(2, 0); $s->drawLine(0, 2); $s->drawLine(-2, 0); $s->drawLine(0, -2); /* sprite contenant la boîte de morphing - c'est juste un scénario avec une boîte de morphing */ $box = new SWFSprite(); $box->add(new SWFAction(" stop(); ")); $i = $box->add($r); for($n=0; $n<=20; ++$n) { $i->setRatio($n/20); $box->nextFrame(); } /* ce conteneur nous permet d'utiliser la même action plusieurs fois */ $cell = new SWFSprite(); $i = $cell->add($box); $i->setName('box'); $cell->add(new SWFAction(" setTarget('box'); /* ...x signifie abscisse du parent, c'est-à-dire (..).x */ dx = (/mouse.x + random(6)-3 - ...x)/5; dy = (/mouse.y + random(6)-3 - ...y)/5; gotoFrame(int(dx*dx + dy*dy)); ")); $cell->nextFrame(); $cell->add(new SWFAction(" gotoFrame(0); play(); ")); $cell->nextFrame(); /* finalement, ajoutons quelques cellules à l'animation */ for($x=0; $x<12; ++$x) { for($y=0; $y8; ++$y) { $i = $m->add($cell); $i->moveTo(100*$x+50, 100*$y+50); } } $m->nextFrame(); $m->add(new SWFAction(" gotoFrame(1); play(); ")); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> La même chose que ci-dessus, mais en couleurs. <example> <title>Exemple avec <function>swfaction</function></title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setDimension(11000, 8000); $m->setBackground(0x00, 0x00, 0x00); $m->add(new SWFAction("this.quality = 0;/frames.visible = 0;startDrag('/mouse', 1); ")); // sprite de suivi de souris $t = new SWFSprite(); $i = $m->add($t); $i->setName('mouse'); $g = new SWFGradient(); $g->addEntry(0, 0xff, 0xff, 0xff, 0xff); $g->addEntry(0.1, 0xff, 0xff, 0xff, 0xff); $g->addEntry(0.5, 0xff, 0xff, 0xff, 0x5f); $g->addEntry(1.0, 0xff, 0xff, 0xff, 0); // gradient $s = new SWFShape(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.03); $s->setRightFill($f); $s->movePenTo(-600, -600); $s->drawLine(1200, 0); $s->drawLine(0, 1200); $s->drawLine(-1200, 0); $s->drawLine(0, -1200); // on en fait un sprite pour utiliser la fonction multColor() $p = new SWFSprite(); $p->add($s); $p->nextFrame(); // Ajoute la forme ici, chaque forme dans une couleur différente $q = new SWFSprite(); $q->add(new SWFAction("gotoFrame(random(7)+1); stop();")); $i = $q->add($p); $i->multColor(1.0, 1.0, 1.0); $q->nextFrame(); $i->multColor(1.0, 0.5, 0.5); $q->nextFrame(); $i->multColor(1.0, 0.75, 0.5); $q->nextFrame(); $i->multColor(1.0, 1.0, 0.5); $q->nextFrame(); $i->multColor(0.5, 1.0, 0.5); $q->nextFrame(); $i->multColor(0.5, 0.5, 1.0); $q->nextFrame(); $i->multColor(1.0, 0.5, 1.0); $q->nextFrame(); // Enfin, le code de l'action $p = new SWFSprite(); $i = $p->add($q); $i->setName('frames'); $p->add(new SWFAction("dx = (/:mousex-/:lastx)/3 + random(10)-5;dy = (/:mousey-/:lasty)/3;x = /:mousex;y = /:mousey;alpha = 100; ")); $p->nextFrame(); $p->add(new SWFAction("this.x = x;this.y = y;this.alpha = alpha;x += dx;y += dy;dy += 3;alpha -= 8; ")); $p->nextFrame(); $p->add(new SWFAction("prevFrame(); play();")); $p->nextFrame(); $i = $m->add($p); $i->setName('frames'); $m->nextFrame(); $m->add(new SWFAction("lastx = mousex;lasty = mousey;mousex = /mouse.x;mousey = /mouse.y;++num;if(num == 11) num = 1;removeClip('char' & num);duplicateClip(/frames, 'char' & num, num); ")); $m->nextFrame(); $m->add(new SWFAction("prevFrame(); play();")); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> Cet exemple simple gère le clavier (vous devrez cependant cliquer dans la fenêtre pour lui donner le focus, et vous devrez aussi laisser votre souris dans la fenêtre. Si vous savez comment faire cela automatiquement, dites-le moi!). <example> <title>Exemple avec <function>swfaction</function></title> <programlisting role="php"><?php /* Le sprite n'a qu'une lettre par image */ $p = new SWFSprite(); $p->add(new SWFAction("stop();")); $chars = "abcdefghijklmnopqrstuvwxyz". "ABCDEFGHIJKLMNOPQRSTUVWXYZ". "1234567890!@#$%^&*()_+-=/[]{}|;:,.<>?`~"; $f = new SWFFont("_sans"); for($n=0; $n < strlen($chars); ++$n) { $c = substr($chars, $n, 1); if($i) $p->remove($i); $t = new SWFTextField(); $t->setFont($f); $t->setHeight(240); $t->setBounds(600,240); $t->align(SWFTEXTFIELD_ALIGN_CENTER); $t->addString($c); $i = $p->add($t); $p->labelFrame($c); $p->nextFrame(); } /* région de clic pour le bouton : toute la fenêtre */ $s = new SWFShape(); $s->setFillStyle0($s->addSolidFill(0, 0, 0, 0)); $s->drawLine(600, 0); $s->drawLine(0, 400); $s->drawLine(-600, 0); $s->drawLine(0, -400); /* le bouton s'assure des touches pressées, et envoie le bon sprite à l'image de droite */ $b = new SWFButton(); $b->addShape($s, SWFBUTTON_HIT); for($n=0; $naddAction(new SWFAction("setTarget('/char');gotoFrame('$c'); "), SWFBUTTON_KEYPRESS($c)); } $m = new SWFMovie(); $m->setDimension(600,400); $i = $m->add($p); $i->setName('char'); $i->moveTo(0,80); $m->add($b); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> </reference><!-- Keep this comment at the end of the fileLocal variables:mode: sgmlsgml-omittag:tsgml-shorttag:tsgml-minimize-attributes:nilsgml-always-quote-attributes:tsgml-indent-step:1sgml-indent-data:tsgml-parent-document:nilsgml-default-dtd-file:"../../manual.ced"sgml-exposed-tags:nilsgml-local-catalogs:nilsgml-local-ecat-files:nilEnd:--> \ No newline at end of file + <reference id="ref.ming"> + <title>Ming pour Flash</title> + <titleabbrev>Ming (Flash)</titleabbrev> + <partintro> + &warn.experimental; + <sect1 id="ming.intro"> + <title>Introduction</title> + <simpara> + Ming est une librairie open-source (LGPL) qui vous permet de + créer des animations au format Flash. Ming supporte toutes les + fonctionnalités de Flash 4 : les formes (shapes), les gradients, + les images bitmaps (JPEG et PNG), les morphing (transformations + d'une forme en une autre), les textes, actions, sprites (mini animations), + le streaming MP3 et les transformations de couleurs. Le seul ajout futur + est celui des événements sons. + </simpara> + <simpara> + Ming n'est pas un acronyme. + </simpara> + <simpara> + Notez que toutes les distances spécifiées (longueurs, distances, + tailles...) sont en "twips", c'est-à-dire 20 unités par pixels. + C'est plus ou moins arbitraire, car le lecteur Flash fait une + mise à l'échelle avec les valeurs qui lui sont fournis dans la + balise embed, ou la frame courante si la balise embed n'est pas + utilisée. + </simpara> + <simpara> + Ming propose de nombreux avantages par rapport à l'extension swf. + Vous pouvez utiliser Ming sur tous les OS où vous pouvez compiler + le code, tandis que swf est limité à Windows. Ming vous évite + la déconcertante complexité du format SWF, en transformant les + éléments des animations en objets PHP. Enfin, Ming est toujours + en cours de développement et surveillé par son auteur : si vous + souhaitez une nouvelle fonctionnalité, dites le lui : + <ulink url="mailto:&email.ming;">&email.ming;</ulink>. + </simpara> + <simpara> + Ming et tous les objets cités ont été ajouté en PHP 4.0.5. + </simpara> + </sect1> + + <sect1 id="ming.install"> + <title>Installation</title> + <para> + Pour utiliser Ming avec PHP, vous devez d'abord installer la + librairy Ming. Le code source et les instructions d'installation + sont disponible sur la page d'accueil de Ming : + <ulink url="&url.ming;">&url.ming;</ulink>, avec des exemples + un tutorial et l'actualité Ming. + </para> + <para> + Téléchargez l'archive Ming. Décompressez la et allez dans + le dossier Ming. Faites "make", puis "make install". + </para> + <para> + Cela va compiler le fichier <filename>libming.so</filename> et + l'installer dans <filename>/usr/lib/</filename>, et copier + <filename>ming.h</filename> into <filename>/usr/include/</filename>. + Editez la ligne <literal>PREFIX=</literal> dans le fichier + <filename>Makefile</filename> pour indiquer votre dossier + d'installation. + </para> + <sect2 id="ming.install.php.unix"> + <title>Compilation CGI avec PHP (Unix)</title> + <para> + <literallayout> + mkdir <phpdir>/ext/ming + cp php_ext/* <phpdir>/ext/ming + cd <phpdir> + ./buildconf + ./configure --with-ming <other config options> + Compilez et installez PHP comme d'habitude. + Redémarrez votre serveur web si nécessaire. + </literallayout> + </para> + </sect2> + <sect2 id="ming.install.php_module.unix"> + <title>Compilation en module avec PHP (Unix)</title> + <para> + téléchargez <filename>php_ming.so.gz</filename>. + Décompressez le et copiez le dans votre dossier de modules + PHP (vous pouvez trouver votre dossier de module PHP + en utilisant la commande <command>php-config --extension-dir</command>). + Ensuite, ajoutez la ligne <literal>extension=php_ming.so</literal> + dans votre fichier <filename>php.ini</filename>, ou bien ajoutez + <literal>dl('php_ming.so');</literal> en haut de tous vos scripts + Ming. + </para> + </sect2> + </sect1> + <sect1 id="ming.use"> + <title>Comment utiliser Ming</title> + <simpara> + Ming introduit 13 objet en PHP. Pour les utilisez, vous devez être + familez avec les <link linkend="language.oop">objets</link>. + </simpara> + <itemizedlist> + <listitem> + <simpara> + <function>swfmovie</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfshape</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfdisplayitem</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfgradient</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfbitmap</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swffill</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfmorph</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swftext</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swffont</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swftextfield</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfsprite</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfbutton</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfaction</function>. + </simpara> + </listitem> + </itemizedlist> + </sect1> + </partintro> + +<!-- SWFMovie --> + + <refentry id="function.swfmovie"> + <refnamediv> + <refname>SWFMovie</refname> + <refpurpose>Crée un objet 'animation'.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfmovie</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie</function> Crée un objet 'animation', + représentant une animation Flash version 4. + </para> + <simpara> + SWFMovie a les méthodes suivantes : + <function>swfmovie->output</function>,<function>swfmovie->save</function>, + <function>swfmovie->add</function>, <function>swfmovie->remove</function>, + <function>swfmovie->nextframe</function>, <function>swfmovie->setbackground</function>, + <function>swfmovie->setrate</function>, <function>swfmovie->setdimension</function>, + <function>swfmovie->setframes</function> et <function>swfmovie->streammp3</function>. + </simpara> + <simpara> + Des exemples d'utilisation dans : + <function>swfdisplayitem->rotateto</function>, <function>swfshape->setline</function>, + <function>swfshape->addfill</function>... En fait, tous les exemples + utilisent cet objet. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.output"> + <refnamediv> + <refname>SWFMovie->output</refname> + <refpurpose>Envoie votre animation au navigateur.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->output</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->output</function> envoie votre animation + au navigateur. En PHP, faîte le précéder de la fonction + <function>header</function>. + <programlisting role="php"> +<?php +header('Content-type: application/x-shockwave-flash'); +?> + </programlisting> + Cela indique au navigateur que l'animation qui arrive est en + Flash. + </para> + <simpara> + Voir aussi + <function>swfmovie->save</function>. + </simpara> + <simpara> + Des exemples d'utilisation dans : + <function>swfmovie->streammp3</function>, + <function>swfdisplayitem->rotateto</function>, + <function>swfaction</function>... + En fait, tous les exemples utilisent cette méthode. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.save"> + <refnamediv> + <refname>SWFMovie->save</refname> + <refpurpose>Sauve dans un fichier.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->save</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->save</function> sauve votre animation dans + le fichier <parameter>filename</parameter>. + </para> + <simpara> + Voir aussi + <function>swfmovie->output</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.add"> + <refnamediv> + <refname>SWFMovie->add</refname> + <refpurpose>Ajoute un objet dans une animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->add</function></funcdef> + <paramdef>ressource <parameter>instance</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->add</function> ajoute l'objet <parameter>instance</parameter> + dans l'animation courante. <parameter>instance</parameter> peut être de + n'importe quel type : forme (shape), texte (text), police (font), etc... + Ils doivent être ajouté à une animation pour + être utilisé. + </para> + <para> + Pour les objets affichables (formes, textes, boutons, sprites), + <function>swfmovie->add</function> retourne un objet + <function>swfdisplayitem</function> de la liste d'affichage. Ainsi, + vous pouvez ajouter la même forme plusieurs fois dans la même + animation, et obtenir des ressources différentes pour chaque + instance. + </para> + <simpara> + Voir aussi tous les autres objets et <function>swfmovie->remove</function> + </simpara> + <simpara> + Des exemples d'utilisation dans : + <function>swfdisplayitem->rotateto</function> et + <function>swfshape->addfill</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.remove"> + <refnamediv> + <refname>SWFMovie->remove</refname> + <refpurpose>Supprime un objet d'une animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->remove</function></funcdef> + <paramdef>ressource <parameter>instance</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->remove</function> supprime l'objet + <parameter>instance</parameter> de la liste d'affichage, pour + l'animation courante. L'objet ne sera plus disponible pour + être affiché ou utilisé. + </para> + <simpara> + Voir aussi + <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setbackground"> + <refnamediv> + <refname>SWFMovie->setbackground</refname> + <refpurpose>Modifie la couleur de fond.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setbackground</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->setbackground</function> modifie la couleur de fond. + Pourquoi est-ce que cette fonction n'accepte pas de canal alpha? + (réflechissez quelques instants :-) ). En fait, cela ne serait pas si + stupide : vous pouvez laisser apercevoir le fond HTML à travers l'animation. + Il y a un moyen de faire cela, mais cela ne fonctionne qu'avec IE 4. + Recherchez sur le site de <ulink url="&url.macromedia;">&url.macromedia;</ulink> + pour plus de détails. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setrate"> + <refnamediv> + <refname>SWFMovie->setrate</refname> + <refpurpose>Modifie la vitesse de l'animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setrate</function></funcdef> + <paramdef>int <parameter>rate</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->setrate</function> fixe la vitesse de l'animation + à <parameter>rate</parameter> images par secondes. L'animation ralentira + d'elle-même si le lecteur Flash ne peut pas afficher suffisamment rapidement, + à moins qu'il n'y ait du son en stream, auquel cas les images + sont sacrifiées pour garder un son fluide. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setdimension"> + <refnamediv> + <refname>SWFMovie->setdimension</refname> + <refpurpose>Modifie les dimensions de l'animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setdimension</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->setdimension</function> modifie les dimensions de + l'animation : <parameter>width</parameter> est la largeur et + <parameter>height</parameter> la hauteur. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setframes"> + <refnamediv> + <refname>SWFMovie->setframes</refname> + <refpurpose>Modifie le nombre total d'images dans l'animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setframes</function></funcdef> + <paramdef>string <parameter>numberofframes</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->setframes</function> modifie le nombre total d'images + dans l'animation, et le fixe à <parameter>numberofframes</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.nextframe"> + <refnamediv> + <refname>SWFMovie->nextframe</refname> + <refpurpose>Passe à l'image suivante.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->nextframe</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->setframes</function> passe à l'image suivante + de l'animation. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.streammp3"> + <refnamediv> + <refname>SWFMovie->streammp3</refname> + <refpurpose>Envoie un fichier MP3 en streaming.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->streammp3</function></funcdef> + <paramdef>string <parameter>mp3FileName</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->streammp3</function> envoie le fichier + MP3<parameter>mp3FileName</parameter> en stream audio. + <function>swfmovie->streammp3</function> n'est pas très robuste, + et se prend facilement les pieds dans le tapis (elle peut + éviter la balise initiale ID3, mais c'est bien tout). + Tout comme swfshape->addjpegfill(), ce n'est pas + une fonction stable. Il faudra sûrement faire un objet séparé, pour + gérer les types de son. + </para> + <para> + Notez que l'animation n'est pas suffisamment intelligente pour + ajouter un nombre suffisant d'images, afin de correspondre à la durée + totale du stream MP3. Il vous faudra ajouter des images jusqu'à + durée de la musique multiplié par le nombre d'images par secondes. + </para> + <para> + Oui, vous pouvez utiliser Ming pour mettre un rock-'n-roll endiablé + dans vos animation. Evitez d'en parler à l'RIAA ou la SACEM. + <example> + <title>Exemple avec <function>swfmovie->streammp3</function></title> + <programlisting role="php"> +<?php + $m = new SWFMovie(); + $m->setRate(12.0); + $m->streamMp3("distortobass.mp3"); +// utilisez vos propres MP3 +// assurez-vous d'avoir les droits + +// 11.85 secondes avec 12.0 images par seconde = 142 frames + $m->setFrames(142); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + +<!-- SWFDisplayItem --> + + <refentry id="function.swfdisplayitem"> + <refnamediv> + <refname>SWFDisplayItem</refname> + <refpurpose>Crée un nouvel objet d'affichage displayitem.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfdisplayitem</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem</function> crée un nouvel objet d'affichage displayitem. + </para> + <para> + C'est là que toute l'animation prend vie. Une fois que vous avez + défini une forme, un texte, un sprite ou un bouton, vous + l'ajoutez à une animation, puis vous utilisez la ressource + retournée pour déplacer, étirer, contracter, faire + tourner ou incliner la forme. + </para> + <simpara> + SWFDisplayItem a les méthodes suivantes : + <function>swfdisplayitem->move</function>, + <function>swfdisplayitem->moveto</function>, <function>swfdisplayitem->scaleto</function>, + <function>swfdisplayitem->scale</function>, <function>swfdisplayitem->rotate</function>, + <function>swfdisplayitem->rotateto</function>, <function>swfdisplayitem->skewxto</function>, + <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewyto</function> + <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->setdepth</function> + <function>swfdisplayitem->remove</function>, <function>swfdisplayitem->setname</function> + <function>swfdisplayitem->setratio</function>, <function>swfdisplayitem->addcolor</function> + et <function>swfdisplayitem->multcolor</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.moveto"> + <refnamediv> + <refname>SWFDisplayItem->moveTo</refname> + <refpurpose>Déplace un objet en coordonnées globales.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->moveto</function> déplace la forme courante + jusqu'au point de coordonnées globales + (<parameter>x</parameter>,<parameter>y</parameter>). + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->move</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.move"> + <refnamediv> + <refname>SWFDisplayItem->move</refname> + <refpurpose>Déplace un objet en coordonnées relatives.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->move</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->move</function> déplace la forme courante + de <parameter>dx</parameter> et <parameter>dy</parameter> unités, depuis + sa position courante. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->moveto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.scaleto"> + <refnamediv> + <refname>SWFDisplayItem->scaleTo</refname> + <refpurpose>Etire un objet en coordonnées globales.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->scaleto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->scaleto</function> étire un objet + jusqu'au dimensions (<parameter>x</parameter>,<parameter>y</parameter>). + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->scale</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.scale"> + <refnamediv> + <refname>SWFDisplayItem->scale</refname> + <refpurpose>Etire un objet relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->scale</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->scale</function> étire un objet + de (<parameter>dx</parameter>,<parameter>dy</parameter>), à partir + de sa taille courante. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->scaleto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.rotateto"> + <refnamediv> + <refname>SWFDisplayItem->rotateTo</refname> + <refpurpose>Tourne un objet en angle absolu.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->rotateto</function></funcdef> + <paramdef>double <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->rotateto</function> tourne l'objet jusqu'à + l'angle absolu<parameter>degrees</parameter>, en degrés. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <para> + Cet exemple amène trois chaînes tournoyantes depuis le fond de + l'écran. Plutôt sympa. + <example> + <title>Exemple avec <function>swfdisplayitem->rotateto</function></title> + <programlisting role="php"> +<?php + $thetext = "ming!"; + + $f = new SWFFont("Bauhaus 93.fdb"); + + $m = new SWFMovie(); + $m->setRate(24.0); + $m->setDimension(2400, 1600); + $m->setBackground(0xff, 0xff, 0xff); + + // Les fonctions avec un nombre d'arguments sont vraiment une bonne idées. + // Sincèrement! + + function text($r, $g, $b, $a, $rot, $x, $y, $scale, $string) + { + global $f, $m; + + $t = new SWFText(); + $t->setFont($f); + $t->setColor($r, $g, $b, $a); + $t->setHeight(960); + $t->moveTo(-($f->getWidth($string))/2, $f->getAscent()/2); + $t->addString($string); + + // On peut ajouter des propriétés comme pour une variable PHP standard + // tant que les noms ne sont pas déjà pris. + // e.g., vous ne pouvez pas utilisez $i->scale, car c'est une fonction. + + $i = $m->add($t); + $i->x = $x; + $i->y = $y; + $i->rot = $rot; + $i->s = $scale; + $i->rotateTo($rot); + $i->scale($scale, $scale); + + // mais les modification sont locales à une fonction, donc il faut + // retourner l'objet modifié. Pas pratique... + + return $i; + } + + function step($i) + { + $oldrot = $i->rot; + $i->rot = 19*$i->rot/20; + $i->x = (19*$i->x + 1200)/20; + $i->y = (19*$i->y + 800)/20; + $i->s = (19*$i->s + 1.0)/20; + + $i->rotateTo($i->rot); + $i->scaleTo($i->s, $i->s); + $i->moveTo($i->x, $i->y); + + return $i; + } + + // Alors? Ça valait la peine, non? + + $i1 = text(0xff, 0x33, 0x33, 0xff, 900, 1200, 800, 0.03, $thetext); + $i2 = text(0x00, 0x33, 0xff, 0x7f, -560, 1200, 800, 0.04, $thetext); + $i3 = text(0xff, 0xff, 0xff, 0x9f, 180, 1200, 800, 0.001, $thetext); + + for($i=1; $i<=100; ++$i) + { + $i1 = step($i1); + $i2 = step($i2); + $i3 = step($i3); + + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <simpara> + Voir aussi + <function>swfdisplayitem->rotate</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.rotate"> + <refnamediv> + <refname>SWFDisplayItem->Rotate</refname> + <refpurpose>Fait tourner une forme relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->rotate</function></funcdef> + <paramdef>double <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->rotate</function> fait tourner la forme + de <parameter>ddegrees</parameter> degrés, en plus de sa rotation + courante. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->rotateto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewxto"> + <refnamediv> + <refname>SWFDisplayItem->skewXTo</refname> + <refpurpose>Incline suivant les X.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewxto</function></funcdef> + <paramdef>double <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->skewxto</function> modifie l'inclinaison + (x-skew) à <parameter>degrees</parameter>. Si <parameter>degrees</parameter> + vaut 1.0, l'angle sera de 45¡, en avant. S'il vaut plus, ce sera plus + penché, et s'il vaut moins, ce sera plus droit. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->skewx</function>, + <function>swfdisplayitem->skewy</function> and + <function>swfdisplayitem->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewx"> + <refnamediv> + <refname>SWFDisplayItem->skewX</refname> + <refpurpose>Incline suivant les X relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewx</function></funcdef> + <paramdef>double <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->skewx</function> ajoute <parameter>ddegrees</parameter> + à l'inclinaison courante (x-skew). + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->skewx</function>, + <function>swfdisplayitem->skewy</function> and + <function>swfdisplayitem->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewyto"> + <refnamediv> + <refname>SWFDisplayItem->skewYTo</refname> + <refpurpose>Incline suivant les Y.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewyto</function></funcdef> + <paramdef>double <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->skewyto</function> modifie l'inclinaison + (y-skew) à <parameter>degrees</parameter>. Si <parameter>degrees</parameter> + vaut 1.0, l'angle sera de 45¡, en haut. S'il vaut plus, ce sera plus + penché, et s'il vaut moins, ce sera plus droit. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->skewy</function>, + <function>swfdisplayitem->skewx</function> and + <function>swfdisplayitem->skewxto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewy"> + <refnamediv> + <refname>SWFDisplayItem->skewY</refname> + <refpurpose>Incline suivant les Y relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewy</function></funcdef> + <paramdef>double <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->skewy</function> ajoute <parameter>ddegrees</parameter> + à l'inclinaison courante (y-skew). + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->skewyto</function>, + <function>swfdisplayitem->skewx</function> and + <function>swfdisplayitem->skewxto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setdepth"> + <refnamediv> + <refname>SWFDisplayItem->setDepth</refname> + <refpurpose>Modifie la place en profondeur (z-order)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setdepth</function></funcdef> + <paramdef>double <parameter>depth</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->rotate</function> place l'objet à + la profondeur <parameter>depth</parameter>. Par défaut, l'objet + est placé au niveau où il a été ajouté dans l'animation. Les objets + les plus anciens sont placés tout en bas, et les nouveaux sont + superposés. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.remove"> + <refnamediv> + <refname>SWFDisplayItem->remove</refname> + <refpurpose>Supprime un objet d'une animation</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->remove</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->remove</function> supprime cet objet de + la liste d'affichage. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setname"> + <refnamediv> + <refname>SWFDisplayItem->setName</refname> + <refpurpose>Nomme un objet</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setname</function></funcdef> + <paramdef>string <parameter>name</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->setname</function> donne à l'objet courant + le nom de <parameter>name</parameter>. Cela servira à repérer les acteurs + d'un script d'action. Cela ne sert qu'avec les sprites. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setratio"> + <refnamediv> + <refname>SWFDisplayItem->setRatio</refname> + <refpurpose>Modifie le ratio de l'objet.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setratio</function></funcdef> + <paramdef>double <parameter>ratio</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->setratio</function> modifie le ratio de l'objet, + et le fixe à <parameter>ratio</parameter>. Uniquement utile pour les + morphings. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <para> + Cet exemple simple effectue un morphing délicat de trois cercles + concentriques. + <example> + <title>Exemple <function>swfdisplayitem->setname</function></title> + <programlisting role="php"> +<?php + + $p = new SWFMorph(); + + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(0.16, 0xff, 0xff, 0xff); + $g->addEntry(0.32, 0, 0, 0); + $g->addEntry(0.48, 0xff, 0xff, 0xff); + $g->addEntry(0.64, 0, 0, 0); + $g->addEntry(0.80, 0xff, 0xff, 0xff); + $g->addEntry(1.00, 0, 0, 0); + + $s = $p->getShape1(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.05); + $s->setLeftFill($f); + $s->movePenTo(-160, -120); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(0.16, 0xff, 0, 0); + $g->addEntry(0.32, 0, 0, 0); + $g->addEntry(0.48, 0, 0xff, 0); + $g->addEntry(0.64, 0, 0, 0); + $g->addEntry(0.80, 0, 0, 0xff); + $g->addEntry(1.00, 0, 0, 0); + + $s = $p->getShape2(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.05); + $f->skewXTo(1.0); + $s->setLeftFill($f); + $s->movePenTo(-160, -120); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m = new SWFMovie(); + $m->setDimension(320, 240); + $i = $m->add($p); + $i->moveTo(160, 120); + + for($n=0; $n<=1.001; $n+=0.01) + { + $i->setRatio($n); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.addcolor"> + <refnamediv> + <refname>SWFDisplayItem->addColor</refname> + <refpurpose>Ajoute une couleur à une transoformation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->addcolor</function></funcdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->addcolor</function> ajoute une couleur à + la transformations courante. La couleur est donnée sous la forme + RGB. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.multcolor"> + <refnamediv> + <refname>SWFDisplayItem->multColor</refname> + <refpurpose>Multiplie la couleur de transformation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->multcolor</function></funcdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->multcolor</function> multiplie la couleur de + transformation par les valeurs données. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <para> + Cet exemple simple modifie l'atmosphère de votre image, et + en fait une scène d'Halloween (utilisez un paysage ou une image claire + pour un meilleur effet) + <example> + <title>Exemple avec <function>swfdisplayitem->multcolor</function></title> + <programlisting role="php"> +<?php + + $b = new SWFBitmap("backyard.jpg"); + // Utilisez une de vos images + $s = new SWFShape(); + $s->setRightFill($s->addFill($b)); + $s->drawLine($b->getWidth(), 0); + $s->drawLine(0, $b->getHeight()); + $s->drawLine(-$b->getWidth(), 0); + $s->drawLine(0, -$b->getHeight()); + + $m = new SWFMovie(); + $m->setDimension($b->getWidth(), $b->getHeight()); + + $i = $m->add($s); + + for($n=0; $n<=20; ++$n) + { + $i->multColor(1.0-$n/10, 1.0, 1.0); + $i->addColor(0xff*$n/20, 0, 0); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + +<!-- SWFShape --> + + <refentry id="function.swfshape"> + <refnamediv> + <refname>SWFShape</refname> + <refpurpose>Crée une nouvelle forme.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfshape</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfshape</function> crée une nouvelle forme. + </para> + <simpara> + SWFShape a les méthodes suivantes : + <function>swfshape->setline</function>, + <function>swfshape->addfill</function>, <function>swfshape->setleftfill</function>, + <function>swfshape->setrightfill</function>, <function>swfshape->movepento</function>, + <function>swfshape->movepen</function>, <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, <function>swfshape->drawcurveto</function> + et <function>swfshape->drawcurve</function>. + </simpara> + <para> + Ce exemple simple dessine un quadrant d'ellipse rouge. + <example> + <title>Exemple avec <function>swfshape</function></title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $s->setLine(40, 0x7f, 0, 0); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(200, 200); + $s->drawLineTo(6200, 200); + $s->drawLineTo(6200, 4600); + $s->drawCurveTo(200, 4600, 200, 200); + + $m = new SWFMovie(); + $m->setDimension(6400, 4800); + $m->setRate(12.0); + $m->add($s); + $m->nextFrame(); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setline"> + <refnamediv> + <refname>SWFShape->setLine</refname> + <refpurpose>Modifie le style de ligne de la forme.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setline</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfshape->setline</function> modifie le style de ligne de la forme. + <parameter>width</parameter> est la largeur de la ligne. Si + <parameter>width</parameter> vaut 0, le style est supprimé (et tous les + autres arguments sont ignorés). Si <parameter>width</parameter> > 0, + alors la couleur de la ligne devient (<parameter>red</parameter>, + <parameter>green</parameter>, <parameter>blue</parameter>). Les couleurs + sont représentées en RGB. Le dernier paramètre + <parameter>a</parameter> est optionnel. + </para> + <simpara> + <function>swfshape->setline</function> accepte 1, 4 ou 5 arguments + (mais jamais 3 ou 2). + </simpara> + <para> + Vous devez déclarer un style avant de l'utiliser (voir exemple). + </para> + <para> + Cet exemple enfantin dessine une chaîne "!#%*@", dans des couleurs + marrantes et un style rigolo. + <example> + <title>Exemple <function>swfshape->setline</function></title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f1 = $s->addFill(0xff, 0, 0); + $f2 = $s->addFill(0xff, 0x7f, 0); + $f3 = $s->addFill(0xff, 0xff, 0); + $f4 = $s->addFill(0, 0xff, 0); + $f5 = $s->addFill(0, 0, 0xff); + + // erreur : il faut déclarer tous les styles avant + // de les utiliser. + $s->setLine(40, 0x7f, 0, 0); + $s->setLine(40, 0x7f, 0x3f, 0); + $s->setLine(40, 0x7f, 0x7f, 0); + $s->setLine(40, 0, 0x7f, 0); + $s->setLine(40, 0, 0, 0x7f); + + $f = new SWFFont('Techno.fdb'); + + $s->setRightFill($f1); + $s->setLine(40, 0x7f, 0, 0); + $s->drawGlyph($f, '!'); + $s->movePen($f->getWidth('!'), 0); + + $s->setRightFill($f2); + $s->setLine(40, 0x7f, 0x3f, 0); + $s->drawGlyph($f, '#'); + $s->movePen($f->getWidth('#'), 0); + + $s->setRightFill($f3); + $s->setLine(40, 0x7f, 0x7f, 0); + $s->drawGlyph($f, '%'); + $s->movePen($f->getWidth('%'), 0); + + $s->setRightFill($f4); + $s->setLine(40, 0, 0x7f, 0); + $s->drawGlyph($f, '*'); + $s->movePen($f->getWidth('*'), 0); + + $s->setRightFill($f5); + $s->setLine(40, 0, 0, 0x7f); + $s->drawGlyph($f, '@'); + + $m = new SWFMovie(); + $m->setDimension(3000,2000); + $m->setRate(12.0); + $i = $m->add($s); + +// note la chaine est ici!!! + $i->moveTo(1500-$f->getWidth("!#%*@")/2, 1000+$f->getAscent()/2); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.addfill"> + <refnamediv> + <refname>SWFShape->addFill</refname> + <refpurpose>Ajoute un remplissage plein à la forme.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>SWFbitmap <parameter>bitmap</parameter></paramdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>SWFGradient <parameter>gradient</parameter></paramdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfshape->addfill</function> ajoute un remplissage plein à + la forme. <function>swfshape->addfill</function> accepte trois différents types + d'arguments. + </para> + <para> + <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> + est une couleur (format RGB). Le dernier paramètre <parameter>a</parameter> + est optionnel. + </para> + <para> + L'argument <parameter>bitmap</parameter> est un objet + <function>swfbitmap</function>. Le paramètre <parameter>flags</parameter> + peut être l'un des suivants : SWFFILL_CLIPPED_BITMAP ou SWFFILL_TILED_BITMAP. + Par défault, c'est SWFFILL_TILED_BITMAP. Je crois. + </para> + <para> + L'argument <parameter>gradient</parameter> est un objet + <function>swfgradient</function>. + L'argument <parameter>flags</parameter> peut alors prendre + l'une des valeurs suivantes : + SWFFILL_RADIAL_GRADIENT ou SWFFILL_LINEAR_GRADIENT. Par défaut, + c'est SWFFILL_LINEAR_GRADIENT. Cette fois ci, j'en suis sûr. + </para> + <para> + <function>swfshape->addfill</function> retourne un objet <function>swffill</function> + à utiliser avec <function>swfshape->setleftfill</function>, + et <function>swfshape->setrightfill</function> décrite un peu plus loin. + </para> + <simpara> + Voir aussi + <function>swfshape->setleftfill</function> et + <function>swfshape->setrightfill</function>. + </simpara> + <para> + Ceci est un exemple simple qui affiche un cadre sur une bitmap. Ah, il y a + un petit bug dans le lecteur Flash : il ne semble pas faire grand cas + de la transformation de la seconde forme en morphing. Suivant les specs, + la bitmap devrait s'étirer avec la forme dans cet exemple... + <example> + <title>Exemple avec <function>swfshape->addfill</function></title> + <programlisting role="php"> +<?php + + $p = new SWFMorph(); + + $b = new SWFBitmap("alphafill.jpg"); + // utilisez vos propres bitmaps! + $width = $b->getWidth(); + $height = $b->getHeight(); + + $s = $p->getShape1(); + $f = $s->addFill($b, SWFFILL_TILED_BITMAP); + $f->moveTo(-$width/2, -$height/4); + $f->scaleTo(1.0, 0.5); + $s->setLeftFill($f); + $s->movePenTo(-$width/2, -$height/4); + $s->drawLine($width, 0); + $s->drawLine(0, $height/2); + $s->drawLine(-$width, 0); + $s->drawLine(0, -$height/2); + + $s = $p->getShape2(); + $f = $s->addFill($b, SWFFILL_TILED_BITMAP); + + // ces déplacements n'ont aucun effet + $f->moveTo(-$width/4, -$height/2); + $f->scaleTo(0.5, 1.0); + + $s->setLeftFill($f); + $s->movePenTo(-$width/4, -$height/2); + $s->drawLine($width/2, 0); + $s->drawLine(0, $height); + $s->drawLine(-$width/2, 0); + $s->drawLine(0, -$height); + + $m = new SWFMovie(); + $m->setDimension($width, $height); + $i = $m->add($p); + $i->moveTo($width/2, $height/2); + + for($n=0; $n<1.001; $n+=0.03) + { + $i->setRatio($n); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setleftfill"> + <refnamediv> + <refname>SWFShape->setLeftFill</refname> + <refpurpose>Modifie la couleur de rastérisation de gauche.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setleftfill</function></funcdef> + <paramdef>swfgradient <parameter>fill</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setleftfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Tout ce sac de noeud fait qu'il y a deux couleurs de remplissage + des lignes. Lorsque l'objet est rasterisé, il est pratique de + savoir à l'avance quelle sont les remplissages, et le format + SWF les demande. + </para> + <para> + <function>swfshape->setleftfill</function> affecte à la couleur + de rastérisation de gauche, c'est-à-dire l'intérieur d'un objet, + si vous définissez les contours d'un objet dans le sens inverse + des aiguilles d'une montre. L'objet de remplissage est un + objet <function>swffill</function>, retourné par la fonction + <function>swfshape->addfill</function> ci-dessus. + </para> + <para> + Cela semble être le contraire lorsque vous défnissez une forme + dans un morphing. Si votre navigateur crashe, essayez de placer + le remplissage sur l'autre côté. + </para> + <simpara> + Raccourci pour + <literal>swfshape->setleftfill($s->addfill($r, $g, $b [, $a]));</literal>. + </simpara> + <simpara> + Voir aussi + <function>swfshape->setrightfill</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setrightfill"> + <refnamediv> + <refname>SWFShape->setRightFill</refname> + <refpurpose>Modifie la couleur de rastériation de droite.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setrightfill</function></funcdef> + <paramdef>swfgradient <parameter>fill</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setrightfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Voir aussi + <function>swfshape->setleftfill</function>. + </simpara> + <simpara> + Raccourci pour + <literal>swfshape->setrightfill($s->addfill($r, $g, $b [, $a]));</literal>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.movepento"> + <refnamediv> + <refname>SWFShape->movePenTo</refname> + <refpurpose>Déplace le stylo.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->movepento</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->setrightfill</function> déplace le stylo dans la + forme jusqu'au coordonnées globales + (<parameter>x</parameter>,<parameter>y</parameter>). + </simpara> + <simpara> + Voir aussi + <function>swfshape->movepen</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->drawlineto</function> et + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.movepen"> + <refnamediv> + <refname>SWFShape->movePen</refname> + <refpurpose>Déplace le stylo relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->movepen</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->setrightfill</function> déplace le stylo dans la + forme depuis les coordonnées (current x,current y) jusqu'au + coordonnées (current x + <parameter>dx</parameter>, + current y + <parameter>dy</parameter>), dans l'espace de coordonnées + de la forme. + </simpara> + <simpara> + Voir aussi + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->drawlineto</function> et + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawlineto"> + <refnamediv> + <refname>SWFShape->drawLineTo</refname> + <refpurpose>Dessine une ligne.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawlineto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->setrightfill</function> dessine une ligne + (avec le style courant de ligne, modifié par + <function>swfshape->setline</function>) depuis le point courant + jusqu'au point (<parameter>x</parameter>,<parameter>y</parameter>) + dans l'espace de coordonnées de la forme. + </simpara> + <simpara> + Voir aussi + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->movepen</function> et + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawline"> + <refnamediv> + <refname>SWFShape->drawLine</refname> + <refpurpose>Dessine une ligne relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawline</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->setrightfill</function> dessine une ligne + (avec le style courant de ligne, modifié par + <function>swfshape->setline</function>) depuis le point courant, + et sur le déplacement de (<parameter>dx</parameter>,<parameter>dy</parameter>). + </simpara> + <simpara> + Voir aussi + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->movepen</function> et + <function>swfshape->drawlineto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawcurveto"> + <refnamediv> + <refname>SWFShape->drawCurveTo</refname> + <refpurpose>Dessine une courbe.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawcurveto</function></funcdef> + <paramdef>int <parameter>controlx</parameter></paramdef> + <paramdef>int <parameter>controly</parameter></paramdef> + <paramdef>int <parameter>anchorx</parameter></paramdef> + <paramdef>int <parameter>anchory</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->drawcurveto</function> dessine une courbe quadratique + (avec le style courant de ligne, modifié par + <function>swfshape->setline</function>) depuis le point courant + jusqu'au point (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) + en utilisant (<parameter>controlx</parameter>,<parameter>controly</parameter>) + comme point de contrôle. C'est-à-dire qu'il commence en allant vers le point + de contrôle, puis se dirigie sur le point d'ancrrage. + </simpara> + <simpara> + Voir aussi + <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, + <function>swfshape->movepento</function> et + <function>swfshape->movepen</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawcurve"> + <refnamediv> + <refname>SWFShape->drawCurve</refname> + <refpurpose>Dessine une courbe relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawcurve</function></funcdef> + <paramdef>int <parameter>controldx</parameter></paramdef> + <paramdef>int <parameter>controldy</parameter></paramdef> + <paramdef>int <parameter>anchordx</parameter></paramdef> + <paramdef>int <parameter>anchordy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->drawcurve</function> dessine une courbe + quadratique (avec le style courant de ligne, modifié par + <function>swfshape->setline</function>) depuis le point courant + jusqu'au point (<parameter>anchordx</parameter>,<parameter>anchordy</parameter>) + relativement au point courant, et en utilisant le point de + contrôle (<parameter>controldx</parameter>,<parameter>controldy</parameter>). + C'est-à-dire qu'il commence en allant vers le point + de contrôle, puis se dirigie sur le point d'ancrrage. + </simpara> + <simpara> + Voir aussi + <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, + <function>swfshape->movepento</function> et + <function>swfshape->movepen</function>. + </simpara> + </refsect1> + </refentry> + +<!-- SWFGradient --> + + <refentry id="function.swfgradient"> + <refnamediv> + <refname>SWFGradient</refname> + <refpurpose>Crée un objet gradient</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfgradient</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfgradient</function> crée un nouvel objet gradient. + </para> + <simpara> + Une fois que vous avez ajouté les couleurs à votre gradient, vous + pouvez l'utiliser dans des formes, avec la fonction + <function>swfshape->addfill</function>. + </simpara> + <simpara> + SWFGradient a la méthode suivante : + <function>swfgradient->addentry</function>. + </simpara> + <para> + Cet exemple simple affiche un gradient noir-blanc comme fond, + et un gradient concentrique au centre. + <example> + <title>Exemple avec <function>swfgradient</function></title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setDimension(320, 240); + + $s = new SWFShape(); + + // gradient noir-blanc + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(1.0, 0xff, 0xff, 0xff); + + $f = $s->addFill($g, SWFFILL_LINEAR_GRADIENT); + $f->scaleTo(0.01); + $f->moveTo(160, 120); + $s->setRightFill($f); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m->add($s); + + $s = new SWFShape(); + + // gradient radial : rouge vers transparent + $g = new SWFGradient(); + $g->addEntry(0.0, 0xff, 0, 0, 0xff); + $g->addEntry(1.0, 0xff, 0, 0, 0); + + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.005); + $f->moveTo(160, 120); + $s->setRightFill($f); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfgradient.addentry"> + <refnamediv> + <refname>SWFGradient->addEntry</refname> + <refpurpose>Ajoute une couleur à la liste du gradient.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfgradient->addentry</function></funcdef> + <paramdef>double <parameter>ratio</parameter></paramdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfgradient->addentry</function> ajoute une couleur à la liste + des couleurs du gradient. <parameter>ratio</parameter> est un nombre + de 0 à 1, qui indique l'ordre d'apparition des couleurs. Vous devez + ajouter les couleurs dans l'ordre croissant de ratio. + </para> + <para> + <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> + représente une couleur, au format RGB. Le dernier paramètre + <parameter>a</parameter> est optionnel. + </para> + </refsect1> + </refentry> + +<!-- SWFBitmap --> + + <refentry id="function.swfbitmap"> + <refnamediv> + <refname>SWFBitmap</refname> + <refpurpose>Crée un objet bitmap</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfbitmap</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + <paramdef>int <parameter><optional>alphafilename</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbitmap</function> crée un objet bitmap à partir d'un + fichier JPEG ou DBL, nommé <parameter>filename</parameter>. + <parameter>alphafilename</parameter> indique un fichier de masque à + utiliser comme canal alpha sur une image JPEG. + </para> + <note> + <para> + Seule les JPEG baseline (frame 0) sont supportés. Les baseline optimisée + ou les JPEG progressives ne sont pas supportées. + </para> + </note> + <simpara> + SWFBitmap a les méthodes suivantes : + <function>swfbitmap->getwidth</function> + et <function>swfbitmap->getheight</function>. + </simpara> + <para> + Il n'est pas possible d'importer directement des images + PNG, il faut utiliser l'utilitaire de conversion + <filename>png2dbl</filename> pour en faire un fichier + .dbl ("define bits lossless"). La raison est que l'auteur ne + souhaite pas de dépendance avec la librairie PNG. Le fichier + d'autoconfiguration devrait régler ce problème, mais il n'est pas + encore fait. + <example> + <title>Importation de fichiers PNG sous Ming</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f = $s->addFill(new SWFBitmap("png.dbl")); + $s->setRightFill($f); + + $s->drawLine(32, 0); + $s->drawLine(0, 32); + $s->drawLine(-32, 0); + $s->drawLine(0, -32); + + $m = new SWFMovie(); + $m->setDimension(32, 32); + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + Et vous pouvez ajouter un masque alpha sur une image JPEG. + <example> + <title>Exemple avec <function>swfbitmap</function></title> + <programlisting role="php"> +<?php + + $s = new SWFShape(); + + //les fichiers .msk sont générés par l'utilitaire "gif2mask" + $f = $s->addFill(new SWFBitmap("alphafill.jpg", "alphafill.msk")); + $s->setRightFill($f); + + $s->drawLine(640, 0); + $s->drawLine(0, 480); + $s->drawLine(-640, 0); + $s->drawLine(0, -480); + + $c = new SWFShape(); + $c->setRightFill($c->addFill(0x99, 0x99, 0x99)); + $c->drawLine(40, 0); + $c->drawLine(0, 40); + $c->drawLine(-40, 0); + $c->drawLine(0, -40); + + $m = new SWFMovie(); + $m->setDimension(640, 480); + $m->setBackground(0xcc, 0xcc, 0xcc); + + // décide un fond à damier + for($y=0; $y<480; $y+=40) + { + for($x=0; $x<640; $x+=80) + { + $i = $m->add($c); + $i->moveTo($x, $y); + } + + $y+=40; + + for($x=40; $x<640; $x+=80) + { + $i = $m->add($c); + $i->moveTo($x, $y); + } + } + + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbitmap.getwidth"> + <refnamediv> + <refname>SWFBitmap->getWidth</refname> + <refpurpose>Retourne la largeur d'une bitmap.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swfbitmap->getwidth</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbitmap->getwidth</function> retourne la largeur d'une bitmap, + en pixels. + </para> + <para> + Voir aussi + <function>swfbitmap->getheight</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbitmap.getheight"> + <refnamediv> + <refname>SWFBitmap->getHeight</refname> + <refpurpose>Retourne la hauteur d'une bitmap.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swfbitmap->getheight</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbitmap->getheight</function> retourne la hauteur d'une bitmap, + en pixels. + </para> + <para> + Voir aussi + <function>swfbitmap->getwidth</function>. + </para> + </refsect1> + </refentry> + +<!-- SWFFill --> + + <refentry id="function.swffill"> + <refnamediv> + <refname>SWFFill</refname> + <refpurpose>Crée un objet de remplissage</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <para> + <function>swffill</function> vous permet de transformer + une image bitmap ou un gradient. Les objets <function>swffill</function> + sont créé par <function>swfshape->addfill</function>. + </para> + <simpara> + SWFFill a les méthodes suivantes : + <function>swffill->moveto</function>,<function>swffill->scaleto</function>, + <function>swffill->rotateto</function>, + <function>swffill->skewxto</function> et <function>swffill->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swffill.moveto"> + <refnamediv> + <refname>SWFFill->moveTo</refname> + <refpurpose>Déplace l'origine de l'objet SWFFill</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffill->moveto</function> déplace l'origine de la forme + jusqu'au point de coordonnées globales + (<parameter>x</parameter>,<parameter>y</parameter>). + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.scaleto"> + <refnamediv> + <refname>SWFFill->scaleTo</refname> + <refpurpose>Modifie l'échelle de la forme</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->scaleto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffill->scaleto</function> modifie l'échelle de + la forme de <parameter>x</parameter> dans le sens des + abscisses et <parameter>y</parameter> dans le sens des + ordonnées. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.rotateto"> + <refnamediv> + <refname>SWFFill->rotateTo</refname> + <refpurpose>Tourne la forme</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->rotateto</function></funcdef> + <paramdef>double <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffill->rotateto</function> tourne la forme depuis + sont orientation initiale jusqu'à un angle de + <parameter>degrees</parameter> degrés. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.skewxto"> + <refnamediv> + <refname>SWFFill->skewXTo</refname> + <refpurpose>Incline (abscisses)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->skewxto</function></funcdef> + <paramdef>double <parameter>x</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffill->skewxto</function> incline la forme de + <parameter>x</parameter> suivant l'axe des abscisses. Si <parameter>x</parameter> vaut 1.0, + l'inclinaison sera de 45¡ degrés, en avant. Si <parameter>x</parameter> + vaut plus, l'inclinaison sera plus forte, et sinon, la forme + sera plus droite. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.skewyto"> + <refnamediv> + <refname>SWFFill->skewYTo</refname> + <refpurpose>Incline (ordonnées)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->skewyto</function></funcdef> + <paramdef>double <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffill->skewyto</function> incline la forme de + <parameter>y</parameter> suivant l'axe des abscisses. Si <parameter>y</parameter> + vaut 1.0, l'inclinaison sera de 45¡ degrés, en avant. Si + <parameter>x</parameter> vaut plus, l'inclinaison sera plus + forte, et sinon, la forme sera plus droite. + </para> + </refsect1> + </refentry> + +<!-- SWFMorph --> + + <refentry id="function.swfmorph"> + <refnamediv> + <refname>SWFMorph</refname> + <refpurpose>Crée un morphing.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfmorph</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmorph</function> crée un morphing. + </para> + <para> + <function>swfmorph</function> s'appelle aussi "shape tween". + C'est cet objet qui permet toutes ces superbes animations + qui mettent à genou votre ordinateur. Joie! + </para> + <para> + Les méthodes ici sont plutôt bizarres. Il serait tellement plus + logique d'avoir seulement <literal>new SWFMorph(shape1, shape2);</literal>, + mais, telles que sont les choses aujourd'hui, la deuxième forme + a besoin de savoir qu'elle est l'aboutissement d'un morphing. + (Tout cela, parceque Flash commence à dessiner aussitôt qu'il a les + commandes de dessins. S'il conservait les descriptions de ses propres + formes, et attendait leur totalité avant d'écrire, ceci et bien d'autres + choses serait tellement plus simple). + </para> + <simpara> + SWFMorph a les méthodes suivantes : + <function>swfmorph->getshape1</function> et <function>swfmorph->getshape1</function>. + </simpara> + <para> + Cet exemple simple effectue le morphing d'une gros carré rouge en un + carré plus petit, bleu et bordé de noir. + <example> + <title>Exemple avec <function>swfmorph</function></title> + <programlisting role="php"> +<?php + $p = new SWFMorph(); + + $s = $p->getShape1(); + $s->setLine(0,0,0,0); + + /* Notez que cela se fait dans l'ordre inverse de l'ordre habituel + (gauche au lieu de droite), mais je n'ai aucune idée de pourquoi... */ + + $s->setLeftFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(-1000,-1000); + $s->drawLine(2000,0); + $s->drawLine(0,2000); + $s->drawLine(-2000,0); + $s->drawLine(0,-2000); + + $s = $p->getShape2(); + $s->setLine(60,0,0,0); + $s->setLeftFill($s->addFill(0, 0, 0xff)); + $s->movePenTo(0,-1000); + $s->drawLine(1000,1000); + $s->drawLine(-1000,1000); + $s->drawLine(-1000,-1000); + $s->drawLine(1000,-1000); + + $m = new SWFMovie(); + $m->setDimension(3000,2000); + $m->setBackground(0xff, 0xff, 0xff); + + $i = $m->add($p); + $i->moveTo(1500,1000); + + for($r=0.0; $r<=1.0; $r+=0.1) + { + $i->setRatio($r); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmorph.getshape1"> + <refnamediv> + <refname>SWFMorph->getshape1</refname> + <refpurpose>Sélectionne la forme de départ</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>swfmorph->getshape1</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmorph->getshape1</function> sélectionne la forme de + début de morphing. <function>swfmorph->getshape1</function> retourne un + objet <function>swfshape</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmorph.getshape2"> + <refnamediv> + <refname>SWFMorph->getshape2</refname> + <refpurpose>Sélectionne la forme de fin</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>swfmorph->getshape2</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmorph->getshape2</function> sélectionne la forme de + début de morphing. <function>swfmorph->getshape2</function> retourne un + objet <function>swfshape</function>. + </para> + </refsect1> + </refentry> + +<!-- SWFText --> + + <refentry id="function.swftext"> + <refnamediv> + <refname>SWFText</refname> + <refpurpose>Crée un nouvel objet texte.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swftext</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext</function> crée un nouvel objet texte, + prêt à être manipulé. + </para> + <simpara> + SWFText a les méthodes suivantes : + <function>swftext->setfont</function>, + <function>swftext->setheight</function>, <function>swftext->setspacing</function>, + <function>swftext->setcolor</function>, <function>swftext->moveto</function>, + <function>swftext->addstring</function> et <function>swftext->getwidth</function>. + </simpara> + <para> + Cet exemple simple va afficher la phrase "PHP fait du Flash avec Ming" + sur un fond blanc. + <example> + <title>Exemle avec <function>swftext</function></title> + <programlisting role="php"> +<?php + $f = new SWFFont("Techno.fdb"); + $t = new SWFText(); + $t->setFont($f); + $t->moveTo(200, 2400); + $t->setColor(0xff, 0xff, 0); + $t->setHeight(1200); + $t->addString("PHP fait du Flash avec Ming!!"); + + $m = new SWFMovie(); + $m->setDimension(5400, 3600); + + $m->add($t); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setfont"> + <refnamediv> + <refname>SWFText->setFont</refname> + <refpurpose>Sélectionne la police courante</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setfont</function></funcdef> + <paramdef>string <parameter>font</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->setfont</function> remplace la police courante + par <parameter>font</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setheight"> + <refnamediv> + <refname>SWFText->setHeight</refname> + <refpurpose>Modifie la hauteur de la police courante</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setheight</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->setheight</function> fixe la hauteur courante de + la police courante à <parameter>height</parameter>. Par défaut, c'est 240. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setspacing"> + <refnamediv> + <refname>SWFText->setSpacing</refname> + <refpurpose>Modifie l'espacement de police</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setspacing</function></funcdef> + <paramdef>double <parameter>spacing</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->setspacing</function> fixe l'espacement de + police à <parameter>spacing</parameter><parameter>spacing</parameter>. + Par défaut, c'est 1.0. 0 signifie que toutes les lettres seront + écrites au même point. Cela fonctionne pas terrible, car l'avance + des lettres augmente, et l'espacement entre lettre n'est pas toujours + le même. Il faudra que je l'explique plus clairement. Ou bien que je + corrige les erreurs. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setcolor"> + <refnamediv> + <refname>SWFText->setColor</refname> + <refpurpose>Modifie la couleur de la police</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setcolor</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->setspacing</function> change la couleur de la + police courante. Par défaut, c'est noir. La couleur est représentée avec + la convention RGB. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.moveto"> + <refnamediv> + <refname>SWFText->moveTo</refname> + <refpurpose>Déplace le stylo de texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->moveto</function> déplace le style (ou le curseur, si + ça a un sens) jusqu'au coordonnées (<parameter>x</parameter>,<parameter>y</parameter>) + dans l'espace de coordonnées du texte. Si <parameter>x</parameter> + ou <parameter>y</parameter> vaut 0, la valeur de coordonnées de la dimension + reste la même. C'est ennuyeux, et cela devrait être corrigé. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.addstring"> + <refnamediv> + <refname>SWFText->addString</refname> + <refpurpose>Ajoute du texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->addstring</function> ajoute le texte <parameter>string</parameter> + au texte courant, et le dessine. Le stylo est situé sur la ligne de base + du texte, c'est-à-dire que le texte sera écrit horizontalement. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.getwidth"> + <refnamediv> + <refname>SWFText->getWidth</refname> + <refpurpose>Calcule la longueur d'une chaîne</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->addstring</function> retourne la taille de la chaîne + <parameter>string</parameter>, une fois qu'elle est dessinée avec la police + et l'espaceement courant. + </para> + </refsect1> + </refentry> + +<!-- SWFFont --> + + <refentry id="function.swffont"> + <refnamediv> + <refname>SWFFont</refname> + <refpurpose>Charge une police</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swffont</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + si <parameter>filename</parameter> est le nom d'un fichier + FDB (i.e., si le nom de fichier se termine par ".fdb"), charge la + police. + </para> + <para> + FDB ("font definition block") est un petit utilitaire pour Flash DefineFont2 + qui contient une description complète de la police. Vous pouvez créer des + fichiers FDB à partir du "SWT Generator", qui est inclus avec + les utilitaires makefdb - regardez dans le dossier utilitaire de Ming. + </para> + <para> + Les polices utilisateurs ne contiennent aucune information autre que + le nom de la police. On suppose que la police sera elle-même accessible + au lecteur. Les polices "_serif", "_sans", et "_typewriter" doivent être + universellement disponibles. Par exemple : + <programlisting role="php"> +<?php +$f = newSWFFont("_sans"); +?> + </programlisting> + vous donne la police standard "sans-serif", probablement identique à celle + que vous obtenez avec le code <literal><font name="sans-serif"></literal>. + </para> + <para> + <function>swffont</function> retourne une ressource de police, à utiliser avec + les méthodes <function>swftext->setfont</function> et + <function>swftextfield->setfont</function>. + </para> + <simpara> + SWFFont a les méthodes suivantes : + <function>swffont->getwidth</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swffont.getwidth"> + <refnamediv> + <refname>swffont->getwidth</refname> + <refpurpose>Retourne la taille de la chaîne</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swffont->getwidth</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffont->getwidth</function> retourne la taille de + la chaîne <parameter>string</parameter>, avec la police courante. + Vous utiliserez plutôt la même méthode de l'objet + <function>swftext</function>, qui utilise les paramètres de + l'objet. + </para> + </refsect1> + </refentry> + +<!-- SWFTextField --> + + <refentry id="function.swftextfield"> + <refnamediv> + <refname>SWFTextField</refname> + <refpurpose>Crée un nouveau champs texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swftextfield</function></funcdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield</function> crée un nouveau champs texte. + Les champs textes sont moins souples que les <function>swftext</function>, + car ils ne peuvent être tournés, mis à l'échelle ou incliné, mais ils peuvent + être utilisés sous forme de champs de formulaire, et ils peuvent utiliser + des polices navigateur. + </para> + <para> + Les flags optionnels modifient les comportements du champs. Ils peuvent prendre + les valeurs suivantes : + <itemizedlist> + <listitem> + <simpara> + SWFTEXTFIELD_NOEDIT : indique que le champs ne doit pas être + éditable. + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_PASSWORD : indique que c'est un champs mot de passe + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_DRAWBOX : dessine le contour du champs + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_MULTILINE : autorise les lignes multiples + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_WORDWRAP : autorise la mise en forme du texte + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_NOSELECT : rend le champs non-sélectionnable + </simpara> + </listitem> + </itemizedlist> + Les flags peuvent être combinés avec l'opérateur + <link linkend="language.operators.bitwise">OR</link>. Par exemple : + <programlisting role="php"> +<?php +$t = newSWFTextField(SWFTEXTFIELD_PASSWORD | SWFTEXTFIELD_NOEDIT); +?> + </programlisting> + crée un champs de mot de passe totalement inéditable (et inutile). + </para> + <simpara> + SWFTextField a les méthodes suivantes : + <function>swftextfield->setfont</function>, + <function>swftextfield->setbounds</function>, <function>swftextfield->align</function>, + <function>swftextfield->setheight</function>, <function>swftextfield->setleftmargin</function>, + <function>swftextfield->setrightmargin</function>, <function>swftextfield->setmargins</function>, + <function>swftextfield->setindentation</function>, <function>swftextfield->setlinespacing</function>, + <function>swftextfield->setcolor</function>, <function>swftextfield->setname</function> et + <function>swftextfield->addstring</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setfont"> + <refnamediv> + <refname>SWFTextField->setFont</refname> + <refpurpose>Modifie la police du champs</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setfont</function></funcdef> + <paramdef>string <parameter>font</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setfont</function> remplace la police courante + par la police <parameter>font</parameter> (police client?). + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setbounds"> + <refnamediv> + <refname>SWFTextField->setbounds</refname> + <refpurpose>Sélectionne la largeur et hauteur du champs</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setbounds</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setbounds</function> fixe la longueu du champs + à <parameter>width</parameter> et sa hauteur à <parameter>height</parameter>. + Si vous ne fixez pas les bords vous-mêmes, Ming tentera de les deviner + lui-même (mais ne le laissez pas faire!!). + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.align"> + <refnamediv> + <refname>SWFTextField->align</refname> + <refpurpose>Modifie l'alignement du texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->align</function></funcdef> + <paramdef>int <parameter>alignement</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->align</function> change l'alignement du + texte par <parameter>alignement</parameter>. Les valeurs valides + pour <parameter>alignement</parameter> sont : SWFTEXTFIELD_ALIGN_LEFT, + SWFTEXTFIELD_ALIGN_RIGHT, SWFTEXTFIELD_ALIGN_CENTER et + SWFTEXTFIELD_ALIGN_JUSTIFY. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setheight"> + <refnamediv> + <refname>SWFTextField->setHeight</refname> + <refpurpose>Modifie la hauteur de la police du champs texte.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setheight</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setheight</function> modifie la hauteur de + la police du champs texte par <parameter>height</parameter>. Par défaut, + c'est 240. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setleftmargin"> + <refnamediv> + <refname>SWFTextField->setLeftMargin</refname> + <refpurpose>Modifie la marge de gauche.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setleftmargin</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setleftmargin</function> modifie la marge de + gauche du champs texte à <parameter>width</parameter>. Par défaut, c'est 0. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setrightmargin"> + <refnamediv> + <refname>SWFTextField->setrightMargin</refname> + <refpurpose>Modifie la marge de droite.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setrightmargin</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setrightmargin</function> modifie la marge de + gauche du champs texte à <parameter>width</parameter>. Par défaut, c'est + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setmargins"> + <refnamediv> + <refname>SWFTextField->setMargins</refname> + <refpurpose>Modifie les marges du champs texte.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setmargins</function></funcdef> + <paramdef>int <parameter>left</parameter></paramdef> + <paramdef>int <parameter>right</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setmargins</function> modifie les deux marges + du champs texte : <parameter>left</parameter> sera la nouvelle largeur de + la marge de gauche, et <parameter>right</parameter>, celle de gauche. + Par défaut, elles sont toutes les deux à 0. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setindentation"> + <refnamediv> + <refname>SWFTextField->setindentation</refname> + <refpurpose>Modifie l'indentation de la première ligne.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setindentation</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setindentation</function> modifie l'indentation de + la première ligne du champs texte, en la fixant à <parameter>width</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setlinespacing"> + <refnamediv> + <refname>SWFTextField->setLineSpacing</refname> + <refpurpose>Modifie l'espacement de lignes.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setlinespacing</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setlinespacing</function> modifie l'espacement de lignes, + en le fixant à <parameter>height</parameter>. Par défaut, c'est 40. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setcolor"> + <refnamediv> + <refname>SWFTextField->setcolor</refname> + <refpurpose>Modifie la couleur du champs texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setcolor</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setcolor</function> modifie la couleur du + champs texte, en la remplaçant par la couleur fournie. Par défaut, c'est + noir opaque. Les couleurs sont représentées en convention RGB. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setname"> + <refnamediv> + <refname>SWFTextField->setname</refname> + <refpurpose>Nomme le champs texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setname</function></funcdef> + <paramdef>string <parameter>name</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setname</function> baptise le champs + texte <parameter>name</parameter>. Cela servira pour les formulaires + et les actions. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.addstring"> + <refnamediv> + <refname>SWFTextField->addstring</refname> + <refpurpose>Ajoute au texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setname</function> concatène la chaîne + <parameter>string</parameter> avec la chaîne courante. + </para> + </refsect1> + </refentry> + +<!-- SWFSprite --> + + <refentry id="function.swfsprite"> + <refnamediv> + <refname>SWFSprite</refname> + <refpurpose>Crée un sprite</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfsprite</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfsprite</function> sont aussi connue sous le nom de + "clip" : ils permettent la création d'objet animé dans une animation, + avec un scénario propre. De ce fait, un sprite a les mêmes méthodes + qu'une animation. + </para> + <simpara> + <function>swfsprite</function> a les méthodes suivantes : + <function>swfsprite->add</function>, + <function>swfsprite->remove</function>, <function>swfsprite->nextframe</function> + et <function>swfsprite->setframes</function>. + </simpara> + <para> + Ce exemple pratique fait tourner un superbe carré rouge. + <example> + <title>Exemple de <function>swfsprite</function></title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(-500,-500); + $s->drawLineTo(500,-500); + $s->drawLineTo(500,500); + $s->drawLineTo(-500,500); + $s->drawLineTo(-500,-500); + + $p = new SWFSprite(); + $i = $p->add($s); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + + $m = new SWFMovie(); + $i = $m->add($p); + $i->moveTo(1500,1000); + $i->setName("blah"); + + $m->setBackground(0xff, 0xff, 0xff); + $m->setDimension(3000,2000); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.add"> + <refnamediv> + <refname>SWFSprite->add</refname> + <refpurpose>Ajoute un objet à un sprite</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>swfsprite->add</function></funcdef> + <paramdef>ressource <parameter>object</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfsprite->add</function> ajoute une <function>swfshape</function>, un + <function>swfbutton</function>, un <function>swftext</function>, + une <function>swfaction</function> ou une autre animation + <function>swfsprite</function>. + </para> + <para> + Pour les objets affichables (<function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function>, + <function>swfaction</function> or <function>swfsprite</function>), + cela retourne une ressource sur l'objet dans la liste d'affichage. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.remove"> + <refnamediv> + <refname>SWFSprite->remove</refname> + <refpurpose>Supprime un objet dans un sprite</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->remove</function></funcdef> + <paramdef>ressource <parameter>object</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfsprite->remove</function> supprime une <function>swfshape</function>, un + <function>swfbutton</function>, un <function>swftext</function>, + une <function>swfaction</function> ou un <function>swfsprite</function> du + sprite courant. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.setframes"> + <refnamediv> + <refname>SWFSprite->setframes</refname> + <refpurpose>Fixe le nombre maximum d'image dans le sprite.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->setframes</function></funcdef> + <paramdef>int <parameter>numberofframes</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfsprite->setframes</function> fixe le nombre total d'images + de l'animation à <parameter>numberofframes</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.nextframe"> + <refnamediv> + <refname>SWFSprite->nextframe</refname> + <refpurpose>Va à la prochaine image du sprite.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->nextframe</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfsprite->setframes</function> se déplace à la prochaine image + du sprite. + </para> + </refsect1> + </refentry> + +<!-- SWFButton --> + + <refentry id="function.swfbutton"> + <refnamediv> + <refname>SWFbutton</refname> + <refpurpose>Crée un nouveau bouton.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfbutton</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton</function> crée un nouveau bouton. + Cliquez-le, passez la souris dessus, et appelez des actions. Facile! + </para> + <simpara> + SWFButton a les méthodes suivantes : + <function>swfbutton->addshape</function>, + <function>swfbutton->setup</function>, <function>swfbutton->setover</function> + <function>swfbutton->setdown</function>, <function>swfbutton->sethit</function> + <function>swfbutton->setaction</function> et + <function>swfbutton->addaction</function>. + </simpara> + <para> + Cet exemple simplissime vous montre comme faire un + roll-over, un roll-on, un clic, un relaché de souris, et rien du tout (pas d'action). + <example> + <title>Exemple avec <function>swfbutton</function></title> + <programlisting role="php"> +<?php + + $f = new SWFFont("_serif"); + + $p = new SWFSprite(); + + function label($string) + { + global $f; + + $t = new SWFTextField(); + $t->setFont($f); + $t->addString($string); + $t->setHeight(200); + $t->setBounds(3200,200); + return $t; + } + function addLabel($string) + { + global $p; + + $i = $p->add(label($string)); + $p->nextFrame(); + $p->remove($i); + } + + $p->add(new SWFAction("stop();")); + addLabel("NO ACTION"); + addLabel("SWFBUTTON_MOUSEUP"); + addLabel("SWFBUTTON_MOUSEDOWN"); + addLabel("SWFBUTTON_MOUSEOVER"); + addLabel("SWFBUTTON_MOUSEOUT"); + addLabel("SWFBUTTON_MOUSEUPOUTSIDE"); + addLabel("SWFBUTTON_DRAGOVER"); + addLabel("SWFBUTTON_DRAGOUT"); + + function rect($r, $g, $b) + { + $s = new SWFShape(); + $s->setRightFill($s->addFill($r, $g, $b)); + $s->drawLine(600,0); + $s->drawLine(0,600); + $s->drawLine(-600,0); + $s->drawLine(0,-600); + + return $s; + } + + $b = new SWFButton(); + $b->addShape(rect(0xff, 0, 0), SWFBUTTON_UP | SWFBUTTON_HIT); + $b->addShape(rect(0, 0xff, 0), SWFBUTTON_OVER); + $b->addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(1);"), + SWFBUTTON_MOUSEUP); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(2);"), + SWFBUTTON_MOUSEDOWN); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(3);"), + SWFBUTTON_MOUSEOVER); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(4);"), + SWFBUTTON_MOUSEOUT); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(5);"), + SWFBUTTON_MOUSEUPOUTSIDE); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(6);"), + SWFBUTTON_DRAGOVER); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(7);"), + SWFBUTTON_DRAGOUT); + + $m = new SWFMovie(); + $m->setDimension(4000,3000); + + $i = $m->add($p); + $i->setName("label"); + $i->moveTo(400,1900); + + $i = $m->add($b); + $i->moveTo(400,900); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + Cet exemple simple illustre le déplacement d'un gros bouton + rouge dans la fenêtre. Ce n'est pas du tirer-déposer, mais juste + du tirer. + <example> + <title>Exemple avec <function>swfbutton->addaction</function></title> + <programlisting role="php"> +<?php + + $s = new SWFShape(); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->drawLine(1000,0); + $s->drawLine(0,1000); + $s->drawLine(-1000,0); + $s->drawLine(0,-1000); + + $b = new SWFButton(); + $b->addShape($s, SWFBUTTON_HIT | SWFBUTTON_UP | SWFBUTTON_DOWN | SWFBUTTON_OVER); + + $b->addAction(new SWFAction("startDrag('/test', 0);"), + SWFBUTTON_MOUSEDOWN); +// '0' signifie : ne pas verrouiller la souris + + $b->addAction(new SWFAction("stopDrag();"), + SWFBUTTON_MOUSEUP | SWFBUTTON_MOUSEUPOUTSIDE); + + $p = new SWFSprite(); + $p->add($b); + $p->nextFrame(); + + $m = new SWFMovie(); + $i = $m->add($p); + $i->setName('test'); + $i->moveTo(1000,1000); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.addshape"> + <refnamediv> + <refname>SWFbutton->addShape</refname> + <refpurpose>Ajoute une forme à un bouton</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->addshape</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + <paramdef>int <parameter>flags</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->addshape</function> ajoute la forme + <parameter>shape</parameter> au bouton. Les valeurs + possibles de <parameter>flags</parameter> sont : + SWFBUTTON_UP, SWFBUTTON_OVER, SWFBUTTON_DOWN ou SWFBUTTON_HIT. + SWFBUTTON_HIT n'est même pas affiché, elle désigne la + région du clic d'un bouton. C'est-à-dire que tous points + où le bouton est déssiné est considéré + comme accessible. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setup"> + <refnamediv> + <refname>SWFbutton->setUp</refname> + <refpurpose>Alias de SWFbutton->addShape(shape, SWFBUTTON_UP)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setup</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->setup</function> est un alias pour + <literal>SWFbutton->addShape(shape, SWFBUTTON_UP)</literal>. + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setover"> + <refnamediv> + <refname>SWFbutton->setOver</refname> + <refpurpose>Alias de addShape(shape, SWFBUTTON_OVER)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setover</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->setover</function> est un alias pour + <literal>addShape(shape, SWFBUTTON_OVER)</literal>. + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setdown"> + <refnamediv> + <refname>SWFbutton->setDown</refname> + <refpurpose>Alias de addShape(shape, SWFBUTTON_DOWN)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setdown</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->setdown</function> est un alias pour + <literal>addShape(shape, SWFBUTTON_DOWN)</literal>. + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.sethit"> + <refnamediv> + <refname>SWFbutton->setHit</refname> + <refpurpose>Alias de addShape(shape, SWFBUTTON_HIT)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->sethit</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->sethit</function> est un alias pour + <literal>addShape(shape, SWFBUTTON_HIT)</literal>. + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.addaction"> + <refnamediv> + <refname>SWFbutton->addAction</refname> + <refpurpose>Ajoute une action au bouton</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->addaction</function></funcdef> + <paramdef>ressource <parameter>action</parameter></paramdef> + <paramdef>int <parameter>flags</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->setaction</function> ajoute l'action + <parameter>action</parameter> (créée par <function>swfaction</function>) + au bouton courant, dans les conditions précisées par <parameter>flags</parameter>. + Les valeurs valides de <parameter>flags</parameter> sont : + SWFBUTTON_MOUSEOVER, SWFBUTTON_MOUSEOUT, SWFBUTTON_MOUSEUP, + SWFBUTTON_MOUSEUPOUTSIDE, SWFBUTTON_MOUSEDOWN, SWFBUTTON_DRAGOUT + et SWFBUTTON_DRAGOVER + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setaction"> + <refnamediv> + <refname>SWFbutton->setAction</refname> + <refpurpose>Assigne l'action du bouton</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setaction</function></funcdef> + <paramdef>ressource <parameter>action</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->setaction</function> assigne l'action qui + sera exécutée lorsque le bouton sera cliqué. C'est un alias de + <literal>addAction(shape, SWFBUTTON_MOUSEUP)</literal>. + <parameter>action</parameter> est une <function>swfaction</function>. + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + +<!-- SWFAction --> + + <refentry id="function.swfaction"> + <refnamediv> + <refname>SWFAction</refname> + <refpurpose>Crée une nouvelle action.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfaction</function></funcdef> + <paramdef>string <parameter>script</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfaction</function> crée une nouvelle action, et + compile le script <parameter>script</parameter>. + </para> + <para> + La syntaxe du script est basée sur le langage C, mais il utilise + aussi beaucoup de notions propres à SWF : le bytecode SWF est trop + simpliste pour faire l'essentiel de ce que l'on veut. Par exemple, + il n'est pas possible de faire des fonctions sans descendre profondément + dans les entrailles de la machine, car le bytecode de saut est écrit + en dur. Pas moyen de pousser une adresse dans la pile, ou de dépiler - + Chaque fonction doit savoir exactement où elle retourne. + </para> + <para> + Alors, que reste-t-il? Le compilateur reconnaît les mots suivants : + <itemizedlist> + <listitem> + <simpara> + break + </simpara> + </listitem> + <listitem> + <simpara> + for + </simpara> + </listitem> + <listitem> + <simpara> + continue + </simpara> + </listitem> + <listitem> + <simpara> + if + </simpara> + </listitem> + <listitem> + <simpara> + else + </simpara> + </listitem> + <listitem> + <simpara> + do + </simpara> + </listitem> + <listitem> + <simpara> + while + </simpara> + </listitem> + </itemizedlist> + </para> + <para> + Il n'y a pas de type de données : toutes les valeurs de SWF sont stockées comme + des chaînes de caractères. Les fonctions suivantes peuvent être utilisées dans + les expressions : + <variablelist> + <varlistentry> + <term>time()</term> + <listitem> + <simpara> + Retourne le nombre de milli-secondes depuis le début de + l'animation. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>random(seed)</term> + <listitem> + <simpara> + Retourne un nombre pseudo-aléatoire, entre 0 et seed. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>length(expr)</term> + <listitem> + <simpara> + Retourne la taille de l'expression donnée. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>int(number)</term> + <listitem> + <simpara> + Retourne le nombre number, arrondi à l'entier inférieur le plus proche. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>concat(expr, expr)</term> + <listitem> + <simpara> + Retourne la concaténation des deux expressions. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>ord(expr)</term> + <listitem> + <simpara> + Retourne le code ASCII du caractère expr. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>chr(num)</term> + <listitem> + <simpara> + Retourne le caractère pour le code ASCII num. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>substr(string, location, length)</term> + <listitem> + <simpara> + Retourne la sous-chaîne, extraite de string, de longueur + length et commençant au caractère location. + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + De plus, les commandes suivantes sont accessibles : + <variablelist> + <varlistentry> + <term>duplicateClip(clip, name, depth)</term> + <listitem> + <simpara> + Duplique le sprite nommé clip. La nouvelle animation a le nouveau nom + name et la profondeur depth. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>removeClip(expr)</term> + <listitem> + <simpara> + Supprime l'animation nommée expr. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>trace(expr)</term> + <listitem> + <simpara> + Ecrit l'expression expr dans le fichier de d'historique. + Il est peut probable que le navigateur ou le lecteur ne fasse + quoi que ce soit avec. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>startDrag(target, lock, [left, top, right, bottom])</term> + <listitem> + <simpara> + Comment à déplacer l'animation target. L'argument lock indique + si le déplacement verrouille la souris (utilisez 0, &false;) + ou 1 (&true;)). Les paramètres optionnels + délimitent la zone de déplacement. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stopDrag()</term> + <listitem> + <simpara> + Cesse le déplacement de l'animation. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>callFrame(expr)</term> + <listitem> + <simpara> + Appelle l'image expr comme une fonction. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>getURL(url, target, [method])</term> + <listitem> + <simpara> + Charge l'URL url dans l'objet target. target peut être l'image courante + (je pense) ou une des valeurs magiques "_level0" (remplace l'animation + courante) ou "_level1" (charge une nouvelle animation à la place de + la courante). L'argument optionnel method peut être post ou get, si vous + voulez envoyer des variables au serveur. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>loadMovie(url, target)</term> + <listitem> + <simpara> + La même chose que ci-dessus, plus ou moins. En fait, je ne sais pas + trop quelle est la différence. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>nextFrame()</term> + <listitem> + <simpara> + Va à l'image suivante. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>prevFrame()</term> + <listitem> + <simpara> + Va à l'image précédente. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>play()</term> + <listitem> + <simpara> + Joue l'animation. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stop()</term> + <listitem> + <simpara> + Cesse de jouer l'animation. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>toggleQuality()</term> + <listitem> + <simpara> + Passe de haute en basse qualité (et vice-versa). + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stopSounds()</term> + <listitem> + <simpara> + Cesse de jouer les sons. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>gotoFrame(num)</term> + <listitem> + <simpara> + Va à l'image numéro num. Les images sont numérotées à + partir de 0. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>gotoFrame(name)</term> + <listitem> + <simpara> + Va à l'image nommée name. Ce qui est carrément cool, car + les labels ne sont pas encore supportés pour les images. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>setTarget(expr)</term> + <listitem> + <simpara> + Modifie le contexte de l'action. C'est ce qu'ils disent, mais + je n'ai pas trop d'idées là-dessus. + </simpara> + </listitem> + </varlistentry> + </variablelist> + Et il y a un truc bizarre : l'expression frameLoaded(num) peut être + utilise dans les conditions if et dans les boucles while pour + vérifier si une image a été chargée. En tous cas, c'est ce qu'il est + supposé faire, mais je ne l'ai jamais testé, et je doute sérieusement + que cela fonctionne. Vous pouvez utiliser plutôt /:framesLoaded à la place. + </para> + <para> + Les sprites ont des propriétés. Vous pouvez les lire toutes + (vraiment?), en modifier quelques unes. Les voici : + <itemizedlist> + <listitem> + <simpara> + x + </simpara> + </listitem> + <listitem> + <simpara> + y + </simpara> + </listitem> + <listitem> + <simpara> + xScale + </simpara> + </listitem> + <listitem> + <simpara> + yScale + </simpara> + </listitem> + <listitem> + <simpara> + currentFrame - (lecture seule) + </simpara> + </listitem> + <listitem> + <simpara> + totalFrames - (lecture seule) + </simpara> + </listitem> + <listitem> + <simpara> + alpha - Niveau de transparence + </simpara> + </listitem> + <listitem> + <simpara> + visible - 1=on, 0=off (?) + </simpara> + </listitem> + <listitem> + <simpara> + width - (lecture seule) + </simpara> + </listitem> + <listitem> + <simpara> + height - (lecture seule) + </simpara> + </listitem> + <listitem> + <simpara> + rotation + </simpara> + </listitem> + <listitem> + <simpara> + target - (lecture seule) (???) + </simpara> + </listitem> + <listitem> + <simpara> + framesLoaded - (lecture seule) + </simpara> + </listitem> + <listitem> + <simpara> + name + </simpara> + </listitem> + <listitem> + <simpara> + dropTarget - (lecture seule) (???) + </simpara> + </listitem> + <listitem> + <simpara> + url - (lecture seule) (???) + </simpara> + </listitem> + <listitem> + <simpara> + highQuality - 1=high, 0=low (?) + </simpara> + </listitem> + <listitem> + <simpara> + focusRect - (???) + </simpara> + </listitem> + <listitem> + <simpara> + soundBufTime - (???) + </simpara> + </listitem> + </itemizedlist> + Modifier la position d'un sprite est aussi simple que + <literal>/box.x = 100;</literal>. Pourquoi le slash initial? + C'est comme cela que Flash garde la trace des sprites dans les + animations, un peu comme des fichiers sous Unix. Si le sprite + qui s'appelle box a lui-même un autre sprite appelé biff, vous + pouvez y accéder avec la commande <literal>/box/biff.x = 100;</literal>. + En tous cas, ça marche pour moi. Corrigez moi si c'est faux!. + </para> + <para> + Cet exemple simple va déplacer le gros carré rouge dans la fenêtre. + <example> + <title>Exemple avec <function>swfaction</function></title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f = $s->addFill(0xff, 0, 0); + $s->setRightFill($f); + + $s->movePenTo(-500,-500); + $s->drawLineTo(500,-500); + $s->drawLineTo(500,500); + $s->drawLineTo(-500,500); + $s->drawLineTo(-500,-500); + + $p = new SWFSprite(); + $i = $p->add($s); + $i->setDepth(1); + $p->nextFrame(); + + for($n=0; $n<5; ++$n) + { + $i->rotate(-15); + $p->nextFrame(); + } + + $m = new SWFMovie(); + $m->setBackground(0xff, 0xff, 0xff); + $m->setDimension(6000,4000); + + $i = $m->add($p); + $i->setDepth(1); + $i->moveTo(-500,2000); + $i->setName("box"); + + $m->add(new SWFAction("/box.x += 3;")); + $m->nextFrame(); + $m->add(new SWFAction("gotoFrame(0); play();")); + $m->nextFrame(); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + Cet exemple suit votre souris sur l'écran. + <example> + <title>Exemple avec <function>swfaction</function></title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setRate(36.0); + $m->setDimension(1200, 800); + $m->setBackground(0, 0, 0); + + /* sprite de suivi de souris : vide, mais il suit la souris + de manière à ce que nous connaissions ses coordonnées*/ + + $i = $m->add(new SWFSprite()); + $i->setName('mouse'); + + $m->add(new SWFAction(" + startDrag('/mouse', 1); /* '1' signifie verrouiller la souris */ + ")); + + + /* On peut tout simplement virer l'anti-aliasing, car il n'y a + que des gros carrés, finalement */ + + $m->add(new SWFAction(" + this.quality = 0; + ")); + + /* boîte de morphing */ + $r = new SWFMorph(); + $s = $r->getShape1(); + + /* Notez que ce n'est pas pratique pour les formes habituelles. + Aucune idée de pourquoi */ + $s->setLeftFill($s->addFill(0xff, 0xff, 0xff)); + $s->movePenTo(-40, -40); + $s->drawLine(80, 0); + $s->drawLine(0, 80); + $s->drawLine(-80, 0); + $s->drawLine(0, -80); + + $s = $r->getShape2(); + + $s->setLeftFill($s->addFill(0x00, 0x00, 0x00)); + $s->movePenTo(-1, -1); + $s->drawLine(2, 0); + $s->drawLine(0, 2); + $s->drawLine(-2, 0); + $s->drawLine(0, -2); + + + /* sprite contenant la boîte de morphing - + c'est juste un scénario avec une boîte de morphing */ + + $box = new SWFSprite(); + $box->add(new SWFAction(" + stop(); + ")); + $i = $box->add($r); + + for($n=0; $n<=20; ++$n) + { + $i->setRatio($n/20); + $box->nextFrame(); + } + + + /* ce conteneur nous permet d'utiliser la même action plusieurs fois */ + + $cell = new SWFSprite(); + $i = $cell->add($box); + $i->setName('box'); + + $cell->add(new SWFAction(" + + setTarget('box'); + + /* ...x signifie abscisse du parent, c'est-à-dire (..).x */ + dx = (/mouse.x + random(6)-3 - ...x)/5; + dy = (/mouse.y + random(6)-3 - ...y)/5; + gotoFrame(int(dx*dx + dy*dy)); + + ")); + + $cell->nextFrame(); + $cell->add(new SWFAction(" + + gotoFrame(0); + play(); + + ")); + + $cell->nextFrame(); + + + /* finalement, ajoutons quelques cellules à l'animation */ + + for($x=0; $x<12; ++$x) + { + for($y=0; $y8; ++$y) + { + $i = $m->add($cell); + $i->moveTo(100*$x+50, 100*$y+50); + } + } + + $m->nextFrame(); + + $m->add(new SWFAction(" + + gotoFrame(1); + play(); + + ")); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + La même chose que ci-dessus, mais en couleurs. + <example> + <title>Exemple avec <function>swfaction</function></title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setDimension(11000, 8000); + $m->setBackground(0x00, 0x00, 0x00); + + $m->add(new SWFAction(" + +this.quality = 0; +/frames.visible = 0; +startDrag('/mouse', 1); + + ")); + + // sprite de suivi de souris + $t = new SWFSprite(); + $i = $m->add($t); + $i->setName('mouse'); + + $g = new SWFGradient(); + $g->addEntry(0, 0xff, 0xff, 0xff, 0xff); + $g->addEntry(0.1, 0xff, 0xff, 0xff, 0xff); + $g->addEntry(0.5, 0xff, 0xff, 0xff, 0x5f); + $g->addEntry(1.0, 0xff, 0xff, 0xff, 0); + + // gradient + $s = new SWFShape(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.03); + $s->setRightFill($f); + $s->movePenTo(-600, -600); + $s->drawLine(1200, 0); + $s->drawLine(0, 1200); + $s->drawLine(-1200, 0); + $s->drawLine(0, -1200); + + // on en fait un sprite pour utiliser la fonction multColor() + $p = new SWFSprite(); + $p->add($s); + $p->nextFrame(); + + // Ajoute la forme ici, chaque forme dans une couleur différente + $q = new SWFSprite(); + $q->add(new SWFAction("gotoFrame(random(7)+1); stop();")); + $i = $q->add($p); + + $i->multColor(1.0, 1.0, 1.0); + $q->nextFrame(); + $i->multColor(1.0, 0.5, 0.5); + $q->nextFrame(); + $i->multColor(1.0, 0.75, 0.5); + $q->nextFrame(); + $i->multColor(1.0, 1.0, 0.5); + $q->nextFrame(); + $i->multColor(0.5, 1.0, 0.5); + $q->nextFrame(); + $i->multColor(0.5, 0.5, 1.0); + $q->nextFrame(); + $i->multColor(1.0, 0.5, 1.0); + $q->nextFrame(); + + // Enfin, le code de l'action + $p = new SWFSprite(); + $i = $p->add($q); + $i->setName('frames'); + $p->add(new SWFAction(" + +dx = (/:mousex-/:lastx)/3 + random(10)-5; +dy = (/:mousey-/:lasty)/3; +x = /:mousex; +y = /:mousey; +alpha = 100; + + ")); + $p->nextFrame(); + + $p->add(new SWFAction(" + +this.x = x; +this.y = y; +this.alpha = alpha; +x += dx; +y += dy; +dy += 3; +alpha -= 8; + + ")); + $p->nextFrame(); + + $p->add(new SWFAction("prevFrame(); play();")); + $p->nextFrame(); + + $i = $m->add($p); + $i->setName('frames'); + $m->nextFrame(); + + $m->add(new SWFAction(" + +lastx = mousex; +lasty = mousey; +mousex = /mouse.x; +mousey = /mouse.y; + +++num; + +if(num == 11) + num = 1; + +removeClip('char' & num); +duplicateClip(/frames, 'char' & num, num); + + ")); + + $m->nextFrame(); + $m->add(new SWFAction("prevFrame(); play();")); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + Cet exemple simple gère le clavier (vous devrez cependant + cliquer dans la fenêtre pour lui donner le focus, et vous + devrez aussi laisser votre souris dans la fenêtre. Si vous + savez comment faire cela automatiquement, dites-le moi!). + <example> + <title>Exemple avec <function>swfaction</function></title> + <programlisting role="php"> +<?php + + /* Le sprite n'a qu'une lettre par image */ + + $p = new SWFSprite(); + $p->add(new SWFAction("stop();")); + + $chars = "abcdefghijklmnopqrstuvwxyz". + "ABCDEFGHIJKLMNOPQRSTUVWXYZ". + "1234567890!@#$%^&*()_+-=/[]{}|;:,.<>?`~"; + + $f = new SWFFont("_sans"); + + for($n=0; $nremove($i); + $t = new SWFTextField(); + $t->setFont($f); + $t->setHeight(240); + $t->setBounds(600,240); + $t->align(SWFTEXTFIELD_ALIGN_CENTER); + $t->addString($c); + $i = $p->add($t); + $p->labelFrame($c); + $p->nextFrame(); + } + + + /* région de clic pour le bouton : toute la fenêtre */ + + $s = new SWFShape(); + $s->setFillStyle0($s->addSolidFill(0, 0, 0, 0)); + $s->drawLine(600, 0); + $s->drawLine(0, 400); + $s->drawLine(-600, 0); + $s->drawLine(0, -400); + + + /* le bouton s'assure des touches pressées, et envoie le bon + sprite à l'image de droite */ + + $b = new SWFButton(); + $b->addShape($s, SWFBUTTON_HIT); + + for($n=0; $naddAction(new SWFAction(" + +setTarget('/char'); +gotoFrame('$c'); + + "), SWFBUTTON_KEYPRESS($c)); + } + + $m = new SWFMovie(); + $m->setDimension(600,400); + $i = $m->add($p); + $i->setName('char'); + $i->moveTo(0,80); + + $m->add($b); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); + +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + </reference> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +-->
Index: phpdoc/en/functions/ming.xml diff -u phpdoc/en/functions/ming.xml:1.23 phpdoc/en/functions/ming.xml:1.24 --- phpdoc/en/functions/ming.xml:1.23 Wed Oct 17 20:20:45 2001 +++ phpdoc/en/functions/ming.xml Thu Oct 18 02:44:03 2001 @@ -1 +1,4257 @@ -<?xml encoding="iso-8859-1"?><!-- $Revision: 1.23 $ --> <reference id="ref.ming"> <title>Ming functions for Flash</title> <titleabbrev>Ming (flash)</titleabbrev> <partintro> &warn.experimental; <sect1 id="ming.intro"> <title>Introduction</title> <simpara> Ming is an open-source (LGPL) library which allows you to create SWF ("Flash") format movies. Ming supports almost all of Flash 4's features, including: shapes, gradients, bitmaps (pngs and jpegs), morphs ("shape tweens"), text, buttons, actions, sprites ("movie clips"), streaming mp3, and color transforms--the only thing that's missing is sound events. </simpara> <simpara> Ming is not an acronym. </simpara> <simpara> Note that all values specifying length, distance, size, etc. are in "twips", twenty units per pixel. That's pretty much arbitrary, though, since the player scales the movie to whatever pixel size is specified in the embed/object tag, or the entire frame if not embedded. </simpara> <simpara> Ming offers a number of advantages over the existing PHP/libswf module. You can use Ming anywhere you can compile the code, whereas libswf is closed-source and only available for a few platforms, Windows not one of them. Ming provides some insulation from the mundane details of the SWF file format, wrapping the movie elements in PHP objects. Also, Ming is still being maintained; if there's a feature that you want to see, just let us know <ulink url="mailto:&email.ming;">&email.ming;</ulink>. </simpara> <simpara> Ming was added in PHP 4.0.5. </simpara> </sect1> <sect1 id="ming.install"> <title>Installation</title> <para> To use Ming with PHP, you first need to build and install the Ming library. Source code and installation instructions are available at the Ming home page : <ulink url="&url.ming;">&url.ming;</ulink> along with examples, a small tutorial, and the latest news. </para> <para> Download the ming archive. Unpack the archive. Go in the Ming directory. make. make install. </para> <para> This will build <filename>libming.so</filename> and install it into <filename>/usr/lib/</filename>, and copy <filename>ming.h</filename> into <filename>/usr/include/</filename>. Edit the <literal>PREFIX=</literal> line in the <filename>Makefile</filename> to change the installation directory. </para> <sect2 id="ming.install.php.unix"> <title>built into php (unix)</title> <para> <literallayout> mkdir <phpdir>/ext/ming cp php_ext/* <phpdir>/ext/ming cd <phpdir> ./buildconf ./configure --with-ming <other config options> </literallayout> Build and install php as usual, Restart web server if necessary </para> </sect2> <sect2 id="ming.install.php-module.unix"> <title>built into php (unix)</title> <para> download <filename>php_ming.so.gz</filename>. uncompress it and copy it to your php modules directory. (you can find your php module directory by running <command>php-config --extension-dir</command>). Now either just add <literal>extension=php_ming.so</literal> to your <filename>php.ini</filename> file, or put <literal>dl('php_ming.so');</literal> at the head of all of your Ming scripts. </para> </sect2> </sect1> <sect1 id="ming.use"> <title>How to use Ming</title> <simpara> Ming introduces 13 new object in PHP, all with matching methods and attributes. To use them, you need to know about <link linkend="language.oop">objects</link>. </simpara> <itemizedlist> <listitem> <simpara> <function>swfmovie</function>. </simpara> </listitem> <listitem> <simpara> <function>swfshape</function>. </simpara> </listitem> <listitem> <simpara> <function>swfdisplayitem</function>. </simpara> </listitem> <listitem> <simpara> <function>swfgradient</function>. </simpara> </listitem> <listitem> <simpara> <function>swfbitmap</function>. </simpara> </listitem> <listitem> <simpara> <function>swffill</function>. </simpara> </listitem> <listitem> <simpara> <function>swfmorph</function>. </simpara> </listitem> <listitem> <simpara> <function>swftext</function>. </simpara> </listitem> <listitem> <simpara> <function>swffont</function>. </simpara> </listitem> <listitem> <simpara> <function>swftextfield</function>. </simpara> </listitem> <listitem> <simpara> <function>swfsprite</function>. </simpara> </listitem> <listitem> <simpara> <function>swfbutton</function>. </simpara> </listitem> <listitem> <simpara> <function>swfaction</function>. </simpara> </listitem> </itemizedlist> </sect1> </partintro> <!-- SWFMovie --> <refentry id="function.swfmovie"> <refnamediv> <refname>SWFMovie</refname> <refpurpose>Creates a new movie object, representing an SWF version 4 movie.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfmovie</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie</function> creates a new movie object, representing an SWF version 4 movie. </para> <simpara> SWFMovie has the following methods : <function>swfmovie->output</function>,<function>swfmovie->save</function>, <function>swfmovie->add</function>, <function>swfmovie->remove</function>, <function>swfmovie->nextframe</function>, <function>swfmovie->setbackground</function>, <function>swfmovie->setrate</function>, <function>swfmovie->setdimension</function>, <function>swfmovie->setframes</function> and <function>swfmovie->streammp3</function>. </simpara> <simpara> See examples in : <function>swfdisplayitem->rotateto</function>, <function>swfshape->setline</function>, <function>swfshape->addfill</function>... Any example will use this object. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.output"> <refnamediv> <refname>SWFMovie->output</refname> <refpurpose>Dumps your lovingly prepared movie out.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->output</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->output</function> dumps your lovingly prepared movie out. In PHP, preceding this with the command <programlisting role="php"><?phpheader('Content-type: application/x-shockwave-flash'); ?> </programlisting> convinces the browser to display this as a flash movie. </para> <simpara> See also <function>swfmovie->save</function>. </simpara> <simpara> See examples in : <function>swfmovie->streammp3</function>, <function>swfdisplayitem->rotateto</function>, <function>swfaction</function>... Any example will use this method. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.save"> <refnamediv> <refname>SWFMovie->save</refname> <refpurpose>Saves your movie in a file.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->save</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->save</function> saves your movie to the file named <parameter>filename</parameter>. </para> <simpara> See also <function>output</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.add"> <refnamediv> <refname>SWFMovie->add</refname> <refpurpose>Adds any type of data to a movie.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->add</function></funcdef> <paramdef>ressource <parameter>instance</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->add</function> adds <parameter>instance</parameter> to the current movie. <parameter>instance</parameter> is any type of data : Shapes, text, fonts, etc. must all be add'ed to the movie to make this work. </para> <para> For displayable types (shape, text, button, sprite), this returns an <function>SWFDisplayItem</function>, a handle to the object in a display list. Thus, you can add the same shape to a movie multiple times and get separate handles back for each separate instance. </para> <simpara> See also all other objects (adding this later), and <function>swfmovie->remove</function> </simpara> <simpara> See examples in : <function>swfdisplayitem->rotateto</function> and <function>swfshape->addfill</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.remove"> <refnamediv> <refname>SWFMovie->remove</refname> <refpurpose>Removes the object instance from the display list.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->remove</function></funcdef> <paramdef>resource <parameter>instance</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->remove</function> removes the object instance <parameter>instance</parameter> from the display list. </para> <simpara> See also <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.setbackground"> <refnamediv> <refname>SWFMovie->setbackground</refname> <refpurpose>Sets the background color.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setbackground</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->setbackground</function> sets the background color. Why is there no rgba version? Think about it. (Actually, that's not such a dumb question after all- you might want to let the html background show through. There's a way to do that, but it only works on IE4. Search the <ulink url="&url.macromedia;">&url.macromedia;</ulink> site for details.) </para> </refsect1> </refentry> <refentry id="function.swfmovie.setrate"> <refnamediv> <refname>SWFMovie->setrate</refname> <refpurpose>Sets the animation's frame rate.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setrate</function></funcdef> <paramdef>int <parameter>rate</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->setrate</function> sets the frame rate to <parameter>rate</parameter>, in frame per seconds. Animation will slow down if the player can't render frames fast enough- unless there's a streaming sound, in which case display frames are sacrificed to keep sound from skipping. </para> </refsect1> </refentry> <refentry id="function.swfmovie.setdimension"> <refnamediv> <refname>SWFMovie->setdimension</refname> <refpurpose>Sets the movie's width and height.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setdimension</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->setdimension</function> sets the movie's width to <parameter>width</parameter> and height to <parameter>height</parameter>. </para> </refsect1> </refentry> <refentry id="function.swfmovie.setframes"> <refnamediv> <refname>SWFMovie->setframes</refname> <refpurpose>Sets the total number of frames in the animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setframes</function></funcdef> <paramdef>string <parameter>numberofframes</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->setframes</function> sets the total number of frames in the animation to <parameter>numberofframes</parameter>. </para> </refsect1> </refentry> <refentry id="function.swfmovie.nextframe"> <refnamediv> <refname>SWFMovie->nextframe</refname> <refpurpose>Moves to the next frame of the animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->nextframe</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->setframes</function> moves to the next frame of the animation. </para> </refsect1> </refentry> <refentry id="function.swfmovie.streammp3"> <refnamediv> <refname>SWFMovie->streammp3</refname> <refpurpose>Streams a MP3 file.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->streammp3</function></funcdef> <paramdef>string <parameter>mp3FileName</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmovie->streammp3</function> streams the mp3 file <parameter>mp3FileName</parameter>. Not very robust in dealing with oddities (can skip over an initial ID3 tag, but that's about it). Like <function>SWFShape->addJpegFill</function>, this isn't a stable function- we'll probably need to make a separate SWFSound object to contain sound types. </para> <para> Note that the movie isn't smart enough to put enough frames in to contain the entire mp3 stream- you'll have to add (length of song * frames per second) frames to get the entire stream in. </para> <para> Yes, now you can use ming to put that rock and roll devil worship music into your SWF files. Just don't tell the RIAA. <example> <title><function>swfmovie->streammp3</function> example</title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setRate(12.0); $m->streamMp3("distortobass.mp3");// use your own MP3 // 11.85 seconds at 12.0 fps = 142 frames $m->setFrames(142); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry><!-- SWFDisplayItem --> <refentry id="function.swfdisplayitem"> <refnamediv> <refname>SWFDisplayItem</refname> <refpurpose>Creates a new displayitem object.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfdisplayitem</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem</function> creates a new swfdisplayitem object. </para> <para> Here's where all the animation takes place. After you define a shape, a text object, a sprite, or a button, you add it to the movie, then use the returned handle to move, rotate, scale, or skew the thing. </para> <simpara> SWFDisplayItem has the following methods : <function>swfdisplayitem->move</function>, <function>swfdisplayitem->moveto</function>, <function>swfdisplayitem->scaleto</function>, <function>swfdisplayitem->scale</function>, <function>swfdisplayitem->rotate</function>, <function>swfdisplayitem->rotateto</function>, <function>swfdisplayitem->skewxto</function>, <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewyto</function> <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->setdepth</function> <function>swfdisplayitem->remove</function>, <function>swfdisplayitem->setname</function> <function>swfdisplayitem->setratio</function>, <function>swfdisplayitem->addcolor</function> and <function>swfdisplayitem->multcolor</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.moveto"> <refnamediv> <refname>SWFDisplayItem->moveTo</refname> <refpurpose>Moves object in global coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->moveto</function> moves the current object to (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->move</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.move"> <refnamediv> <refname>SWFDisplayItem->move</refname> <refpurpose>Moves object in relative coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->move</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->move</function> moves the current object by (<parameter>dx</parameter>,<parameter>dy</parameter>) from its current position. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->moveto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.scaleto"> <refnamediv> <refname>SWFDisplayItem->scaleTo</refname> <refpurpose>Scales the object in global coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->scaleto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->scaleto</function> scales the current object to (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->scale</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.scale"> <refnamediv> <refname>SWFDisplayItem->scale</refname> <refpurpose>Scales the object in relative coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->scale</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->scale</function> scales the current object by (<parameter>dx</parameter>,<parameter>dy</parameter>) from its current size. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->scaleto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.rotateto"> <refnamediv> <refname>SWFDisplayItem->rotateTo</refname> <refpurpose>Rotates the object in global coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->rotateto</function></funcdef> <paramdef>float <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->rotateto</function> set the current object rotation to <parameter>degrees</parameter> degrees in global coordinates. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <para> This example bring three rotating string from the background to the foreground. Pretty nice. <example> <title><function>swfdisplayitem->rotateto</function> example</title> <programlisting role="php"><?php $thetext = "ming!"; $f = new SWFFont("Bauhaus 93.fdb"); $m = new SWFMovie(); $m->setRate(24.0); $m->setDimension(2400, 1600); $m->setBackground(0xff, 0xff, 0xff); // functions with huge numbers of arbitrary // arguments are always a good idea! Really! function text($r, $g, $b, $a, $rot, $x, $y, $scale, $string) { global $f, $m; $t = new SWFText(); $t->setFont($f); $t->setColor($r, $g, $b, $a); $t->setHeight(960); $t->moveTo(-($f->getWidth($string))/2, $f->getAscent()/2); $t->addString($string); // we can add properties just like a normal php var, // as long as the names aren't already used. // e.g., we can't set $i->scale, because that's a function $i = $m->add($t); $i->x = $x; $i->y = $y; $i->rot = $rot; $i->s = $scale; $i->rotateTo($rot); $i->scale($scale, $scale); // but the changes are local to the function, so we have to // return the changed object. kinda weird.. return $i; } function step($i) { $oldrot = $i->rot; $i->rot = 19*$i->rot/20; $i->x = (19*$i->x + 1200)/20; $i->y = (19*$i->y + 800)/20; $i->s = (19*$i->s + 1.0)/20; $i->rotateTo($i->rot); $i->scaleTo($i->s, $i->s); $i->moveTo($i->x, $i->y); return $i; } // see? it sure paid off in legibility: $i1 = text(0xff, 0x33, 0x33, 0xff, 900, 1200, 800, 0.03, $thetext); $i2 = text(0x00, 0x33, 0xff, 0x7f, -560, 1200, 800, 0.04, $thetext); $i3 = text(0xff, 0xff, 0xff, 0x9f, 180, 1200, 800, 0.001, $thetext); for($i=1; $i<=100; ++$i) { $i1 = step($i1); $i2 = step($i2); $i3 = step($i3); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <simpara> See also <function>swfdisplayitem->rotate</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.rotate"> <refnamediv> <refname>SWFDisplayItem->Rotate</refname> <refpurpose>Rotates in relative coordinates.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->rotate</function></funcdef> <paramdef>float <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->rotate</function> rotates the current object by <parameter>ddegrees</parameter> degrees from its current rotation. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->rotateto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewxto"> <refnamediv> <refname>SWFDisplayItem->skewXTo</refname> <refpurpose>Sets the X-skew.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewxto</function></funcdef> <paramdef>float <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->skewxto</function> sets the x-skew to <parameter>degrees</parameter>. For <parameter>degrees</parameter> is 1.0, it means a 45-degree forward slant. More is more forward, less is more backward. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewy</function> and <function>swfdisplayitem->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewx"> <refnamediv> <refname>SWFDisplayItem->skewX</refname> <refpurpose>Sets the X-skew.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewx</function></funcdef> <paramdef>float <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->skewx</function> adds <parameter>ddegrees</parameter> to current x-skew. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewy</function> and <function>swfdisplayitem->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewyto"> <refnamediv> <refname>SWFDisplayItem->skewYTo</refname> <refpurpose>Sets the Y-skew.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewyto</function></funcdef> <paramdef>float <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->skewyto</function> sets the y-skew to <parameter>degrees</parameter>. For <parameter>degrees</parameter> is 1.0, it means a 45-degree forward slant. More is more upward, less is more downward. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->skewy</function>, <function>swfdisplayitem->skewx</function> and <function>swfdisplayitem->skewxto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewy"> <refnamediv> <refname>SWFDisplayItem->skewY</refname> <refpurpose>Sets the Y-skew.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewy</function></funcdef> <paramdef>float <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->skewy</function> adds <parameter>ddegrees</parameter> to current y-skew. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->skewx</function> and <function>swfdisplayitem->skewxto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setdepth"> <refnamediv> <refname>SWFDisplayItem->setDepth</refname> <refpurpose>Sets z-order</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setdepth</function></funcdef> <paramdef>float <parameter>depth</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->rotate</function> sets the object's z-order to <parameter>depth</parameter>. Depth defaults to the order in which instances are created (by add'ing a shape/text to a movie)- newer ones are on top of older ones. If two objects are given the same depth, only the later-defined one can be moved. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.remove"> <refnamediv> <refname>SWFDisplayItem->remove</refname> <refpurpose>Removes the object from the movie</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->remove</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->remove</function> removes this object from the movie's display list. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <simpara> See also <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setname"> <refnamediv> <refname>SWFDisplayItem->setName</refname> <refpurpose>Sets the object's name</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setname</function></funcdef> <paramdef>string <parameter>name</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->setname</function> sets the object's name to <parameter>name</parameter>, for targetting with action script. Only useful on sprites. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setratio"> <refnamediv> <refname>SWFDisplayItem->setRatio</refname> <refpurpose>Sets the object's ratio.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setratio</function></funcdef> <paramdef>float <parameter>ratio</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->setratio</function> sets the object's ratio to <parameter>ratio</parameter>. Obviously only useful for morphs. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <para> This simple example will morph nicely three concentric circles. <example> <title><function>swfdisplayitem->setname</function> example</title> <programlisting role="php"><?php $p = new SWFMorph(); $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(0.16, 0xff, 0xff, 0xff); $g->addEntry(0.32, 0, 0, 0); $g->addEntry(0.48, 0xff, 0xff, 0xff); $g->addEntry(0.64, 0, 0, 0); $g->addEntry(0.80, 0xff, 0xff, 0xff); $g->addEntry(1.00, 0, 0, 0); $s = $p->getShape1(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.05); $s->setLeftFill($f); $s->movePenTo(-160, -120); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(0.16, 0xff, 0, 0); $g->addEntry(0.32, 0, 0, 0); $g->addEntry(0.48, 0, 0xff, 0); $g->addEntry(0.64, 0, 0, 0); $g->addEntry(0.80, 0, 0, 0xff); $g->addEntry(1.00, 0, 0, 0); $s = $p->getShape2(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.05); $f->skewXTo(1.0); $s->setLeftFill($f); $s->movePenTo(-160, -120); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m = new SWFMovie(); $m->setDimension(320, 240); $i = $m->add($p); $i->moveTo(160, 120); for($n=0; $n<=1.001; $n+=0.01) { $i->setRatio($n); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfdisplayitem.addcolor"> <refnamediv> <refname>SWFDisplayItem->addColor</refname> <refpurpose>Adds the given color to this item's color transform.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->addcolor</function></funcdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->addcolor</function> adds the color to this item's color transform. The color is given in its RGB form. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.multcolor"> <refnamediv> <refname>SWFDisplayItem->multColor</refname> <refpurpose>Multiplies the item's color transform.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->multcolor</function></funcdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfdisplayitem->multcolor</function> multiplies the item's color transform by the given values. </para> <simpara> The object may be a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function> or a <function>swfsprite</function> object. It must have been added using the <function>swfmovie->add</function>. </simpara> <para> This simple example will modify your picture's atmospher to Halloween (use a landscape or bright picture). <example> <title><function>swfdisplayitem->multcolor</function> example</title> <programlisting role="php"><?php $b = new SWFBitmap("backyard.jpg"); // note use your own picture :-) $s = new SWFShape(); $s->setRightFill($s->addFill($b)); $s->drawLine($b->getWidth(), 0); $s->drawLine(0, $b->getHeight()); $s->drawLine(-$b->getWidth(), 0); $s->drawLine(0, -$b->getHeight()); $m = new SWFMovie(); $m->setDimension($b->getWidth(), $b->getHeight()); $i = $m->add($s); for($n=0; $n<=20; ++$n) { $i->multColor(1.0-$n/10, 1.0, 1.0); $i->addColor(0xff*$n/20, 0, 0); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <!-- SWFShape --> <refentry id="function.swfshape"> <refnamediv> <refname>SWFShape</refname> <refpurpose>Creates a new shape object.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfshape</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfshape</function> creates a new shape object. </para> <simpara> SWFShape has the following methods : <function>swfshape->setline</function>, <function>swfshape->addfill</function>, <function>swfshape->setleftfill</function>, <function>swfshape->setrightfill</function>, <function>swfshape->movepento</function>, <function>swfshape->movepen</function>, <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->drawcurveto</function> and <function>swfshape->drawcurve</function>. </simpara> <para> This simple example will draw a big red elliptic quadrant. <example> <title><function>swfshape</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); $s->setLine(40, 0x7f, 0, 0); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->movePenTo(200, 200); $s->drawLineTo(6200, 200); $s->drawLineTo(6200, 4600); $s->drawCurveTo(200, 4600, 200, 200); $m = new SWFMovie(); $m->setDimension(6400, 4800); $m->setRate(12.0); $m->add($s); $m->nextFrame(); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.setline"> <refnamediv> <refname>SWFShape->setLine</refname> <refpurpose>Sets the shape's line style.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setline</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfshape->setline</function> sets the shape's line style. <parameter>width</parameter> is the line's width. If <parameter>width</parameter> is 0, the line's style is removed (then, all other arguments are ignored). If <parameter>width</parameter> > 0, then line's color is set to <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter>. Last parameter <parameter>a</parameter> is optional. </para> <simpara> <function>swfshape->setline</function> accepts 1, 4 or 5 arguments (not 3 or 2). </simpara> <para> You must declare all line styles before you use them (see example). </para> <para> This simple example will draw a big "!#%*@", in funny colors and gracious style. <example> <title><function>swfshape->setline</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); $f1 = $s->addFill(0xff, 0, 0); $f2 = $s->addFill(0xff, 0x7f, 0); $f3 = $s->addFill(0xff, 0xff, 0); $f4 = $s->addFill(0, 0xff, 0); $f5 = $s->addFill(0, 0, 0xff); // bug: have to declare all line styles before you use them $s->setLine(40, 0x7f, 0, 0); $s->setLine(40, 0x7f, 0x3f, 0); $s->setLine(40, 0x7f, 0x7f, 0); $s->setLine(40, 0, 0x7f, 0); $s->setLine(40, 0, 0, 0x7f); $f = new SWFFont('Techno.fdb'); $s->setRightFill($f1); $s->setLine(40, 0x7f, 0, 0); $s->drawGlyph($f, '!'); $s->movePen($f->getWidth('!'), 0); $s->setRightFill($f2); $s->setLine(40, 0x7f, 0x3f, 0); $s->drawGlyph($f, '#'); $s->movePen($f->getWidth('#'), 0); $s->setRightFill($f3); $s->setLine(40, 0x7f, 0x7f, 0); $s->drawGlyph($f, '%'); $s->movePen($f->getWidth('%'), 0); $s->setRightFill($f4); $s->setLine(40, 0, 0x7f, 0); $s->drawGlyph($f, '*'); $s->movePen($f->getWidth('*'), 0); $s->setRightFill($f5); $s->setLine(40, 0, 0, 0x7f); $s->drawGlyph($f, '@'); $m = new SWFMovie(); $m->setDimension(3000,2000); $m->setRate(12.0); $i = $m->add($s); $i->moveTo(1500-$f->getWidth("!#%*@")/2, 1000+$f->getAscent()/2); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.addfill"> <refnamediv> <refname>SWFShape->addFill</refname> <refpurpose>Adds a solid fill to the shape.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>SWFbitmap <parameter>bitmap</parameter></paramdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>SWFGradient <parameter>gradient</parameter></paramdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfshape->addfill</function> adds a solid fill to the shape's list of fill styles. <function>swfshape->addfill</function> accepts three different types of arguments. </para> <para> <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> is a color (RGB mode). Last parameter <parameter>a</parameter> is optional. </para> <para> The <parameter>bitmap</parameter> argument is an <function>swfbitmap</function> object. The <parameter>flags</parameter> argument can be one of the following values : SWFFILL_CLIPPED_BITMAP or SWFFILL_TILED_BITMAP. Default is SWFFILL_TILED_BITMAP. I think. </para> <para> The <parameter>gradient</parameter> argument is an <function>swfgradient</function> object. The flags argument can be one of the following values : SWFFILL_RADIAL_GRADIENT or SWFFILL_LINEAR_GRADIENT. Default is SWFFILL_LINEAR_GRADIENT. I'm sure about this one. Really. </para> <para> <function>swfshape->addfill</function> returns an <function>swffill</function> object for use with the <function>swfshape->setleftfill</function> and <function>swfshape->setrightfill</function> functions described below. </para> <simpara> See also <function>swfshape->setleftfill</function> and <function>swfshape->setrightfill</function>. </simpara> <para> This simple example will draw a frame on a bitmap. Ah, here's another buglet in the flash player- it doesn't seem to care about the second shape's bitmap's transformation in a morph. According to spec, the bitmap should stretch along with the shape in this example.. <example> <title><function>swfshape->addfill</function> example</title> <programlisting role="php"><?php $p = new SWFMorph(); $b = new SWFBitmap("alphafill.jpg"); // use your own bitmap $width = $b->getWidth(); $height = $b->getHeight(); $s = $p->getShape1(); $f = $s->addFill($b, SWFFILL_TILED_BITMAP); $f->moveTo(-$width/2, -$height/4); $f->scaleTo(1.0, 0.5); $s->setLeftFill($f); $s->movePenTo(-$width/2, -$height/4); $s->drawLine($width, 0); $s->drawLine(0, $height/2); $s->drawLine(-$width, 0); $s->drawLine(0, -$height/2); $s = $p->getShape2(); $f = $s->addFill($b, SWFFILL_TILED_BITMAP); // these two have no effect! $f->moveTo(-$width/4, -$height/2); $f->scaleTo(0.5, 1.0); $s->setLeftFill($f); $s->movePenTo(-$width/4, -$height/2); $s->drawLine($width/2, 0); $s->drawLine(0, $height); $s->drawLine(-$width/2, 0); $s->drawLine(0, -$height); $m = new SWFMovie(); $m->setDimension($width, $height); $i = $m->add($p); $i->moveTo($width/2, $height/2); for($n=0; $n<1.001; $n+=0.03) { $i->setRatio($n); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.setleftfill"> <refnamediv> <refname>SWFShape->setLeftFill</refname> <refpurpose>Sets left rasterizing color.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setleftfill</function></funcdef> <paramdef>swfgradient <parameter>fill</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setleftfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> What this nonsense is about is, every edge segment borders at most two fills. When rasterizing the object, it's pretty handy to know what those fills are ahead of time, so the swf format requires these to be specified. </para> <para> <function>swfshape->setleftfill</function> sets the fill on the left side of the edge- that is, on the interior if you're defining the outline of the shape in a counter-clockwise fashion. The fill object is an SWFFill object returned from one of the addFill functions above. </para> <para> This seems to be reversed when you're defining a shape in a morph, though. If your browser crashes, just try setting the fill on the other side. </para> <simpara> Shortcut for <literal>swfshape->setleftfill($s->addfill($r, $g, $b [, $a]));</literal>. </simpara> <simpara> See also <function>swfshape->setrightfill</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.setrightfill"> <refnamediv> <refname>SWFShape->setRightFill</refname> <refpurpose>Sets right rasterizing color.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setrightfill</function></funcdef> <paramdef>swfgradient <parameter>fill</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setrightfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> See also <function>swfshape->setleftfill</function>. </simpara> <simpara> Shortcut for <literal>swfshape->setrightfill($s->addfill($r, $g, $b [, $a]));</literal>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.movepento"> <refnamediv> <refname>SWFShape->movePenTo</refname> <refpurpose>Moves the shape's pen.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->movepento</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->setrightfill</function> move the shape's pen to (<parameter>x</parameter>,<parameter>y</parameter>) in the shape's coordinate space. </simpara> <simpara> See also <function>swfshape->movepen</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->drawlineto</function> and <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.movepen"> <refnamediv> <refname>SWFShape->movePen</refname> <refpurpose>Moves the shape's pen (relative).</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->movepen</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->setrightfill</function> move the shape's pen from coordinates (current x,current y) to (current x + <parameter>dx</parameter>, current y + <parameter>dy</parameter>) in the shape's coordinate space. </simpara> <simpara> See also <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->drawlineto</function> and <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawlineto"> <refnamediv> <refname>SWFShape->drawLineTo</refname> <refpurpose>Draws a line.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawlineto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->setrightfill</function> draws a line (using the current line style, set by <function>swfshape->setline</function>) from the current pen position to point (<parameter>x</parameter>,<parameter>y</parameter>) in the shape's coordinate space. </simpara> <simpara> See also <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->movepen</function> and <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawline"> <refnamediv> <refname>SWFShape->drawLine</refname> <refpurpose>Draws a line (relative).</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawline</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->setrightfill</function> draws a line (using the current line style set by <function>swfshape->setline</function>) from the current pen position to displacement (<parameter>dx</parameter>,<parameter>dy</parameter>). </simpara> <simpara> See also <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->movepen</function> and <function>swfshape->drawlineto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawcurveto"> <refnamediv> <refname>SWFShape->drawCurveTo</refname> <refpurpose>Draws a curve.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawcurveto</function></funcdef> <paramdef>int <parameter>controlx</parameter></paramdef> <paramdef>int <parameter>controly</parameter></paramdef> <paramdef>int <parameter>anchorx</parameter></paramdef> <paramdef>int <parameter>anchory</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->drawcurveto</function> draws a quadratic curve (using the current line style, set by <function>swfshape->setline</function>) from the current pen position to (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) using (<parameter>controlx</parameter>,<parameter>controly</parameter>) as a control point. That is, head towards the control point, then smoothly turn to the anchor point. </simpara> <simpara> See also <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->movepento</function> and <function>swfshape->movepen</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawcurve"> <refnamediv> <refname>SWFShape->drawCurve</refname> <refpurpose>Draws a curve (relative).</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawcurve</function></funcdef> <paramdef>int <parameter>controldx</parameter></paramdef> <paramdef>int <parameter>controldy</parameter></paramdef> <paramdef>int <parameter>anchordx</parameter></paramdef> <paramdef>int <parameter>anchordy</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <simpara> <function>swfshape->drawcurve</function> draws a quadratic curve (using the current line style,set by <function>swfshape->setline</function>) from the current pen position to the relative position (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) using relative control point (<parameter>controlx</parameter>,<parameter>controly</parameter>). That is, head towards the control point, then smoothly turn to the anchor point. </simpara> <simpara> See also <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->movepento</function> and <function>swfshape->movepen</function>. </simpara> </refsect1> </refentry><!-- SWFGradient --> <refentry id="function.swfgradient"> <refnamediv> <refname>SWFGradient</refname> <refpurpose>Creates a gradient object</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfgradient</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfgradient</function> creates a new SWFGradient object. </para> <simpara> After you've added the entries to your gradient, you can use the gradient in a shape fill with the <function>swfshape->addfill</function> method. </simpara> <simpara> SWFGradient has the following methods : <function>swfgradient->addentry</function>. </simpara> <para> This simple example will draw a big black-to-white gradient as background, and a redish disc in its center. <example> <title><function>swfgradient</function> example</title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setDimension(320, 240); $s = new SWFShape(); // first gradient- black to white $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(1.0, 0xff, 0xff, 0xff); $f = $s->addFill($g, SWFFILL_LINEAR_GRADIENT); $f->scaleTo(0.01); $f->moveTo(160, 120); $s->setRightFill($f); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m->add($s); $s = new SWFShape(); // second gradient- radial gradient from red to transparent $g = new SWFGradient(); $g->addEntry(0.0, 0xff, 0, 0, 0xff); $g->addEntry(1.0, 0xff, 0, 0, 0); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.005); $f->moveTo(160, 120); $s->setRightFill($f); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfgradient.addentry"> <refnamediv> <refname>SWFGradient->addEntry</refname> <refpurpose>Adds an entry to the gradient list.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfgradient->addentry</function></funcdef> <paramdef>float <parameter>ratio</parameter></paramdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfgradient->addentry</function> adds an entry to the gradient list. <parameter>ratio</parameter> is a number between 0 and 1 indicating where in the gradient this color appears. Thou shalt add entries in order of increasing ratio. </para> <para> <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> is a color (RGB mode). Last parameter <parameter>a</parameter> is optional. </para> </refsect1> </refentry><!-- SWFBitmap --> <refentry id="function.swfbitmap"> <refnamediv> <refname>SWFBitmap</refname> <refpurpose>Loads Bitmap object</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfbitmap</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> <paramdef>int <parameter><optional>alphafilename</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbitmap</function> creates a new SWFBitmap object from the Jpeg or DBL file named <parameter>filename</parameter>. <parameter>alphafilename</parameter> indicates a MSK file to be used as an alpha mask for a Jpeg image. </para> <note> <para> We can only deal with baseline (frame 0) jpegs, no baseline optimized or progressive scan jpegs! </para> </note> <simpara> SWFBitmap has the following methods : <function>swfbitmap->getwidth</function> and <function>swfbitmap->getheight</function>. </simpara> <para> You can't import png images directly, though- have to use the png2dbl utility to make a dbl ("define bits lossless") file from the png. The reason for this is that I don't want a dependency on the png library in ming- autoconf should solve this, but that's not set up yet. <example> <title>Import PNG files</title> <programlisting role="php"><?php $s = new SWFShape(); $f = $s->addFill(new SWFBitmap("png.dbl")); $s->setRightFill($f); $s->drawLine(32, 0); $s->drawLine(0, 32); $s->drawLine(-32, 0); $s->drawLine(0, -32); $m = new SWFMovie(); $m->setDimension(32, 32); $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> And you can put an alpha mask on a jpeg fill. <example> <title><function>swfbitmap</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); // .msk file generated with "gif2mask" utility $f = $s->addFill(new SWFBitmap("alphafill.jpg", "alphafill.msk")); $s->setRightFill($f); $s->drawLine(640, 0); $s->drawLine(0, 480); $s->drawLine(-640, 0); $s->drawLine(0, -480); $c = new SWFShape(); $c->setRightFill($c->addFill(0x99, 0x99, 0x99)); $c->drawLine(40, 0); $c->drawLine(0, 40); $c->drawLine(-40, 0); $c->drawLine(0, -40); $m = new SWFMovie(); $m->setDimension(640, 480); $m->setBackground(0xcc, 0xcc, 0xcc); // draw checkerboard background for($y=0; $y<480; $y+=40) { for($x=0; $x<640; $x+=80) { $i = $m->add($c); $i->moveTo($x, $y); } $y+=40; for($x=40; $x<640; $x+=80) { $i = $m->add($c); $i->moveTo($x, $y); } } $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfbitmap.getwidth"> <refnamediv> <refname>SWFBitmap->getWidth</refname> <refpurpose>Returns the bitmap's width.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swfbitmap->getwidth</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbitmap->getwidth</function> returns the bitmap's width in pixels. </para> <para> See also <function>swfbitmap->getheight</function>. </para> </refsect1> </refentry> <refentry id="function.swfbitmap.getheight"> <refnamediv> <refname>SWFBitmap->getHeight</refname> <refpurpose>Returns the bitmap's height.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swfbitmap->getheight</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbitmap->getheight</function> returns the bitmap's height in pixels. </para> <para> See also <function>swfbitmap->getwidth</function>. </para> </refsect1> </refentry><!-- SWFFill --> <refentry id="function.swffill"> <refnamediv> <refname>SWFFill</refname> <refpurpose>Loads SWFFill object</refpurpose> </refnamediv> <refsect1> <title>Description</title> <para> The <function>swffill</function> object allows you to transform (scale, skew, rotate) bitmap and gradient fills. <function>swffill</function> objects are created by the <function>swfshape->addfill</function> methods. </para> <simpara> SWFFill has the following methods : <function>swffill->moveto</function> and <function>swffill->scaleto</function>, <function>swffill->rotateto</function>, <function>swffill->skewxto</function> and <function>swffill->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swffill.moveto"> <refnamediv> <refname>SWFFill->moveTo</refname> <refpurpose>Moves fill origin</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffill->moveto</function> moves fill's origin to (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. </para> </refsect1> </refentry> <refentry id="function.swffill.scaleto"> <refnamediv> <refname>SWFFill->scaleTo</refname> <refpurpose>Sets fill's scale</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->scaleto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffill->scaleto</function> sets fill's scale to <parameter>x</parameter> in the x-direction, <parameter>y</parameter> in the y-direction. </para> </refsect1> </refentry> <refentry id="function.swffill.rotateto"> <refnamediv> <refname>SWFFill->rotateTo</refname> <refpurpose>Sets fill's rotation</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->rotateto</function></funcdef> <paramdef>float <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffill->rotateto</function> sets fill's rotation to <parameter>degrees</parameter> degrees. </para> </refsect1> </refentry> <refentry id="function.swffill.skewxto"> <refnamediv> <refname>SWFFill->skewXTo</refname> <refpurpose>Sets fill x-skew</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->skewxto</function></funcdef> <paramdef>float <parameter>x</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffill->skewxto</function> sets fill x-skew to <parameter>x</parameter>. For <parameter>x</parameter> is 1.0, it is a is a 45-degree forward slant. More is more forward, less is more backward. </para> </refsect1> </refentry> <refentry id="function.swffill.skewyto"> <refnamediv> <refname>SWFFill->skewYTo</refname> <refpurpose>Sets fill y-skew</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->skewyto</function></funcdef> <paramdef>float <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffill->skewyto</function> sets fill y-skew to <parameter>y</parameter>. For <parameter>y</parameter> is 1.0, it is a is a 45-degree upward slant. More is more upward, less is more downward. </para> </refsect1> </refentry><!-- SWFMorph --> <refentry id="function.swfmorph"> <refnamediv> <refname>SWFMorph</refname> <refpurpose>Creates a new SWFMorph object.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfmorph</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmorph</function> creates a new SWFMorph object. </para> <para> Also called a "shape tween". This thing lets you make those tacky twisting things that make your computer choke. Oh, joy! </para> <para> The methods here are sort of weird. It would make more sense to just have newSWFMorph(shape1, shape2);, but as things are now, shape2 needs to know that it's the second part of a morph. (This, because it starts writing its output as soon as it gets drawing commands- if it kept its own description of its shapes and wrote on completion this and some other things would be much easier.) </para> <simpara> SWFMorph has the following methods : <function>swfmorph->getshape1</function> and <function>swfmorph->getshape1</function>. </simpara> <para> This simple example will morph a big red square into a smaller blue black-bordered square. <example> <title><function>swfmorph</function> example</title> <programlisting role="php"><?php $p = new SWFMorph(); $s = $p->getShape1(); $s->setLine(0,0,0,0); /* Note that this is backwards from normal shapes (left instead of right). I have no idea why, but this seems to work.. */ $s->setLeftFill($s->addFill(0xff, 0, 0)); $s->movePenTo(-1000,-1000); $s->drawLine(2000,0); $s->drawLine(0,2000); $s->drawLine(-2000,0); $s->drawLine(0,-2000); $s = $p->getShape2(); $s->setLine(60,0,0,0); $s->setLeftFill($s->addFill(0, 0, 0xff)); $s->movePenTo(0,-1000); $s->drawLine(1000,1000); $s->drawLine(-1000,1000); $s->drawLine(-1000,-1000); $s->drawLine(1000,-1000); $m = new SWFMovie(); $m->setDimension(3000,2000); $m->setBackground(0xff, 0xff, 0xff); $i = $m->add($p); $i->moveTo(1500,1000); for($r=0.0; $r<=1.0; $r+=0.1) { $i->setRatio($r); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfmorph.getshape1"> <refnamediv> <refname>SWFMorph->getshape1</refname> <refpurpose>Gets a handle to the starting shape</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>mixed <function>swfmorph->getshape1</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmorph->getshape1</function> gets a handle to the morph's starting shape. <function>swfmorph->getshape1</function> returns an <function>swfshape</function> object. </para> </refsect1> </refentry> <refentry id="function.swfmorph.getshape2"> <refnamediv> <refname>SWFMorph->getshape2</refname> <refpurpose>Gets a handle to the ending shape</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>mixed <function>swfmorph->getshape2</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfmorph->getshape2</function> gets a handle to the morph's ending shape. <function>swfmorph->getshape2</function> returns an <function>swfshape</function> object. </para> </refsect1> </refentry><!-- SWFText --> <refentry id="function.swftext"> <refnamediv> <refname>SWFText</refname> <refpurpose>Creates a new SWFText object.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swftext</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext</function> creates a new SWFText object, fresh for manipulating. </para> <simpara> SWFText has the following methods : <function>swftext->setfont</function>, <function>swftext->setheight</function>, <function>swftext->setspacing</function>, <function>swftext->setcolor</function>, <function>swftext->moveto</function>, <function>swftext->addstring</function> and <function>swftext->getwidth</function>. </simpara> <para> This simple example will draw a big yellow "PHP generates Flash with Ming" text, on white background. <example> <title><function>swftext</function> example</title> <programlisting role="php"><?php $f = new SWFFont("Techno.fdb"); $t = new SWFText(); $t->setFont($f); $t->moveTo(200, 2400); $t->setColor(0xff, 0xff, 0); $t->setHeight(1200); $t->addString("PHP generates Flash with Ming!!"); $m = new SWFMovie(); $m->setDimension(5400, 3600); $m->add($t); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swftext.setfont"> <refnamediv> <refname>SWFText->setFont</refname> <refpurpose>Sets the current font</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setfont</function></funcdef> <paramdef>string <parameter>font</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->setfont</function> sets the current font to <parameter>font</parameter>. </para> </refsect1> </refentry> <refentry id="function.swftext.setheight"> <refnamediv> <refname>SWFText->setHeight</refname> <refpurpose>Sets the current font height</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setheight</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->setheight</function> sets the current font height to <parameter>height</parameter>. Default is 240. </para> </refsect1> </refentry> <refentry id="function.swftext.setspacing"> <refnamediv> <refname>SWFText->setSpacing</refname> <refpurpose>Sets the current font spacing</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setspacing</function></funcdef> <paramdef>float <parameter>spacing</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->setspacing</function> sets the current font spacing to <parameter>spacing</parameter><parameter>spacing</parameter>. Default is 1.0. 0 is all of the letters written at the same point. This doesn't really work that well because it inflates the advance across the letter, doesn't add the same amount of spacing between the letters. I should try and explain that better, prolly. Or just fix the damn thing to do constant spacing. This was really just a way to figure out how letter advances work, anyway.. So nyah. </para> </refsect1> </refentry> <refentry id="function.swftext.setcolor"> <refnamediv> <refname>SWFText->setColor</refname> <refpurpose>Sets the current font color</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setcolor</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->setspacing</function> changes the current text color. Default is black. I think. Color is represented using the RGB system. </para> </refsect1> </refentry> <refentry id="function.swftext.moveto"> <refnamediv> <refname>SWFText->moveTo</refname> <refpurpose>Moves the pen</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->moveto</function> moves the pen (or cursor, if that makes more sense) to (<parameter>x</parameter>,<parameter>y</parameter>) in text object's coordinate space. If either is zero, though, value in that dimension stays the same. Annoying, should be fixed. </para> </refsect1> </refentry> <refentry id="function.swftext.addstring"> <refnamediv> <refname>SWFText->addString</refname> <refpurpose>Draws a string</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->addstring</function> draws the string <parameter>string</parameter> at the current pen (cursor) location. Pen is at the baseline of the text; i.e., ascending text is in the -y direction. </para> </refsect1> </refentry> <refentry id="function.swftext.getwidth"> <refnamediv> <refname>SWFText->getWidth</refname> <refpurpose>Computes string's width</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftext->addstring</function> returns the rendered width of the <parameter>string</parameter> string at the text object's current font, scale, and spacing settings. </para> </refsect1> </refentry><!-- SWFFont --> <refentry id="function.swffont"> <refnamediv> <refname>SWFFont</refname> <refpurpose>Loads a font definition</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swffont</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> If <parameter>filename</parameter> is the name of an FDB file (i.e., it ends in ".fdb"), load the font definition found in said file. Otherwise, create a browser-defined font reference. </para> <para> FDB ("font definition block") is a very simple wrapper for the SWF DefineFont2 block which contains a full description of a font. One may create FDB files from SWT Generator template files with the included makefdb utility- look in the util directory off the main ming distribution directory. </para> <para> Browser-defined fonts don't contain any information about the font other than its name. It is assumed that the font definition will be provided by the movie player. The fonts _serif, _sans, and _typewriter should always be available. For example: <programlisting role="php"><?php$f = newSWFFont("_sans"); ?> </programlisting> will give you the standard sans-serif font, probably the same as what you'd get with <literal><font name="sans-serif"></literal> in HTML. </para> <para> <function>swffont</function> returns a reference to the font definition, for use in the <function>SWFText->setFont</function> and the <function>SWFTextField->setFont</function> methods. </para> <simpara> SWFFont has the following methods : <function>swffont->getwidth</function>. </simpara> </refsect1> </refentry> <refentry id="function.swffont.getwidth"> <refnamediv> <refname>swffont->getwidth</refname> <refpurpose>Returns the string's width</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swffont->getwidth</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swffont->getwidth</function> returns the string <parameter>string</parameter>'s width, using font's default scaling. You'll probably want to use the <function>SWFText</function> version of this method which uses the text object's scale. </para> </refsect1> </refentry><!-- SWFTextField --> <refentry id="function.swftextfield"> <refnamediv> <refname>SWFTextField</refname> <refpurpose>Creates a text field object</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swftextfield</function></funcdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield</function> creates a new text field object. Text Fields are less flexible than <function>swftext</function> objects- they can't be rotated, scaled non-proportionally, or skewed, but they can be used as form entries, and they can use browser-defined fonts. </para> <para> The optional flags change the text field's behavior. It has the following possibles values : <itemizedlist> <listitem> <simpara> SWFTEXTFIELD_NOEDIT indicates that the field shouldn't be user-editable </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_PASSWORD obscures the data entry </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_DRAWBOX draws the outline of the textfield </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_MULTILINE allows multiple lines </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_WORDWRAP allows text to wrap </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_NOSELECT makes the field non-selectable </simpara> </listitem> </itemizedlist> Flags are combined with the bitwise <link linkend="language.operators.bitwise">OR</link> operation. For example, <programlisting role="php"><?php$t = newSWFTextField(SWFTEXTFIELD_PASSWORD | SWFTEXTFIELD_NOEDIT); ?> </programlisting> creates a totally useless non-editable password field. </para> <simpara> SWFTextField has the following methods : <function>swftextfield->setfont</function>, <function>swftextfield->setbounds</function>, <function>swftextfield->align</function>, <function>swftextfield->setheight</function>, <function>swftextfield->setleftmargin</function>, <function>swftextfield->setrightmargin</function>, <function>swftextfield->setmargins</function>, <function>swftextfield->setindentation</function>, <function>swftextfield->setlinespacing</function>, <function>swftextfield->setcolor</function>, <function>swftextfield->setname</function> and <function>swftextfield->addstring</function>. </simpara> </refsect1> </refentry> <refentry id="function.swftextfield.setfont"> <refnamediv> <refname>SWFTextField->setFont</refname> <refpurpose>Sets the text field font</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setfont</function></funcdef> <paramdef>string <parameter>font</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setfont</function> sets the text field font to the [browser-defined?] <parameter>font</parameter> font. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setbounds"> <refnamediv> <refname>SWFTextField->setbounds</refname> <refpurpose>Sets the text field width and height</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setbounds</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setbounds</function> sets the text field width to <parameter>width</parameter> and height to <parameter>height</parameter>. If you don't set the bounds yourself, Ming makes a poor guess at what the bounds are. </para> </refsect1> </refentry> <refentry id="function.swftextfield.align"> <refnamediv> <refname>SWFTextField->align</refname> <refpurpose>Sets the text field alignment</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->align</function></funcdef> <paramdef>int <parameter>alignement</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->align</function> sets the text field alignment to <parameter>alignement</parameter>. Valid values for <parameter>alignement</parameter> are : SWFTEXTFIELD_ALIGN_LEFT, SWFTEXTFIELD_ALIGN_RIGHT, SWFTEXTFIELD_ALIGN_CENTER and SWFTEXTFIELD_ALIGN_JUSTIFY. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setheight"> <refnamediv> <refname>SWFTextField->setHeight</refname> <refpurpose>Sets the font height of this text field font.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setheight</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setheight</function> sets the font height of this text field font to the given height <parameter>height</parameter>. Default is 240. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setleftmargin"> <refnamediv> <refname>SWFTextField->setLeftMargin</refname> <refpurpose>Sets the left margin width of the text field.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setleftmargin</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setleftmargin</function> sets the left margin width of the text field to <parameter>width</parameter>. Default is 0. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setrightmargin"> <refnamediv> <refname>SWFTextField->setrightMargin</refname> <refpurpose>Sets the right margin width of the text field.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setrightmargin</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setrightmargin</function> sets the right margin width of the text field to <parameter>width</parameter>. Default is 0. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setmargins"> <refnamediv> <refname>SWFTextField->setMargins</refname> <refpurpose>Sets the margins width of the text field.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setmargins</function></funcdef> <paramdef>int <parameter>left</parameter></paramdef> <paramdef>int <parameter>right</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setmargins</function> set both margins at once, for the man on the go. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setindentation"> <refnamediv> <refname>SWFTextField->setindentation</refname> <refpurpose>Sets the indentation of the first line.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setindentation</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setindentation</function> sets the indentation of the first line in the text field, to <parameter>width</parameter>. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setlinespacing"> <refnamediv> <refname>SWFTextField->setLineSpacing</refname> <refpurpose>Sets the line spacing of the text field.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setlinespacing</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setlinespacing</function> sets the line spacing of the text field to the height of <parameter>height</parameter>. Default is 40. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setcolor"> <refnamediv> <refname>SWFTextField->setcolor</refname> <refpurpose>Sets the color of the text field. </refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setcolor</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setcolor</function> sets the color of the text field. Default is fully opaque black. Color is represented using RGB system. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setname"> <refnamediv> <refname>SWFTextField->setname</refname> <refpurpose>Sets the variable name</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setname</function></funcdef> <paramdef>string <parameter>name</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setname</function> sets the variable name of this text field to <parameter>name</parameter>, for form posting and action scripting purposes. </para> </refsect1> </refentry> <refentry id="function.swftextfield.addstring"> <refnamediv> <refname>SWFTextField->addstring</refname> <refpurpose>Concatenates the given string to the text field</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swftextfield->setname</function> concatenates the string <parameter>string</parameter> to the text field. </para> </refsect1> </refentry> <!-- SWFSprite --> <refentry id="function.swfsprite"> <refnamediv> <refname>SWFSprite</refname> <refpurpose>Creates a movie clip (a sprite)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfsprite</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfsprite</function> are also known as a "movie clip", this allows one to create objects which are animated in their own timelines. Hence, the sprite has most of the same methods as the movie. </para> <simpara> <function>swfsprite</function> has the following methods : <function>swfsprite->add</function>, <function>swfsprite->remove</function>, <function>swfsprite->nextframe</function> and <function>swfsprite->setframes</function>. </simpara> <para> This simple example will spin gracefully a big red square. <example> <title><function>swfsprite</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->movePenTo(-500,-500); $s->drawLineTo(500,-500); $s->drawLineTo(500,500); $s->drawLineTo(-500,500); $s->drawLineTo(-500,-500); $p = new SWFSprite(); $i = $p->add($s); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $m = new SWFMovie(); $i = $m->add($p); $i->moveTo(1500,1000); $i->setName("blah"); $m->setBackground(0xff, 0xff, 0xff); $m->setDimension(3000,2000); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfsprite.add"> <refnamediv> <refname>SWFSprite->add</refname> <refpurpose>Adds an object to a sprite</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->add</function></funcdef> <paramdef>ressource <parameter>object</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfsprite->add</function> adds a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function>, a <function>swfaction</function> or a <function>swfsprite</function> object. </para> <para> For displayable types (<function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function>, <function>swfaction</function> or <function>swfsprite</function>), this returns a handle to the object in a display list. </para> </refsect1> </refentry> <refentry id="function.swfsprite.remove"> <refnamediv> <refname>SWFSprite->remove</refname> <refpurpose>Removes an object to a sprite</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->remove</function></funcdef> <paramdef>ressource <parameter>object</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfsprite->remove</function> remove a <function>swfshape</function>, a <function>swfbutton</function>, a <function>swftext</function>, a <function>swfaction</function> or a <function>swfsprite</function> object from the sprite. </para> </refsect1> </refentry> <refentry id="function.swfsprite.setframes"> <refnamediv> <refname>SWFSprite->setframes</refname> <refpurpose>Sets the total number of frames in the animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->setframes</function></funcdef> <paramdef>int <parameter>numberofframes</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfsprite->setframes</function> sets the total number of frames in the animation to <parameter>numberofframes</parameter>. </para> </refsect1> </refentry> <refentry id="function.swfsprite.nextframe"> <refnamediv> <refname>SWFSprite->nextframe</refname> <refpurpose>Moves to the next frame of the animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->nextframe</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfsprite->setframes</function> moves to the next frame of the animation. </para> </refsect1> </refentry><!-- SWFButton --> <refentry id="function.swfbutton"> <refnamediv> <refname>SWFbutton</refname> <refpurpose>Creates a new Button.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfbutton</function></funcdef> <void/> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton</function> creates a new Button. Roll over it, click it, see it call action code. Swank. </para> <simpara> SWFButton has the following methods : <function>swfbutton->addshape</function>, <function>swfbutton->setup</function>, <function>swfbutton->setover</function> <function>swfbutton->setdown</function>, <function>swfbutton->sethit</function> <function>swfbutton->setaction</function> and <function>swfbutton->addaction</function>. </simpara> <para> This simple example will show your usual interactions with buttons : rollover, rollon, mouseup, mousedown, noaction. <example> <title><function>swfbutton</function> example</title> <programlisting role="php"><?php $f = new SWFFont("_serif"); $p = new SWFSprite(); function label($string) { global $f; $t = new SWFTextField(); $t->setFont($f); $t->addString($string); $t->setHeight(200); $t->setBounds(3200,200); return $t; } function addLabel($string) { global $p; $i = $p->add(label($string)); $p->nextFrame(); $p->remove($i); } $p->add(new SWFAction("stop();")); addLabel("NO ACTION"); addLabel("SWFBUTTON_MOUSEUP"); addLabel("SWFBUTTON_MOUSEDOWN"); addLabel("SWFBUTTON_MOUSEOVER"); addLabel("SWFBUTTON_MOUSEOUT"); addLabel("SWFBUTTON_MOUSEUPOUTSIDE"); addLabel("SWFBUTTON_DRAGOVER"); addLabel("SWFBUTTON_DRAGOUT"); function rect($r, $g, $b) { $s = new SWFShape(); $s->setRightFill($s->addFill($r, $g, $b)); $s->drawLine(600,0); $s->drawLine(0,600); $s->drawLine(-600,0); $s->drawLine(0,-600); return $s; } $b = new SWFButton(); $b->addShape(rect(0xff, 0, 0), SWFBUTTON_UP | SWFBUTTON_HIT); $b->addShape(rect(0, 0xff, 0), SWFBUTTON_OVER); $b->addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(1);"), SWFBUTTON_MOUSEUP); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(2);"), SWFBUTTON_MOUSEDOWN); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(3);"), SWFBUTTON_MOUSEOVER); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(4);"), SWFBUTTON_MOUSEOUT); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(5);"), SWFBUTTON_MOUSEUPOUTSIDE); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(6);"), SWFBUTTON_DRAGOVER); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(7);"), SWFBUTTON_DRAGOUT); $m = new SWFMovie(); $m->setDimension(4000,3000); $i = $m->add($p); $i->setName("label"); $i->moveTo(400,1900); $i = $m->add($b); $i->moveTo(400,900); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> This simple example will enables you to drag draw a big red button on the windows. No drag-and-drop, just moving around. <example> <title><function>swfbutton->addaction</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->drawLine(1000,0); $s->drawLine(0,1000); $s->drawLine(-1000,0); $s->drawLine(0,-1000); $b = new SWFButton(); $b->addShape($s, SWFBUTTON_HIT | SWFBUTTON_UP | SWFBUTTON_DOWN | SWFBUTTON_OVER); $b->addAction(new SWFAction("startDrag('/test', 0);"), // '0' means don't lock to mouse SWFBUTTON_MOUSEDOWN); $b->addAction(new SWFAction("stopDrag();"), SWFBUTTON_MOUSEUP | SWFBUTTON_MOUSEUPOUTSIDE); $p = new SWFSprite(); $p->add($b); $p->nextFrame(); $m = new SWFMovie(); $i = $m->add($p); $i->setName('test'); $i->moveTo(1000,1000); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfbutton.addshape"> <refnamediv> <refname>SWFbutton->addShape</refname> <refpurpose>Adds a shape to a button</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->addshape</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> <paramdef>int <parameter>flags</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->addshape</function> adds the shape <parameter>shape</parameter> to this button. The following <parameter>flags</parameter>' values are valid: SWFBUTTON_UP, SWFBUTTON_OVER, SWFBUTTON_DOWN or SWFBUTTON_HIT. SWFBUTTON_HIT isn't ever displayed, it defines the hit region for the button. That is, everywhere the hit shape would be drawn is considered a "touchable" part of the button. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setup"> <refnamediv> <refname>SWFbutton->setUp</refname> <refpurpose>Alias for addShape(shape, SWFBUTTON_UP)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setup</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->setup</function> alias for addShape(shape, SWFBUTTON_UP). </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setover"> <refnamediv> <refname>SWFbutton->setOver</refname> <refpurpose>Alias for addShape(shape, SWFBUTTON_OVER)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setover</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->setover</function> alias for addShape(shape, SWFBUTTON_OVER). </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setdown"> <refnamediv> <refname>SWFbutton->setdown</refname> <refpurpose>Alias for addShape(shape, SWFBUTTON_DOWN))</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setdown</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->setdown</function> alias for addShape(shape, SWFBUTTON_DOWN). </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.sethit"> <refnamediv> <refname>SWFbutton->setHit</refname> <refpurpose>Alias for addShape(shape, SWFBUTTON_HIT)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->sethit</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->sethit</function> alias for addShape(shape, SWFBUTTON_HIT). </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.addaction"> <refnamediv> <refname>SWFbutton->addAction</refname> <refpurpose>Adds an action</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->addaction</function></funcdef> <paramdef>ressource <parameter>action</parameter></paramdef> <paramdef>int <parameter>flags</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->addaction</function> adds the action <parameter>action</parameter> to this button for the given conditions. The following <parameter>flags</parameter> are valid: SWFBUTTON_MOUSEOVER, SWFBUTTON_MOUSEOUT, SWFBUTTON_MOUSEUP, SWFBUTTON_MOUSEUPOUTSIDE, SWFBUTTON_MOUSEDOWN, SWFBUTTON_DRAGOUT and SWFBUTTON_DRAGOVER. </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setaction"> <refnamediv> <refname>SWFbutton->setAction</refname> <refpurpose>Sets the action</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setaction</function></funcdef> <paramdef>ressource <parameter>action</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfbutton->setaction</function> sets the action to be performed when the button is clicked. Alias for addAction(shape, SWFBUTTON_MOUSEUP). <parameter>action</parameter> is a <function>swfaction</function>. </para> <para> See also <function>swfbutton->addshape</function> and <function>SWFAction</function>. </para> </refsect1> </refentry><!-- SWFAction --> <refentry id="function.swfaction"> <refnamediv> <refname>SWFAction</refname> <refpurpose>Creates a new Action.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfaction</function></funcdef> <paramdef>string <parameter>script</parameter></paramdef> </funcprototype> </funcsynopsis> &warn.experimental.func; <para> <function>swfaction</function> creates a new Action, and compiles the given script into an SWFAction object. </para> <para> The script syntax is based on the C language, but with a lot taken out- the SWF bytecode machine is just too simpleminded to do a lot of things we might like. For instance, we can't implement function calls without a tremendous amount of hackery because the jump bytecode has a hardcoded offset value. No pushing your calling address to the stack and returning- every function would have to know exactly where to return to. </para> <para> So what's left? The compiler recognises the following tokens: <itemizedlist> <listitem> <simpara> break </simpara> </listitem> <listitem> <simpara> for </simpara> </listitem> <listitem> <simpara> continue </simpara> </listitem> <listitem> <simpara> if </simpara> </listitem> <listitem> <simpara> else </simpara> </listitem> <listitem> <simpara> do </simpara> </listitem> <listitem> <simpara> while </simpara> </listitem> </itemizedlist> </para> <para> There is no typed data; all values in the SWF action machine are stored as strings. The following functions can be used in expressions: <variablelist> <varlistentry> <term>time()</term> <listitem> <simpara> Returns the number of milliseconds (?) elapsed since the movie started. </simpara> </listitem> </varlistentry> <varlistentry> <term>random(seed)</term> <listitem> <simpara> Returns a pseudo-random number in the range 0-seed. </simpara> </listitem> </varlistentry> <varlistentry> <term>length(expr)</term> <listitem> <simpara> Returns the length of the given expression. </simpara> </listitem> </varlistentry> <varlistentry> <term>int(number)</term> <listitem> <simpara> Returns the given number rounded down to the nearest integer. </simpara> </listitem> </varlistentry> <varlistentry> <term>concat(expr, expr)</term> <listitem> <simpara> Returns the concatenation of the given expressions. </simpara> </listitem> </varlistentry> <varlistentry> <term>ord(expr)</term> <listitem> <simpara> Returns the ASCII code for the given character </simpara> </listitem> </varlistentry> <varlistentry> <term>chr(num)</term> <listitem> <simpara> Returns the character for the given ASCII code </simpara> </listitem> </varlistentry> <varlistentry> <term>substr(string, location, length)</term> <listitem> <simpara> Returns the substring of length length at location location of the given string string. </simpara> </listitem> </varlistentry> </variablelist> </para> <para> Additionally, the following commands may be used: <variablelist> <varlistentry> <term>duplicateClip(clip, name, depth)</term> <listitem> <simpara> Duplicate the named movie clip (aka sprite). The new movie clip has name name and is at depth depth. </simpara> </listitem> </varlistentry> <varlistentry> <term>removeClip(expr)</term> <listitem> <simpara> Removes the named movie clip. </simpara> </listitem> </varlistentry> <varlistentry> <term>trace(expr)</term> <listitem> <simpara> Write the given expression to the trace log. Doubtful that the browser plugin does anything with this. </simpara> </listitem> </varlistentry> <varlistentry> <term>startDrag(target, lock, [left, top, right, bottom])</term> <listitem> <simpara> Start dragging the movie clip target. The lock argument indicates whether to lock the mouse (?)- use 0 (&false;) or 1 (&true;). Optional parameters define a bounding area for the dragging. </simpara> </listitem> </varlistentry> <varlistentry> <term>stopDrag()</term> <listitem> <simpara> Stop dragging my heart around. And this movie clip, too. </simpara> </listitem> </varlistentry> <varlistentry> <term>callFrame(expr)</term> <listitem> <simpara> Call the named frame as a function. </simpara> </listitem> </varlistentry> <varlistentry> <term>getURL(url, target, [method])</term> <listitem> <simpara> Load the given url into the named target. The target argument can be a frame name (I think), or one of the magical values "_level0" (replaces current movie) or "_level1" (loads new movie on top of current movie). The optional method argument can be post or get if you want to submit variables back to the server. </simpara> </listitem> </varlistentry> <varlistentry> <term>loadMovie(url, target)</term> <listitem> <simpara> Same as above, more or less. Come to think of it, I don't quite know what the difference is. </simpara> </listitem> </varlistentry> <varlistentry> <term>nextFrame()</term> <listitem> <simpara> Go to the next frame. </simpara> </listitem> </varlistentry> <varlistentry> <term>prevFrame()</term> <listitem> <simpara> Go to the last (or, rather, previous) frame. </simpara> </listitem> </varlistentry> <varlistentry> <term>play()</term> <listitem> <simpara> Start playing the movie. </simpara> </listitem> </varlistentry> <varlistentry> <term>stop()</term> <listitem> <simpara> Stop playing the movie. </simpara> </listitem> </varlistentry> <varlistentry> <term>toggleQuality()</term> <listitem> <simpara> Toggle between high and low quality. </simpara> </listitem> </varlistentry> <varlistentry> <term>stopSounds()</term> <listitem> <simpara> Stop playing all sounds. </simpara> </listitem> </varlistentry> <varlistentry> <term>gotoFrame(num)</term> <listitem> <simpara> Go to frame number num. Frame numbers start at 0. </simpara> </listitem> </varlistentry> <varlistentry> <term>gotoFrame(name)</term> <listitem> <simpara> Go to the frame named name. Which does a lot of good, since I haven't added frame labels yet. </simpara> </listitem> </varlistentry> <varlistentry> <term>setTarget(expr)</term> <listitem> <simpara> Sets the context for action. Or so they say- I really have no idea what this does. </simpara> </listitem> </varlistentry> </variablelist> And there's one weird extra thing. The expression frameLoaded(num) can be used in if statements and while loops to check if the given frame number has been loaded yet. Well, it's supposed to, anyway, but I've never tested it and I seriously doubt it actually works. You can just use /:framesLoaded instead. </para> <para> Movie clips (all together now- aka sprites) have properties. You can read all of them (or can you?), you can set some of them, and here they are: <itemizedlist> <listitem> <simpara> x </simpara> </listitem> <listitem> <simpara> y </simpara> </listitem> <listitem> <simpara> xScale </simpara> </listitem> <listitem> <simpara> yScale </simpara> </listitem> <listitem> <simpara> currentFrame - (read-only) </simpara> </listitem> <listitem> <simpara> totalFrames - (read-only) </simpara> </listitem> <listitem> <simpara> alpha - transparency level </simpara> </listitem> <listitem> <simpara> visible - 1=on, 0=off (?) </simpara> </listitem> <listitem> <simpara> width - (read-only) </simpara> </listitem> <listitem> <simpara> height - (read-only) </simpara> </listitem> <listitem> <simpara> rotation </simpara> </listitem> <listitem> <simpara> target - (read-only) (???) </simpara> </listitem> <listitem> <simpara> framesLoaded - (read-only) </simpara> </listitem> <listitem> <simpara> name </simpara> </listitem> <listitem> <simpara> dropTarget - (read-only) (???) </simpara> </listitem> <listitem> <simpara> url - (read-only) (???) </simpara> </listitem> <listitem> <simpara> highQuality - 1=high, 0=low (?) </simpara> </listitem> <listitem> <simpara> focusRect - (???) </simpara> </listitem> <listitem> <simpara> soundBufTime - (???) </simpara> </listitem> </itemizedlist> So, setting a sprite's x position is as simple as <literal>/box.x = 100;</literal>. Why the slash in front of the box, though? That's how flash keeps track of the sprites in the movie, just like a unix filesystem- here it shows that box is at the top level. If the sprite named box had another sprite named biff inside of it, you'd set its x position with /box/biff.x = 100;. At least, I think so; correct me if I'm wrong here. </para> <para> This simple example will move the red square across the window. <example> <title><function>swfaction</function> example</title> <programlisting role="php"><?php $s = new SWFShape(); $f = $s->addFill(0xff, 0, 0); $s->setRightFill($f); $s->movePenTo(-500,-500); $s->drawLineTo(500,-500); $s->drawLineTo(500,500); $s->drawLineTo(-500,500); $s->drawLineTo(-500,-500); $p = new SWFSprite(); $i = $p->add($s); $i->setDepth(1); $p->nextFrame(); for($n=0; $n<5; ++$n) { $i->rotate(-15); $p->nextFrame(); } $m = new SWFMovie(); $m->setBackground(0xff, 0xff, 0xff); $m->setDimension(6000,4000); $i = $m->add($p); $i->setDepth(1); $i->moveTo(-500,2000); $i->setName("box"); $m->add(new SWFAction("/box.x += 3;")); $m->nextFrame(); $m->add(new SWFAction("gotoFrame(0); play();")); $m->nextFrame(); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> This simple example tracks down your mouse on the screen. <example> <title><function>swfaction</function> example</title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setRate(36.0); $m->setDimension(1200, 800); $m->setBackground(0, 0, 0); /* mouse tracking sprite - empty, but follows mouse so we can get its x and y coordinates */ $i = $m->add(new SWFSprite()); $i->setName('mouse'); $m->add(new SWFAction(" startDrag('/mouse', 1); /* '1' means lock sprite to the mouse */ ")); /* might as well turn off antialiasing, since these are just squares. */ $m->add(new SWFAction(" this.quality = 0; ")); /* morphing box */ $r = new SWFMorph(); $s = $r->getShape1(); /* Note this is backwards from normal shapes. No idea why. */ $s->setLeftFill($s->addFill(0xff, 0xff, 0xff)); $s->movePenTo(-40, -40); $s->drawLine(80, 0); $s->drawLine(0, 80); $s->drawLine(-80, 0); $s->drawLine(0, -80); $s = $r->getShape2(); $s->setLeftFill($s->addFill(0x00, 0x00, 0x00)); $s->movePenTo(-1, -1); $s->drawLine(2, 0); $s->drawLine(0, 2); $s->drawLine(-2, 0); $s->drawLine(0, -2); /* sprite container for morphing box - this is just a timeline w/ the box morphing */ $box = new SWFSprite(); $box->add(new SWFAction(" stop(); ")); $i = $box->add($r); for($n=0; $n<=20; ++$n) { $i->setRatio($n/20); $box->nextFrame(); } /* this container sprite allows us to use the same action code many times */ $cell = new SWFSprite(); $i = $cell->add($box); $i->setName('box'); $cell->add(new SWFAction(" setTarget('box'); /* ...x means the x coordinate of the parent, i.e. (..).x */ dx = (/mouse.x + random(6)-3 - ...x)/5; dy = (/mouse.y + random(6)-3 - ...y)/5; gotoFrame(int(dx*dx + dy*dy)); ")); $cell->nextFrame(); $cell->add(new SWFAction(" gotoFrame(0); play(); ")); $cell->nextFrame(); /* finally, add a bunch of the cells to the movie */ for($x=0; $x<12; ++$x) { for($y=0; $y<8; ++$y) { $i = $m->add($cell); $i->moveTo(100*$x+50, 100*$y+50); } } $m->nextFrame(); $m->add(new SWFAction(" gotoFrame(1); play(); ")); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> Same as above, but with nice colored balls... <example> <title><function>swfaction</function> example</title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setDimension(11000, 8000); $m->setBackground(0x00, 0x00, 0x00); $m->add(new SWFAction("this.quality = 0;/frames.visible = 0;startDrag('/mouse', 1); ")); // mouse tracking sprite $t = new SWFSprite(); $i = $m->add($t); $i->setName('mouse'); $g = new SWFGradient(); $g->addEntry(0, 0xff, 0xff, 0xff, 0xff); $g->addEntry(0.1, 0xff, 0xff, 0xff, 0xff); $g->addEntry(0.5, 0xff, 0xff, 0xff, 0x5f); $g->addEntry(1.0, 0xff, 0xff, 0xff, 0); // gradient shape thing $s = new SWFShape(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.03); $s->setRightFill($f); $s->movePenTo(-600, -600); $s->drawLine(1200, 0); $s->drawLine(0, 1200); $s->drawLine(-1200, 0); $s->drawLine(0, -1200); // need to make this a sprite so we can multColor it $p = new SWFSprite(); $p->add($s); $p->nextFrame(); // put the shape in here, each frame a different color $q = new SWFSprite(); $q->add(new SWFAction("gotoFrame(random(7)+1); stop();")); $i = $q->add($p); $i->multColor(1.0, 1.0, 1.0); $q->nextFrame(); $i->multColor(1.0, 0.5, 0.5); $q->nextFrame(); $i->multColor(1.0, 0.75, 0.5); $q->nextFrame(); $i->multColor(1.0, 1.0, 0.5); $q->nextFrame(); $i->multColor(0.5, 1.0, 0.5); $q->nextFrame(); $i->multColor(0.5, 0.5, 1.0); $q->nextFrame(); $i->multColor(1.0, 0.5, 1.0); $q->nextFrame(); // finally, this one contains the action code $p = new SWFSprite(); $i = $p->add($q); $i->setName('frames'); $p->add(new SWFAction("dx = (/:mousex-/:lastx)/3 + random(10)-5;dy = (/:mousey-/:lasty)/3;x = /:mousex;y = /:mousey;alpha = 100; ")); $p->nextFrame(); $p->add(new SWFAction("this.x = x;this.y = y;this.alpha = alpha;x += dx;y += dy;dy += 3;alpha -= 8; ")); $p->nextFrame(); $p->add(new SWFAction("prevFrame(); play();")); $p->nextFrame(); $i = $m->add($p); $i->setName('frames'); $m->nextFrame(); $m->add(new SWFAction("lastx = mousex;lasty = mousey;mousex = /mouse.x;mousey = /mouse.y;++num;if(num == 11) num = 1;removeClip('char' & num);duplicateClip(/frames, 'char' & num, num); ")); $m->nextFrame(); $m->add(new SWFAction("prevFrame(); play();")); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> This simple example will handles keyboard actions. (You'll probably have to click in the window to give it focus. And you'll probably have to leave your mouse in the frame, too. If you know how to give buttons focus programatically, feel free to share, won't you?) <example> <title><function>swfaction</function> example</title> <programlisting role="php"><?php /* sprite has one letter per frame */ $p = new SWFSprite(); $p->add(new SWFAction("stop();")); $chars = "abcdefghijklmnopqrstuvwxyz". "ABCDEFGHIJKLMNOPQRSTUVWXYZ". "1234567890!@#$%^&*()_+-=/[]{}|;:,.<>?`~"; $f = new SWFFont("_sans"); for($n=0; $n < strlen($chars); ++$n) { $c = substr($chars, $n, 1); if($i) $p->remove($i); $t = new SWFTextField(); $t->setFont($f); $t->setHeight(240); $t->setBounds(600,240); $t->align(SWFTEXTFIELD_ALIGN_CENTER); $t->addString($c); $i = $p->add($t); $p->labelFrame($c); $p->nextFrame(); } /* hit region for button - the entire frame */ $s = new SWFShape(); $s->setFillStyle0($s->addSolidFill(0, 0, 0, 0)); $s->drawLine(600, 0); $s->drawLine(0, 400); $s->drawLine(-600, 0); $s->drawLine(0, -400); /* button checks for pressed key, sends sprite to the right frame */ $b = new SWFButton(); $b->addShape($s, SWFBUTTON_HIT); for($n=0; $naddAction(new SWFAction("setTarget('/char');gotoFrame('$c'); "), SWFBUTTON_KEYPRESS($c)); } $m = new SWFMovie(); $m->setDimension(600,400); $i = $m->add($p); $i->setName('char'); $i->moveTo(0,80); $m->add($b); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> </reference><!-- Keep this comment at the end of the fileLocal variables:mode: sgmlsgml-omittag:tsgml-shorttag:tsgml-minimize-attributes:nilsgml-always-quote-attributes:tsgml-indent-step:1sgml-indent-data:tsgml-parent-document:nilsgml-default-dtd-file:"../../manual.ced"sgml-exposed-tags:nilsgml-local-catalogs:nilsgml-local-ecat-files:nilEnd:vim600: syn=xml fen fdm=syntax fdl=2 sivim: et tw=78 syn=sgmlvi: ts=1 sw=1--> \ No newline at end of file +<?xml encoding="iso-8859-1"?> +<!-- $Revision: 1.24 $ --> + <reference id="ref.ming"> + <title>Ming functions for Flash</title> + <titleabbrev>Ming (flash)</titleabbrev> + + <partintro> + &warn.experimental; + <sect1 id="ming.intro"> + <title>Introduction</title> + <simpara> + Ming is an open-source (LGPL) library which allows you to create SWF + ("Flash") format movies. Ming supports almost all of Flash 4's features, + including: shapes, gradients, bitmaps (pngs and jpegs), morphs ("shape + tweens"), text, buttons, actions, sprites ("movie clips"), streaming mp3, + and color transforms--the only thing that's missing is sound events. + </simpara> + <simpara> + Ming is not an acronym. + </simpara> + <simpara> + Note that all values specifying length, distance, size, etc. are in "twips", + twenty units per pixel. That's pretty much arbitrary, though, since the player + scales the movie to whatever pixel size is specified in the embed/object tag, + or the entire frame if not embedded. + </simpara> + <simpara> + Ming offers a number of advantages over the existing PHP/libswf module. + You can use Ming anywhere you can compile the code, whereas libswf is + closed-source and only available for a few platforms, Windows not one of + them. Ming provides some insulation from the mundane details of the SWF + file format, wrapping the movie elements in PHP objects. Also, Ming is + still being maintained; if there's a feature that you want to see, just + let us know <ulink url="mailto:&email.ming;">&email.ming;</ulink>. + </simpara> + <simpara> + Ming was added in PHP 4.0.5. + </simpara> + </sect1> + + <sect1 id="ming.install"> + <title>Installation</title> + <para> + To use Ming with PHP, you first need to build and install the Ming + library. Source code and installation instructions are available at the + Ming home page : <ulink url="&url.ming;">&url.ming;</ulink> + along with examples, a small tutorial, and the latest news. + </para> + <para> + Download the ming archive. Unpack the archive. Go in the + Ming directory. make. make install. + </para> + <para> + This will build <filename>libming.so</filename> and install it + into <filename>/usr/lib/</filename>, and copy + <filename>ming.h</filename> into <filename>/usr/include/</filename>. + Edit the <literal>PREFIX=</literal> line in the + <filename>Makefile</filename> to change the installation directory. + </para> + <sect2 id="ming.install.php.unix"> + <title>built into php (unix)</title> + <para> + <literallayout> + mkdir <phpdir>/ext/ming + cp php_ext/* <phpdir>/ext/ming + cd <phpdir> + ./buildconf + ./configure --with-ming <other config options> + </literallayout> + Build and install php as usual, + Restart web server if necessary + </para> + </sect2> + <sect2 id="ming.install.php-module.unix"> + <title>built into php (unix)</title> + <para> + download <filename>php_ming.so.gz</filename>. + uncompress it and copy it to your php modules directory. + (you can find your php module directory by running + <command>php-config --extension-dir</command>). + Now either just add <literal>extension=php_ming.so</literal> + to your <filename>php.ini</filename> file, or put + <literal>dl('php_ming.so');</literal> at the head of all of your + Ming scripts. + </para> + </sect2> + </sect1> + <sect1 id="ming.use"> + <title>How to use Ming</title> + <simpara> + Ming introduces 13 new object in PHP, all with matching methods and + attributes. To use them, you need to know about + <link linkend="language.oop">objects</link>. + </simpara> + <itemizedlist> + <listitem> + <simpara> + <function>swfmovie</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfshape</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfdisplayitem</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfgradient</function>. + </simpara> + </listitem> + + <listitem> + <simpara> + <function>swfbitmap</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swffill</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfmorph</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swftext</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swffont</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swftextfield</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfsprite</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfbutton</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfaction</function>. + </simpara> + </listitem> + </itemizedlist> + </sect1> + </partintro> + +<!-- SWFMovie --> + + <refentry id="function.swfmovie"> + <refnamediv> + <refname>SWFMovie</refname> + <refpurpose>Creates a new movie object, representing an SWF version 4 movie.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfmovie</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie</function> creates a new movie object, + representing an SWF version 4 movie. + </para> + <simpara> + SWFMovie has the following methods : + <function>swfmovie->output</function>,<function>swfmovie->save</function>, + <function>swfmovie->add</function>, <function>swfmovie->remove</function>, + <function>swfmovie->nextframe</function>, <function>swfmovie->setbackground</function>, + <function>swfmovie->setrate</function>, <function>swfmovie->setdimension</function>, + <function>swfmovie->setframes</function> and <function>swfmovie->streammp3</function>. + </simpara> + <simpara> + See examples in : + <function>swfdisplayitem->rotateto</function>, <function>swfshape->setline</function>, + <function>swfshape->addfill</function>... Any example will use this object. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.output"> + <refnamediv> + <refname>SWFMovie->output</refname> + <refpurpose>Dumps your lovingly prepared movie out.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->output</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->output</function> dumps your lovingly prepared movie out. + In PHP, preceding this with the command + <programlisting role="php"> +<?php +header('Content-type: application/x-shockwave-flash'); +?> + </programlisting> + convinces the browser to display this as a flash movie. + </para> + <simpara> + See also + <function>swfmovie->save</function>. + </simpara> + <simpara> + See examples in : + <function>swfmovie->streammp3</function>, + <function>swfdisplayitem->rotateto</function>, + <function>swfaction</function>... + Any example will use this method. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.save"> + <refnamediv> + <refname>SWFMovie->save</refname> + <refpurpose>Saves your movie in a file.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->save</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->save</function> saves your movie to the + file named <parameter>filename</parameter>. + </para> + <simpara> + See also + <function>output</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.add"> + <refnamediv> + <refname>SWFMovie->add</refname> + <refpurpose>Adds any type of data to a movie.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->add</function></funcdef> + <paramdef>ressource <parameter>instance</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->add</function> adds <parameter>instance</parameter> to + the current movie. <parameter>instance</parameter> is any type of data : + Shapes, text, fonts, etc. must all be add'ed to the movie to make this work. + </para> + <para> + For displayable types (shape, text, button, sprite), this returns an + <function>SWFDisplayItem</function>, a handle to the object in a display + list. Thus, you can add the same shape to a movie multiple + times and get separate handles back for each separate instance. + </para> + <simpara> + See also all other objects (adding this later), and + <function>swfmovie->remove</function> + </simpara> + <simpara> + See examples in : + <function>swfdisplayitem->rotateto</function> and + <function>swfshape->addfill</function>. + </simpara> + + </refsect1> + </refentry> + + <refentry id="function.swfmovie.remove"> + <refnamediv> + <refname>SWFMovie->remove</refname> + <refpurpose>Removes the object instance from the display list.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->remove</function></funcdef> + <paramdef>resource <parameter>instance</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->remove</function> removes the object instance + <parameter>instance</parameter> from the display list. + </para> + <simpara> + See also + <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setbackground"> + <refnamediv> + <refname>SWFMovie->setbackground</refname> + <refpurpose>Sets the background color.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setbackground</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->setbackground</function> sets the background color. Why is + there no rgba version? Think about it. (Actually, that's not such a dumb + question after all- you might want to let the html background show through. + There's a way to do that, but it only works on IE4. Search the + <ulink url="&url.macromedia;">&url.macromedia;</ulink> site for + details.) + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setrate"> + <refnamediv> + <refname>SWFMovie->setrate</refname> + <refpurpose>Sets the animation's frame rate.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setrate</function></funcdef> + <paramdef>int <parameter>rate</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->setrate</function> sets the frame rate to + <parameter>rate</parameter>, in frame per seconds. + Animation will slow down if the player can't render frames fast enough- unless + there's a streaming sound, in which case display frames are sacrificed to + keep sound from skipping. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setdimension"> + <refnamediv> + <refname>SWFMovie->setdimension</refname> + <refpurpose>Sets the movie's width and height.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setdimension</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->setdimension</function> sets the movie's width + to <parameter>width</parameter> and height to <parameter>height</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setframes"> + <refnamediv> + <refname>SWFMovie->setframes</refname> + <refpurpose>Sets the total number of frames in the animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setframes</function></funcdef> + <paramdef>string <parameter>numberofframes</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->setframes</function> sets the total number of frames + in the animation to <parameter>numberofframes</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.nextframe"> + <refnamediv> + <refname>SWFMovie->nextframe</refname> + <refpurpose>Moves to the next frame of the animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->nextframe</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->setframes</function> moves to the next frame of + the animation. + </para> + </refsect1> + </refentry> + + + <refentry id="function.swfmovie.streammp3"> + <refnamediv> + <refname>SWFMovie->streammp3</refname> + <refpurpose>Streams a MP3 file.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->streammp3</function></funcdef> + <paramdef>string <parameter>mp3FileName</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmovie->streammp3</function> streams the mp3 file + <parameter>mp3FileName</parameter>. Not very robust in dealing with + oddities (can skip over an initial ID3 tag, but that's about it). + Like <function>SWFShape->addJpegFill</function>, this isn't a stable function- we'll + probably need to make a separate SWFSound object to contain sound types. + </para> + <para> + Note that the movie isn't smart enough to put enough frames in to contain + the entire mp3 stream- you'll have to add (length of song * frames per second) + frames to get the entire stream in. + </para> + <para> + Yes, now you can use ming to put that rock and roll devil worship music + into your SWF files. Just don't tell the RIAA. + <example> + <title><function>swfmovie->streammp3</function> example</title> + <programlisting role="php"> +<?php + $m = new SWFMovie(); + $m->setRate(12.0); + $m->streamMp3("distortobass.mp3"); +// use your own MP3 + + // 11.85 seconds at 12.0 fps = 142 frames + $m->setFrames(142); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + +<!-- SWFDisplayItem --> + + <refentry id="function.swfdisplayitem"> + <refnamediv> + <refname>SWFDisplayItem</refname> + <refpurpose>Creates a new displayitem object.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfdisplayitem</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem</function> creates a new swfdisplayitem object. + </para> + <para> + Here's where all the animation takes place. After you define a shape, + a text object, a sprite, or a button, you add it to the movie, then use + the returned handle to move, rotate, scale, or skew the thing. + </para> + <simpara> + SWFDisplayItem has the following methods : <function>swfdisplayitem->move</function>, + <function>swfdisplayitem->moveto</function>, <function>swfdisplayitem->scaleto</function>, + <function>swfdisplayitem->scale</function>, <function>swfdisplayitem->rotate</function>, + <function>swfdisplayitem->rotateto</function>, <function>swfdisplayitem->skewxto</function>, + <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewyto</function> + <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->setdepth</function> + <function>swfdisplayitem->remove</function>, <function>swfdisplayitem->setname</function> + <function>swfdisplayitem->setratio</function>, <function>swfdisplayitem->addcolor</function> + and <function>swfdisplayitem->multcolor</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.moveto"> + <refnamediv> + <refname>SWFDisplayItem->moveTo</refname> + <refpurpose>Moves object in global coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->moveto</function> moves the current object to + (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->move</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.move"> + <refnamediv> + <refname>SWFDisplayItem->move</refname> + <refpurpose>Moves object in relative coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->move</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->move</function> moves the current object by + (<parameter>dx</parameter>,<parameter>dy</parameter>) from its + current position. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->moveto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.scaleto"> + <refnamediv> + <refname>SWFDisplayItem->scaleTo</refname> + <refpurpose>Scales the object in global coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->scaleto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->scaleto</function> scales the current object to + (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->scale</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.scale"> + <refnamediv> + <refname>SWFDisplayItem->scale</refname> + <refpurpose>Scales the object in relative coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->scale</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->scale</function> scales the current object by + (<parameter>dx</parameter>,<parameter>dy</parameter>) from its + current size. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->scaleto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.rotateto"> + <refnamediv> + <refname>SWFDisplayItem->rotateTo</refname> + <refpurpose>Rotates the object in global coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->rotateto</function></funcdef> + <paramdef>float <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->rotateto</function> set the current object + rotation to <parameter>degrees</parameter> degrees in global coordinates. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <para> + This example bring three rotating string from the background to the + foreground. Pretty nice. + <example> + <title><function>swfdisplayitem->rotateto</function> example</title> + <programlisting role="php"> +<?php + $thetext = "ming!"; + + $f = new SWFFont("Bauhaus 93.fdb"); + + $m = new SWFMovie(); + $m->setRate(24.0); + $m->setDimension(2400, 1600); + $m->setBackground(0xff, 0xff, 0xff); + + // functions with huge numbers of arbitrary + // arguments are always a good idea! Really! + + function text($r, $g, $b, $a, $rot, $x, $y, $scale, $string) + { + global $f, $m; + + $t = new SWFText(); + $t->setFont($f); + $t->setColor($r, $g, $b, $a); + $t->setHeight(960); + $t->moveTo(-($f->getWidth($string))/2, $f->getAscent()/2); + $t->addString($string); + + // we can add properties just like a normal php var, + // as long as the names aren't already used. + // e.g., we can't set $i->scale, because that's a function + + $i = $m->add($t); + $i->x = $x; + $i->y = $y; + $i->rot = $rot; + $i->s = $scale; + $i->rotateTo($rot); + $i->scale($scale, $scale); + + // but the changes are local to the function, so we have to + // return the changed object. kinda weird.. + + return $i; + } + + function step($i) + { + $oldrot = $i->rot; + $i->rot = 19*$i->rot/20; + $i->x = (19*$i->x + 1200)/20; + $i->y = (19*$i->y + 800)/20; + $i->s = (19*$i->s + 1.0)/20; + + $i->rotateTo($i->rot); + $i->scaleTo($i->s, $i->s); + $i->moveTo($i->x, $i->y); + + return $i; + } + + // see? it sure paid off in legibility: + + $i1 = text(0xff, 0x33, 0x33, 0xff, 900, 1200, 800, 0.03, $thetext); + $i2 = text(0x00, 0x33, 0xff, 0x7f, -560, 1200, 800, 0.04, $thetext); + $i3 = text(0xff, 0xff, 0xff, 0x9f, 180, 1200, 800, 0.001, $thetext); + + for($i=1; $i<=100; ++$i) + { + $i1 = step($i1); + $i2 = step($i2); + $i3 = step($i3); + + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <simpara> + See also + <function>swfdisplayitem->rotate</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.rotate"> + <refnamediv> + <refname>SWFDisplayItem->Rotate</refname> + <refpurpose>Rotates in relative coordinates.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->rotate</function></funcdef> + <paramdef>float <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->rotate</function> rotates the current object + by <parameter>ddegrees</parameter> degrees from its current rotation. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->rotateto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewxto"> + <refnamediv> + <refname>SWFDisplayItem->skewXTo</refname> + <refpurpose>Sets the X-skew.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewxto</function></funcdef> + <paramdef>float <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->skewxto</function> sets the + x-skew to <parameter>degrees</parameter>. For <parameter>degrees</parameter> + is 1.0, it means a 45-degree forward slant. More is more forward, + less is more backward. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->skewx</function>, + <function>swfdisplayitem->skewy</function> and + <function>swfdisplayitem->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewx"> + <refnamediv> + <refname>SWFDisplayItem->skewX</refname> + <refpurpose>Sets the X-skew.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewx</function></funcdef> + <paramdef>float <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->skewx</function> adds <parameter>ddegrees</parameter> + to current x-skew. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->skewx</function>, + <function>swfdisplayitem->skewy</function> and + <function>swfdisplayitem->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewyto"> + <refnamediv> + <refname>SWFDisplayItem->skewYTo</refname> + <refpurpose>Sets the Y-skew.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewyto</function></funcdef> + <paramdef>float <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->skewyto</function> sets the + y-skew to <parameter>degrees</parameter>. For <parameter>degrees</parameter> + is 1.0, it means a 45-degree forward slant. More is more upward, + less is more downward. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->skewy</function>, + <function>swfdisplayitem->skewx</function> and + <function>swfdisplayitem->skewxto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewy"> + <refnamediv> + <refname>SWFDisplayItem->skewY</refname> + <refpurpose>Sets the Y-skew.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewy</function></funcdef> + <paramdef>float <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->skewy</function> adds <parameter>ddegrees</parameter> + to current y-skew. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfdisplayitem->skewyto</function>, + <function>swfdisplayitem->skewx</function> and + <function>swfdisplayitem->skewxto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setdepth"> + <refnamediv> + <refname>SWFDisplayItem->setDepth</refname> + <refpurpose>Sets z-order</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setdepth</function></funcdef> + <paramdef>float <parameter>depth</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->rotate</function> sets the object's + z-order to <parameter>depth</parameter>. Depth defaults to the + order in which instances are created (by add'ing a shape/text to + a movie)- newer ones are on top of older ones. If two objects are + given the same depth, only the later-defined one can be moved. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.remove"> + <refnamediv> + <refname>SWFDisplayItem->remove</refname> + <refpurpose>Removes the object from the movie</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->remove</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->remove</function> removes this object from + the movie's display list. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <simpara> + See also + <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setname"> + <refnamediv> + <refname>SWFDisplayItem->setName</refname> + <refpurpose>Sets the object's name</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setname</function></funcdef> + <paramdef>string <parameter>name</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->setname</function> sets the object's name to + <parameter>name</parameter>, for targetting with action script. + Only useful on sprites. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setratio"> + <refnamediv> + <refname>SWFDisplayItem->setRatio</refname> + <refpurpose>Sets the object's ratio.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setratio</function></funcdef> + <paramdef>float <parameter>ratio</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->setratio</function> sets the object's ratio + to <parameter>ratio</parameter>. Obviously only useful for morphs. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <para> + This simple example will morph nicely three concentric circles. + <example> + <title><function>swfdisplayitem->setname</function> example</title> + <programlisting role="php"> +<?php + + $p = new SWFMorph(); + + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(0.16, 0xff, 0xff, 0xff); + $g->addEntry(0.32, 0, 0, 0); + $g->addEntry(0.48, 0xff, 0xff, 0xff); + $g->addEntry(0.64, 0, 0, 0); + $g->addEntry(0.80, 0xff, 0xff, 0xff); + $g->addEntry(1.00, 0, 0, 0); + + $s = $p->getShape1(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.05); + $s->setLeftFill($f); + $s->movePenTo(-160, -120); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(0.16, 0xff, 0, 0); + $g->addEntry(0.32, 0, 0, 0); + $g->addEntry(0.48, 0, 0xff, 0); + $g->addEntry(0.64, 0, 0, 0); + $g->addEntry(0.80, 0, 0, 0xff); + $g->addEntry(1.00, 0, 0, 0); + + $s = $p->getShape2(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.05); + $f->skewXTo(1.0); + $s->setLeftFill($f); + $s->movePenTo(-160, -120); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m = new SWFMovie(); + $m->setDimension(320, 240); + $i = $m->add($p); + $i->moveTo(160, 120); + + for($n=0; $n<=1.001; $n+=0.01) + { + $i->setRatio($n); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.addcolor"> + <refnamediv> + <refname>SWFDisplayItem->addColor</refname> + <refpurpose>Adds the given color to this item's color transform.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->addcolor</function></funcdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->addcolor</function> adds the color to + this item's color transform. The color is given in its RGB form. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.multcolor"> + <refnamediv> + <refname>SWFDisplayItem->multColor</refname> + <refpurpose>Multiplies the item's color transform.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->multcolor</function></funcdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfdisplayitem->multcolor</function> multiplies the item's + color transform by the given values. + </para> + <simpara> + The object may be a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function> or a + <function>swfsprite</function> object. It must have been added using + the <function>swfmovie->add</function>. + </simpara> + <para> + This simple example will modify your picture's atmospher + to Halloween (use a landscape or bright picture). + <example> + <title><function>swfdisplayitem->multcolor</function> example</title> + <programlisting role="php"> +<?php + + $b = new SWFBitmap("backyard.jpg"); + // note use your own picture :-) + $s = new SWFShape(); + $s->setRightFill($s->addFill($b)); + $s->drawLine($b->getWidth(), 0); + $s->drawLine(0, $b->getHeight()); + $s->drawLine(-$b->getWidth(), 0); + $s->drawLine(0, -$b->getHeight()); + + $m = new SWFMovie(); + $m->setDimension($b->getWidth(), $b->getHeight()); + + $i = $m->add($s); + + for($n=0; $n<=20; ++$n) + { + $i->multColor(1.0-$n/10, 1.0, 1.0); + $i->addColor(0xff*$n/20, 0, 0); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + +<!-- SWFShape --> + + <refentry id="function.swfshape"> + <refnamediv> + <refname>SWFShape</refname> + <refpurpose>Creates a new shape object.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfshape</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfshape</function> creates a new shape object. + </para> + <simpara> + SWFShape has the following methods : <function>swfshape->setline</function>, + <function>swfshape->addfill</function>, <function>swfshape->setleftfill</function>, + <function>swfshape->setrightfill</function>, <function>swfshape->movepento</function>, + <function>swfshape->movepen</function>, <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, <function>swfshape->drawcurveto</function> + and <function>swfshape->drawcurve</function>. + </simpara> + <para> + This simple example will draw a big red elliptic quadrant. + <example> + <title><function>swfshape</function> example</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $s->setLine(40, 0x7f, 0, 0); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(200, 200); + $s->drawLineTo(6200, 200); + $s->drawLineTo(6200, 4600); + $s->drawCurveTo(200, 4600, 200, 200); + + $m = new SWFMovie(); + $m->setDimension(6400, 4800); + $m->setRate(12.0); + $m->add($s); + $m->nextFrame(); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setline"> + <refnamediv> + <refname>SWFShape->setLine</refname> + <refpurpose>Sets the shape's line style.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setline</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfshape->setline</function> sets the shape's line style. + <parameter>width</parameter> is the line's width. If <parameter>width</parameter> + is 0, the line's style is removed (then, all other arguments are ignored). + If <parameter>width</parameter> > 0, then line's color is set to + <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter>. + Last parameter <parameter>a</parameter> is optional. + </para> + <simpara> + <function>swfshape->setline</function> accepts 1, 4 or 5 arguments + (not 3 or 2). + </simpara> + <para> + You must declare all line styles before you use them (see example). + </para> + <para> + This simple example will draw a big "!#%*@", in funny colors and + gracious style. + <example> + <title><function>swfshape->setline</function> example</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f1 = $s->addFill(0xff, 0, 0); + $f2 = $s->addFill(0xff, 0x7f, 0); + $f3 = $s->addFill(0xff, 0xff, 0); + $f4 = $s->addFill(0, 0xff, 0); + $f5 = $s->addFill(0, 0, 0xff); + + // bug: have to declare all line styles before you use them + $s->setLine(40, 0x7f, 0, 0); + $s->setLine(40, 0x7f, 0x3f, 0); + $s->setLine(40, 0x7f, 0x7f, 0); + $s->setLine(40, 0, 0x7f, 0); + $s->setLine(40, 0, 0, 0x7f); + + $f = new SWFFont('Techno.fdb'); + + $s->setRightFill($f1); + $s->setLine(40, 0x7f, 0, 0); + $s->drawGlyph($f, '!'); + $s->movePen($f->getWidth('!'), 0); + + $s->setRightFill($f2); + $s->setLine(40, 0x7f, 0x3f, 0); + $s->drawGlyph($f, '#'); + $s->movePen($f->getWidth('#'), 0); + + $s->setRightFill($f3); + $s->setLine(40, 0x7f, 0x7f, 0); + $s->drawGlyph($f, '%'); + $s->movePen($f->getWidth('%'), 0); + + $s->setRightFill($f4); + $s->setLine(40, 0, 0x7f, 0); + $s->drawGlyph($f, '*'); + $s->movePen($f->getWidth('*'), 0); + + $s->setRightFill($f5); + $s->setLine(40, 0, 0, 0x7f); + $s->drawGlyph($f, '@'); + + $m = new SWFMovie(); + $m->setDimension(3000,2000); + $m->setRate(12.0); + $i = $m->add($s); + $i->moveTo(1500-$f->getWidth("!#%*@")/2, 1000+$f->getAscent()/2); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.addfill"> + <refnamediv> + <refname>SWFShape->addFill</refname> + <refpurpose>Adds a solid fill to the shape.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>SWFbitmap <parameter>bitmap</parameter></paramdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>SWFGradient <parameter>gradient</parameter></paramdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfshape->addfill</function> adds a solid fill to the shape's list + of fill styles. <function>swfshape->addfill</function> accepts three different + types of arguments. + </para> + <para> + <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> + is a color (RGB mode). Last parameter <parameter>a</parameter> is optional. + </para> + <para> + The <parameter>bitmap</parameter> argument is an <function>swfbitmap</function> object. + The <parameter>flags</parameter> argument can be one + of the following values : SWFFILL_CLIPPED_BITMAP or SWFFILL_TILED_BITMAP. + Default is SWFFILL_TILED_BITMAP. I think. + </para> + <para> + The <parameter>gradient</parameter> argument is an <function>swfgradient</function> + object. The flags argument can be one of the following values : + SWFFILL_RADIAL_GRADIENT or SWFFILL_LINEAR_GRADIENT. Default is + SWFFILL_LINEAR_GRADIENT. I'm sure about this one. Really. + </para> + <para> + <function>swfshape->addfill</function> returns an <function>swffill</function> + object for use with the <function>swfshape->setleftfill</function> + and <function>swfshape->setrightfill</function> functions + described below. + </para> + <simpara> + See also + <function>swfshape->setleftfill</function> and + <function>swfshape->setrightfill</function>. + </simpara> + <para> + This simple example will draw a frame on a bitmap. Ah, here's another buglet in + the flash player- it doesn't seem to care about the second shape's bitmap's + transformation in a morph. According to spec, the bitmap should stretch + along with the shape in this example.. + <example> + <title><function>swfshape->addfill</function> example</title> + <programlisting role="php"> +<?php + + $p = new SWFMorph(); + + $b = new SWFBitmap("alphafill.jpg"); + // use your own bitmap + $width = $b->getWidth(); + $height = $b->getHeight(); + + $s = $p->getShape1(); + $f = $s->addFill($b, SWFFILL_TILED_BITMAP); + $f->moveTo(-$width/2, -$height/4); + $f->scaleTo(1.0, 0.5); + $s->setLeftFill($f); + $s->movePenTo(-$width/2, -$height/4); + $s->drawLine($width, 0); + $s->drawLine(0, $height/2); + $s->drawLine(-$width, 0); + $s->drawLine(0, -$height/2); + + $s = $p->getShape2(); + $f = $s->addFill($b, SWFFILL_TILED_BITMAP); + + // these two have no effect! + $f->moveTo(-$width/4, -$height/2); + $f->scaleTo(0.5, 1.0); + + $s->setLeftFill($f); + $s->movePenTo(-$width/4, -$height/2); + $s->drawLine($width/2, 0); + $s->drawLine(0, $height); + $s->drawLine(-$width/2, 0); + $s->drawLine(0, -$height); + + $m = new SWFMovie(); + $m->setDimension($width, $height); + $i = $m->add($p); + $i->moveTo($width/2, $height/2); + + for($n=0; $n<1.001; $n+=0.03) + { + $i->setRatio($n); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setleftfill"> + <refnamediv> + <refname>SWFShape->setLeftFill</refname> + <refpurpose>Sets left rasterizing color.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setleftfill</function></funcdef> + <paramdef>swfgradient <parameter>fill</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setleftfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + What this nonsense is about is, every edge segment borders at most two fills. + When rasterizing the object, it's pretty handy to know what those fills are + ahead of time, so the swf format requires these to be specified. + </para> + <para> + <function>swfshape->setleftfill</function> sets the fill on the left side of + the edge- that is, on the interior if you're defining the outline of the shape in a counter-clockwise + fashion. The fill object is an SWFFill object returned from one of the addFill + functions above. + </para> + <para> + This seems to be reversed when you're defining a shape in a morph, though. + If your browser crashes, just try setting the fill on the other side. + </para> + <simpara> + Shortcut for <literal>swfshape->setleftfill($s->addfill($r, $g, $b [, $a]));</literal>. + </simpara> + <simpara> + See also + <function>swfshape->setrightfill</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setrightfill"> + <refnamediv> + <refname>SWFShape->setRightFill</refname> + <refpurpose>Sets right rasterizing color.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setrightfill</function></funcdef> + <paramdef>swfgradient <parameter>fill</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setrightfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + See also + <function>swfshape->setleftfill</function>. + </simpara> + <simpara> + Shortcut for <literal>swfshape->setrightfill($s->addfill($r, $g, $b [, $a]));</literal>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.movepento"> + <refnamediv> + <refname>SWFShape->movePenTo</refname> + <refpurpose>Moves the shape's pen.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->movepento</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->setrightfill</function> move the shape's pen to + (<parameter>x</parameter>,<parameter>y</parameter>) in the shape's + coordinate space. + </simpara> + <simpara> + See also + <function>swfshape->movepen</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->drawlineto</function> and + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.movepen"> + <refnamediv> + <refname>SWFShape->movePen</refname> + <refpurpose>Moves the shape's pen (relative).</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->movepen</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->setrightfill</function> move the shape's pen from + coordinates (current x,current y) to (current x + <parameter>dx</parameter>, + current y + <parameter>dy</parameter>) in the shape's coordinate space. + </simpara> + <simpara> + See also + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->drawlineto</function> and + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawlineto"> + <refnamediv> + <refname>SWFShape->drawLineTo</refname> + <refpurpose>Draws a line.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawlineto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->setrightfill</function> draws a line (using the + current line style, set by <function>swfshape->setline</function>) from the current + pen position to point (<parameter>x</parameter>,<parameter>y</parameter>) + in the shape's coordinate space. + </simpara> + <simpara> + See also + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->movepen</function> and + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawline"> + <refnamediv> + <refname>SWFShape->drawLine</refname> + <refpurpose>Draws a line (relative).</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawline</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->setrightfill</function> draws a line (using the current line style + set by <function>swfshape->setline</function>) from the current pen position to + displacement (<parameter>dx</parameter>,<parameter>dy</parameter>). + </simpara> + <simpara> + See also + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->movepen</function> and + <function>swfshape->drawlineto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawcurveto"> + <refnamediv> + <refname>SWFShape->drawCurveTo</refname> + <refpurpose>Draws a curve.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawcurveto</function></funcdef> + <paramdef>int <parameter>controlx</parameter></paramdef> + <paramdef>int <parameter>controly</parameter></paramdef> + <paramdef>int <parameter>anchorx</parameter></paramdef> + <paramdef>int <parameter>anchory</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->drawcurveto</function> draws a quadratic curve + (using the current line style, set by <function>swfshape->setline</function>) + from the current pen position to + (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) + using (<parameter>controlx</parameter>,<parameter>controly</parameter>) + as a control point. That is, head towards the control point, + then smoothly turn to the anchor point. + </simpara> + <simpara> + See also + <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, + <function>swfshape->movepento</function> and + <function>swfshape->movepen</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawcurve"> + <refnamediv> + <refname>SWFShape->drawCurve</refname> + <refpurpose>Draws a curve (relative).</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawcurve</function></funcdef> + <paramdef>int <parameter>controldx</parameter></paramdef> + <paramdef>int <parameter>controldy</parameter></paramdef> + <paramdef>int <parameter>anchordx</parameter></paramdef> + <paramdef>int <parameter>anchordy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <simpara> + <function>swfshape->drawcurve</function> draws a quadratic curve + (using the current line style,set by <function>swfshape->setline</function>) + from the current pen position to the relative position + (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) + using relative control point + (<parameter>controlx</parameter>,<parameter>controly</parameter>). + That is, head towards the control point, then smoothly turn to the + anchor point. + </simpara> + <simpara> + See also + <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, + <function>swfshape->movepento</function> and + <function>swfshape->movepen</function>. + </simpara> + </refsect1> + </refentry> + +<!-- SWFGradient --> + + <refentry id="function.swfgradient"> + <refnamediv> + <refname>SWFGradient</refname> + <refpurpose>Creates a gradient object</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfgradient</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfgradient</function> creates a new SWFGradient object. + </para> + <simpara> + After you've added the entries to your gradient, you can use the gradient + in a shape fill with the <function>swfshape->addfill</function> method. + </simpara> + <simpara> + SWFGradient has the following methods : <function>swfgradient->addentry</function>. + </simpara> + <para> + This simple example will draw a big black-to-white gradient as background, + and a redish disc in its center. + <example> + <title><function>swfgradient</function> example</title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setDimension(320, 240); + + $s = new SWFShape(); + + // first gradient- black to white + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(1.0, 0xff, 0xff, 0xff); + + $f = $s->addFill($g, SWFFILL_LINEAR_GRADIENT); + $f->scaleTo(0.01); + $f->moveTo(160, 120); + $s->setRightFill($f); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m->add($s); + + $s = new SWFShape(); + + // second gradient- radial gradient from red to transparent + $g = new SWFGradient(); + $g->addEntry(0.0, 0xff, 0, 0, 0xff); + $g->addEntry(1.0, 0xff, 0, 0, 0); + + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.005); + $f->moveTo(160, 120); + $s->setRightFill($f); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfgradient.addentry"> + <refnamediv> + <refname>SWFGradient->addEntry</refname> + <refpurpose>Adds an entry to the gradient list.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfgradient->addentry</function></funcdef> + <paramdef>float <parameter>ratio</parameter></paramdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfgradient->addentry</function> adds an entry to the gradient list. + <parameter>ratio</parameter> is a number between 0 and 1 indicating where in + the gradient this color appears. Thou shalt add entries in order of increasing ratio. + </para> + <para> + <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> + is a color (RGB mode). Last parameter <parameter>a</parameter> is optional. + </para> + </refsect1> + </refentry> + +<!-- SWFBitmap --> + + <refentry id="function.swfbitmap"> + <refnamediv> + <refname>SWFBitmap</refname> + <refpurpose>Loads Bitmap object</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfbitmap</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + <paramdef>int <parameter><optional>alphafilename</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbitmap</function> creates a new SWFBitmap object from + the Jpeg or DBL file named <parameter>filename</parameter>. + <parameter>alphafilename</parameter> indicates a MSK file to + be used as an alpha mask for a Jpeg image. + </para> + <note> + <para> + We can only deal with baseline (frame 0) jpegs, no baseline optimized or + progressive scan jpegs! + </para> + </note> + <simpara> + SWFBitmap has the following methods : <function>swfbitmap->getwidth</function> + and <function>swfbitmap->getheight</function>. + </simpara> + <para> + You can't import png images directly, though- have to use the png2dbl + utility to make a dbl ("define bits lossless") file from the png. + The reason for this is that I don't want a dependency on the png library + in ming- autoconf should solve this, but that's not set up yet. + <example> + <title>Import PNG files</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f = $s->addFill(new SWFBitmap("png.dbl")); + $s->setRightFill($f); + + $s->drawLine(32, 0); + $s->drawLine(0, 32); + $s->drawLine(-32, 0); + $s->drawLine(0, -32); + + $m = new SWFMovie(); + $m->setDimension(32, 32); + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + And you can put an alpha mask on a jpeg fill. + <example> + <title><function>swfbitmap</function> example</title> + <programlisting role="php"> +<?php + + $s = new SWFShape(); + + // .msk file generated with "gif2mask" utility + $f = $s->addFill(new SWFBitmap("alphafill.jpg", "alphafill.msk")); + $s->setRightFill($f); + + $s->drawLine(640, 0); + $s->drawLine(0, 480); + $s->drawLine(-640, 0); + $s->drawLine(0, -480); + + $c = new SWFShape(); + $c->setRightFill($c->addFill(0x99, 0x99, 0x99)); + $c->drawLine(40, 0); + $c->drawLine(0, 40); + $c->drawLine(-40, 0); + $c->drawLine(0, -40); + + $m = new SWFMovie(); + $m->setDimension(640, 480); + $m->setBackground(0xcc, 0xcc, 0xcc); + + // draw checkerboard background + for($y=0; $y<480; $y+=40) + { + for($x=0; $x<640; $x+=80) + { + $i = $m->add($c); + $i->moveTo($x, $y); + } + + $y+=40; + + for($x=40; $x<640; $x+=80) + { + $i = $m->add($c); + $i->moveTo($x, $y); + } + } + + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbitmap.getwidth"> + <refnamediv> + <refname>SWFBitmap->getWidth</refname> + <refpurpose>Returns the bitmap's width.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swfbitmap->getwidth</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbitmap->getwidth</function> returns the bitmap's width in pixels. + </para> + <para> + See also + <function>swfbitmap->getheight</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbitmap.getheight"> + <refnamediv> + <refname>SWFBitmap->getHeight</refname> + <refpurpose>Returns the bitmap's height.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swfbitmap->getheight</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbitmap->getheight</function> returns the bitmap's height in pixels. + </para> + <para> + See also + <function>swfbitmap->getwidth</function>. + </para> + </refsect1> + </refentry> + +<!-- SWFFill --> + + <refentry id="function.swffill"> + <refnamediv> + <refname>SWFFill</refname> + <refpurpose>Loads SWFFill object</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <para> + The <function>swffill</function> object allows you to transform + (scale, skew, rotate) bitmap and gradient fills. <function>swffill</function> + objects are created by the <function>swfshape->addfill</function> methods. + </para> + <simpara> + SWFFill has the following methods : <function>swffill->moveto</function> + and <function>swffill->scaleto</function>, <function>swffill->rotateto</function>, + <function>swffill->skewxto</function> and <function>swffill->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swffill.moveto"> + <refnamediv> + <refname>SWFFill->moveTo</refname> + <refpurpose>Moves fill origin</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffill->moveto</function> moves fill's origin to + (<parameter>x</parameter>,<parameter>y</parameter>) in global coordinates. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.scaleto"> + <refnamediv> + <refname>SWFFill->scaleTo</refname> + <refpurpose>Sets fill's scale</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->scaleto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffill->scaleto</function> sets fill's scale to + <parameter>x</parameter> in the x-direction, + <parameter>y</parameter> in the y-direction. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.rotateto"> + <refnamediv> + <refname>SWFFill->rotateTo</refname> + <refpurpose>Sets fill's rotation</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->rotateto</function></funcdef> + <paramdef>float <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffill->rotateto</function> sets fill's rotation to + <parameter>degrees</parameter> degrees. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.skewxto"> + <refnamediv> + <refname>SWFFill->skewXTo</refname> + <refpurpose>Sets fill x-skew</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->skewxto</function></funcdef> + <paramdef>float <parameter>x</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffill->skewxto</function> sets fill x-skew to <parameter>x</parameter>. + For <parameter>x</parameter> is 1.0, it is a is a 45-degree + forward slant. More is more forward, less is more backward. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.skewyto"> + <refnamediv> + <refname>SWFFill->skewYTo</refname> + <refpurpose>Sets fill y-skew</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->skewyto</function></funcdef> + <paramdef>float <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffill->skewyto</function> sets fill y-skew to <parameter>y</parameter>. + For <parameter>y</parameter> is 1.0, it is a is a 45-degree + upward slant. More is more upward, less is more downward. + </para> + </refsect1> + </refentry> + +<!-- SWFMorph --> + + <refentry id="function.swfmorph"> + <refnamediv> + <refname>SWFMorph</refname> + <refpurpose>Creates a new SWFMorph object.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfmorph</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmorph</function> creates a new SWFMorph object. + </para> + <para> + Also called a "shape tween". This thing lets you make those tacky + twisting things that make your computer choke. Oh, joy! + </para> + <para> + The methods here are sort of weird. It would make more sense to just + have newSWFMorph(shape1, shape2);, but as things are now, shape2 needs + to know that it's the second part of a morph. (This, because it starts + writing its output as soon as it gets drawing commands- if it kept its + own description of its shapes and wrote on completion this and some + other things would be much easier.) + </para> + <simpara> + SWFMorph has the following methods : <function>swfmorph->getshape1</function> + and <function>swfmorph->getshape1</function>. + </simpara> + <para> + This simple example will morph a big red square into a smaller + blue black-bordered square. + <example> + <title><function>swfmorph</function> example</title> + <programlisting role="php"> +<?php + $p = new SWFMorph(); + + $s = $p->getShape1(); + $s->setLine(0,0,0,0); + + /* Note that this is backwards from normal shapes (left instead of right). + I have no idea why, but this seems to work.. */ + + $s->setLeftFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(-1000,-1000); + $s->drawLine(2000,0); + $s->drawLine(0,2000); + $s->drawLine(-2000,0); + $s->drawLine(0,-2000); + + $s = $p->getShape2(); + $s->setLine(60,0,0,0); + $s->setLeftFill($s->addFill(0, 0, 0xff)); + $s->movePenTo(0,-1000); + $s->drawLine(1000,1000); + $s->drawLine(-1000,1000); + $s->drawLine(-1000,-1000); + $s->drawLine(1000,-1000); + + $m = new SWFMovie(); + $m->setDimension(3000,2000); + $m->setBackground(0xff, 0xff, 0xff); + + $i = $m->add($p); + $i->moveTo(1500,1000); + + for($r=0.0; $r<=1.0; $r+=0.1) + { + $i->setRatio($r); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmorph.getshape1"> + <refnamediv> + <refname>SWFMorph->getshape1</refname> + <refpurpose>Gets a handle to the starting shape</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>swfmorph->getshape1</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmorph->getshape1</function> gets a handle to the morph's + starting shape. <function>swfmorph->getshape1</function> returns an + <function>swfshape</function> object. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmorph.getshape2"> + <refnamediv> + <refname>SWFMorph->getshape2</refname> + <refpurpose>Gets a handle to the ending shape</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>swfmorph->getshape2</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfmorph->getshape2</function> gets a handle to the morph's + ending shape. <function>swfmorph->getshape2</function> returns an + <function>swfshape</function> object. + </para> + </refsect1> + </refentry> + +<!-- SWFText --> + + <refentry id="function.swftext"> + <refnamediv> + <refname>SWFText</refname> + <refpurpose>Creates a new SWFText object.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swftext</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext</function> creates a new SWFText object, + fresh for manipulating. + </para> + <simpara> + SWFText has the following methods : <function>swftext->setfont</function>, + <function>swftext->setheight</function>, <function>swftext->setspacing</function>, + <function>swftext->setcolor</function>, <function>swftext->moveto</function>, + <function>swftext->addstring</function> and <function>swftext->getwidth</function>. + </simpara> + <para> + This simple example will draw a big yellow "PHP generates Flash with Ming" + text, on white background. + <example> + <title><function>swftext</function> example</title> + <programlisting role="php"> +<?php + $f = new SWFFont("Techno.fdb"); + $t = new SWFText(); + $t->setFont($f); + $t->moveTo(200, 2400); + $t->setColor(0xff, 0xff, 0); + $t->setHeight(1200); + $t->addString("PHP generates Flash with Ming!!"); + + $m = new SWFMovie(); + $m->setDimension(5400, 3600); + + $m->add($t); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setfont"> + <refnamediv> + <refname>SWFText->setFont</refname> + <refpurpose>Sets the current font</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setfont</function></funcdef> + <paramdef>string <parameter>font</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->setfont</function> sets the current font to + <parameter>font</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setheight"> + <refnamediv> + <refname>SWFText->setHeight</refname> + <refpurpose>Sets the current font height</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setheight</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->setheight</function> sets the current font height to + <parameter>height</parameter>. Default is 240. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setspacing"> + <refnamediv> + <refname>SWFText->setSpacing</refname> + <refpurpose>Sets the current font spacing</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setspacing</function></funcdef> + <paramdef>float <parameter>spacing</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->setspacing</function> sets the current font spacing to + <parameter>spacing</parameter><parameter>spacing</parameter>. Default is 1.0. + 0 is all of the letters written at the same point. This doesn't really work + that well because it inflates the advance across the letter, doesn't add + the same amount of spacing between the letters. I should try and explain + that better, prolly. Or just fix the damn thing to do constant spacing. + This was really just a way to figure out how letter advances work, + anyway.. So nyah. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setcolor"> + <refnamediv> + <refname>SWFText->setColor</refname> + <refpurpose>Sets the current font color</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setcolor</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->setspacing</function> changes the current text color. + Default is black. I think. Color is represented using the RGB system. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.moveto"> + <refnamediv> + <refname>SWFText->moveTo</refname> + <refpurpose>Moves the pen</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->moveto</function> moves the pen (or cursor, if + that makes more sense) to (<parameter>x</parameter>,<parameter>y</parameter>) + in text object's coordinate space. If either is zero, though, value + in that dimension stays the same. Annoying, should be fixed. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.addstring"> + <refnamediv> + <refname>SWFText->addString</refname> + <refpurpose>Draws a string</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->addstring</function> draws the string <parameter>string</parameter> + at the current pen (cursor) location. Pen is at the baseline of the text; + i.e., ascending text is in the -y direction. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.getwidth"> + <refnamediv> + <refname>SWFText->getWidth</refname> + <refpurpose>Computes string's width</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftext->addstring</function> returns the rendered width of the + <parameter>string</parameter> string at the text object's current font, + scale, and spacing settings. + </para> + </refsect1> + </refentry> + +<!-- SWFFont --> + + <refentry id="function.swffont"> + <refnamediv> + <refname>SWFFont</refname> + <refpurpose>Loads a font definition</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swffont</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + If <parameter>filename</parameter> is the name of an FDB file + (i.e., it ends in ".fdb"), load the font definition found in said + file. Otherwise, create a browser-defined font reference. + </para> + <para> + FDB ("font definition block") is a very simple wrapper for the SWF DefineFont2 + block which contains a full description of a font. One may create FDB files from + SWT Generator template files with the included makefdb utility- look in the + util directory off the main ming distribution directory. + </para> + <para> + Browser-defined fonts don't contain any information about the font other + than its name. It is assumed that the font definition will be provided by + the movie player. The fonts _serif, _sans, and _typewriter should always + be available. For example: + <programlisting role="php"> +<?php +$f = newSWFFont("_sans"); +?> + </programlisting> + will give you the standard sans-serif font, probably the same as what you'd get + with <literal><font name="sans-serif"></literal> in HTML. + </para> + <para> + <function>swffont</function> returns a reference to the font + definition, for use in the <function>SWFText->setFont</function> + and the <function>SWFTextField->setFont</function> methods. + </para> + <simpara> + SWFFont has the following methods : <function>swffont->getwidth</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swffont.getwidth"> + <refnamediv> + <refname>swffont->getwidth</refname> + <refpurpose>Returns the string's width</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swffont->getwidth</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swffont->getwidth</function> returns the string + <parameter>string</parameter>'s width, using font's default scaling. + You'll probably want to use the <function>SWFText</function> version of this method which + uses the text object's scale. + </para> + </refsect1> + </refentry> + +<!-- SWFTextField --> + + <refentry id="function.swftextfield"> + <refnamediv> + <refname>SWFTextField</refname> + <refpurpose>Creates a text field object</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swftextfield</function></funcdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield</function> creates a new text field object. + Text Fields are less flexible than <function>swftext</function> objects- + they can't be rotated, scaled non-proportionally, or skewed, but they can + be used as form entries, and they can use browser-defined fonts. + </para> + <para> + The optional flags change the text field's behavior. It has the following + possibles values : + <itemizedlist> + <listitem> + <simpara> + SWFTEXTFIELD_NOEDIT indicates that the field shouldn't be user-editable + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_PASSWORD obscures the data entry + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_DRAWBOX draws the outline of the textfield + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_MULTILINE allows multiple lines + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_WORDWRAP allows text to wrap + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_NOSELECT makes the field non-selectable + </simpara> + </listitem> + </itemizedlist> + Flags are combined with the bitwise + <link linkend="language.operators.bitwise">OR</link> operation. For example, + <programlisting role="php"> +<?php +$t = newSWFTextField(SWFTEXTFIELD_PASSWORD | SWFTEXTFIELD_NOEDIT); +?> + </programlisting> + creates a totally useless non-editable password field. + </para> + <simpara> + SWFTextField has the following methods : <function>swftextfield->setfont</function>, + <function>swftextfield->setbounds</function>, <function>swftextfield->align</function>, + <function>swftextfield->setheight</function>, <function>swftextfield->setleftmargin</function>, + <function>swftextfield->setrightmargin</function>, <function>swftextfield->setmargins</function>, + <function>swftextfield->setindentation</function>, <function>swftextfield->setlinespacing</function>, + <function>swftextfield->setcolor</function>, <function>swftextfield->setname</function> and + <function>swftextfield->addstring</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setfont"> + <refnamediv> + <refname>SWFTextField->setFont</refname> + <refpurpose>Sets the text field font</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setfont</function></funcdef> + <paramdef>string <parameter>font</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setfont</function> sets the text field font to + the [browser-defined?] <parameter>font</parameter> font. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setbounds"> + <refnamediv> + <refname>SWFTextField->setbounds</refname> + <refpurpose>Sets the text field width and height</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setbounds</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setbounds</function> sets the text field width + to <parameter>width</parameter> and height to <parameter>height</parameter>. + If you don't set the bounds yourself, Ming makes a poor guess at what + the bounds are. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.align"> + <refnamediv> + <refname>SWFTextField->align</refname> + <refpurpose>Sets the text field alignment</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->align</function></funcdef> + <paramdef>int <parameter>alignement</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->align</function> sets the text field alignment + to <parameter>alignement</parameter>. Valid values for + <parameter>alignement</parameter> are : SWFTEXTFIELD_ALIGN_LEFT, + SWFTEXTFIELD_ALIGN_RIGHT, SWFTEXTFIELD_ALIGN_CENTER and + SWFTEXTFIELD_ALIGN_JUSTIFY. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setheight"> + <refnamediv> + <refname>SWFTextField->setHeight</refname> + <refpurpose>Sets the font height of this text field font.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setheight</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setheight</function> sets the font height of this text field + font to the given height <parameter>height</parameter>. Default is 240. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setleftmargin"> + <refnamediv> + <refname>SWFTextField->setLeftMargin</refname> + <refpurpose>Sets the left margin width of the text field.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setleftmargin</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setleftmargin</function> sets the left margin width + of the text field to <parameter>width</parameter>. Default is 0. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setrightmargin"> + <refnamediv> + <refname>SWFTextField->setrightMargin</refname> + <refpurpose>Sets the right margin width of the text field.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setrightmargin</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setrightmargin</function> sets the right margin width + of the text field to <parameter>width</parameter>. Default is 0. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setmargins"> + <refnamediv> + <refname>SWFTextField->setMargins</refname> + <refpurpose>Sets the margins width of the text field.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setmargins</function></funcdef> + <paramdef>int <parameter>left</parameter></paramdef> + <paramdef>int <parameter>right</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setmargins</function> set both margins at once, + for the man on the go. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setindentation"> + <refnamediv> + <refname>SWFTextField->setindentation</refname> + <refpurpose>Sets the indentation of the first line.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setindentation</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setindentation</function> sets the indentation of + the first line in the text field, to <parameter>width</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setlinespacing"> + <refnamediv> + <refname>SWFTextField->setLineSpacing</refname> + <refpurpose>Sets the line spacing of the text field.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setlinespacing</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setlinespacing</function> sets the line spacing + of the text field to the height of <parameter>height</parameter>. Default is 40. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setcolor"> + <refnamediv> + <refname>SWFTextField->setcolor</refname> + <refpurpose>Sets the color of the text field. </refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setcolor</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setcolor</function> sets the color of the text field. + Default is fully opaque black. Color is represented using RGB system. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setname"> + <refnamediv> + <refname>SWFTextField->setname</refname> + <refpurpose>Sets the variable name</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setname</function></funcdef> + <paramdef>string <parameter>name</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setname</function> sets the variable name of this + text field to <parameter>name</parameter>, for form posting and action + scripting purposes. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.addstring"> + <refnamediv> + <refname>SWFTextField->addstring</refname> + <refpurpose>Concatenates the given string to the text field</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swftextfield->setname</function> concatenates the string + <parameter>string</parameter> to the text field. + </para> + </refsect1> + </refentry> + +<!-- SWFSprite --> + + <refentry id="function.swfsprite"> + <refnamediv> + <refname>SWFSprite</refname> + <refpurpose>Creates a movie clip (a sprite)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfsprite</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfsprite</function> are also known as a "movie clip", + this allows one to create objects which are animated in their own + timelines. Hence, the sprite has most of the same methods as the movie. + </para> + <simpara> + <function>swfsprite</function> has the following methods : + <function>swfsprite->add</function>, + <function>swfsprite->remove</function>, <function>swfsprite->nextframe</function> + and <function>swfsprite->setframes</function>. + </simpara> + <para> + This simple example will spin gracefully a big red square. + <example> + <title><function>swfsprite</function> example</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(-500,-500); + $s->drawLineTo(500,-500); + $s->drawLineTo(500,500); + $s->drawLineTo(-500,500); + $s->drawLineTo(-500,-500); + + $p = new SWFSprite(); + $i = $p->add($s); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + + $m = new SWFMovie(); + $i = $m->add($p); + $i->moveTo(1500,1000); + $i->setName("blah"); + + $m->setBackground(0xff, 0xff, 0xff); + $m->setDimension(3000,2000); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.add"> + <refnamediv> + <refname>SWFSprite->add</refname> + <refpurpose>Adds an object to a sprite</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->add</function></funcdef> + <paramdef>ressource <parameter>object</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfsprite->add</function> adds a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function>, + a <function>swfaction</function> or a <function>swfsprite</function> object. + </para> + <para> + For displayable types (<function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function>, + <function>swfaction</function> or <function>swfsprite</function>), + this returns a handle to the object in a display list. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.remove"> + <refnamediv> + <refname>SWFSprite->remove</refname> + <refpurpose>Removes an object to a sprite</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->remove</function></funcdef> + <paramdef>ressource <parameter>object</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfsprite->remove</function> remove a <function>swfshape</function>, a + <function>swfbutton</function>, a <function>swftext</function>, + a <function>swfaction</function> or a <function>swfsprite</function> object + from the sprite. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.setframes"> + <refnamediv> + <refname>SWFSprite->setframes</refname> + <refpurpose>Sets the total number of frames in the animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->setframes</function></funcdef> + <paramdef>int <parameter>numberofframes</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfsprite->setframes</function> sets the total number of frames + in the animation to <parameter>numberofframes</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.nextframe"> + <refnamediv> + <refname>SWFSprite->nextframe</refname> + <refpurpose>Moves to the next frame of the animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->nextframe</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfsprite->setframes</function> moves to the next frame of + the animation. + </para> + </refsect1> + </refentry> + +<!-- SWFButton --> + + <refentry id="function.swfbutton"> + <refnamediv> + <refname>SWFbutton</refname> + <refpurpose>Creates a new Button.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfbutton</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton</function> creates a new Button. + Roll over it, click it, see it call action code. Swank. + </para> + <simpara> + SWFButton has the following methods : <function>swfbutton->addshape</function>, + <function>swfbutton->setup</function>, <function>swfbutton->setover</function> + <function>swfbutton->setdown</function>, <function>swfbutton->sethit</function> + <function>swfbutton->setaction</function> and + <function>swfbutton->addaction</function>. + </simpara> + <para> + This simple example will show your usual interactions with buttons : + rollover, rollon, mouseup, mousedown, noaction. + <example> + <title><function>swfbutton</function> example</title> + <programlisting role="php"> +<?php + + $f = new SWFFont("_serif"); + + $p = new SWFSprite(); + + function label($string) + { + global $f; + + $t = new SWFTextField(); + $t->setFont($f); + $t->addString($string); + $t->setHeight(200); + $t->setBounds(3200,200); + return $t; + } + function addLabel($string) + { + global $p; + + $i = $p->add(label($string)); + $p->nextFrame(); + $p->remove($i); + } + + $p->add(new SWFAction("stop();")); + addLabel("NO ACTION"); + addLabel("SWFBUTTON_MOUSEUP"); + addLabel("SWFBUTTON_MOUSEDOWN"); + addLabel("SWFBUTTON_MOUSEOVER"); + addLabel("SWFBUTTON_MOUSEOUT"); + addLabel("SWFBUTTON_MOUSEUPOUTSIDE"); + addLabel("SWFBUTTON_DRAGOVER"); + addLabel("SWFBUTTON_DRAGOUT"); + + function rect($r, $g, $b) + { + $s = new SWFShape(); + $s->setRightFill($s->addFill($r, $g, $b)); + $s->drawLine(600,0); + $s->drawLine(0,600); + $s->drawLine(-600,0); + $s->drawLine(0,-600); + + return $s; + } + + $b = new SWFButton(); + $b->addShape(rect(0xff, 0, 0), SWFBUTTON_UP | SWFBUTTON_HIT); + $b->addShape(rect(0, 0xff, 0), SWFBUTTON_OVER); + $b->addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(1);"), + SWFBUTTON_MOUSEUP); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(2);"), + SWFBUTTON_MOUSEDOWN); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(3);"), + SWFBUTTON_MOUSEOVER); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(4);"), + SWFBUTTON_MOUSEOUT); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(5);"), + SWFBUTTON_MOUSEUPOUTSIDE); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(6);"), + SWFBUTTON_DRAGOVER); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(7);"), + SWFBUTTON_DRAGOUT); + + $m = new SWFMovie(); + $m->setDimension(4000,3000); + + $i = $m->add($p); + $i->setName("label"); + $i->moveTo(400,1900); + + $i = $m->add($b); + $i->moveTo(400,900); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + This simple example will enables you to drag draw a big red button + on the windows. No drag-and-drop, just moving around. + <example> + <title><function>swfbutton->addaction</function> example</title> + <programlisting role="php"> +<?php + + $s = new SWFShape(); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->drawLine(1000,0); + $s->drawLine(0,1000); + $s->drawLine(-1000,0); + $s->drawLine(0,-1000); + + $b = new SWFButton(); + $b->addShape($s, SWFBUTTON_HIT | SWFBUTTON_UP | SWFBUTTON_DOWN | SWFBUTTON_OVER); + + $b->addAction(new SWFAction("startDrag('/test', 0);"), // '0' means don't lock to mouse + SWFBUTTON_MOUSEDOWN); + + $b->addAction(new SWFAction("stopDrag();"), + SWFBUTTON_MOUSEUP | SWFBUTTON_MOUSEUPOUTSIDE); + + $p = new SWFSprite(); + $p->add($b); + $p->nextFrame(); + + $m = new SWFMovie(); + $i = $m->add($p); + $i->setName('test'); + $i->moveTo(1000,1000); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.addshape"> + <refnamediv> + <refname>SWFbutton->addShape</refname> + <refpurpose>Adds a shape to a button</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->addshape</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + <paramdef>int <parameter>flags</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->addshape</function> adds the shape + <parameter>shape</parameter> to this button. The following + <parameter>flags</parameter>' values are valid: + SWFBUTTON_UP, SWFBUTTON_OVER, SWFBUTTON_DOWN or SWFBUTTON_HIT. + SWFBUTTON_HIT isn't ever displayed, it defines the hit region for the button. + That is, everywhere the hit shape would be drawn is considered a "touchable" + part of the button. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setup"> + <refnamediv> + <refname>SWFbutton->setUp</refname> + <refpurpose>Alias for addShape(shape, SWFBUTTON_UP)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setup</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->setup</function> alias for addShape(shape, SWFBUTTON_UP). + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setover"> + <refnamediv> + <refname>SWFbutton->setOver</refname> + <refpurpose>Alias for addShape(shape, SWFBUTTON_OVER)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setover</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->setover</function> alias for addShape(shape, SWFBUTTON_OVER). + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setdown"> + <refnamediv> + <refname>SWFbutton->setdown</refname> + <refpurpose>Alias for addShape(shape, SWFBUTTON_DOWN))</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setdown</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->setdown</function> alias for addShape(shape, SWFBUTTON_DOWN). + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.sethit"> + <refnamediv> + <refname>SWFbutton->setHit</refname> + <refpurpose>Alias for addShape(shape, SWFBUTTON_HIT)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->sethit</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->sethit</function> alias for addShape(shape, SWFBUTTON_HIT). + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.addaction"> + <refnamediv> + <refname>SWFbutton->addAction</refname> + <refpurpose>Adds an action</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->addaction</function></funcdef> + <paramdef>ressource <parameter>action</parameter></paramdef> + <paramdef>int <parameter>flags</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->addaction</function> adds the action + <parameter>action</parameter> to this button for the given conditions. + The following <parameter>flags</parameter> are valid: + SWFBUTTON_MOUSEOVER, SWFBUTTON_MOUSEOUT, SWFBUTTON_MOUSEUP, + SWFBUTTON_MOUSEUPOUTSIDE, SWFBUTTON_MOUSEDOWN, SWFBUTTON_DRAGOUT and + SWFBUTTON_DRAGOVER. + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setaction"> + <refnamediv> + <refname>SWFbutton->setAction</refname> + <refpurpose>Sets the action</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setaction</function></funcdef> + <paramdef>ressource <parameter>action</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfbutton->setaction</function> sets the action to be performed + when the button is clicked. Alias for addAction(shape, SWFBUTTON_MOUSEUP). + <parameter>action</parameter> is a <function>swfaction</function>. + </para> + <para> + See also + <function>swfbutton->addshape</function> and + <function>SWFAction</function>. + </para> + </refsect1> + </refentry> + +<!-- SWFAction --> + + <refentry id="function.swfaction"> + <refnamediv> + <refname>SWFAction</refname> + <refpurpose>Creates a new Action.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfaction</function></funcdef> + <paramdef>string <parameter>script</parameter></paramdef> + </funcprototype> + </funcsynopsis> + &warn.experimental.func; + <para> + <function>swfaction</function> creates a new Action, and + compiles the given script into an SWFAction object. + </para> + <para> + The script syntax is based on the C language, but with a lot taken out- the SWF + bytecode machine is just too simpleminded to do a lot of things we might like. + For instance, we can't implement function calls without a tremendous + amount of hackery because the jump bytecode has a hardcoded offset + value. No pushing your calling address to the stack and returning- + every function would have to know exactly where to return to. + </para> + <para> + So what's left? The compiler recognises the following tokens: + <itemizedlist> + <listitem> + <simpara> + break + </simpara> + </listitem> + <listitem> + <simpara> + for + </simpara> + </listitem> + <listitem> + <simpara> + continue + </simpara> + </listitem> + <listitem> + <simpara> + if + </simpara> + </listitem> + <listitem> + <simpara> + else + </simpara> + </listitem> + <listitem> + <simpara> + do + </simpara> + </listitem> + <listitem> + <simpara> + while + </simpara> + </listitem> + </itemizedlist> + </para> + <para> + There is no typed data; all values in the SWF action machine are stored as strings. + The following functions can be used in expressions: + <variablelist> + <varlistentry> + <term>time()</term> + <listitem> + <simpara> + Returns the number of milliseconds (?) elapsed since the movie started. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>random(seed)</term> + <listitem> + <simpara> + Returns a pseudo-random number in the range 0-seed. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>length(expr)</term> + <listitem> + <simpara> + Returns the length of the given expression. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>int(number)</term> + <listitem> + <simpara> + Returns the given number rounded down to the nearest integer. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>concat(expr, expr)</term> + <listitem> + <simpara> + Returns the concatenation of the given expressions. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>ord(expr)</term> + <listitem> + <simpara> + Returns the ASCII code for the given character + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>chr(num)</term> + <listitem> + <simpara> + Returns the character for the given ASCII code + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>substr(string, location, length)</term> + <listitem> + <simpara> + Returns the substring of length length at location location of + the given string string. + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + Additionally, the following commands may be used: + <variablelist> + <varlistentry> + <term>duplicateClip(clip, name, depth)</term> + <listitem> + <simpara> + Duplicate the named movie clip (aka sprite). The new movie clip has name name + and is at depth depth. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>removeClip(expr)</term> + <listitem> + <simpara> + Removes the named movie clip. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>trace(expr)</term> + <listitem> + <simpara> + Write the given expression to the trace log. Doubtful that the browser + plugin does anything with this. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>startDrag(target, lock, [left, top, right, bottom])</term> + <listitem> + <simpara> + Start dragging the movie clip target. The lock argument indicates whether + to lock the mouse (?)- use 0 (&false;) or 1 (&true;). Optional parameters + define a bounding area for the dragging. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stopDrag()</term> + <listitem> + <simpara> + Stop dragging my heart around. And this movie clip, too. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>callFrame(expr)</term> + <listitem> + <simpara> + Call the named frame as a function. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>getURL(url, target, [method])</term> + <listitem> + <simpara> + Load the given url into the named target. The target argument can be a + frame name (I think), or one of the magical values "_level0" (replaces + current movie) or "_level1" (loads new movie on top of current movie). + The optional method argument can be post or get if you want to submit + variables back to the server. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>loadMovie(url, target)</term> + <listitem> + <simpara> + Same as above, more or less. Come to think of it, I don't quite know what + the difference is. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>nextFrame()</term> + <listitem> + <simpara> + Go to the next frame. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>prevFrame()</term> + <listitem> + <simpara> + Go to the last (or, rather, previous) frame. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>play()</term> + <listitem> + <simpara> + Start playing the movie. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stop()</term> + <listitem> + <simpara> + Stop playing the movie. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>toggleQuality()</term> + <listitem> + <simpara> + Toggle between high and low quality. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stopSounds()</term> + <listitem> + <simpara> + Stop playing all sounds. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>gotoFrame(num)</term> + <listitem> + <simpara> + Go to frame number num. Frame numbers start at 0. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>gotoFrame(name)</term> + <listitem> + <simpara> + Go to the frame named name. Which does a lot of good, since I + haven't added frame labels yet. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>setTarget(expr)</term> + <listitem> + <simpara> + Sets the context for action. Or so they say- I really have no + idea what this does. + </simpara> + </listitem> + </varlistentry> + </variablelist> + And there's one weird extra thing. The expression frameLoaded(num) can be used + in if statements and while loops to check if the given frame number has been + loaded yet. Well, it's supposed to, anyway, but I've never tested it and I + seriously doubt it actually works. You can just use /:framesLoaded instead. + </para> + <para> + Movie clips (all together now- aka sprites) have properties. You can + read all of them (or can you?), you can set some of them, and here + they are: + <itemizedlist> + <listitem> + <simpara> + x + </simpara> + </listitem> + <listitem> + <simpara> + y + </simpara> + </listitem> + <listitem> + <simpara> + xScale + </simpara> + </listitem> + <listitem> + <simpara> + yScale + </simpara> + </listitem> + <listitem> + <simpara> + currentFrame - (read-only) + </simpara> + </listitem> + <listitem> + <simpara> + totalFrames - (read-only) + </simpara> + </listitem> + <listitem> + <simpara> + alpha - transparency level + </simpara> + </listitem> + <listitem> + <simpara> + visible - 1=on, 0=off (?) + </simpara> + </listitem> + <listitem> + <simpara> + width - (read-only) + </simpara> + </listitem> + <listitem> + <simpara> + height - (read-only) + </simpara> + </listitem> + <listitem> + <simpara> + rotation + </simpara> + </listitem> + <listitem> + <simpara> + target - (read-only) (???) + </simpara> + </listitem> + <listitem> + <simpara> + framesLoaded - (read-only) + </simpara> + </listitem> + <listitem> + <simpara> + name + </simpara> + </listitem> + <listitem> + <simpara> + dropTarget - (read-only) (???) + </simpara> + </listitem> + <listitem> + <simpara> + url - (read-only) (???) + </simpara> + </listitem> + <listitem> + <simpara> + highQuality - 1=high, 0=low (?) + </simpara> + </listitem> + <listitem> + <simpara> + focusRect - (???) + </simpara> + </listitem> + <listitem> + <simpara> + soundBufTime - (???) + </simpara> + </listitem> + </itemizedlist> + So, setting a sprite's x position is as simple as <literal>/box.x = 100;</literal>. + Why the slash in front of the box, though? That's how flash keeps + track of the sprites in the movie, just like a unix filesystem- + here it shows that box is at the top level. If the sprite named + box had another sprite named biff inside of it, you'd set its x + position with /box/biff.x = 100;. At least, I think so; correct + me if I'm wrong here. + </para> + <para> + This simple example will move the red square across the window. + <example> + <title><function>swfaction</function> example</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f = $s->addFill(0xff, 0, 0); + $s->setRightFill($f); + + $s->movePenTo(-500,-500); + $s->drawLineTo(500,-500); + $s->drawLineTo(500,500); + $s->drawLineTo(-500,500); + $s->drawLineTo(-500,-500); + + $p = new SWFSprite(); + $i = $p->add($s); + $i->setDepth(1); + $p->nextFrame(); + + for($n=0; $n<5; ++$n) + { + $i->rotate(-15); + $p->nextFrame(); + } + + $m = new SWFMovie(); + $m->setBackground(0xff, 0xff, 0xff); + $m->setDimension(6000,4000); + + $i = $m->add($p); + $i->setDepth(1); + $i->moveTo(-500,2000); + $i->setName("box"); + + $m->add(new SWFAction("/box.x += 3;")); + $m->nextFrame(); + $m->add(new SWFAction("gotoFrame(0); play();")); + $m->nextFrame(); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + This simple example tracks down your mouse on the screen. + <example> + <title><function>swfaction</function> example</title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setRate(36.0); + $m->setDimension(1200, 800); + $m->setBackground(0, 0, 0); + + /* mouse tracking sprite - empty, but follows mouse so we can + get its x and y coordinates */ + + $i = $m->add(new SWFSprite()); + $i->setName('mouse'); + + $m->add(new SWFAction(" + startDrag('/mouse', 1); /* '1' means lock sprite to the mouse */ + ")); + + + /* might as well turn off antialiasing, since these are just squares. */ + + $m->add(new SWFAction(" + this.quality = 0; + ")); + + /* morphing box */ + $r = new SWFMorph(); + $s = $r->getShape1(); + + /* Note this is backwards from normal shapes. No idea why. */ + $s->setLeftFill($s->addFill(0xff, 0xff, 0xff)); + $s->movePenTo(-40, -40); + $s->drawLine(80, 0); + $s->drawLine(0, 80); + $s->drawLine(-80, 0); + $s->drawLine(0, -80); + + $s = $r->getShape2(); + + $s->setLeftFill($s->addFill(0x00, 0x00, 0x00)); + $s->movePenTo(-1, -1); + $s->drawLine(2, 0); + $s->drawLine(0, 2); + $s->drawLine(-2, 0); + $s->drawLine(0, -2); + + + /* sprite container for morphing box - + this is just a timeline w/ the box morphing */ + + $box = new SWFSprite(); + $box->add(new SWFAction(" + stop(); + ")); + $i = $box->add($r); + + for($n=0; $n<=20; ++$n) + { + $i->setRatio($n/20); + $box->nextFrame(); + } + + + /* this container sprite allows us to use the same action code many times */ + + $cell = new SWFSprite(); + $i = $cell->add($box); + $i->setName('box'); + + $cell->add(new SWFAction(" + + setTarget('box'); + + /* ...x means the x coordinate of the parent, i.e. (..).x */ + dx = (/mouse.x + random(6)-3 - ...x)/5; + dy = (/mouse.y + random(6)-3 - ...y)/5; + gotoFrame(int(dx*dx + dy*dy)); + + ")); + + $cell->nextFrame(); + $cell->add(new SWFAction(" + + gotoFrame(0); + play(); + + ")); + + $cell->nextFrame(); + + + /* finally, add a bunch of the cells to the movie */ + + for($x=0; $x<12; ++$x) + { + for($y=0; $y<8; ++$y) + { + $i = $m->add($cell); + $i->moveTo(100*$x+50, 100*$y+50); + } + } + + $m->nextFrame(); + + $m->add(new SWFAction(" + + gotoFrame(1); + play(); + + ")); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + Same as above, but with nice colored balls... + <example> + <title><function>swfaction</function> example</title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setDimension(11000, 8000); + $m->setBackground(0x00, 0x00, 0x00); + + $m->add(new SWFAction(" + +this.quality = 0; +/frames.visible = 0; +startDrag('/mouse', 1); + + ")); + + // mouse tracking sprite + $t = new SWFSprite(); + $i = $m->add($t); + $i->setName('mouse'); + + $g = new SWFGradient(); + $g->addEntry(0, 0xff, 0xff, 0xff, 0xff); + $g->addEntry(0.1, 0xff, 0xff, 0xff, 0xff); + $g->addEntry(0.5, 0xff, 0xff, 0xff, 0x5f); + $g->addEntry(1.0, 0xff, 0xff, 0xff, 0); + + // gradient shape thing + $s = new SWFShape(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.03); + $s->setRightFill($f); + $s->movePenTo(-600, -600); + $s->drawLine(1200, 0); + $s->drawLine(0, 1200); + $s->drawLine(-1200, 0); + $s->drawLine(0, -1200); + + // need to make this a sprite so we can multColor it + $p = new SWFSprite(); + $p->add($s); + $p->nextFrame(); + + // put the shape in here, each frame a different color + $q = new SWFSprite(); + $q->add(new SWFAction("gotoFrame(random(7)+1); stop();")); + $i = $q->add($p); + + $i->multColor(1.0, 1.0, 1.0); + $q->nextFrame(); + $i->multColor(1.0, 0.5, 0.5); + $q->nextFrame(); + $i->multColor(1.0, 0.75, 0.5); + $q->nextFrame(); + $i->multColor(1.0, 1.0, 0.5); + $q->nextFrame(); + $i->multColor(0.5, 1.0, 0.5); + $q->nextFrame(); + $i->multColor(0.5, 0.5, 1.0); + $q->nextFrame(); + $i->multColor(1.0, 0.5, 1.0); + $q->nextFrame(); + + // finally, this one contains the action code + $p = new SWFSprite(); + $i = $p->add($q); + $i->setName('frames'); + $p->add(new SWFAction(" + +dx = (/:mousex-/:lastx)/3 + random(10)-5; +dy = (/:mousey-/:lasty)/3; +x = /:mousex; +y = /:mousey; +alpha = 100; + + ")); + $p->nextFrame(); + + $p->add(new SWFAction(" + +this.x = x; +this.y = y; +this.alpha = alpha; +x += dx; +y += dy; +dy += 3; +alpha -= 8; + + ")); + $p->nextFrame(); + + $p->add(new SWFAction("prevFrame(); play();")); + $p->nextFrame(); + + $i = $m->add($p); + $i->setName('frames'); + $m->nextFrame(); + + $m->add(new SWFAction(" + +lastx = mousex; +lasty = mousey; +mousex = /mouse.x; +mousey = /mouse.y; + +++num; + +if(num == 11) + num = 1; + +removeClip('char' & num); +duplicateClip(/frames, 'char' & num, num); + + ")); + + $m->nextFrame(); + $m->add(new SWFAction("prevFrame(); play();")); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + This simple example will handles keyboard actions. + (You'll probably have to click in the window to give it focus. + And you'll probably have to leave your mouse in the frame, too. + If you know how to give buttons focus programatically, feel free + to share, won't you?) + <example> + <title><function>swfaction</function> example</title> + <programlisting role="php"> +<?php + + /* sprite has one letter per frame */ + + $p = new SWFSprite(); + $p->add(new SWFAction("stop();")); + + $chars = "abcdefghijklmnopqrstuvwxyz". + "ABCDEFGHIJKLMNOPQRSTUVWXYZ". + "1234567890!@#$%^&*()_+-=/[]{}|;:,.<>?`~"; + + $f = new SWFFont("_sans"); + + for($n=0; $nremove($i); + $t = new SWFTextField(); + $t->setFont($f); + $t->setHeight(240); + $t->setBounds(600,240); + $t->align(SWFTEXTFIELD_ALIGN_CENTER); + $t->addString($c); + $i = $p->add($t); + $p->labelFrame($c); + $p->nextFrame(); + } + + + /* hit region for button - the entire frame */ + + $s = new SWFShape(); + $s->setFillStyle0($s->addSolidFill(0, 0, 0, 0)); + $s->drawLine(600, 0); + $s->drawLine(0, 400); + $s->drawLine(-600, 0); + $s->drawLine(0, -400); + + + /* button checks for pressed key, sends sprite to the right frame */ + + $b = new SWFButton(); + $b->addShape($s, SWFBUTTON_HIT); + + for($n=0; $naddAction(new SWFAction(" + +setTarget('/char'); +gotoFrame('$c'); + + "), SWFBUTTON_KEYPRESS($c)); + } + + $m = new SWFMovie(); + $m->setDimension(600,400); + $i = $m->add($p); + $i->setName('char'); + $i->moveTo(0,80); + + $m->add($b); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); + +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + </reference> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +--> Index: phpdoc/fr/functions/ming.xml diff -u phpdoc/fr/functions/ming.xml:1.6 phpdoc/fr/functions/ming.xml:1.7 --- phpdoc/fr/functions/ming.xml:1.6 Wed Oct 17 20:40:32 2001 +++ phpdoc/fr/functions/ming.xml Thu Oct 18 02:44:04 2001 @@ -1 +1,4255 @@ -<!-- $Revision: 1.6 $ --> <reference id="ref.ming"> <title>Ming pour Flash</title> <titleabbrev>Ming (Flash)</titleabbrev> <partintro> &warn.experimental; <sect1 id="ming.intro"> <title>Introduction</title> <simpara> Ming est une librairie open-source (LGPL) qui vous permet de créer des animations au format Flash. Ming supporte toutes les fonctionnalités de Flash 4 : les formes (shapes), les gradients, les images bitmaps (JPEG et PNG), les morphing (transformations d'une forme en une autre), les textes, actions, sprites (mini animations), le streaming MP3 et les transformations de couleurs. Le seul ajout futur est celui des événements sons. </simpara> <simpara> Ming n'est pas un acronyme. </simpara> <simpara> Notez que toutes les distances spécifiées (longueurs, distances, tailles...) sont en "twips", c'est-à-dire 20 unités par pixels. C'est plus ou moins arbitraire, car le lecteur Flash fait une mise à l'échelle avec les valeurs qui lui sont fournis dans la balise embed, ou la frame courante si la balise embed n'est pas utilisée. </simpara> <simpara> Ming propose de nombreux avantages par rapport à l'extension swf. Vous pouvez utiliser Ming sur tous les OS où vous pouvez compiler le code, tandis que swf est limité à Windows. Ming vous évite la déconcertante complexité du format SWF, en transformant les éléments des animations en objets PHP. Enfin, Ming est toujours en cours de développement et surveillé par son auteur : si vous souhaitez une nouvelle fonctionnalité, dites le lui : <ulink url="mailto:&email.ming;">&email.ming;</ulink>. </simpara> <simpara> Ming et tous les objets cités ont été ajouté en PHP 4.0.5. </simpara> </sect1> <sect1 id="ming.install"> <title>Installation</title> <para> Pour utiliser Ming avec PHP, vous devez d'abord installer la librairy Ming. Le code source et les instructions d'installation sont disponible sur la page d'accueil de Ming : <ulink url="&url.ming;">&url.ming;</ulink>, avec des exemples un tutorial et l'actualité Ming. </para> <para> Téléchargez l'archive Ming. Décompressez la et allez dans le dossier Ming. Faites "make", puis "make install". </para> <para> Cela va compiler le fichier <filename>libming.so</filename> et l'installer dans <filename>/usr/lib/</filename>, et copier <filename>ming.h</filename> into <filename>/usr/include/</filename>. Editez la ligne <literal>PREFIX=</literal> dans le fichier <filename>Makefile</filename> pour indiquer votre dossier d'installation. </para> <sect2 id="ming.install.php.unix"> <title>Compilation CGI avec PHP (Unix)</title> <para> <literallayout> mkdir <phpdir>/ext/ming cp php_ext/* <phpdir>/ext/ming cd <phpdir> ./buildconf ./configure --with-ming <other config options> Compilez et installez PHP comme d'habitude. Redémarrez votre serveur web si nécessaire. </literallayout> </para> </sect2> <sect2 id="ming.install.php_module.unix"> <title>Compilation en module avec PHP (Unix)</title> <para> téléchargez <filename>php_ming.so.gz</filename>. Décompressez le et copiez le dans votre dossier de modules PHP (vous pouvez trouver votre dossier de module PHP en utilisant la commande <command>php-config --extension-dir</command>). Ensuite, ajoutez la ligne <literal>extension=php_ming.so</literal> dans votre fichier <filename>php.ini</filename>, ou bien ajoutez <literal>dl('php_ming.so');</literal> en haut de tous vos scripts Ming. </para> </sect2> </sect1> <sect1 id="ming.use"> <title>Comment utiliser Ming</title> <simpara> Ming introduit 13 objet en PHP. Pour les utilisez, vous devez être familier avec les <link linkend="language.oop">objets</link>. </simpara> <itemizedlist> <listitem> <simpara> <function>swfmovie</function>. </simpara> </listitem> <listitem> <simpara> <function>swfshape</function>. </simpara> </listitem> <listitem> <simpara> <function>swfdisplayitem</function>. </simpara> </listitem> <listitem> <simpara> <function>swfgradient</function>. </simpara> </listitem> <listitem> <simpara> <function>swfbitmap</function>. </simpara> </listitem> <listitem> <simpara> <function>swffill</function>. </simpara> </listitem> <listitem> <simpara> <function>swfmorph</function>. </simpara> </listitem> <listitem> <simpara> <function>swftext</function>. </simpara> </listitem> <listitem> <simpara> <function>swffont</function>. </simpara> </listitem> <listitem> <simpara> <function>swftextfield</function>. </simpara> </listitem> <listitem> <simpara> <function>swfsprite</function>. </simpara> </listitem> <listitem> <simpara> <function>swfbutton</function>. </simpara> </listitem> <listitem> <simpara> <function>swfaction</function>. </simpara> </listitem> </itemizedlist> </sect1> </partintro><!-- SWFMovie --> <refentry id="function.swfmovie"> <refnamediv> <refname>SWFMovie</refname> <refpurpose>Crée un objet 'animation'.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfmovie</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie</function> Crée un objet 'animation', représentant une animation Flash version 4. </para> <simpara> SWFMovie a les méthodes suivantes : <function>swfmovie->output</function>,<function>swfmovie->save</function>, <function>swfmovie->add</function>, <function>swfmovie->remove</function>, <function>swfmovie->nextframe</function>, <function>swfmovie->setbackground</function>, <function>swfmovie->setrate</function>, <function>swfmovie->setdimension</function>, <function>swfmovie->setframes</function> et <function>swfmovie->streammp3</function>. </simpara> <simpara> Des exemples d'utilisation dans : <function>swfdisplayitem->rotateto</function>, <function>swfshape->setline</function>, <function>swfshape->addfill</function>... En fait, tous les exemples utilisent cet objet. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.output"> <refnamediv> <refname>SWFMovie->output</refname> <refpurpose>Envoie votre animation au navigateur.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->output</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->output</function> envoie votre animation au navigateur. En PHP, faîte le précéder de la fonction <function>header</function>. <programlisting role="php"><?php header('Content-type: application/x-shockwave-flash');?> </programlisting> Cela indique au navigateur que l'animation qui arrive est en Flash. </para> <simpara> Voir aussi <function>swfmovie->save</function>. </simpara> <simpara> Des exemples d'utilisation dans : <function>swfmovie->streammp3</function>, <function>swfdisplayitem->rotateto</function>, <function>swfaction</function>... En fait, tous les exemples utilisent cette méthode. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.save"> <refnamediv> <refname>SWFMovie->save</refname> <refpurpose>Sauve dans un fichier.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->save</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->save</function> sauve votre animation dans le fichier <parameter>filename</parameter>. </para> <simpara> Voir aussi <function>swfmovie->output</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.add"> <refnamediv> <refname>SWFMovie->add</refname> <refpurpose>Ajoute un objet dans une animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->add</function></funcdef> <paramdef>ressource <parameter>instance</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->add</function> ajoute l'objet <parameter>instance</parameter> dans l'animation courante. <parameter>instance</parameter> peut être de n'importe quel type : forme (shape), texte (text), police (font), etc... Ils doivent être ajouté à une animation pour être utilisé. </para> <para> Pour les objets affichables (formes, textes, boutons, sprites), <function>swfmovie->add</function> retourne un objet <function>swfdisplayitem</function> de la liste d'affichage. Ainsi, vous pouvez ajouter la même forme plusieurs fois dans la même animation, et obtenir des ressources différentes pour chaque instance. </para> <simpara> Voir aussi tous les autres objets et <function>swfmovie->remove</function> </simpara> <simpara> Des exemples d'utilisation dans : <function>swfdisplayitem->rotateto</function> et <function>swfshape->addfill</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.remove"> <refnamediv> <refname>SWFMovie->remove</refname> <refpurpose>Supprime un objet d'une animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->remove</function></funcdef> <paramdef>ressource <parameter>instance</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->remove</function> supprime l'objet <parameter>instance</parameter> de la liste d'affichage, pour l'animation courante. L'objet ne sera plus disponible pour être affiché ou utilisé. </para> <simpara> Voir aussi <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfmovie.setbackground"> <refnamediv> <refname>SWFMovie->setbackground</refname> <refpurpose>Modifie la couleur de fond.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setbackground</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->setbackground</function> modifie la couleur de fond. Pourquoi est-ce que cette fonction n'accepte pas de canal alpha? (réflechissez quelques instants :-) ). En fait, cela ne serait pas si stupide : vous pouvez laisser apercevoir le fond HTML à travers l'animation. Il y a un moyen de faire cela, mais cela ne fonctionne qu'avec IE 4. Recherchez sur le site de <ulink url="&url.macromedia;">&url.macromedia;</ulink> pour plus de détails. </para> </refsect1> </refentry> <refentry id="function.swfmovie.setrate"> <refnamediv> <refname>SWFMovie->setrate</refname> <refpurpose>Modifie la vitesse de l'animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setrate</function></funcdef> <paramdef>int <parameter>rate</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->setrate</function> fixe la vitesse de l'animation à <parameter>rate</parameter> images par secondes. L'animation ralentira d'elle-même si le lecteur Flash ne peut pas afficher suffisamment rapidement, à moins qu'il n'y ait du son en stream, auquel cas les images sont sacrifiées pour garder un son fluide. </para> </refsect1> </refentry> <refentry id="function.swfmovie.setdimension"> <refnamediv> <refname>SWFMovie->setdimension</refname> <refpurpose>Modifie les dimensions de l'animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setdimension</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->setdimension</function> modifie les dimensions de l'animation : <parameter>width</parameter> est la largeur et <parameter>height</parameter> la hauteur. </para> </refsect1> </refentry> <refentry id="function.swfmovie.setframes"> <refnamediv> <refname>SWFMovie->setframes</refname> <refpurpose>Modifie le nombre total d'images dans l'animation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->setframes</function></funcdef> <paramdef>string <parameter>numberofframes</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->setframes</function> modifie le nombre total d'images dans l'animation, et le fixe à <parameter>numberofframes</parameter>. </para> </refsect1> </refentry> <refentry id="function.swfmovie.nextframe"> <refnamediv> <refname>SWFMovie->nextframe</refname> <refpurpose>Passe à l'image suivante.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->nextframe</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->setframes</function> passe à l'image suivante de l'animation. </para> </refsect1> </refentry> <refentry id="function.swfmovie.streammp3"> <refnamediv> <refname>SWFMovie->streammp3</refname> <refpurpose>Envoie un fichier MP3 en streaming.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfmovie->streammp3</function></funcdef> <paramdef>string <parameter>mp3FileName</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmovie->streammp3</function> envoie le fichier MP3<parameter>mp3FileName</parameter> en stream audio. <function>swfmovie->streammp3</function> n'est pas très robuste, et se prend facilement les pieds dans le tapis (elle peut éviter la balise initiale ID3, mais c'est bien tout). Tout comme swfshape->addjpegfill(), ce n'est pas une fonction stable. Il faudra sûrement faire un objet séparé, pour gérer les types de son. </para> <para> Notez que l'animation n'est pas suffisamment intelligente pour ajouter un nombre suffisant d'images, afin de correspondre à la durée totale du stream MP3. Il vous faudra ajouter des images jusqu'à durée de la musique multiplié par le nombre d'images par secondes. </para> <para> Oui, vous pouvez utiliser Ming pour mettre un rock-'n-roll endiablé dans vos animation. Evitez d'en parler à l'RIAA ou la SACEM. <example> <title>Exemple avec <function>swfmovie->streammp3</function></title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setRate(12.0); $m->streamMp3("distortobass.mp3");// utilisez vos propres MP3// assurez-vous d'avoir les droits// 11.85 secondes avec 12.0 images par seconde = 142 frames $m->setFrames(142); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry><!-- SWFDisplayItem --> <refentry id="function.swfdisplayitem"> <refnamediv> <refname>SWFDisplayItem</refname> <refpurpose>Crée un nouvel objet d'affichage displayitem.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfdisplayitem</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem</function> crée un nouvel objet d'affichage displayitem. </para> <para> C'est là que toute l'animation prend vie. Une fois que vous avez défini une forme, un texte, un sprite ou un bouton, vous l'ajoutez à une animation, puis vous utilisez la ressource retournée pour déplacer, étirer, contracter, faire tourner ou incliner la forme. </para> <simpara> SWFDisplayItem a les méthodes suivantes : <function>swfdisplayitem->move</function>, <function>swfdisplayitem->moveto</function>, <function>swfdisplayitem->scaleto</function>, <function>swfdisplayitem->scale</function>, <function>swfdisplayitem->rotate</function>, <function>swfdisplayitem->rotateto</function>, <function>swfdisplayitem->skewxto</function>, <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewyto</function> <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->setdepth</function> <function>swfdisplayitem->remove</function>, <function>swfdisplayitem->setname</function> <function>swfdisplayitem->setratio</function>, <function>swfdisplayitem->addcolor</function> et <function>swfdisplayitem->multcolor</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.moveto"> <refnamediv> <refname>SWFDisplayItem->moveTo</refname> <refpurpose>Déplace un objet en coordonnées globales.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->moveto</function> déplace la forme courante jusqu'au point de coordonnées globales (<parameter>x</parameter>,<parameter>y</parameter>). </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->move</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.move"> <refnamediv> <refname>SWFDisplayItem->move</refname> <refpurpose>Déplace un objet en coordonnées relatives.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->move</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->move</function> déplace la forme courante de <parameter>dx</parameter> et <parameter>dy</parameter> unités, depuis sa position courante. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->moveto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.scaleto"> <refnamediv> <refname>SWFDisplayItem->scaleTo</refname> <refpurpose>Etire un objet en coordonnées globales.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->scaleto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->scaleto</function> étire un objet jusqu'au dimensions (<parameter>x</parameter>,<parameter>y</parameter>). </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->scale</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.scale"> <refnamediv> <refname>SWFDisplayItem->scale</refname> <refpurpose>Etire un objet relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->scale</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->scale</function> étire un objet de (<parameter>dx</parameter>,<parameter>dy</parameter>), à partir de sa taille courante. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->scaleto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.rotateto"> <refnamediv> <refname>SWFDisplayItem->rotateTo</refname> <refpurpose>Tourne un objet en angle absolu.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->rotateto</function></funcdef> <paramdef>double <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->rotateto</function> tourne l'objet jusqu'à l'angle absolu<parameter>degrees</parameter>, en degrés. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <para> Cet exemple amène trois chaînes tournoyantes depuis le fond de l'écran. Plutôt sympa. <example> <title>Exemple avec <function>swfdisplayitem->rotateto</function></title> <programlisting role="php"><?php $thetext = "ming!"; $f = new SWFFont("Bauhaus 93.fdb"); $m = new SWFMovie(); $m->setRate(24.0); $m->setDimension(2400, 1600); $m->setBackground(0xff, 0xff, 0xff); // Les fonctions avec un nombre d'arguments sont vraiment une bonne idées. // Sincèrement! function text($r, $g, $b, $a, $rot, $x, $y, $scale, $string) { global $f, $m; $t = new SWFText(); $t->setFont($f); $t->setColor($r, $g, $b, $a); $t->setHeight(960); $t->moveTo(-($f->getWidth($string))/2, $f->getAscent()/2); $t->addString($string); // On peut ajouter des propriétés comme pour une variable PHP standard // tant que les noms ne sont pas déjà pris. // e.g., vous ne pouvez pas utilisez $i->scale, car c'est une fonction. $i = $m->add($t); $i->x = $x; $i->y = $y; $i->rot = $rot; $i->s = $scale; $i->rotateTo($rot); $i->scale($scale, $scale); // mais les modification sont locales à une fonction, donc il faut // retourner l'objet modifié. Pas pratique... return $i; } function step($i) { $oldrot = $i->rot; $i->rot = 19*$i->rot/20; $i->x = (19*$i->x + 1200)/20; $i->y = (19*$i->y + 800)/20; $i->s = (19*$i->s + 1.0)/20; $i->rotateTo($i->rot); $i->scaleTo($i->s, $i->s); $i->moveTo($i->x, $i->y); return $i; } // Alors? Ça valait la peine, non? $i1 = text(0xff, 0x33, 0x33, 0xff, 900, 1200, 800, 0.03, $thetext); $i2 = text(0x00, 0x33, 0xff, 0x7f, -560, 1200, 800, 0.04, $thetext); $i3 = text(0xff, 0xff, 0xff, 0x9f, 180, 1200, 800, 0.001, $thetext); for($i=1; $i<=100; ++$i) { $i1 = step($i1); $i2 = step($i2); $i3 = step($i3); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <simpara> Voir aussi <function>swfdisplayitem->rotate</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.rotate"> <refnamediv> <refname>SWFDisplayItem->Rotate</refname> <refpurpose>Fait tourner une forme relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->rotate</function></funcdef> <paramdef>double <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->rotate</function> fait tourner la forme de <parameter>ddegrees</parameter> degrés, en plus de sa rotation courante. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->rotateto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewxto"> <refnamediv> <refname>SWFDisplayItem->skewXTo</refname> <refpurpose>Incline suivant les X.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewxto</function></funcdef> <paramdef>double <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->skewxto</function> modifie l'inclinaison (x-skew) à <parameter>degrees</parameter>. Si <parameter>degrees</parameter> vaut 1.0, l'angle sera de 45¡, en avant. S'il vaut plus, ce sera plus penché, et s'il vaut moins, ce sera plus droit. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewy</function> and <function>swfdisplayitem->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewx"> <refnamediv> <refname>SWFDisplayItem->skewX</refname> <refpurpose>Incline suivant les X relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewx</function></funcdef> <paramdef>double <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->skewx</function> ajoute <parameter>ddegrees</parameter> à l'inclinaison courante (x-skew). </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewy</function> and <function>swfdisplayitem->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewyto"> <refnamediv> <refname>SWFDisplayItem->skewYTo</refname> <refpurpose>Incline suivant les Y.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewyto</function></funcdef> <paramdef>double <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->skewyto</function> modifie l'inclinaison (y-skew) à <parameter>degrees</parameter>. Si <parameter>degrees</parameter> vaut 1.0, l'angle sera de 45¡, en haut. S'il vaut plus, ce sera plus penché, et s'il vaut moins, ce sera plus droit. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->skewy</function>, <function>swfdisplayitem->skewx</function> and <function>swfdisplayitem->skewxto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.skewy"> <refnamediv> <refname>SWFDisplayItem->skewY</refname> <refpurpose>Incline suivant les Y relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->skewy</function></funcdef> <paramdef>double <parameter>ddegrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->skewy</function> ajoute <parameter>ddegrees</parameter> à l'inclinaison courante (y-skew). </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->skewx</function> and <function>swfdisplayitem->skewxto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setdepth"> <refnamediv> <refname>SWFDisplayItem->setDepth</refname> <refpurpose>Modifie la place en profondeur (z-order)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setdepth</function></funcdef> <paramdef>double <parameter>depth</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->rotate</function> place l'objet à la profondeur <parameter>depth</parameter>. Par défaut, l'objet est placé au niveau où il a été ajouté dans l'animation. Les objets les plus anciens sont placés tout en bas, et les nouveaux sont superposés. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.remove"> <refnamediv> <refname>SWFDisplayItem->remove</refname> <refpurpose>Supprime un objet d'une animation</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->remove</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->remove</function> supprime cet objet de la liste d'affichage. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <simpara> Voir aussi <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setname"> <refnamediv> <refname>SWFDisplayItem->setName</refname> <refpurpose>Nomme un objet</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setname</function></funcdef> <paramdef>string <parameter>name</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->setname</function> donne à l'objet courant le nom de <parameter>name</parameter>. Cela servira à repérer les acteurs d'un script d'action. Cela ne sert qu'avec les sprites. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.setratio"> <refnamediv> <refname>SWFDisplayItem->setRatio</refname> <refpurpose>Modifie le ratio de l'objet.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->setratio</function></funcdef> <paramdef>double <parameter>ratio</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->setratio</function> modifie le ratio de l'objet, et le fixe à <parameter>ratio</parameter>. Uniquement utile pour les morphings. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <para> Cet exemple simple effectue un morphing délicat de trois cercles concentriques. <example> <title>Exemple <function>swfdisplayitem->setname</function></title> <programlisting role="php"><?php $p = new SWFMorph(); $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(0.16, 0xff, 0xff, 0xff); $g->addEntry(0.32, 0, 0, 0); $g->addEntry(0.48, 0xff, 0xff, 0xff); $g->addEntry(0.64, 0, 0, 0); $g->addEntry(0.80, 0xff, 0xff, 0xff); $g->addEntry(1.00, 0, 0, 0); $s = $p->getShape1(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.05); $s->setLeftFill($f); $s->movePenTo(-160, -120); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(0.16, 0xff, 0, 0); $g->addEntry(0.32, 0, 0, 0); $g->addEntry(0.48, 0, 0xff, 0); $g->addEntry(0.64, 0, 0, 0); $g->addEntry(0.80, 0, 0, 0xff); $g->addEntry(1.00, 0, 0, 0); $s = $p->getShape2(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.05); $f->skewXTo(1.0); $s->setLeftFill($f); $s->movePenTo(-160, -120); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m = new SWFMovie(); $m->setDimension(320, 240); $i = $m->add($p); $i->moveTo(160, 120); for($n=0; $n<=1.001; $n+=0.01) { $i->setRatio($n); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfdisplayitem.addcolor"> <refnamediv> <refname>SWFDisplayItem->addColor</refname> <refpurpose>Ajoute une couleur à une transoformation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->addcolor</function></funcdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->addcolor</function> ajoute une couleur à la transformations courante. La couleur est donnée sous la forme RGB. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfdisplayitem.multcolor"> <refnamediv> <refname>SWFDisplayItem->multColor</refname> <refpurpose>Multiplie la couleur de transformation.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfdisplayitem->multcolor</function></funcdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfdisplayitem->multcolor</function> multiplie la couleur de transformation par les valeurs données. </para> <simpara> L'objet peut être <function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function> ou <function>swfsprite</function>. Il doit avoir été ajouté à une animation avec la fonction <function>swfmovie->add</function>. </simpara> <para> Cet exemple simple modifie l'atmosphère de votre image, et en fait une scène d'Halloween (utilisez un paysage ou une image claire pour un meilleur effet) <example> <title>Exemple avec <function>swfdisplayitem->multcolor</function></title> <programlisting role="php"><?php $b = new SWFBitmap("backyard.jpg"); // Utilisez une de vos images $s = new SWFShape(); $s->setRightFill($s->addFill($b)); $s->drawLine($b->getWidth(), 0); $s->drawLine(0, $b->getHeight()); $s->drawLine(-$b->getWidth(), 0); $s->drawLine(0, -$b->getHeight()); $m = new SWFMovie(); $m->setDimension($b->getWidth(), $b->getHeight()); $i = $m->add($s); for($n=0; $n<=20; ++$n) { $i->multColor(1.0-$n/10, 1.0, 1.0); $i->addColor(0xff*$n/20, 0, 0); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry><!-- SWFShape --> <refentry id="function.swfshape"> <refnamediv> <refname>SWFShape</refname> <refpurpose>Crée une nouvelle forme.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfshape</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfshape</function> crée une nouvelle forme. </para> <simpara> SWFShape a les méthodes suivantes : <function>swfshape->setline</function>, <function>swfshape->addfill</function>, <function>swfshape->setleftfill</function>, <function>swfshape->setrightfill</function>, <function>swfshape->movepento</function>, <function>swfshape->movepen</function>, <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->drawcurveto</function> et <function>swfshape->drawcurve</function>. </simpara> <para> Ce exemple simple dessine un quadrant d'ellipse rouge. <example> <title>Exemple avec <function>swfshape</function></title> <programlisting role="php"><?php $s = new SWFShape(); $s->setLine(40, 0x7f, 0, 0); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->movePenTo(200, 200); $s->drawLineTo(6200, 200); $s->drawLineTo(6200, 4600); $s->drawCurveTo(200, 4600, 200, 200); $m = new SWFMovie(); $m->setDimension(6400, 4800); $m->setRate(12.0); $m->add($s); $m->nextFrame(); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.setline"> <refnamediv> <refname>SWFShape->setLine</refname> <refpurpose>Modifie le style de ligne de la forme.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setline</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter><optional>red</optional></parameter></paramdef> <paramdef>int <parameter><optional>green</optional></parameter></paramdef> <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfshape->setline</function> modifie le style de ligne de la forme. <parameter>width</parameter> est la largeur de la ligne. Si <parameter>width</parameter> vaut 0, le style est supprimé (et tous les autres arguments sont ignorés). Si <parameter>width</parameter> > 0, alors la couleur de la ligne devient (<parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter>). Les couleurs sont représentées en RGB. Le dernier paramètre <parameter>a</parameter> est optionnel. </para> <simpara> <function>swfshape->setline</function> accepte 1, 4 ou 5 arguments (mais jamais 3 ou 2). </simpara> <para> Vous devez déclarer un style avant de l'utiliser (voir exemple). </para> <para> Cet exemple enfantin dessine une chaîne "!#%*@", dans des couleurs marrantes et un style rigolo. <example> <title>Exemple <function>swfshape->setline</function></title> <programlisting role="php"><?php $s = new SWFShape(); $f1 = $s->addFill(0xff, 0, 0); $f2 = $s->addFill(0xff, 0x7f, 0); $f3 = $s->addFill(0xff, 0xff, 0); $f4 = $s->addFill(0, 0xff, 0); $f5 = $s->addFill(0, 0, 0xff); // erreur : il faut déclarer tous les styles avant // de les utiliser. $s->setLine(40, 0x7f, 0, 0); $s->setLine(40, 0x7f, 0x3f, 0); $s->setLine(40, 0x7f, 0x7f, 0); $s->setLine(40, 0, 0x7f, 0); $s->setLine(40, 0, 0, 0x7f); $f = new SWFFont('Techno.fdb'); $s->setRightFill($f1); $s->setLine(40, 0x7f, 0, 0); $s->drawGlyph($f, '!'); $s->movePen($f->getWidth('!'), 0); $s->setRightFill($f2); $s->setLine(40, 0x7f, 0x3f, 0); $s->drawGlyph($f, '#'); $s->movePen($f->getWidth('#'), 0); $s->setRightFill($f3); $s->setLine(40, 0x7f, 0x7f, 0); $s->drawGlyph($f, '%'); $s->movePen($f->getWidth('%'), 0); $s->setRightFill($f4); $s->setLine(40, 0, 0x7f, 0); $s->drawGlyph($f, '*'); $s->movePen($f->getWidth('*'), 0); $s->setRightFill($f5); $s->setLine(40, 0, 0, 0x7f); $s->drawGlyph($f, '@'); $m = new SWFMovie(); $m->setDimension(3000,2000); $m->setRate(12.0); $i = $m->add($s);// note la chaine est ici!!! $i->moveTo(1500-$f->getWidth("!#%*@")/2, 1000+$f->getAscent()/2); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.addfill"> <refnamediv> <refname>SWFShape->addFill</refname> <refpurpose>Ajoute un remplissage plein à la forme.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>SWFbitmap <parameter>bitmap</parameter></paramdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->addfill</function></funcdef> <paramdef>SWFGradient <parameter>gradient</parameter></paramdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfshape->addfill</function> ajoute un remplissage plein à la forme. <function>swfshape->addfill</function> accepte trois différents types d'arguments. </para> <para> <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> est une couleur (format RGB). Le dernier paramètre <parameter>a</parameter> est optionnel. </para> <para> L'argument <parameter>bitmap</parameter> est un objet <function>swfbitmap</function>. Le paramètre <parameter>flags</parameter> peut être l'un des suivants : SWFFILL_CLIPPED_BITMAP ou SWFFILL_TILED_BITMAP. Par défault, c'est SWFFILL_TILED_BITMAP. Je crois. </para> <para> L'argument <parameter>gradient</parameter> est un objet <function>swfgradient</function>. L'argument <parameter>flags</parameter> peut alors prendre l'une des valeurs suivantes : SWFFILL_RADIAL_GRADIENT ou SWFFILL_LINEAR_GRADIENT. Par défaut, c'est SWFFILL_LINEAR_GRADIENT. Cette fois ci, j'en suis sûr. </para> <para> <function>swfshape->addfill</function> retourne un objet <function>swffill</function> à utiliser avec <function>swfshape->setleftfill</function>, et <function>swfshape->setrightfill</function> décrite un peu plus loin. </para> <simpara> Voir aussi <function>swfshape->setleftfill</function> et <function>swfshape->setrightfill</function>. </simpara> <para> Ceci est un exemple simple qui affiche un cadre sur une bitmap. Ah, il y a un petit bug dans le lecteur Flash : il ne semble pas faire grand cas de la transformation de la seconde forme en morphing. Suivant les specs, la bitmap devrait s'étirer avec la forme dans cet exemple... <example> <title>Exemple avec <function>swfshape->addfill</function></title> <programlisting role="php"><?php $p = new SWFMorph(); $b = new SWFBitmap("alphafill.jpg"); // utilisez vos propres bitmaps! $width = $b->getWidth(); $height = $b->getHeight(); $s = $p->getShape1(); $f = $s->addFill($b, SWFFILL_TILED_BITMAP); $f->moveTo(-$width/2, -$height/4); $f->scaleTo(1.0, 0.5); $s->setLeftFill($f); $s->movePenTo(-$width/2, -$height/4); $s->drawLine($width, 0); $s->drawLine(0, $height/2); $s->drawLine(-$width, 0); $s->drawLine(0, -$height/2); $s = $p->getShape2(); $f = $s->addFill($b, SWFFILL_TILED_BITMAP); // ces déplacements n'ont aucun effet $f->moveTo(-$width/4, -$height/2); $f->scaleTo(0.5, 1.0); $s->setLeftFill($f); $s->movePenTo(-$width/4, -$height/2); $s->drawLine($width/2, 0); $s->drawLine(0, $height); $s->drawLine(-$width/2, 0); $s->drawLine(0, -$height); $m = new SWFMovie(); $m->setDimension($width, $height); $i = $m->add($p); $i->moveTo($width/2, $height/2); for($n=0; $n<1.001; $n+=0.03) { $i->setRatio($n); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfshape.setleftfill"> <refnamediv> <refname>SWFShape->setLeftFill</refname> <refpurpose>Modifie la couleur de rastérisation de gauche.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setleftfill</function></funcdef> <paramdef>swfgradient <parameter>fill</parameter></paramdef> </funcprototype> </funcsynopsis> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setleftfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> Tout ce sac de noeud fait qu'il y a deux couleurs de remplissage des lignes. Lorsque l'objet est rasterisé, il est pratique de savoir à l'avance quelle sont les remplissages, et le format SWF les demande. </para> <para> <function>swfshape->setleftfill</function> affecte à la couleur de rastérisation de gauche, c'est-à-dire l'intérieur d'un objet, si vous définissez les contours d'un objet dans le sens inverse des aiguilles d'une montre. L'objet de remplissage est un objet <function>swffill</function>, retourné par la fonction <function>swfshape->addfill</function> ci-dessus. </para> <para> Cela semble être le contraire lorsque vous défnissez une forme dans un morphing. Si votre navigateur crashe, essayez de placer le remplissage sur l'autre côté. </para> <simpara> Raccourci pour <literal>swfshape->setleftfill($s->addfill($r, $g, $b [, $a]));</literal>. </simpara> <simpara> Voir aussi <function>swfshape->setrightfill</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.setrightfill"> <refnamediv> <refname>SWFShape->setRightFill</refname> <refpurpose>Modifie la couleur de rastériation de droite.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setrightfill</function></funcdef> <paramdef>swfgradient <parameter>fill</parameter></paramdef> </funcprototype> </funcsynopsis> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->setrightfill</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> Voir aussi <function>swfshape->setleftfill</function>. </simpara> <simpara> Raccourci pour <literal>swfshape->setrightfill($s->addfill($r, $g, $b [, $a]));</literal>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.movepento"> <refnamediv> <refname>SWFShape->movePenTo</refname> <refpurpose>Déplace le stylo.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->movepento</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->setrightfill</function> déplace le stylo dans la forme jusqu'au coordonnées globales (<parameter>x</parameter>,<parameter>y</parameter>). </simpara> <simpara> Voir aussi <function>swfshape->movepen</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->drawlineto</function> et <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.movepen"> <refnamediv> <refname>SWFShape->movePen</refname> <refpurpose>Déplace le stylo relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->movepen</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->setrightfill</function> déplace le stylo dans la forme depuis les coordonnées (current x,current y) jusqu'au coordonnées (current x + <parameter>dx</parameter>, current y + <parameter>dy</parameter>), dans l'espace de coordonnées de la forme. </simpara> <simpara> Voir aussi <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->drawlineto</function> et <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawlineto"> <refnamediv> <refname>SWFShape->drawLineTo</refname> <refpurpose>Dessine une ligne.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawlineto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->setrightfill</function> dessine une ligne (avec le style courant de ligne, modifié par <function>swfshape->setline</function>) depuis le point courant jusqu'au point (<parameter>x</parameter>,<parameter>y</parameter>) dans l'espace de coordonnées de la forme. </simpara> <simpara> Voir aussi <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->movepen</function> et <function>swfshape->drawline</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawline"> <refnamediv> <refname>SWFShape->drawLine</refname> <refpurpose>Dessine une ligne relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawline</function></funcdef> <paramdef>int <parameter>dx</parameter></paramdef> <paramdef>int <parameter>dy</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->setrightfill</function> dessine une ligne (avec le style courant de ligne, modifié par <function>swfshape->setline</function>) depuis le point courant, et sur le déplacement de (<parameter>dx</parameter>,<parameter>dy</parameter>). </simpara> <simpara> Voir aussi <function>swfshape->movepento</function>, <function>swfshape->drawcurveto</function>, <function>swfshape->movepen</function> et <function>swfshape->drawlineto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawcurveto"> <refnamediv> <refname>SWFShape->drawCurveTo</refname> <refpurpose>Dessine une courbe.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawcurveto</function></funcdef> <paramdef>int <parameter>controlx</parameter></paramdef> <paramdef>int <parameter>controly</parameter></paramdef> <paramdef>int <parameter>anchorx</parameter></paramdef> <paramdef>int <parameter>anchory</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->drawcurveto</function> dessine une courbe quadratique (avec le style courant de ligne, modifié par <function>swfshape->setline</function>) depuis le point courant jusqu'au point (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) en utilisant (<parameter>controlx</parameter>,<parameter>controly</parameter>) comme point de contrôle. C'est-à-dire qu'il commence en allant vers le point de contrôle, puis se dirigie sur le point d'ancrrage. </simpara> <simpara> Voir aussi <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->movepento</function> et <function>swfshape->movepen</function>. </simpara> </refsect1> </refentry> <refentry id="function.swfshape.drawcurve"> <refnamediv> <refname>SWFShape->drawCurve</refname> <refpurpose>Dessine une courbe relativement.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfshape->drawcurve</function></funcdef> <paramdef>int <parameter>controldx</parameter></paramdef> <paramdef>int <parameter>controldy</parameter></paramdef> <paramdef>int <parameter>anchordx</parameter></paramdef> <paramdef>int <parameter>anchordy</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>swfshape->drawcurve</function> dessine une courbe quadratique (avec le style courant de ligne, modifié par <function>swfshape->setline</function>) depuis le point courant jusqu'au point (<parameter>anchordx</parameter>,<parameter>anchordy</parameter>) relativement au point courant, et en utilisant le point de contrôle (<parameter>controldx</parameter>,<parameter>controldy</parameter>). C'est-à-dire qu'il commence en allant vers le point de contrôle, puis se dirigie sur le point d'ancrrage. </simpara> <simpara> Voir aussi <function>swfshape->drawlineto</function>, <function>swfshape->drawline</function>, <function>swfshape->movepento</function> et <function>swfshape->movepen</function>. </simpara> </refsect1> </refentry><!-- SWFGradient --> <refentry id="function.swfgradient"> <refnamediv> <refname>SWFGradient</refname> <refpurpose>Crée un objet gradient</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfgradient</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfgradient</function> crée un nouvel objet gradient. </para> <simpara> Une fois que vous avez ajouté les couleurs à votre gradient, vous pouvez l'utiliser dans des formes, avec la fonction <function>swfshape->addfill</function>. </simpara> <simpara> SWFGradient a la méthode suivante : <function>swfgradient->addentry</function>. </simpara> <para> Cet exemple simple affiche un gradient noir-blanc comme fond, et un gradient concentrique au centre. <example> <title>Exemple avec <function>swfgradient</function></title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setDimension(320, 240); $s = new SWFShape(); // gradient noir-blanc $g = new SWFGradient(); $g->addEntry(0.0, 0, 0, 0); $g->addEntry(1.0, 0xff, 0xff, 0xff); $f = $s->addFill($g, SWFFILL_LINEAR_GRADIENT); $f->scaleTo(0.01); $f->moveTo(160, 120); $s->setRightFill($f); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m->add($s); $s = new SWFShape(); // gradient radial : rouge vers transparent $g = new SWFGradient(); $g->addEntry(0.0, 0xff, 0, 0, 0xff); $g->addEntry(1.0, 0xff, 0, 0, 0); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.005); $f->moveTo(160, 120); $s->setRightFill($f); $s->drawLine(320, 0); $s->drawLine(0, 240); $s->drawLine(-320, 0); $s->drawLine(0, -240); $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfgradient.addentry"> <refnamediv> <refname>SWFGradient->addEntry</refname> <refpurpose>Ajoute une couleur à la liste du gradient.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfgradient->addentry</function></funcdef> <paramdef>double <parameter>ratio</parameter></paramdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfgradient->addentry</function> ajoute une couleur à la liste des couleurs du gradient. <parameter>ratio</parameter> est un nombre de 0 à 1, qui indique l'ordre d'apparition des couleurs. Vous devez ajouter les couleurs dans l'ordre croissant de ratio. </para> <para> <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> représente une couleur, au format RGB. Le dernier paramètre <parameter>a</parameter> est optionnel. </para> </refsect1> </refentry><!-- SWFBitmap --> <refentry id="function.swfbitmap"> <refnamediv> <refname>SWFBitmap</refname> <refpurpose>Crée un objet bitmap</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfbitmap</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> <paramdef>int <parameter><optional>alphafilename</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbitmap</function> crée un objet bitmap à partir d'un fichier JPEG ou DBL, nommé <parameter>filename</parameter>. <parameter>alphafilename</parameter> indique un fichier de masque à utiliser comme canal alpha sur une image JPEG. </para> <note> <para> Seule les JPEG baseline (frame 0) sont supportés. Les baseline optimisée ou les JPEG progressives ne sont pas supportées. </para> </note> <simpara> SWFBitmap a les méthodes suivantes : <function>swfbitmap->getwidth</function> et <function>swfbitmap->getheight</function>. </simpara> <para> Il n'est pas possible d'importer directement des images PNG, il faut utiliser l'utilitaire de conversion <filename>png2dbl</filename> pour en faire un fichier .dbl ("define bits lossless"). La raison est que l'auteur ne souhaite pas de dépendance avec la librairie PNG. Le fichier d'autoconfiguration devrait régler ce problème, mais il n'est pas encore fait. <example> <title>Importation de fichiers PNG sous Ming</title> <programlisting role="php"><?php $s = new SWFShape(); $f = $s->addFill(new SWFBitmap("png.dbl")); $s->setRightFill($f); $s->drawLine(32, 0); $s->drawLine(0, 32); $s->drawLine(-32, 0); $s->drawLine(0, -32); $m = new SWFMovie(); $m->setDimension(32, 32); $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> Et vous pouvez ajouter un masque alpha sur une image JPEG. <example> <title>Exemple avec <function>swfbitmap</function></title> <programlisting role="php"><?php $s = new SWFShape(); //les fichiers .msk sont générés par l'utilitaire "gif2mask" $f = $s->addFill(new SWFBitmap("alphafill.jpg", "alphafill.msk")); $s->setRightFill($f); $s->drawLine(640, 0); $s->drawLine(0, 480); $s->drawLine(-640, 0); $s->drawLine(0, -480); $c = new SWFShape(); $c->setRightFill($c->addFill(0x99, 0x99, 0x99)); $c->drawLine(40, 0); $c->drawLine(0, 40); $c->drawLine(-40, 0); $c->drawLine(0, -40); $m = new SWFMovie(); $m->setDimension(640, 480); $m->setBackground(0xcc, 0xcc, 0xcc); // décide un fond à damier for($y=0; $y<480; $y+=40) { for($x=0; $x<640; $x+=80) { $i = $m->add($c); $i->moveTo($x, $y); } $y+=40; for($x=40; $x<640; $x+=80) { $i = $m->add($c); $i->moveTo($x, $y); } } $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfbitmap.getwidth"> <refnamediv> <refname>SWFBitmap->getWidth</refname> <refpurpose>Retourne la largeur d'une bitmap.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swfbitmap->getwidth</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbitmap->getwidth</function> retourne la largeur d'une bitmap, en pixels. </para> <para> Voir aussi <function>swfbitmap->getheight</function>. </para> </refsect1> </refentry> <refentry id="function.swfbitmap.getheight"> <refnamediv> <refname>SWFBitmap->getHeight</refname> <refpurpose>Retourne la hauteur d'une bitmap.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swfbitmap->getheight</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbitmap->getheight</function> retourne la hauteur d'une bitmap, en pixels. </para> <para> Voir aussi <function>swfbitmap->getwidth</function>. </para> </refsect1> </refentry><!-- SWFFill --> <refentry id="function.swffill"> <refnamediv> <refname>SWFFill</refname> <refpurpose>Crée un objet de remplissage</refpurpose> </refnamediv> <refsect1> <title>Description</title> <para> <function>swffill</function> vous permet de transformer une image bitmap ou un gradient. Les objets <function>swffill</function> sont créé par <function>swfshape->addfill</function>. </para> <simpara> SWFFill a les méthodes suivantes : <function>swffill->moveto</function>,<function>swffill->scaleto</function>, <function>swffill->rotateto</function>, <function>swffill->skewxto</function> et <function>swffill->skewyto</function>. </simpara> </refsect1> </refentry> <refentry id="function.swffill.moveto"> <refnamediv> <refname>SWFFill->moveTo</refname> <refpurpose>Déplace l'origine de l'objet SWFFill</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffill->moveto</function> déplace l'origine de la forme jusqu'au point de coordonnées globales (<parameter>x</parameter>,<parameter>y</parameter>). </para> </refsect1> </refentry> <refentry id="function.swffill.scaleto"> <refnamediv> <refname>SWFFill->scaleTo</refname> <refpurpose>Modifie l'échelle de la forme</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->scaleto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffill->scaleto</function> modifie l'échelle de la forme de <parameter>x</parameter> dans le sens des abscisses et <parameter>y</parameter> dans le sens des ordonnées. </para> </refsect1> </refentry> <refentry id="function.swffill.rotateto"> <refnamediv> <refname>SWFFill->rotateTo</refname> <refpurpose>Tourne la forme</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->rotateto</function></funcdef> <paramdef>double <parameter>degrees</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffill->rotateto</function> tourne la forme depuis sont orientation initiale jusqu'à un angle de <parameter>degrees</parameter> degrés. </para> </refsect1> </refentry> <refentry id="function.swffill.skewxto"> <refnamediv> <refname>SWFFill->skewXTo</refname> <refpurpose>Incline (abscisses)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->skewxto</function></funcdef> <paramdef>double <parameter>x</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffill->skewxto</function> incline la forme de <parameter>x</parameter> suivant l'axe des abscisses. Si <parameter>x</parameter> vaut 1.0, l'inclinaison sera de 45¡ degrés, en avant. Si <parameter>x</parameter> vaut plus, l'inclinaison sera plus forte, et sinon, la forme sera plus droite. </para> </refsect1> </refentry> <refentry id="function.swffill.skewyto"> <refnamediv> <refname>SWFFill->skewYTo</refname> <refpurpose>Incline (ordonnées)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swffill->skewyto</function></funcdef> <paramdef>double <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffill->skewyto</function> incline la forme de <parameter>y</parameter> suivant l'axe des abscisses. Si <parameter>y</parameter> vaut 1.0, l'inclinaison sera de 45¡ degrés, en avant. Si <parameter>x</parameter> vaut plus, l'inclinaison sera plus forte, et sinon, la forme sera plus droite. </para> </refsect1> </refentry><!-- SWFMorph --> <refentry id="function.swfmorph"> <refnamediv> <refname>SWFMorph</refname> <refpurpose>Crée un morphing.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfmorph</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmorph</function> crée un morphing. </para> <para> <function>swfmorph</function> s'appelle aussi "shape tween". C'est cet objet qui permet toutes ces superbes animations qui mettent à genou votre ordinateur. Joie! </para> <para> Les méthodes ici sont plutôt bizarres. Il serait tellement plus logique d'avoir seulement <literal>new SWFMorph(shape1, shape2);</literal>, mais, telles que sont les choses aujourd'hui, la deuxième forme a besoin de savoir qu'elle est l'aboutissement d'un morphing. (Tout cela, parceque Flash commence à dessiner aussitôt qu'il a les commandes de dessins. S'il conservait les descriptions de ses propres formes, et attendait leur totalité avant d'écrire, ceci et bien d'autres choses serait tellement plus simple). </para> <simpara> SWFMorph a les méthodes suivantes : <function>swfmorph->getshape1</function> et <function>swfmorph->getshape1</function>. </simpara> <para> Cet exemple simple effectue le morphing d'une gros carré rouge en un carré plus petit, bleu et bordé de noir. <example> <title>Exemple avec <function>swfmorph</function></title> <programlisting role="php"><?php $p = new SWFMorph(); $s = $p->getShape1(); $s->setLine(0,0,0,0); /* Notez que cela se fait dans l'ordre inverse de l'ordre habituel (gauche au lieu de droite), mais je n'ai aucune idée de pourquoi... */ $s->setLeftFill($s->addFill(0xff, 0, 0)); $s->movePenTo(-1000,-1000); $s->drawLine(2000,0); $s->drawLine(0,2000); $s->drawLine(-2000,0); $s->drawLine(0,-2000); $s = $p->getShape2(); $s->setLine(60,0,0,0); $s->setLeftFill($s->addFill(0, 0, 0xff)); $s->movePenTo(0,-1000); $s->drawLine(1000,1000); $s->drawLine(-1000,1000); $s->drawLine(-1000,-1000); $s->drawLine(1000,-1000); $m = new SWFMovie(); $m->setDimension(3000,2000); $m->setBackground(0xff, 0xff, 0xff); $i = $m->add($p); $i->moveTo(1500,1000); for($r=0.0; $r<=1.0; $r+=0.1) { $i->setRatio($r); $m->nextFrame(); } header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfmorph.getshape1"> <refnamediv> <refname>SWFMorph->getshape1</refname> <refpurpose>Sélectionne la forme de départ</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>mixed <function>swfmorph->getshape1</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmorph->getshape1</function> sélectionne la forme de début de morphing. <function>swfmorph->getshape1</function> retourne un objet <function>swfshape</function>. </para> </refsect1> </refentry> <refentry id="function.swfmorph.getshape2"> <refnamediv> <refname>SWFMorph->getshape2</refname> <refpurpose>Sélectionne la forme de fin</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>mixed <function>swfmorph->getshape2</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfmorph->getshape2</function> sélectionne la forme de début de morphing. <function>swfmorph->getshape2</function> retourne un objet <function>swfshape</function>. </para> </refsect1> </refentry><!-- SWFText --> <refentry id="function.swftext"> <refnamediv> <refname>SWFText</refname> <refpurpose>Crée un nouvel objet texte.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swftext</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext</function> crée un nouvel objet texte, prêt à être manipulé. </para> <simpara> SWFText a les méthodes suivantes : <function>swftext->setfont</function>, <function>swftext->setheight</function>, <function>swftext->setspacing</function>, <function>swftext->setcolor</function>, <function>swftext->moveto</function>, <function>swftext->addstring</function> et <function>swftext->getwidth</function>. </simpara> <para> Cet exemple simple va afficher la phrase "PHP fait du Flash avec Ming" sur un fond blanc. <example> <title>Exemle avec <function>swftext</function></title> <programlisting role="php"><?php $f = new SWFFont("Techno.fdb"); $t = new SWFText(); $t->setFont($f); $t->moveTo(200, 2400); $t->setColor(0xff, 0xff, 0); $t->setHeight(1200); $t->addString("PHP fait du Flash avec Ming!!"); $m = new SWFMovie(); $m->setDimension(5400, 3600); $m->add($t); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swftext.setfont"> <refnamediv> <refname>SWFText->setFont</refname> <refpurpose>Sélectionne la police courante</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setfont</function></funcdef> <paramdef>string <parameter>font</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->setfont</function> remplace la police courante par <parameter>font</parameter>. </para> </refsect1> </refentry> <refentry id="function.swftext.setheight"> <refnamediv> <refname>SWFText->setHeight</refname> <refpurpose>Modifie la hauteur de la police courante</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setheight</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->setheight</function> fixe la hauteur courante de la police courante à <parameter>height</parameter>. Par défaut, c'est 240. </para> </refsect1> </refentry> <refentry id="function.swftext.setspacing"> <refnamediv> <refname>SWFText->setSpacing</refname> <refpurpose>Modifie l'espacement de police</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setspacing</function></funcdef> <paramdef>double <parameter>spacing</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->setspacing</function> fixe l'espacement de police à <parameter>spacing</parameter><parameter>spacing</parameter>. Par défaut, c'est 1.0. 0 signifie que toutes les lettres seront écrites au même point. Cela fonctionne pas terrible, car l'avance des lettres augmente, et l'espacement entre lettre n'est pas toujours le même. Il faudra que je l'explique plus clairement. Ou bien que je corrige les erreurs. </para> </refsect1> </refentry> <refentry id="function.swftext.setcolor"> <refnamediv> <refname>SWFText->setColor</refname> <refpurpose>Modifie la couleur de la police</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->setcolor</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->setspacing</function> change la couleur de la police courante. Par défaut, c'est noir. La couleur est représentée avec la convention RGB. </para> </refsect1> </refentry> <refentry id="function.swftext.moveto"> <refnamediv> <refname>SWFText->moveTo</refname> <refpurpose>Déplace le stylo de texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->moveto</function></funcdef> <paramdef>int <parameter>x</parameter></paramdef> <paramdef>int <parameter>y</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->moveto</function> déplace le style (ou le curseur, si ça a un sens) jusqu'au coordonnées (<parameter>x</parameter>,<parameter>y</parameter>) dans l'espace de coordonnées du texte. Si <parameter>x</parameter> ou <parameter>y</parameter> vaut 0, la valeur de coordonnées de la dimension reste la même. C'est ennuyeux, et cela devrait être corrigé. </para> </refsect1> </refentry> <refentry id="function.swftext.addstring"> <refnamediv> <refname>SWFText->addString</refname> <refpurpose>Ajoute du texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->addstring</function> ajoute le texte <parameter>string</parameter> au texte courant, et le dessine. Le stylo est situé sur la ligne de base du texte, c'est-à-dire que le texte sera écrit horizontalement. </para> </refsect1> </refentry> <refentry id="function.swftext.getwidth"> <refnamediv> <refname>SWFText->getWidth</refname> <refpurpose>Calcule la longueur d'une chaîne</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftext->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftext->addstring</function> retourne la taille de la chaîne <parameter>string</parameter>, une fois qu'elle est dessinée avec la police et l'espaceement courant. </para> </refsect1> </refentry><!-- SWFFont --> <refentry id="function.swffont"> <refnamediv> <refname>SWFFont</refname> <refpurpose>Charge une police</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swffont</function></funcdef> <paramdef>string <parameter>filename</parameter></paramdef> </funcprototype> </funcsynopsis> <para> si <parameter>filename</parameter> est le nom d'un fichier FDB (i.e., si le nom de fichier se termine par ".fdb"), charge la police. </para> <para> FDB ("font definition block") est un petit utilitaire pour Flash DefineFont2 qui contient une description complète de la police. Vous pouvez créer des fichiers FDB à partir du "SWT Generator", qui est inclus avec les utilitaires makefdb - regardez dans le dossier utilitaire de Ming. </para> <para> Les polices utilisateurs ne contiennent aucune information autre que le nom de la police. On suppose que la police sera elle-même accessible au lecteur. Les polices "_serif", "_sans", et "_typewriter" doivent être universellement disponibles. Par exemple : <programlisting role="php"><?php$f = newSWFFont("_sans");?> </programlisting> vous donne la police standard "sans-serif", probablement identique à celle que vous obtenez avec le code <literal><font name="sans-serif"></literal>. </para> <para> <function>swffont</function> retourne une ressource de police, à utiliser avec les méthodes <function>swftext->setfont</function> et <function>swftextfield->setfont</function>. </para> <simpara> SWFFont a les méthodes suivantes : <function>swffont->getwidth</function>. </simpara> </refsect1> </refentry> <refentry id="function.swffont.getwidth"> <refnamediv> <refname>swffont->getwidth</refname> <refpurpose>Retourne la taille de la chaîne</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>int <function>swffont->getwidth</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swffont->getwidth</function> retourne la taille de la chaîne <parameter>string</parameter>, avec la police courante. Vous utiliserez plutôt la même méthode de l'objet <function>swftext</function>, qui utilise les paramètres de l'objet. </para> </refsect1> </refentry><!-- SWFTextField --> <refentry id="function.swftextfield"> <refnamediv> <refname>SWFTextField</refname> <refpurpose>Crée un nouveau champs texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swftextfield</function></funcdef> <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield</function> crée un nouveau champs texte. Les champs textes sont moins souples que les <function>swftext</function>, car ils ne peuvent être tournés, mis à l'échelle ou incliné, mais ils peuvent être utilisés sous forme de champs de formulaire, et ils peuvent utiliser des polices navigateur. </para> <para> Les flags optionnels modifient les comportements du champs. Ils peuvent prendre les valeurs suivantes : <itemizedlist> <listitem> <simpara> SWFTEXTFIELD_NOEDIT : indique que le champs ne doit pas être éditable. </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_PASSWORD : indique que c'est un champs mot de passe </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_DRAWBOX : dessine le contour du champs </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_MULTILINE : autorise les lignes multiples </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_WORDWRAP : autorise la mise en forme du texte </simpara> </listitem> <listitem> <simpara> SWFTEXTFIELD_NOSELECT : rend le champs non-sélectionnable </simpara> </listitem> </itemizedlist> Les flags peuvent être combinés avec l'opérateur <link linkend="language.operators.bitwise">OR</link>. Par exemple : <programlisting role="php"><?php$t = newSWFTextField(SWFTEXTFIELD_PASSWORD | SWFTEXTFIELD_NOEDIT);?> </programlisting> crée un champs de mot de passe totalement inéditable (et inutile). </para> <simpara> SWFTextField a les méthodes suivantes : <function>swftextfield->setfont</function>, <function>swftextfield->setbounds</function>, <function>swftextfield->align</function>, <function>swftextfield->setheight</function>, <function>swftextfield->setleftmargin</function>, <function>swftextfield->setrightmargin</function>, <function>swftextfield->setmargins</function>, <function>swftextfield->setindentation</function>, <function>swftextfield->setlinespacing</function>, <function>swftextfield->setcolor</function>, <function>swftextfield->setname</function> et <function>swftextfield->addstring</function>. </simpara> </refsect1> </refentry> <refentry id="function.swftextfield.setfont"> <refnamediv> <refname>SWFTextField->setFont</refname> <refpurpose>Modifie la police du champs</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setfont</function></funcdef> <paramdef>string <parameter>font</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setfont</function> remplace la police courante par la police <parameter>font</parameter> (police client?). </para> </refsect1> </refentry> <refentry id="function.swftextfield.setbounds"> <refnamediv> <refname>SWFTextField->setbounds</refname> <refpurpose>Sélectionne la largeur et hauteur du champs</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setbounds</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setbounds</function> fixe la longueu du champs à <parameter>width</parameter> et sa hauteur à <parameter>height</parameter>. Si vous ne fixez pas les bords vous-mêmes, Ming tentera de les deviner lui-même (mais ne le laissez pas faire!!). </para> </refsect1> </refentry> <refentry id="function.swftextfield.align"> <refnamediv> <refname>SWFTextField->align</refname> <refpurpose>Modifie l'alignement du texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->align</function></funcdef> <paramdef>int <parameter>alignement</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->align</function> change l'alignement du texte par <parameter>alignement</parameter>. Les valeurs valides pour <parameter>alignement</parameter> sont : SWFTEXTFIELD_ALIGN_LEFT, SWFTEXTFIELD_ALIGN_RIGHT, SWFTEXTFIELD_ALIGN_CENTER et SWFTEXTFIELD_ALIGN_JUSTIFY. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setheight"> <refnamediv> <refname>SWFTextField->setHeight</refname> <refpurpose>Modifie la hauteur de la police du champs texte.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setheight</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setheight</function> modifie la hauteur de la police du champs texte par <parameter>height</parameter>. Par défaut, c'est 240. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setleftmargin"> <refnamediv> <refname>SWFTextField->setLeftMargin</refname> <refpurpose>Modifie la marge de gauche.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setleftmargin</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setleftmargin</function> modifie la marge de gauche du champs texte à <parameter>width</parameter>. Par défaut, c'est 0. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setrightmargin"> <refnamediv> <refname>SWFTextField->setrightMargin</refname> <refpurpose>Modifie la marge de droite.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setrightmargin</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setrightmargin</function> modifie la marge de gauche du champs texte à <parameter>width</parameter>. Par défaut, c'est </para> </refsect1> </refentry> <refentry id="function.swftextfield.setmargins"> <refnamediv> <refname>SWFTextField->setMargins</refname> <refpurpose>Modifie les marges du champs texte.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setmargins</function></funcdef> <paramdef>int <parameter>left</parameter></paramdef> <paramdef>int <parameter>right</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setmargins</function> modifie les deux marges du champs texte : <parameter>left</parameter> sera la nouvelle largeur de la marge de gauche, et <parameter>right</parameter>, celle de gauche. Par défaut, elles sont toutes les deux à 0. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setindentation"> <refnamediv> <refname>SWFTextField->setindentation</refname> <refpurpose>Modifie l'indentation de la première ligne.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setindentation</function></funcdef> <paramdef>int <parameter>width</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setindentation</function> modifie l'indentation de la première ligne du champs texte, en la fixant à <parameter>width</parameter>. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setlinespacing"> <refnamediv> <refname>SWFTextField->setLineSpacing</refname> <refpurpose>Modifie l'espacement de lignes.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setlinespacing</function></funcdef> <paramdef>int <parameter>height</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setlinespacing</function> modifie l'espacement de lignes, en le fixant à <parameter>height</parameter>. Par défaut, c'est 40. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setcolor"> <refnamediv> <refname>SWFTextField->setcolor</refname> <refpurpose>Modifie la couleur du champs texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setcolor</function></funcdef> <paramdef>int <parameter>red</parameter></paramdef> <paramdef>int <parameter>green</parameter></paramdef> <paramdef>int <parameter>blue</parameter></paramdef> <paramdef>int <parameter><optional>a</optional></parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setcolor</function> modifie la couleur du champs texte, en la remplaçant par la couleur fournie. Par défaut, c'est noir opaque. Les couleurs sont représentées en convention RGB. </para> </refsect1> </refentry> <refentry id="function.swftextfield.setname"> <refnamediv> <refname>SWFTextField->setname</refname> <refpurpose>Nomme le champs texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->setname</function></funcdef> <paramdef>string <parameter>name</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setname</function> baptise le champs texte <parameter>name</parameter>. Cela servira pour les formulaires et les actions. </para> </refsect1> </refentry> <refentry id="function.swftextfield.addstring"> <refnamediv> <refname>SWFTextField->addstring</refname> <refpurpose>Ajoute au texte</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swftextfield->addstring</function></funcdef> <paramdef>string <parameter>string</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swftextfield->setname</function> concatène la chaîne <parameter>string</parameter> avec la chaîne courante. </para> </refsect1> </refentry><!-- SWFSprite --> <refentry id="function.swfsprite"> <refnamediv> <refname>SWFSprite</refname> <refpurpose>Crée un sprite</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfsprite</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfsprite</function> sont aussi connue sous le nom de "clip" : ils permettent la création d'objet animé dans une animation, avec un scénario propre. De ce fait, un sprite a les mêmes méthodes qu'une animation. </para> <simpara> <function>swfsprite</function> a les méthodes suivantes : <function>swfsprite->add</function>, <function>swfsprite->remove</function>, <function>swfsprite->nextframe</function> et <function>swfsprite->setframes</function>. </simpara> <para> Ce exemple pratique fait tourner un superbe carré rouge. <example> <title>Exemple de <function>swfsprite</function></title> <programlisting role="php"><?php $s = new SWFShape(); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->movePenTo(-500,-500); $s->drawLineTo(500,-500); $s->drawLineTo(500,500); $s->drawLineTo(-500,500); $s->drawLineTo(-500,-500); $p = new SWFSprite(); $i = $p->add($s); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $i->rotate(15); $p->nextFrame(); $m = new SWFMovie(); $i = $m->add($p); $i->moveTo(1500,1000); $i->setName("blah"); $m->setBackground(0xff, 0xff, 0xff); $m->setDimension(3000,2000); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfsprite.add"> <refnamediv> <refname>SWFSprite->add</refname> <refpurpose>Ajoute un objet à un sprite</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>mixed <function>swfsprite->add</function></funcdef> <paramdef>ressource <parameter>object</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfsprite->add</function> ajoute une <function>swfshape</function>, un <function>swfbutton</function>, un <function>swftext</function>, une <function>swfaction</function> ou une autre animation <function>swfsprite</function>. </para> <para> Pour les objets affichables (<function>swfshape</function>, <function>swfbutton</function>, <function>swftext</function>, <function>swfaction</function> or <function>swfsprite</function>), cela retourne une ressource sur l'objet dans la liste d'affichage. </para> </refsect1> </refentry> <refentry id="function.swfsprite.remove"> <refnamediv> <refname>SWFSprite->remove</refname> <refpurpose>Supprime un objet dans un sprite</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->remove</function></funcdef> <paramdef>ressource <parameter>object</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfsprite->remove</function> supprime une <function>swfshape</function>, un <function>swfbutton</function>, un <function>swftext</function>, une <function>swfaction</function> ou un <function>swfsprite</function> du sprite courant. </para> </refsect1> </refentry> <refentry id="function.swfsprite.setframes"> <refnamediv> <refname>SWFSprite->setframes</refname> <refpurpose>Fixe le nombre maximum d'image dans le sprite.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->setframes</function></funcdef> <paramdef>int <parameter>numberofframes</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfsprite->setframes</function> fixe le nombre total d'images de l'animation à <parameter>numberofframes</parameter>. </para> </refsect1> </refentry> <refentry id="function.swfsprite.nextframe"> <refnamediv> <refname>SWFSprite->nextframe</refname> <refpurpose>Va à la prochaine image du sprite.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfsprite->nextframe</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfsprite->setframes</function> se déplace à la prochaine image du sprite. </para> </refsect1> </refentry><!-- SWFButton --> <refentry id="function.swfbutton"> <refnamediv> <refname>SWFbutton</refname> <refpurpose>Crée un nouveau bouton.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfbutton</function></funcdef> <paramdef>void</paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton</function> crée un nouveau bouton. Cliquez-le, passez la souris dessus, et appelez des actions. Facile! </para> <simpara> SWFButton a les méthodes suivantes : <function>swfbutton->addshape</function>, <function>swfbutton->setup</function>, <function>swfbutton->setover</function> <function>swfbutton->setdown</function>, <function>swfbutton->sethit</function> <function>swfbutton->setaction</function> et <function>swfbutton->addaction</function>. </simpara> <para> Cet exemple simplissime vous montre comme faire un roll-over, un roll-on, un clic, un relaché de souris, et rien du tout (pas d'action). <example> <title>Exemple avec <function>swfbutton</function></title> <programlisting role="php"><?php $f = new SWFFont("_serif"); $p = new SWFSprite(); function label($string) { global $f; $t = new SWFTextField(); $t->setFont($f); $t->addString($string); $t->setHeight(200); $t->setBounds(3200,200); return $t; } function addLabel($string) { global $p; $i = $p->add(label($string)); $p->nextFrame(); $p->remove($i); } $p->add(new SWFAction("stop();")); addLabel("NO ACTION"); addLabel("SWFBUTTON_MOUSEUP"); addLabel("SWFBUTTON_MOUSEDOWN"); addLabel("SWFBUTTON_MOUSEOVER"); addLabel("SWFBUTTON_MOUSEOUT"); addLabel("SWFBUTTON_MOUSEUPOUTSIDE"); addLabel("SWFBUTTON_DRAGOVER"); addLabel("SWFBUTTON_DRAGOUT"); function rect($r, $g, $b) { $s = new SWFShape(); $s->setRightFill($s->addFill($r, $g, $b)); $s->drawLine(600,0); $s->drawLine(0,600); $s->drawLine(-600,0); $s->drawLine(0,-600); return $s; } $b = new SWFButton(); $b->addShape(rect(0xff, 0, 0), SWFBUTTON_UP | SWFBUTTON_HIT); $b->addShape(rect(0, 0xff, 0), SWFBUTTON_OVER); $b->addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(1);"), SWFBUTTON_MOUSEUP); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(2);"), SWFBUTTON_MOUSEDOWN); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(3);"), SWFBUTTON_MOUSEOVER); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(4);"), SWFBUTTON_MOUSEOUT); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(5);"), SWFBUTTON_MOUSEUPOUTSIDE); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(6);"), SWFBUTTON_DRAGOVER); $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(7);"), SWFBUTTON_DRAGOUT); $m = new SWFMovie(); $m->setDimension(4000,3000); $i = $m->add($p); $i->setName("label"); $i->moveTo(400,1900); $i = $m->add($b); $i->moveTo(400,900); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> Cet exemple simple illustre le déplacement d'un gros bouton rouge dans la fenêtre. Ce n'est pas du tirer-déposer, mais juste du tirer. <example> <title>Exemple avec <function>swfbutton->addaction</function></title> <programlisting role="php"><?php $s = new SWFShape(); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->drawLine(1000,0); $s->drawLine(0,1000); $s->drawLine(-1000,0); $s->drawLine(0,-1000); $b = new SWFButton(); $b->addShape($s, SWFBUTTON_HIT | SWFBUTTON_UP | SWFBUTTON_DOWN | SWFBUTTON_OVER); $b->addAction(new SWFAction("startDrag('/test', 0);"), SWFBUTTON_MOUSEDOWN);// '0' signifie : ne pas verrouiller la souris $b->addAction(new SWFAction("stopDrag();"), SWFBUTTON_MOUSEUP | SWFBUTTON_MOUSEUPOUTSIDE); $p = new SWFSprite(); $p->add($b); $p->nextFrame(); $m = new SWFMovie(); $i = $m->add($p); $i->setName('test'); $i->moveTo(1000,1000); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.swfbutton.addshape"> <refnamediv> <refname>SWFbutton->addShape</refname> <refpurpose>Ajoute une forme à un bouton</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->addshape</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> <paramdef>int <parameter>flags</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->addshape</function> ajoute la forme <parameter>shape</parameter> au bouton. Les valeurs possibles de <parameter>flags</parameter> sont : SWFBUTTON_UP, SWFBUTTON_OVER, SWFBUTTON_DOWN ou SWFBUTTON_HIT. SWFBUTTON_HIT n'est même pas affiché, elle désigne la région du clic d'un bouton. C'est-à-dire que tous points où le bouton est déssiné est considéré comme accessible. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setup"> <refnamediv> <refname>SWFbutton->setUp</refname> <refpurpose>Alias de SWFbutton->addShape(shape, SWFBUTTON_UP)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setup</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->setup</function> est un alias pour <literal>SWFbutton->addShape(shape, SWFBUTTON_UP)</literal>. </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setover"> <refnamediv> <refname>SWFbutton->setOver</refname> <refpurpose>Alias de addShape(shape, SWFBUTTON_OVER)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setover</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->setover</function> est un alias pour <literal>addShape(shape, SWFBUTTON_OVER)</literal>. </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setdown"> <refnamediv> <refname>SWFbutton->setDown</refname> <refpurpose>Alias de addShape(shape, SWFBUTTON_DOWN)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setdown</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->setdown</function> est un alias pour <literal>addShape(shape, SWFBUTTON_DOWN)</literal>. </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.sethit"> <refnamediv> <refname>SWFbutton->setHit</refname> <refpurpose>Alias de addShape(shape, SWFBUTTON_HIT)</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->sethit</function></funcdef> <paramdef>ressource <parameter>shape</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->sethit</function> est un alias pour <literal>addShape(shape, SWFBUTTON_HIT)</literal>. </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.addaction"> <refnamediv> <refname>SWFbutton->addAction</refname> <refpurpose>Ajoute une action au bouton</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->addaction</function></funcdef> <paramdef>ressource <parameter>action</parameter></paramdef> <paramdef>int <parameter>flags</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->setaction</function> ajoute l'action <parameter>action</parameter> (créée par <function>swfaction</function>) au bouton courant, dans les conditions précisées par <parameter>flags</parameter>. Les valeurs valides de <parameter>flags</parameter> sont : SWFBUTTON_MOUSEOVER, SWFBUTTON_MOUSEOUT, SWFBUTTON_MOUSEUP, SWFBUTTON_MOUSEUPOUTSIDE, SWFBUTTON_MOUSEDOWN, SWFBUTTON_DRAGOUT et SWFBUTTON_DRAGOVER </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry> <refentry id="function.swfbutton.setaction"> <refnamediv> <refname>SWFbutton->setAction</refname> <refpurpose>Assigne l'action du bouton</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>void <function>swfbutton->setaction</function></funcdef> <paramdef>ressource <parameter>action</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfbutton->setaction</function> assigne l'action qui sera exécutée lorsque le bouton sera cliqué. C'est un alias de <literal>addAction(shape, SWFBUTTON_MOUSEUP)</literal>. <parameter>action</parameter> est une <function>swfaction</function>. </para> <para> Voir aussi : <function>swfbutton->addshape</function> et <function>swfaction</function>. </para> </refsect1> </refentry><!-- SWFAction --> <refentry id="function.swfaction"> <refnamediv> <refname>SWFAction</refname> <refpurpose>Crée une nouvelle action.</refpurpose> </refnamediv> <refsect1> <title>Description</title> <funcsynopsis> <funcprototype> <funcdef>new <function>swfaction</function></funcdef> <paramdef>string <parameter>script</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>swfaction</function> crée une nouvelle action, et compile le script <parameter>script</parameter>. </para> <para> La syntaxe du script est basée sur le langage C, mais il utilise aussi beaucoup de notions propres à SWF : le bytecode SWF est trop simpliste pour faire l'essentiel de ce que l'on veut. Par exemple, il n'est pas possible de faire des fonctions sans descendre profondément dans les entrailles de la machine, car le bytecode de saut est écrit en dur. Pas moyen de pousser une adresse dans la pile, ou de dépiler - Chaque fonction doit savoir exactement où elle retourne. </para> <para> Alors, que reste-t-il? Le compilateur reconnaît les mots suivants : <itemizedlist> <listitem> <simpara> break </simpara> </listitem> <listitem> <simpara> for </simpara> </listitem> <listitem> <simpara> continue </simpara> </listitem> <listitem> <simpara> if </simpara> </listitem> <listitem> <simpara> else </simpara> </listitem> <listitem> <simpara> do </simpara> </listitem> <listitem> <simpara> while </simpara> </listitem> </itemizedlist> </para> <para> Il n'y a pas de type de données : toutes les valeurs de SWF sont stockées comme des chaînes de caractères. Les fonctions suivantes peuvent être utilisées dans les expressions : <variablelist> <varlistentry> <term>time()</term> <listitem> <simpara> Retourne le nombre de milli-secondes depuis le début de l'animation. </simpara> </listitem> </varlistentry> <varlistentry> <term>random(seed)</term> <listitem> <simpara> Retourne un nombre pseudo-aléatoire, entre 0 et seed. </simpara> </listitem> </varlistentry> <varlistentry> <term>length(expr)</term> <listitem> <simpara> Retourne la taille de l'expression donnée. </simpara> </listitem> </varlistentry> <varlistentry> <term>int(number)</term> <listitem> <simpara> Retourne le nombre number, arrondi à l'entier inférieur le plus proche. </simpara> </listitem> </varlistentry> <varlistentry> <term>concat(expr, expr)</term> <listitem> <simpara> Retourne la concaténation des deux expressions. </simpara> </listitem> </varlistentry> <varlistentry> <term>ord(expr)</term> <listitem> <simpara> Retourne le code ASCII du caractère expr. </simpara> </listitem> </varlistentry> <varlistentry> <term>chr(num)</term> <listitem> <simpara> Retourne le caractère pour le code ASCII num. </simpara> </listitem> </varlistentry> <varlistentry> <term>substr(string, location, length)</term> <listitem> <simpara> Retourne la sous-chaîne, extraite de string, de longueur length et commençant au caractère location. </simpara> </listitem> </varlistentry> </variablelist> </para> <para> De plus, les commandes suivantes sont accessibles : <variablelist> <varlistentry> <term>duplicateClip(clip, name, depth)</term> <listitem> <simpara> Duplique le sprite nommé clip. La nouvelle animation a le nouveau nom name et la profondeur depth. </simpara> </listitem> </varlistentry> <varlistentry> <term>removeClip(expr)</term> <listitem> <simpara> Supprime l'animation nommée expr. </simpara> </listitem> </varlistentry> <varlistentry> <term>trace(expr)</term> <listitem> <simpara> Ecrit l'expression expr dans le fichier de d'historique. Il est peut probable que le navigateur ou le lecteur ne fasse quoi que ce soit avec. </simpara> </listitem> </varlistentry> <varlistentry> <term>startDrag(target, lock, [left, top, right, bottom])</term> <listitem> <simpara> Comment à déplacer l'animation target. L'argument lock indique si le déplacement verrouille la souris (utilisez 0, &false;) ou 1 (&true;)). Les paramètres optionnels délimitent la zone de déplacement. </simpara> </listitem> </varlistentry> <varlistentry> <term>stopDrag()</term> <listitem> <simpara> Cesse le déplacement de l'animation. </simpara> </listitem> </varlistentry> <varlistentry> <term>callFrame(expr)</term> <listitem> <simpara> Appelle l'image expr comme une fonction. </simpara> </listitem> </varlistentry> <varlistentry> <term>getURL(url, target, [method])</term> <listitem> <simpara> Charge l'URL url dans l'objet target. target peut être l'image courante (je pense) ou une des valeurs magiques "_level0" (remplace l'animation courante) ou "_level1" (charge une nouvelle animation à la place de la courante). L'argument optionnel method peut être post ou get, si vous voulez envoyer des variables au serveur. </simpara> </listitem> </varlistentry> <varlistentry> <term>loadMovie(url, target)</term> <listitem> <simpara> La même chose que ci-dessus, plus ou moins. En fait, je ne sais pas trop quelle est la différence. </simpara> </listitem> </varlistentry> <varlistentry> <term>nextFrame()</term> <listitem> <simpara> Va à l'image suivante. </simpara> </listitem> </varlistentry> <varlistentry> <term>prevFrame()</term> <listitem> <simpara> Va à l'image précédente. </simpara> </listitem> </varlistentry> <varlistentry> <term>play()</term> <listitem> <simpara> Joue l'animation. </simpara> </listitem> </varlistentry> <varlistentry> <term>stop()</term> <listitem> <simpara> Cesse de jouer l'animation. </simpara> </listitem> </varlistentry> <varlistentry> <term>toggleQuality()</term> <listitem> <simpara> Passe de haute en basse qualité (et vice-versa). </simpara> </listitem> </varlistentry> <varlistentry> <term>stopSounds()</term> <listitem> <simpara> Cesse de jouer les sons. </simpara> </listitem> </varlistentry> <varlistentry> <term>gotoFrame(num)</term> <listitem> <simpara> Va à l'image numéro num. Les images sont numérotées à partir de 0. </simpara> </listitem> </varlistentry> <varlistentry> <term>gotoFrame(name)</term> <listitem> <simpara> Va à l'image nommée name. Ce qui est carrément cool, car les labels ne sont pas encore supportés pour les images. </simpara> </listitem> </varlistentry> <varlistentry> <term>setTarget(expr)</term> <listitem> <simpara> Modifie le contexte de l'action. C'est ce qu'ils disent, mais je n'ai pas trop d'idées là-dessus. </simpara> </listitem> </varlistentry> </variablelist> Et il y a un truc bizarre : l'expression frameLoaded(num) peut être utilise dans les conditions if et dans les boucles while pour vérifier si une image a été chargée. En tous cas, c'est ce qu'il est supposé faire, mais je ne l'ai jamais testé, et je doute sérieusement que cela fonctionne. Vous pouvez utiliser plutôt /:framesLoaded à la place. </para> <para> Les sprites ont des propriétés. Vous pouvez les lire toutes (vraiment?), en modifier quelques unes. Les voici : <itemizedlist> <listitem> <simpara> x </simpara> </listitem> <listitem> <simpara> y </simpara> </listitem> <listitem> <simpara> xScale </simpara> </listitem> <listitem> <simpara> yScale </simpara> </listitem> <listitem> <simpara> currentFrame - (lecture seule) </simpara> </listitem> <listitem> <simpara> totalFrames - (lecture seule) </simpara> </listitem> <listitem> <simpara> alpha - Niveau de transparence </simpara> </listitem> <listitem> <simpara> visible - 1=on, 0=off (?) </simpara> </listitem> <listitem> <simpara> width - (lecture seule) </simpara> </listitem> <listitem> <simpara> height - (lecture seule) </simpara> </listitem> <listitem> <simpara> rotation </simpara> </listitem> <listitem> <simpara> target - (lecture seule) (???) </simpara> </listitem> <listitem> <simpara> framesLoaded - (lecture seule) </simpara> </listitem> <listitem> <simpara> name </simpara> </listitem> <listitem> <simpara> dropTarget - (lecture seule) (???) </simpara> </listitem> <listitem> <simpara> url - (lecture seule) (???) </simpara> </listitem> <listitem> <simpara> highQuality - 1=high, 0=low (?) </simpara> </listitem> <listitem> <simpara> focusRect - (???) </simpara> </listitem> <listitem> <simpara> soundBufTime - (???) </simpara> </listitem> </itemizedlist> Modifier la position d'un sprite est aussi simple que <literal>/box.x = 100;</literal>. Pourquoi le slash initial? C'est comme cela que Flash garde la trace des sprites dans les animations, un peu comme des fichiers sous Unix. Si le sprite qui s'appelle box a lui-même un autre sprite appelé biff, vous pouvez y accéder avec la commande <literal>/box/biff.x = 100;</literal>. En tous cas, ça marche pour moi. Corrigez moi si c'est faux!. </para> <para> Cet exemple simple va déplacer le gros carré rouge dans la fenêtre. <example> <title>Exemple avec <function>swfaction</function></title> <programlisting role="php"><?php $s = new SWFShape(); $f = $s->addFill(0xff, 0, 0); $s->setRightFill($f); $s->movePenTo(-500,-500); $s->drawLineTo(500,-500); $s->drawLineTo(500,500); $s->drawLineTo(-500,500); $s->drawLineTo(-500,-500); $p = new SWFSprite(); $i = $p->add($s); $i->setDepth(1); $p->nextFrame(); for($n=0; $n<5; ++$n) { $i->rotate(-15); $p->nextFrame(); } $m = new SWFMovie(); $m->setBackground(0xff, 0xff, 0xff); $m->setDimension(6000,4000); $i = $m->add($p); $i->setDepth(1); $i->moveTo(-500,2000); $i->setName("box"); $m->add(new SWFAction("/box.x += 3;")); $m->nextFrame(); $m->add(new SWFAction("gotoFrame(0); play();")); $m->nextFrame(); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> Cet exemple suit votre souris sur l'écran. <example> <title>Exemple avec <function>swfaction</function></title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setRate(36.0); $m->setDimension(1200, 800); $m->setBackground(0, 0, 0); /* sprite de suivi de souris : vide, mais il suit la souris de manière à ce que nous connaissions ses coordonnées*/ $i = $m->add(new SWFSprite()); $i->setName('mouse'); $m->add(new SWFAction(" startDrag('/mouse', 1); /* '1' signifie verrouiller la souris */ ")); /* On peut tout simplement virer l'anti-aliasing, car il n'y a que des gros carrés, finalement */ $m->add(new SWFAction(" this.quality = 0; ")); /* boîte de morphing */ $r = new SWFMorph(); $s = $r->getShape1(); /* Notez que ce n'est pas pratique pour les formes habituelles. Aucune idée de pourquoi */ $s->setLeftFill($s->addFill(0xff, 0xff, 0xff)); $s->movePenTo(-40, -40); $s->drawLine(80, 0); $s->drawLine(0, 80); $s->drawLine(-80, 0); $s->drawLine(0, -80); $s = $r->getShape2(); $s->setLeftFill($s->addFill(0x00, 0x00, 0x00)); $s->movePenTo(-1, -1); $s->drawLine(2, 0); $s->drawLine(0, 2); $s->drawLine(-2, 0); $s->drawLine(0, -2); /* sprite contenant la boîte de morphing - c'est juste un scénario avec une boîte de morphing */ $box = new SWFSprite(); $box->add(new SWFAction(" stop(); ")); $i = $box->add($r); for($n=0; $n<=20; ++$n) { $i->setRatio($n/20); $box->nextFrame(); } /* ce conteneur nous permet d'utiliser la même action plusieurs fois */ $cell = new SWFSprite(); $i = $cell->add($box); $i->setName('box'); $cell->add(new SWFAction(" setTarget('box'); /* ...x signifie abscisse du parent, c'est-à-dire (..).x */ dx = (/mouse.x + random(6)-3 - ...x)/5; dy = (/mouse.y + random(6)-3 - ...y)/5; gotoFrame(int(dx*dx + dy*dy)); ")); $cell->nextFrame(); $cell->add(new SWFAction(" gotoFrame(0); play(); ")); $cell->nextFrame(); /* finalement, ajoutons quelques cellules à l'animation */ for($x=0; $x<12; ++$x) { for($y=0; $y8; ++$y) { $i = $m->add($cell); $i->moveTo(100*$x+50, 100*$y+50); } } $m->nextFrame(); $m->add(new SWFAction(" gotoFrame(1); play(); ")); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> La même chose que ci-dessus, mais en couleurs. <example> <title>Exemple avec <function>swfaction</function></title> <programlisting role="php"><?php $m = new SWFMovie(); $m->setDimension(11000, 8000); $m->setBackground(0x00, 0x00, 0x00); $m->add(new SWFAction("this.quality = 0;/frames.visible = 0;startDrag('/mouse', 1); ")); // sprite de suivi de souris $t = new SWFSprite(); $i = $m->add($t); $i->setName('mouse'); $g = new SWFGradient(); $g->addEntry(0, 0xff, 0xff, 0xff, 0xff); $g->addEntry(0.1, 0xff, 0xff, 0xff, 0xff); $g->addEntry(0.5, 0xff, 0xff, 0xff, 0x5f); $g->addEntry(1.0, 0xff, 0xff, 0xff, 0); // gradient $s = new SWFShape(); $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); $f->scaleTo(0.03); $s->setRightFill($f); $s->movePenTo(-600, -600); $s->drawLine(1200, 0); $s->drawLine(0, 1200); $s->drawLine(-1200, 0); $s->drawLine(0, -1200); // on en fait un sprite pour utiliser la fonction multColor() $p = new SWFSprite(); $p->add($s); $p->nextFrame(); // Ajoute la forme ici, chaque forme dans une couleur différente $q = new SWFSprite(); $q->add(new SWFAction("gotoFrame(random(7)+1); stop();")); $i = $q->add($p); $i->multColor(1.0, 1.0, 1.0); $q->nextFrame(); $i->multColor(1.0, 0.5, 0.5); $q->nextFrame(); $i->multColor(1.0, 0.75, 0.5); $q->nextFrame(); $i->multColor(1.0, 1.0, 0.5); $q->nextFrame(); $i->multColor(0.5, 1.0, 0.5); $q->nextFrame(); $i->multColor(0.5, 0.5, 1.0); $q->nextFrame(); $i->multColor(1.0, 0.5, 1.0); $q->nextFrame(); // Enfin, le code de l'action $p = new SWFSprite(); $i = $p->add($q); $i->setName('frames'); $p->add(new SWFAction("dx = (/:mousex-/:lastx)/3 + random(10)-5;dy = (/:mousey-/:lasty)/3;x = /:mousex;y = /:mousey;alpha = 100; ")); $p->nextFrame(); $p->add(new SWFAction("this.x = x;this.y = y;this.alpha = alpha;x += dx;y += dy;dy += 3;alpha -= 8; ")); $p->nextFrame(); $p->add(new SWFAction("prevFrame(); play();")); $p->nextFrame(); $i = $m->add($p); $i->setName('frames'); $m->nextFrame(); $m->add(new SWFAction("lastx = mousex;lasty = mousey;mousex = /mouse.x;mousey = /mouse.y;++num;if(num == 11) num = 1;removeClip('char' & num);duplicateClip(/frames, 'char' & num, num); ")); $m->nextFrame(); $m->add(new SWFAction("prevFrame(); play();")); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> <para> Cet exemple simple gère le clavier (vous devrez cependant cliquer dans la fenêtre pour lui donner le focus, et vous devrez aussi laisser votre souris dans la fenêtre. Si vous savez comment faire cela automatiquement, dites-le moi!). <example> <title>Exemple avec <function>swfaction</function></title> <programlisting role="php"><?php /* Le sprite n'a qu'une lettre par image */ $p = new SWFSprite(); $p->add(new SWFAction("stop();")); $chars = "abcdefghijklmnopqrstuvwxyz". "ABCDEFGHIJKLMNOPQRSTUVWXYZ". "1234567890!@#$%^&*()_+-=/[]{}|;:,.<>?`~"; $f = new SWFFont("_sans"); for($n=0; $n < strlen($chars); ++$n) { $c = substr($chars, $n, 1); if($i) $p->remove($i); $t = new SWFTextField(); $t->setFont($f); $t->setHeight(240); $t->setBounds(600,240); $t->align(SWFTEXTFIELD_ALIGN_CENTER); $t->addString($c); $i = $p->add($t); $p->labelFrame($c); $p->nextFrame(); } /* région de clic pour le bouton : toute la fenêtre */ $s = new SWFShape(); $s->setFillStyle0($s->addSolidFill(0, 0, 0, 0)); $s->drawLine(600, 0); $s->drawLine(0, 400); $s->drawLine(-600, 0); $s->drawLine(0, -400); /* le bouton s'assure des touches pressées, et envoie le bon sprite à l'image de droite */ $b = new SWFButton(); $b->addShape($s, SWFBUTTON_HIT); for($n=0; $naddAction(new SWFAction("setTarget('/char');gotoFrame('$c'); "), SWFBUTTON_KEYPRESS($c)); } $m = new SWFMovie(); $m->setDimension(600,400); $i = $m->add($p); $i->setName('char'); $i->moveTo(0,80); $m->add($b); header('Content-type: application/x-shockwave-flash'); $m->output();?> </programlisting> </example> </para> </refsect1> </refentry> </reference><!-- Keep this comment at the end of the fileLocal variables:mode: sgmlsgml-omittag:tsgml-shorttag:tsgml-minimize-attributes:nilsgml-always-quote-attributes:tsgml-indent-step:1sgml-indent-data:tsgml-parent-document:nilsgml-default-dtd-file:"../../manual.ced"sgml-exposed-tags:nilsgml-local-catalogs:nilsgml-local-ecat-files:nilEnd:--> \ No newline at end of file + <reference id="ref.ming"> + <title>Ming pour Flash</title> + <titleabbrev>Ming (Flash)</titleabbrev> + <partintro> + &warn.experimental; + <sect1 id="ming.intro"> + <title>Introduction</title> + <simpara> + Ming est une librairie open-source (LGPL) qui vous permet de + créer des animations au format Flash. Ming supporte toutes les + fonctionnalités de Flash 4 : les formes (shapes), les gradients, + les images bitmaps (JPEG et PNG), les morphing (transformations + d'une forme en une autre), les textes, actions, sprites (mini animations), + le streaming MP3 et les transformations de couleurs. Le seul ajout futur + est celui des événements sons. + </simpara> + <simpara> + Ming n'est pas un acronyme. + </simpara> + <simpara> + Notez que toutes les distances spécifiées (longueurs, distances, + tailles...) sont en "twips", c'est-à-dire 20 unités par pixels. + C'est plus ou moins arbitraire, car le lecteur Flash fait une + mise à l'échelle avec les valeurs qui lui sont fournis dans la + balise embed, ou la frame courante si la balise embed n'est pas + utilisée. + </simpara> + <simpara> + Ming propose de nombreux avantages par rapport à l'extension swf. + Vous pouvez utiliser Ming sur tous les OS où vous pouvez compiler + le code, tandis que swf est limité à Windows. Ming vous évite + la déconcertante complexité du format SWF, en transformant les + éléments des animations en objets PHP. Enfin, Ming est toujours + en cours de développement et surveillé par son auteur : si vous + souhaitez une nouvelle fonctionnalité, dites le lui : + <ulink url="mailto:&email.ming;">&email.ming;</ulink>. + </simpara> + <simpara> + Ming et tous les objets cités ont été ajouté en PHP 4.0.5. + </simpara> + </sect1> + + <sect1 id="ming.install"> + <title>Installation</title> + <para> + Pour utiliser Ming avec PHP, vous devez d'abord installer la + librairy Ming. Le code source et les instructions d'installation + sont disponible sur la page d'accueil de Ming : + <ulink url="&url.ming;">&url.ming;</ulink>, avec des exemples + un tutorial et l'actualité Ming. + </para> + <para> + Téléchargez l'archive Ming. Décompressez la et allez dans + le dossier Ming. Faites "make", puis "make install". + </para> + <para> + Cela va compiler le fichier <filename>libming.so</filename> et + l'installer dans <filename>/usr/lib/</filename>, et copier + <filename>ming.h</filename> into <filename>/usr/include/</filename>. + Editez la ligne <literal>PREFIX=</literal> dans le fichier + <filename>Makefile</filename> pour indiquer votre dossier + d'installation. + </para> + <sect2 id="ming.install.php.unix"> + <title>Compilation CGI avec PHP (Unix)</title> + <para> + <literallayout> + mkdir <phpdir>/ext/ming + cp php_ext/* <phpdir>/ext/ming + cd <phpdir> + ./buildconf + ./configure --with-ming <other config options> + Compilez et installez PHP comme d'habitude. + Redémarrez votre serveur web si nécessaire. + </literallayout> + </para> + </sect2> + <sect2 id="ming.install.php_module.unix"> + <title>Compilation en module avec PHP (Unix)</title> + <para> + téléchargez <filename>php_ming.so.gz</filename>. + Décompressez le et copiez le dans votre dossier de modules + PHP (vous pouvez trouver votre dossier de module PHP + en utilisant la commande <command>php-config --extension-dir</command>). + Ensuite, ajoutez la ligne <literal>extension=php_ming.so</literal> + dans votre fichier <filename>php.ini</filename>, ou bien ajoutez + <literal>dl('php_ming.so');</literal> en haut de tous vos scripts + Ming. + </para> + </sect2> + </sect1> + <sect1 id="ming.use"> + <title>Comment utiliser Ming</title> + <simpara> + Ming introduit 13 objet en PHP. Pour les utilisez, vous devez être + familez avec les <link linkend="language.oop">objets</link>. + </simpara> + <itemizedlist> + <listitem> + <simpara> + <function>swfmovie</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfshape</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfdisplayitem</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfgradient</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfbitmap</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swffill</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfmorph</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swftext</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swffont</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swftextfield</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfsprite</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfbutton</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <function>swfaction</function>. + </simpara> + </listitem> + </itemizedlist> + </sect1> + </partintro> + +<!-- SWFMovie --> + + <refentry id="function.swfmovie"> + <refnamediv> + <refname>SWFMovie</refname> + <refpurpose>Crée un objet 'animation'.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfmovie</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie</function> Crée un objet 'animation', + représentant une animation Flash version 4. + </para> + <simpara> + SWFMovie a les méthodes suivantes : + <function>swfmovie->output</function>,<function>swfmovie->save</function>, + <function>swfmovie->add</function>, <function>swfmovie->remove</function>, + <function>swfmovie->nextframe</function>, <function>swfmovie->setbackground</function>, + <function>swfmovie->setrate</function>, <function>swfmovie->setdimension</function>, + <function>swfmovie->setframes</function> et <function>swfmovie->streammp3</function>. + </simpara> + <simpara> + Des exemples d'utilisation dans : + <function>swfdisplayitem->rotateto</function>, <function>swfshape->setline</function>, + <function>swfshape->addfill</function>... En fait, tous les exemples + utilisent cet objet. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.output"> + <refnamediv> + <refname>SWFMovie->output</refname> + <refpurpose>Envoie votre animation au navigateur.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->output</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->output</function> envoie votre animation + au navigateur. En PHP, faîte le précéder de la fonction + <function>header</function>. + <programlisting role="php"> +<?php +header('Content-type: application/x-shockwave-flash'); +?> + </programlisting> + Cela indique au navigateur que l'animation qui arrive est en + Flash. + </para> + <simpara> + Voir aussi + <function>swfmovie->save</function>. + </simpara> + <simpara> + Des exemples d'utilisation dans : + <function>swfmovie->streammp3</function>, + <function>swfdisplayitem->rotateto</function>, + <function>swfaction</function>... + En fait, tous les exemples utilisent cette méthode. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.save"> + <refnamediv> + <refname>SWFMovie->save</refname> + <refpurpose>Sauve dans un fichier.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->save</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->save</function> sauve votre animation dans + le fichier <parameter>filename</parameter>. + </para> + <simpara> + Voir aussi + <function>swfmovie->output</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.add"> + <refnamediv> + <refname>SWFMovie->add</refname> + <refpurpose>Ajoute un objet dans une animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->add</function></funcdef> + <paramdef>ressource <parameter>instance</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->add</function> ajoute l'objet <parameter>instance</parameter> + dans l'animation courante. <parameter>instance</parameter> peut être de + n'importe quel type : forme (shape), texte (text), police (font), etc... + Ils doivent être ajouté à une animation pour + être utilisé. + </para> + <para> + Pour les objets affichables (formes, textes, boutons, sprites), + <function>swfmovie->add</function> retourne un objet + <function>swfdisplayitem</function> de la liste d'affichage. Ainsi, + vous pouvez ajouter la même forme plusieurs fois dans la même + animation, et obtenir des ressources différentes pour chaque + instance. + </para> + <simpara> + Voir aussi tous les autres objets et <function>swfmovie->remove</function> + </simpara> + <simpara> + Des exemples d'utilisation dans : + <function>swfdisplayitem->rotateto</function> et + <function>swfshape->addfill</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.remove"> + <refnamediv> + <refname>SWFMovie->remove</refname> + <refpurpose>Supprime un objet d'une animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->remove</function></funcdef> + <paramdef>ressource <parameter>instance</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->remove</function> supprime l'objet + <parameter>instance</parameter> de la liste d'affichage, pour + l'animation courante. L'objet ne sera plus disponible pour + être affiché ou utilisé. + </para> + <simpara> + Voir aussi + <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setbackground"> + <refnamediv> + <refname>SWFMovie->setbackground</refname> + <refpurpose>Modifie la couleur de fond.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setbackground</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->setbackground</function> modifie la couleur de fond. + Pourquoi est-ce que cette fonction n'accepte pas de canal alpha? + (réflechissez quelques instants :-) ). En fait, cela ne serait pas si + stupide : vous pouvez laisser apercevoir le fond HTML à travers l'animation. + Il y a un moyen de faire cela, mais cela ne fonctionne qu'avec IE 4. + Recherchez sur le site de <ulink url="&url.macromedia;">&url.macromedia;</ulink> + pour plus de détails. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setrate"> + <refnamediv> + <refname>SWFMovie->setrate</refname> + <refpurpose>Modifie la vitesse de l'animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setrate</function></funcdef> + <paramdef>int <parameter>rate</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->setrate</function> fixe la vitesse de l'animation + à <parameter>rate</parameter> images par secondes. L'animation ralentira + d'elle-même si le lecteur Flash ne peut pas afficher suffisamment rapidement, + à moins qu'il n'y ait du son en stream, auquel cas les images + sont sacrifiées pour garder un son fluide. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setdimension"> + <refnamediv> + <refname>SWFMovie->setdimension</refname> + <refpurpose>Modifie les dimensions de l'animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setdimension</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->setdimension</function> modifie les dimensions de + l'animation : <parameter>width</parameter> est la largeur et + <parameter>height</parameter> la hauteur. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.setframes"> + <refnamediv> + <refname>SWFMovie->setframes</refname> + <refpurpose>Modifie le nombre total d'images dans l'animation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->setframes</function></funcdef> + <paramdef>string <parameter>numberofframes</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->setframes</function> modifie le nombre total d'images + dans l'animation, et le fixe à <parameter>numberofframes</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.nextframe"> + <refnamediv> + <refname>SWFMovie->nextframe</refname> + <refpurpose>Passe à l'image suivante.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->nextframe</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->setframes</function> passe à l'image suivante + de l'animation. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmovie.streammp3"> + <refnamediv> + <refname>SWFMovie->streammp3</refname> + <refpurpose>Envoie un fichier MP3 en streaming.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfmovie->streammp3</function></funcdef> + <paramdef>string <parameter>mp3FileName</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmovie->streammp3</function> envoie le fichier + MP3<parameter>mp3FileName</parameter> en stream audio. + <function>swfmovie->streammp3</function> n'est pas très robuste, + et se prend facilement les pieds dans le tapis (elle peut + éviter la balise initiale ID3, mais c'est bien tout). + Tout comme swfshape->addjpegfill(), ce n'est pas + une fonction stable. Il faudra sûrement faire un objet séparé, pour + gérer les types de son. + </para> + <para> + Notez que l'animation n'est pas suffisamment intelligente pour + ajouter un nombre suffisant d'images, afin de correspondre à la durée + totale du stream MP3. Il vous faudra ajouter des images jusqu'à + durée de la musique multiplié par le nombre d'images par secondes. + </para> + <para> + Oui, vous pouvez utiliser Ming pour mettre un rock-'n-roll endiablé + dans vos animation. Evitez d'en parler à l'RIAA ou la SACEM. + <example> + <title>Exemple avec <function>swfmovie->streammp3</function></title> + <programlisting role="php"> +<?php + $m = new SWFMovie(); + $m->setRate(12.0); + $m->streamMp3("distortobass.mp3"); +// utilisez vos propres MP3 +// assurez-vous d'avoir les droits + +// 11.85 secondes avec 12.0 images par seconde = 142 frames + $m->setFrames(142); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + +<!-- SWFDisplayItem --> + + <refentry id="function.swfdisplayitem"> + <refnamediv> + <refname>SWFDisplayItem</refname> + <refpurpose>Crée un nouvel objet d'affichage displayitem.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfdisplayitem</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem</function> crée un nouvel objet d'affichage displayitem. + </para> + <para> + C'est là que toute l'animation prend vie. Une fois que vous avez + défini une forme, un texte, un sprite ou un bouton, vous + l'ajoutez à une animation, puis vous utilisez la ressource + retournée pour déplacer, étirer, contracter, faire + tourner ou incliner la forme. + </para> + <simpara> + SWFDisplayItem a les méthodes suivantes : + <function>swfdisplayitem->move</function>, + <function>swfdisplayitem->moveto</function>, <function>swfdisplayitem->scaleto</function>, + <function>swfdisplayitem->scale</function>, <function>swfdisplayitem->rotate</function>, + <function>swfdisplayitem->rotateto</function>, <function>swfdisplayitem->skewxto</function>, + <function>swfdisplayitem->skewx</function>, <function>swfdisplayitem->skewyto</function> + <function>swfdisplayitem->skewyto</function>, <function>swfdisplayitem->setdepth</function> + <function>swfdisplayitem->remove</function>, <function>swfdisplayitem->setname</function> + <function>swfdisplayitem->setratio</function>, <function>swfdisplayitem->addcolor</function> + et <function>swfdisplayitem->multcolor</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.moveto"> + <refnamediv> + <refname>SWFDisplayItem->moveTo</refname> + <refpurpose>Déplace un objet en coordonnées globales.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->moveto</function> déplace la forme courante + jusqu'au point de coordonnées globales + (<parameter>x</parameter>,<parameter>y</parameter>). + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->move</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.move"> + <refnamediv> + <refname>SWFDisplayItem->move</refname> + <refpurpose>Déplace un objet en coordonnées relatives.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->move</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->move</function> déplace la forme courante + de <parameter>dx</parameter> et <parameter>dy</parameter> unités, depuis + sa position courante. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->moveto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.scaleto"> + <refnamediv> + <refname>SWFDisplayItem->scaleTo</refname> + <refpurpose>Etire un objet en coordonnées globales.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->scaleto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->scaleto</function> étire un objet + jusqu'au dimensions (<parameter>x</parameter>,<parameter>y</parameter>). + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->scale</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.scale"> + <refnamediv> + <refname>SWFDisplayItem->scale</refname> + <refpurpose>Etire un objet relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->scale</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->scale</function> étire un objet + de (<parameter>dx</parameter>,<parameter>dy</parameter>), à partir + de sa taille courante. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->scaleto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.rotateto"> + <refnamediv> + <refname>SWFDisplayItem->rotateTo</refname> + <refpurpose>Tourne un objet en angle absolu.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->rotateto</function></funcdef> + <paramdef>double <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->rotateto</function> tourne l'objet jusqu'à + l'angle absolu<parameter>degrees</parameter>, en degrés. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <para> + Cet exemple amène trois chaînes tournoyantes depuis le fond de + l'écran. Plutôt sympa. + <example> + <title>Exemple avec <function>swfdisplayitem->rotateto</function></title> + <programlisting role="php"> +<?php + $thetext = "ming!"; + + $f = new SWFFont("Bauhaus 93.fdb"); + + $m = new SWFMovie(); + $m->setRate(24.0); + $m->setDimension(2400, 1600); + $m->setBackground(0xff, 0xff, 0xff); + + // Les fonctions avec un nombre d'arguments sont vraiment une bonne idées. + // Sincèrement! + + function text($r, $g, $b, $a, $rot, $x, $y, $scale, $string) + { + global $f, $m; + + $t = new SWFText(); + $t->setFont($f); + $t->setColor($r, $g, $b, $a); + $t->setHeight(960); + $t->moveTo(-($f->getWidth($string))/2, $f->getAscent()/2); + $t->addString($string); + + // On peut ajouter des propriétés comme pour une variable PHP standard + // tant que les noms ne sont pas déjà pris. + // e.g., vous ne pouvez pas utilisez $i->scale, car c'est une fonction. + + $i = $m->add($t); + $i->x = $x; + $i->y = $y; + $i->rot = $rot; + $i->s = $scale; + $i->rotateTo($rot); + $i->scale($scale, $scale); + + // mais les modification sont locales à une fonction, donc il faut + // retourner l'objet modifié. Pas pratique... + + return $i; + } + + function step($i) + { + $oldrot = $i->rot; + $i->rot = 19*$i->rot/20; + $i->x = (19*$i->x + 1200)/20; + $i->y = (19*$i->y + 800)/20; + $i->s = (19*$i->s + 1.0)/20; + + $i->rotateTo($i->rot); + $i->scaleTo($i->s, $i->s); + $i->moveTo($i->x, $i->y); + + return $i; + } + + // Alors? Ça valait la peine, non? + + $i1 = text(0xff, 0x33, 0x33, 0xff, 900, 1200, 800, 0.03, $thetext); + $i2 = text(0x00, 0x33, 0xff, 0x7f, -560, 1200, 800, 0.04, $thetext); + $i3 = text(0xff, 0xff, 0xff, 0x9f, 180, 1200, 800, 0.001, $thetext); + + for($i=1; $i<=100; ++$i) + { + $i1 = step($i1); + $i2 = step($i2); + $i3 = step($i3); + + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <simpara> + Voir aussi + <function>swfdisplayitem->rotate</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.rotate"> + <refnamediv> + <refname>SWFDisplayItem->Rotate</refname> + <refpurpose>Fait tourner une forme relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->rotate</function></funcdef> + <paramdef>double <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->rotate</function> fait tourner la forme + de <parameter>ddegrees</parameter> degrés, en plus de sa rotation + courante. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->rotateto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewxto"> + <refnamediv> + <refname>SWFDisplayItem->skewXTo</refname> + <refpurpose>Incline suivant les X.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewxto</function></funcdef> + <paramdef>double <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->skewxto</function> modifie l'inclinaison + (x-skew) à <parameter>degrees</parameter>. Si <parameter>degrees</parameter> + vaut 1.0, l'angle sera de 45¡, en avant. S'il vaut plus, ce sera plus + penché, et s'il vaut moins, ce sera plus droit. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->skewx</function>, + <function>swfdisplayitem->skewy</function> and + <function>swfdisplayitem->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewx"> + <refnamediv> + <refname>SWFDisplayItem->skewX</refname> + <refpurpose>Incline suivant les X relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewx</function></funcdef> + <paramdef>double <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->skewx</function> ajoute <parameter>ddegrees</parameter> + à l'inclinaison courante (x-skew). + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->skewx</function>, + <function>swfdisplayitem->skewy</function> and + <function>swfdisplayitem->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewyto"> + <refnamediv> + <refname>SWFDisplayItem->skewYTo</refname> + <refpurpose>Incline suivant les Y.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewyto</function></funcdef> + <paramdef>double <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->skewyto</function> modifie l'inclinaison + (y-skew) à <parameter>degrees</parameter>. Si <parameter>degrees</parameter> + vaut 1.0, l'angle sera de 45¡, en haut. S'il vaut plus, ce sera plus + penché, et s'il vaut moins, ce sera plus droit. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->skewy</function>, + <function>swfdisplayitem->skewx</function> and + <function>swfdisplayitem->skewxto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.skewy"> + <refnamediv> + <refname>SWFDisplayItem->skewY</refname> + <refpurpose>Incline suivant les Y relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->skewy</function></funcdef> + <paramdef>double <parameter>ddegrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->skewy</function> ajoute <parameter>ddegrees</parameter> + à l'inclinaison courante (y-skew). + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfdisplayitem->skewyto</function>, + <function>swfdisplayitem->skewx</function> and + <function>swfdisplayitem->skewxto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setdepth"> + <refnamediv> + <refname>SWFDisplayItem->setDepth</refname> + <refpurpose>Modifie la place en profondeur (z-order)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setdepth</function></funcdef> + <paramdef>double <parameter>depth</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->rotate</function> place l'objet à + la profondeur <parameter>depth</parameter>. Par défaut, l'objet + est placé au niveau où il a été ajouté dans l'animation. Les objets + les plus anciens sont placés tout en bas, et les nouveaux sont + superposés. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.remove"> + <refnamediv> + <refname>SWFDisplayItem->remove</refname> + <refpurpose>Supprime un objet d'une animation</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->remove</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->remove</function> supprime cet objet de + la liste d'affichage. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <simpara> + Voir aussi + <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setname"> + <refnamediv> + <refname>SWFDisplayItem->setName</refname> + <refpurpose>Nomme un objet</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setname</function></funcdef> + <paramdef>string <parameter>name</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->setname</function> donne à l'objet courant + le nom de <parameter>name</parameter>. Cela servira à repérer les acteurs + d'un script d'action. Cela ne sert qu'avec les sprites. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.setratio"> + <refnamediv> + <refname>SWFDisplayItem->setRatio</refname> + <refpurpose>Modifie le ratio de l'objet.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->setratio</function></funcdef> + <paramdef>double <parameter>ratio</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->setratio</function> modifie le ratio de l'objet, + et le fixe à <parameter>ratio</parameter>. Uniquement utile pour les + morphings. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <para> + Cet exemple simple effectue un morphing délicat de trois cercles + concentriques. + <example> + <title>Exemple <function>swfdisplayitem->setname</function></title> + <programlisting role="php"> +<?php + + $p = new SWFMorph(); + + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(0.16, 0xff, 0xff, 0xff); + $g->addEntry(0.32, 0, 0, 0); + $g->addEntry(0.48, 0xff, 0xff, 0xff); + $g->addEntry(0.64, 0, 0, 0); + $g->addEntry(0.80, 0xff, 0xff, 0xff); + $g->addEntry(1.00, 0, 0, 0); + + $s = $p->getShape1(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.05); + $s->setLeftFill($f); + $s->movePenTo(-160, -120); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(0.16, 0xff, 0, 0); + $g->addEntry(0.32, 0, 0, 0); + $g->addEntry(0.48, 0, 0xff, 0); + $g->addEntry(0.64, 0, 0, 0); + $g->addEntry(0.80, 0, 0, 0xff); + $g->addEntry(1.00, 0, 0, 0); + + $s = $p->getShape2(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.05); + $f->skewXTo(1.0); + $s->setLeftFill($f); + $s->movePenTo(-160, -120); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m = new SWFMovie(); + $m->setDimension(320, 240); + $i = $m->add($p); + $i->moveTo(160, 120); + + for($n=0; $n<=1.001; $n+=0.01) + { + $i->setRatio($n); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.addcolor"> + <refnamediv> + <refname>SWFDisplayItem->addColor</refname> + <refpurpose>Ajoute une couleur à une transoformation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->addcolor</function></funcdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->addcolor</function> ajoute une couleur à + la transformations courante. La couleur est donnée sous la forme + RGB. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfdisplayitem.multcolor"> + <refnamediv> + <refname>SWFDisplayItem->multColor</refname> + <refpurpose>Multiplie la couleur de transformation.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfdisplayitem->multcolor</function></funcdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfdisplayitem->multcolor</function> multiplie la couleur de + transformation par les valeurs données. + </para> + <simpara> + L'objet peut être <function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function> ou + <function>swfsprite</function>. Il doit avoir été ajouté à une animation + avec la fonction <function>swfmovie->add</function>. + </simpara> + <para> + Cet exemple simple modifie l'atmosphère de votre image, et + en fait une scène d'Halloween (utilisez un paysage ou une image claire + pour un meilleur effet) + <example> + <title>Exemple avec <function>swfdisplayitem->multcolor</function></title> + <programlisting role="php"> +<?php + + $b = new SWFBitmap("backyard.jpg"); + // Utilisez une de vos images + $s = new SWFShape(); + $s->setRightFill($s->addFill($b)); + $s->drawLine($b->getWidth(), 0); + $s->drawLine(0, $b->getHeight()); + $s->drawLine(-$b->getWidth(), 0); + $s->drawLine(0, -$b->getHeight()); + + $m = new SWFMovie(); + $m->setDimension($b->getWidth(), $b->getHeight()); + + $i = $m->add($s); + + for($n=0; $n<=20; ++$n) + { + $i->multColor(1.0-$n/10, 1.0, 1.0); + $i->addColor(0xff*$n/20, 0, 0); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + +<!-- SWFShape --> + + <refentry id="function.swfshape"> + <refnamediv> + <refname>SWFShape</refname> + <refpurpose>Crée une nouvelle forme.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfshape</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfshape</function> crée une nouvelle forme. + </para> + <simpara> + SWFShape a les méthodes suivantes : + <function>swfshape->setline</function>, + <function>swfshape->addfill</function>, <function>swfshape->setleftfill</function>, + <function>swfshape->setrightfill</function>, <function>swfshape->movepento</function>, + <function>swfshape->movepen</function>, <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, <function>swfshape->drawcurveto</function> + et <function>swfshape->drawcurve</function>. + </simpara> + <para> + Ce exemple simple dessine un quadrant d'ellipse rouge. + <example> + <title>Exemple avec <function>swfshape</function></title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $s->setLine(40, 0x7f, 0, 0); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(200, 200); + $s->drawLineTo(6200, 200); + $s->drawLineTo(6200, 4600); + $s->drawCurveTo(200, 4600, 200, 200); + + $m = new SWFMovie(); + $m->setDimension(6400, 4800); + $m->setRate(12.0); + $m->add($s); + $m->nextFrame(); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setline"> + <refnamediv> + <refname>SWFShape->setLine</refname> + <refpurpose>Modifie le style de ligne de la forme.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setline</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter><optional>red</optional></parameter></paramdef> + <paramdef>int <parameter><optional>green</optional></parameter></paramdef> + <paramdef>int <parameter><optional>blue</optional></parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfshape->setline</function> modifie le style de ligne de la forme. + <parameter>width</parameter> est la largeur de la ligne. Si + <parameter>width</parameter> vaut 0, le style est supprimé (et tous les + autres arguments sont ignorés). Si <parameter>width</parameter> > 0, + alors la couleur de la ligne devient (<parameter>red</parameter>, + <parameter>green</parameter>, <parameter>blue</parameter>). Les couleurs + sont représentées en RGB. Le dernier paramètre + <parameter>a</parameter> est optionnel. + </para> + <simpara> + <function>swfshape->setline</function> accepte 1, 4 ou 5 arguments + (mais jamais 3 ou 2). + </simpara> + <para> + Vous devez déclarer un style avant de l'utiliser (voir exemple). + </para> + <para> + Cet exemple enfantin dessine une chaîne "!#%*@", dans des couleurs + marrantes et un style rigolo. + <example> + <title>Exemple <function>swfshape->setline</function></title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f1 = $s->addFill(0xff, 0, 0); + $f2 = $s->addFill(0xff, 0x7f, 0); + $f3 = $s->addFill(0xff, 0xff, 0); + $f4 = $s->addFill(0, 0xff, 0); + $f5 = $s->addFill(0, 0, 0xff); + + // erreur : il faut déclarer tous les styles avant + // de les utiliser. + $s->setLine(40, 0x7f, 0, 0); + $s->setLine(40, 0x7f, 0x3f, 0); + $s->setLine(40, 0x7f, 0x7f, 0); + $s->setLine(40, 0, 0x7f, 0); + $s->setLine(40, 0, 0, 0x7f); + + $f = new SWFFont('Techno.fdb'); + + $s->setRightFill($f1); + $s->setLine(40, 0x7f, 0, 0); + $s->drawGlyph($f, '!'); + $s->movePen($f->getWidth('!'), 0); + + $s->setRightFill($f2); + $s->setLine(40, 0x7f, 0x3f, 0); + $s->drawGlyph($f, '#'); + $s->movePen($f->getWidth('#'), 0); + + $s->setRightFill($f3); + $s->setLine(40, 0x7f, 0x7f, 0); + $s->drawGlyph($f, '%'); + $s->movePen($f->getWidth('%'), 0); + + $s->setRightFill($f4); + $s->setLine(40, 0, 0x7f, 0); + $s->drawGlyph($f, '*'); + $s->movePen($f->getWidth('*'), 0); + + $s->setRightFill($f5); + $s->setLine(40, 0, 0, 0x7f); + $s->drawGlyph($f, '@'); + + $m = new SWFMovie(); + $m->setDimension(3000,2000); + $m->setRate(12.0); + $i = $m->add($s); + +// note la chaine est ici!!! + $i->moveTo(1500-$f->getWidth("!#%*@")/2, 1000+$f->getAscent()/2); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.addfill"> + <refnamediv> + <refname>SWFShape->addFill</refname> + <refpurpose>Ajoute un remplissage plein à la forme.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>SWFbitmap <parameter>bitmap</parameter></paramdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->addfill</function></funcdef> + <paramdef>SWFGradient <parameter>gradient</parameter></paramdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfshape->addfill</function> ajoute un remplissage plein à + la forme. <function>swfshape->addfill</function> accepte trois différents types + d'arguments. + </para> + <para> + <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> + est une couleur (format RGB). Le dernier paramètre <parameter>a</parameter> + est optionnel. + </para> + <para> + L'argument <parameter>bitmap</parameter> est un objet + <function>swfbitmap</function>. Le paramètre <parameter>flags</parameter> + peut être l'un des suivants : SWFFILL_CLIPPED_BITMAP ou SWFFILL_TILED_BITMAP. + Par défault, c'est SWFFILL_TILED_BITMAP. Je crois. + </para> + <para> + L'argument <parameter>gradient</parameter> est un objet + <function>swfgradient</function>. + L'argument <parameter>flags</parameter> peut alors prendre + l'une des valeurs suivantes : + SWFFILL_RADIAL_GRADIENT ou SWFFILL_LINEAR_GRADIENT. Par défaut, + c'est SWFFILL_LINEAR_GRADIENT. Cette fois ci, j'en suis sûr. + </para> + <para> + <function>swfshape->addfill</function> retourne un objet <function>swffill</function> + à utiliser avec <function>swfshape->setleftfill</function>, + et <function>swfshape->setrightfill</function> décrite un peu plus loin. + </para> + <simpara> + Voir aussi + <function>swfshape->setleftfill</function> et + <function>swfshape->setrightfill</function>. + </simpara> + <para> + Ceci est un exemple simple qui affiche un cadre sur une bitmap. Ah, il y a + un petit bug dans le lecteur Flash : il ne semble pas faire grand cas + de la transformation de la seconde forme en morphing. Suivant les specs, + la bitmap devrait s'étirer avec la forme dans cet exemple... + <example> + <title>Exemple avec <function>swfshape->addfill</function></title> + <programlisting role="php"> +<?php + + $p = new SWFMorph(); + + $b = new SWFBitmap("alphafill.jpg"); + // utilisez vos propres bitmaps! + $width = $b->getWidth(); + $height = $b->getHeight(); + + $s = $p->getShape1(); + $f = $s->addFill($b, SWFFILL_TILED_BITMAP); + $f->moveTo(-$width/2, -$height/4); + $f->scaleTo(1.0, 0.5); + $s->setLeftFill($f); + $s->movePenTo(-$width/2, -$height/4); + $s->drawLine($width, 0); + $s->drawLine(0, $height/2); + $s->drawLine(-$width, 0); + $s->drawLine(0, -$height/2); + + $s = $p->getShape2(); + $f = $s->addFill($b, SWFFILL_TILED_BITMAP); + + // ces déplacements n'ont aucun effet + $f->moveTo(-$width/4, -$height/2); + $f->scaleTo(0.5, 1.0); + + $s->setLeftFill($f); + $s->movePenTo(-$width/4, -$height/2); + $s->drawLine($width/2, 0); + $s->drawLine(0, $height); + $s->drawLine(-$width/2, 0); + $s->drawLine(0, -$height); + + $m = new SWFMovie(); + $m->setDimension($width, $height); + $i = $m->add($p); + $i->moveTo($width/2, $height/2); + + for($n=0; $n<1.001; $n+=0.03) + { + $i->setRatio($n); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setleftfill"> + <refnamediv> + <refname>SWFShape->setLeftFill</refname> + <refpurpose>Modifie la couleur de rastérisation de gauche.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setleftfill</function></funcdef> + <paramdef>swfgradient <parameter>fill</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setleftfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Tout ce sac de noeud fait qu'il y a deux couleurs de remplissage + des lignes. Lorsque l'objet est rasterisé, il est pratique de + savoir à l'avance quelle sont les remplissages, et le format + SWF les demande. + </para> + <para> + <function>swfshape->setleftfill</function> affecte à la couleur + de rastérisation de gauche, c'est-à-dire l'intérieur d'un objet, + si vous définissez les contours d'un objet dans le sens inverse + des aiguilles d'une montre. L'objet de remplissage est un + objet <function>swffill</function>, retourné par la fonction + <function>swfshape->addfill</function> ci-dessus. + </para> + <para> + Cela semble être le contraire lorsque vous défnissez une forme + dans un morphing. Si votre navigateur crashe, essayez de placer + le remplissage sur l'autre côté. + </para> + <simpara> + Raccourci pour + <literal>swfshape->setleftfill($s->addfill($r, $g, $b [, $a]));</literal>. + </simpara> + <simpara> + Voir aussi + <function>swfshape->setrightfill</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.setrightfill"> + <refnamediv> + <refname>SWFShape->setRightFill</refname> + <refpurpose>Modifie la couleur de rastériation de droite.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setrightfill</function></funcdef> + <paramdef>swfgradient <parameter>fill</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->setrightfill</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Voir aussi + <function>swfshape->setleftfill</function>. + </simpara> + <simpara> + Raccourci pour + <literal>swfshape->setrightfill($s->addfill($r, $g, $b [, $a]));</literal>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.movepento"> + <refnamediv> + <refname>SWFShape->movePenTo</refname> + <refpurpose>Déplace le stylo.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->movepento</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->setrightfill</function> déplace le stylo dans la + forme jusqu'au coordonnées globales + (<parameter>x</parameter>,<parameter>y</parameter>). + </simpara> + <simpara> + Voir aussi + <function>swfshape->movepen</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->drawlineto</function> et + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.movepen"> + <refnamediv> + <refname>SWFShape->movePen</refname> + <refpurpose>Déplace le stylo relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->movepen</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->setrightfill</function> déplace le stylo dans la + forme depuis les coordonnées (current x,current y) jusqu'au + coordonnées (current x + <parameter>dx</parameter>, + current y + <parameter>dy</parameter>), dans l'espace de coordonnées + de la forme. + </simpara> + <simpara> + Voir aussi + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->drawlineto</function> et + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawlineto"> + <refnamediv> + <refname>SWFShape->drawLineTo</refname> + <refpurpose>Dessine une ligne.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawlineto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->setrightfill</function> dessine une ligne + (avec le style courant de ligne, modifié par + <function>swfshape->setline</function>) depuis le point courant + jusqu'au point (<parameter>x</parameter>,<parameter>y</parameter>) + dans l'espace de coordonnées de la forme. + </simpara> + <simpara> + Voir aussi + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->movepen</function> et + <function>swfshape->drawline</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawline"> + <refnamediv> + <refname>SWFShape->drawLine</refname> + <refpurpose>Dessine une ligne relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawline</function></funcdef> + <paramdef>int <parameter>dx</parameter></paramdef> + <paramdef>int <parameter>dy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->setrightfill</function> dessine une ligne + (avec le style courant de ligne, modifié par + <function>swfshape->setline</function>) depuis le point courant, + et sur le déplacement de (<parameter>dx</parameter>,<parameter>dy</parameter>). + </simpara> + <simpara> + Voir aussi + <function>swfshape->movepento</function>, + <function>swfshape->drawcurveto</function>, + <function>swfshape->movepen</function> et + <function>swfshape->drawlineto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawcurveto"> + <refnamediv> + <refname>SWFShape->drawCurveTo</refname> + <refpurpose>Dessine une courbe.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawcurveto</function></funcdef> + <paramdef>int <parameter>controlx</parameter></paramdef> + <paramdef>int <parameter>controly</parameter></paramdef> + <paramdef>int <parameter>anchorx</parameter></paramdef> + <paramdef>int <parameter>anchory</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->drawcurveto</function> dessine une courbe quadratique + (avec le style courant de ligne, modifié par + <function>swfshape->setline</function>) depuis le point courant + jusqu'au point (<parameter>anchorx</parameter>,<parameter>anchory</parameter>) + en utilisant (<parameter>controlx</parameter>,<parameter>controly</parameter>) + comme point de contrôle. C'est-à-dire qu'il commence en allant vers le point + de contrôle, puis se dirigie sur le point d'ancrrage. + </simpara> + <simpara> + Voir aussi + <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, + <function>swfshape->movepento</function> et + <function>swfshape->movepen</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swfshape.drawcurve"> + <refnamediv> + <refname>SWFShape->drawCurve</refname> + <refpurpose>Dessine une courbe relativement.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfshape->drawcurve</function></funcdef> + <paramdef>int <parameter>controldx</parameter></paramdef> + <paramdef>int <parameter>controldy</parameter></paramdef> + <paramdef>int <parameter>anchordx</parameter></paramdef> + <paramdef>int <parameter>anchordy</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <function>swfshape->drawcurve</function> dessine une courbe + quadratique (avec le style courant de ligne, modifié par + <function>swfshape->setline</function>) depuis le point courant + jusqu'au point (<parameter>anchordx</parameter>,<parameter>anchordy</parameter>) + relativement au point courant, et en utilisant le point de + contrôle (<parameter>controldx</parameter>,<parameter>controldy</parameter>). + C'est-à-dire qu'il commence en allant vers le point + de contrôle, puis se dirigie sur le point d'ancrrage. + </simpara> + <simpara> + Voir aussi + <function>swfshape->drawlineto</function>, + <function>swfshape->drawline</function>, + <function>swfshape->movepento</function> et + <function>swfshape->movepen</function>. + </simpara> + </refsect1> + </refentry> + +<!-- SWFGradient --> + + <refentry id="function.swfgradient"> + <refnamediv> + <refname>SWFGradient</refname> + <refpurpose>Crée un objet gradient</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfgradient</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfgradient</function> crée un nouvel objet gradient. + </para> + <simpara> + Une fois que vous avez ajouté les couleurs à votre gradient, vous + pouvez l'utiliser dans des formes, avec la fonction + <function>swfshape->addfill</function>. + </simpara> + <simpara> + SWFGradient a la méthode suivante : + <function>swfgradient->addentry</function>. + </simpara> + <para> + Cet exemple simple affiche un gradient noir-blanc comme fond, + et un gradient concentrique au centre. + <example> + <title>Exemple avec <function>swfgradient</function></title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setDimension(320, 240); + + $s = new SWFShape(); + + // gradient noir-blanc + $g = new SWFGradient(); + $g->addEntry(0.0, 0, 0, 0); + $g->addEntry(1.0, 0xff, 0xff, 0xff); + + $f = $s->addFill($g, SWFFILL_LINEAR_GRADIENT); + $f->scaleTo(0.01); + $f->moveTo(160, 120); + $s->setRightFill($f); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m->add($s); + + $s = new SWFShape(); + + // gradient radial : rouge vers transparent + $g = new SWFGradient(); + $g->addEntry(0.0, 0xff, 0, 0, 0xff); + $g->addEntry(1.0, 0xff, 0, 0, 0); + + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.005); + $f->moveTo(160, 120); + $s->setRightFill($f); + $s->drawLine(320, 0); + $s->drawLine(0, 240); + $s->drawLine(-320, 0); + $s->drawLine(0, -240); + + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfgradient.addentry"> + <refnamediv> + <refname>SWFGradient->addEntry</refname> + <refpurpose>Ajoute une couleur à la liste du gradient.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfgradient->addentry</function></funcdef> + <paramdef>double <parameter>ratio</parameter></paramdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfgradient->addentry</function> ajoute une couleur à la liste + des couleurs du gradient. <parameter>ratio</parameter> est un nombre + de 0 à 1, qui indique l'ordre d'apparition des couleurs. Vous devez + ajouter les couleurs dans l'ordre croissant de ratio. + </para> + <para> + <parameter>red</parameter>, <parameter>green</parameter>, <parameter>blue</parameter> + représente une couleur, au format RGB. Le dernier paramètre + <parameter>a</parameter> est optionnel. + </para> + </refsect1> + </refentry> + +<!-- SWFBitmap --> + + <refentry id="function.swfbitmap"> + <refnamediv> + <refname>SWFBitmap</refname> + <refpurpose>Crée un objet bitmap</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfbitmap</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + <paramdef>int <parameter><optional>alphafilename</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbitmap</function> crée un objet bitmap à partir d'un + fichier JPEG ou DBL, nommé <parameter>filename</parameter>. + <parameter>alphafilename</parameter> indique un fichier de masque à + utiliser comme canal alpha sur une image JPEG. + </para> + <note> + <para> + Seule les JPEG baseline (frame 0) sont supportés. Les baseline optimisée + ou les JPEG progressives ne sont pas supportées. + </para> + </note> + <simpara> + SWFBitmap a les méthodes suivantes : + <function>swfbitmap->getwidth</function> + et <function>swfbitmap->getheight</function>. + </simpara> + <para> + Il n'est pas possible d'importer directement des images + PNG, il faut utiliser l'utilitaire de conversion + <filename>png2dbl</filename> pour en faire un fichier + .dbl ("define bits lossless"). La raison est que l'auteur ne + souhaite pas de dépendance avec la librairie PNG. Le fichier + d'autoconfiguration devrait régler ce problème, mais il n'est pas + encore fait. + <example> + <title>Importation de fichiers PNG sous Ming</title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f = $s->addFill(new SWFBitmap("png.dbl")); + $s->setRightFill($f); + + $s->drawLine(32, 0); + $s->drawLine(0, 32); + $s->drawLine(-32, 0); + $s->drawLine(0, -32); + + $m = new SWFMovie(); + $m->setDimension(32, 32); + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + Et vous pouvez ajouter un masque alpha sur une image JPEG. + <example> + <title>Exemple avec <function>swfbitmap</function></title> + <programlisting role="php"> +<?php + + $s = new SWFShape(); + + //les fichiers .msk sont générés par l'utilitaire "gif2mask" + $f = $s->addFill(new SWFBitmap("alphafill.jpg", "alphafill.msk")); + $s->setRightFill($f); + + $s->drawLine(640, 0); + $s->drawLine(0, 480); + $s->drawLine(-640, 0); + $s->drawLine(0, -480); + + $c = new SWFShape(); + $c->setRightFill($c->addFill(0x99, 0x99, 0x99)); + $c->drawLine(40, 0); + $c->drawLine(0, 40); + $c->drawLine(-40, 0); + $c->drawLine(0, -40); + + $m = new SWFMovie(); + $m->setDimension(640, 480); + $m->setBackground(0xcc, 0xcc, 0xcc); + + // décide un fond à damier + for($y=0; $y<480; $y+=40) + { + for($x=0; $x<640; $x+=80) + { + $i = $m->add($c); + $i->moveTo($x, $y); + } + + $y+=40; + + for($x=40; $x<640; $x+=80) + { + $i = $m->add($c); + $i->moveTo($x, $y); + } + } + + $m->add($s); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbitmap.getwidth"> + <refnamediv> + <refname>SWFBitmap->getWidth</refname> + <refpurpose>Retourne la largeur d'une bitmap.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swfbitmap->getwidth</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbitmap->getwidth</function> retourne la largeur d'une bitmap, + en pixels. + </para> + <para> + Voir aussi + <function>swfbitmap->getheight</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbitmap.getheight"> + <refnamediv> + <refname>SWFBitmap->getHeight</refname> + <refpurpose>Retourne la hauteur d'une bitmap.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swfbitmap->getheight</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbitmap->getheight</function> retourne la hauteur d'une bitmap, + en pixels. + </para> + <para> + Voir aussi + <function>swfbitmap->getwidth</function>. + </para> + </refsect1> + </refentry> + +<!-- SWFFill --> + + <refentry id="function.swffill"> + <refnamediv> + <refname>SWFFill</refname> + <refpurpose>Crée un objet de remplissage</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <para> + <function>swffill</function> vous permet de transformer + une image bitmap ou un gradient. Les objets <function>swffill</function> + sont créé par <function>swfshape->addfill</function>. + </para> + <simpara> + SWFFill a les méthodes suivantes : + <function>swffill->moveto</function>,<function>swffill->scaleto</function>, + <function>swffill->rotateto</function>, + <function>swffill->skewxto</function> et <function>swffill->skewyto</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swffill.moveto"> + <refnamediv> + <refname>SWFFill->moveTo</refname> + <refpurpose>Déplace l'origine de l'objet SWFFill</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffill->moveto</function> déplace l'origine de la forme + jusqu'au point de coordonnées globales + (<parameter>x</parameter>,<parameter>y</parameter>). + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.scaleto"> + <refnamediv> + <refname>SWFFill->scaleTo</refname> + <refpurpose>Modifie l'échelle de la forme</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->scaleto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffill->scaleto</function> modifie l'échelle de + la forme de <parameter>x</parameter> dans le sens des + abscisses et <parameter>y</parameter> dans le sens des + ordonnées. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.rotateto"> + <refnamediv> + <refname>SWFFill->rotateTo</refname> + <refpurpose>Tourne la forme</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->rotateto</function></funcdef> + <paramdef>double <parameter>degrees</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffill->rotateto</function> tourne la forme depuis + sont orientation initiale jusqu'à un angle de + <parameter>degrees</parameter> degrés. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.skewxto"> + <refnamediv> + <refname>SWFFill->skewXTo</refname> + <refpurpose>Incline (abscisses)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->skewxto</function></funcdef> + <paramdef>double <parameter>x</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffill->skewxto</function> incline la forme de + <parameter>x</parameter> suivant l'axe des abscisses. Si <parameter>x</parameter> vaut 1.0, + l'inclinaison sera de 45¡ degrés, en avant. Si <parameter>x</parameter> + vaut plus, l'inclinaison sera plus forte, et sinon, la forme + sera plus droite. + </para> + </refsect1> + </refentry> + + <refentry id="function.swffill.skewyto"> + <refnamediv> + <refname>SWFFill->skewYTo</refname> + <refpurpose>Incline (ordonnées)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swffill->skewyto</function></funcdef> + <paramdef>double <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffill->skewyto</function> incline la forme de + <parameter>y</parameter> suivant l'axe des abscisses. Si <parameter>y</parameter> + vaut 1.0, l'inclinaison sera de 45¡ degrés, en avant. Si + <parameter>x</parameter> vaut plus, l'inclinaison sera plus + forte, et sinon, la forme sera plus droite. + </para> + </refsect1> + </refentry> + +<!-- SWFMorph --> + + <refentry id="function.swfmorph"> + <refnamediv> + <refname>SWFMorph</refname> + <refpurpose>Crée un morphing.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfmorph</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmorph</function> crée un morphing. + </para> + <para> + <function>swfmorph</function> s'appelle aussi "shape tween". + C'est cet objet qui permet toutes ces superbes animations + qui mettent à genou votre ordinateur. Joie! + </para> + <para> + Les méthodes ici sont plutôt bizarres. Il serait tellement plus + logique d'avoir seulement <literal>new SWFMorph(shape1, shape2);</literal>, + mais, telles que sont les choses aujourd'hui, la deuxième forme + a besoin de savoir qu'elle est l'aboutissement d'un morphing. + (Tout cela, parceque Flash commence à dessiner aussitôt qu'il a les + commandes de dessins. S'il conservait les descriptions de ses propres + formes, et attendait leur totalité avant d'écrire, ceci et bien d'autres + choses serait tellement plus simple). + </para> + <simpara> + SWFMorph a les méthodes suivantes : + <function>swfmorph->getshape1</function> et <function>swfmorph->getshape1</function>. + </simpara> + <para> + Cet exemple simple effectue le morphing d'une gros carré rouge en un + carré plus petit, bleu et bordé de noir. + <example> + <title>Exemple avec <function>swfmorph</function></title> + <programlisting role="php"> +<?php + $p = new SWFMorph(); + + $s = $p->getShape1(); + $s->setLine(0,0,0,0); + + /* Notez que cela se fait dans l'ordre inverse de l'ordre habituel + (gauche au lieu de droite), mais je n'ai aucune idée de pourquoi... */ + + $s->setLeftFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(-1000,-1000); + $s->drawLine(2000,0); + $s->drawLine(0,2000); + $s->drawLine(-2000,0); + $s->drawLine(0,-2000); + + $s = $p->getShape2(); + $s->setLine(60,0,0,0); + $s->setLeftFill($s->addFill(0, 0, 0xff)); + $s->movePenTo(0,-1000); + $s->drawLine(1000,1000); + $s->drawLine(-1000,1000); + $s->drawLine(-1000,-1000); + $s->drawLine(1000,-1000); + + $m = new SWFMovie(); + $m->setDimension(3000,2000); + $m->setBackground(0xff, 0xff, 0xff); + + $i = $m->add($p); + $i->moveTo(1500,1000); + + for($r=0.0; $r<=1.0; $r+=0.1) + { + $i->setRatio($r); + $m->nextFrame(); + } + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmorph.getshape1"> + <refnamediv> + <refname>SWFMorph->getshape1</refname> + <refpurpose>Sélectionne la forme de départ</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>swfmorph->getshape1</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmorph->getshape1</function> sélectionne la forme de + début de morphing. <function>swfmorph->getshape1</function> retourne un + objet <function>swfshape</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfmorph.getshape2"> + <refnamediv> + <refname>SWFMorph->getshape2</refname> + <refpurpose>Sélectionne la forme de fin</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>swfmorph->getshape2</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfmorph->getshape2</function> sélectionne la forme de + début de morphing. <function>swfmorph->getshape2</function> retourne un + objet <function>swfshape</function>. + </para> + </refsect1> + </refentry> + +<!-- SWFText --> + + <refentry id="function.swftext"> + <refnamediv> + <refname>SWFText</refname> + <refpurpose>Crée un nouvel objet texte.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swftext</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext</function> crée un nouvel objet texte, + prêt à être manipulé. + </para> + <simpara> + SWFText a les méthodes suivantes : + <function>swftext->setfont</function>, + <function>swftext->setheight</function>, <function>swftext->setspacing</function>, + <function>swftext->setcolor</function>, <function>swftext->moveto</function>, + <function>swftext->addstring</function> et <function>swftext->getwidth</function>. + </simpara> + <para> + Cet exemple simple va afficher la phrase "PHP fait du Flash avec Ming" + sur un fond blanc. + <example> + <title>Exemle avec <function>swftext</function></title> + <programlisting role="php"> +<?php + $f = new SWFFont("Techno.fdb"); + $t = new SWFText(); + $t->setFont($f); + $t->moveTo(200, 2400); + $t->setColor(0xff, 0xff, 0); + $t->setHeight(1200); + $t->addString("PHP fait du Flash avec Ming!!"); + + $m = new SWFMovie(); + $m->setDimension(5400, 3600); + + $m->add($t); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setfont"> + <refnamediv> + <refname>SWFText->setFont</refname> + <refpurpose>Sélectionne la police courante</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setfont</function></funcdef> + <paramdef>string <parameter>font</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->setfont</function> remplace la police courante + par <parameter>font</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setheight"> + <refnamediv> + <refname>SWFText->setHeight</refname> + <refpurpose>Modifie la hauteur de la police courante</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setheight</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->setheight</function> fixe la hauteur courante de + la police courante à <parameter>height</parameter>. Par défaut, c'est 240. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setspacing"> + <refnamediv> + <refname>SWFText->setSpacing</refname> + <refpurpose>Modifie l'espacement de police</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setspacing</function></funcdef> + <paramdef>double <parameter>spacing</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->setspacing</function> fixe l'espacement de + police à <parameter>spacing</parameter><parameter>spacing</parameter>. + Par défaut, c'est 1.0. 0 signifie que toutes les lettres seront + écrites au même point. Cela fonctionne pas terrible, car l'avance + des lettres augmente, et l'espacement entre lettre n'est pas toujours + le même. Il faudra que je l'explique plus clairement. Ou bien que je + corrige les erreurs. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.setcolor"> + <refnamediv> + <refname>SWFText->setColor</refname> + <refpurpose>Modifie la couleur de la police</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->setcolor</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->setspacing</function> change la couleur de la + police courante. Par défaut, c'est noir. La couleur est représentée avec + la convention RGB. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.moveto"> + <refnamediv> + <refname>SWFText->moveTo</refname> + <refpurpose>Déplace le stylo de texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->moveto</function></funcdef> + <paramdef>int <parameter>x</parameter></paramdef> + <paramdef>int <parameter>y</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->moveto</function> déplace le style (ou le curseur, si + ça a un sens) jusqu'au coordonnées (<parameter>x</parameter>,<parameter>y</parameter>) + dans l'espace de coordonnées du texte. Si <parameter>x</parameter> + ou <parameter>y</parameter> vaut 0, la valeur de coordonnées de la dimension + reste la même. C'est ennuyeux, et cela devrait être corrigé. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.addstring"> + <refnamediv> + <refname>SWFText->addString</refname> + <refpurpose>Ajoute du texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->addstring</function> ajoute le texte <parameter>string</parameter> + au texte courant, et le dessine. Le stylo est situé sur la ligne de base + du texte, c'est-à-dire que le texte sera écrit horizontalement. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftext.getwidth"> + <refnamediv> + <refname>SWFText->getWidth</refname> + <refpurpose>Calcule la longueur d'une chaîne</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftext->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftext->addstring</function> retourne la taille de la chaîne + <parameter>string</parameter>, une fois qu'elle est dessinée avec la police + et l'espaceement courant. + </para> + </refsect1> + </refentry> + +<!-- SWFFont --> + + <refentry id="function.swffont"> + <refnamediv> + <refname>SWFFont</refname> + <refpurpose>Charge une police</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swffont</function></funcdef> + <paramdef>string <parameter>filename</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + si <parameter>filename</parameter> est le nom d'un fichier + FDB (i.e., si le nom de fichier se termine par ".fdb"), charge la + police. + </para> + <para> + FDB ("font definition block") est un petit utilitaire pour Flash DefineFont2 + qui contient une description complète de la police. Vous pouvez créer des + fichiers FDB à partir du "SWT Generator", qui est inclus avec + les utilitaires makefdb - regardez dans le dossier utilitaire de Ming. + </para> + <para> + Les polices utilisateurs ne contiennent aucune information autre que + le nom de la police. On suppose que la police sera elle-même accessible + au lecteur. Les polices "_serif", "_sans", et "_typewriter" doivent être + universellement disponibles. Par exemple : + <programlisting role="php"> +<?php +$f = newSWFFont("_sans"); +?> + </programlisting> + vous donne la police standard "sans-serif", probablement identique à celle + que vous obtenez avec le code <literal><font name="sans-serif"></literal>. + </para> + <para> + <function>swffont</function> retourne une ressource de police, à utiliser avec + les méthodes <function>swftext->setfont</function> et + <function>swftextfield->setfont</function>. + </para> + <simpara> + SWFFont a les méthodes suivantes : + <function>swffont->getwidth</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swffont.getwidth"> + <refnamediv> + <refname>swffont->getwidth</refname> + <refpurpose>Retourne la taille de la chaîne</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>swffont->getwidth</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swffont->getwidth</function> retourne la taille de + la chaîne <parameter>string</parameter>, avec la police courante. + Vous utiliserez plutôt la même méthode de l'objet + <function>swftext</function>, qui utilise les paramètres de + l'objet. + </para> + </refsect1> + </refentry> + +<!-- SWFTextField --> + + <refentry id="function.swftextfield"> + <refnamediv> + <refname>SWFTextField</refname> + <refpurpose>Crée un nouveau champs texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swftextfield</function></funcdef> + <paramdef>int <parameter><optional>flags</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield</function> crée un nouveau champs texte. + Les champs textes sont moins souples que les <function>swftext</function>, + car ils ne peuvent être tournés, mis à l'échelle ou incliné, mais ils peuvent + être utilisés sous forme de champs de formulaire, et ils peuvent utiliser + des polices navigateur. + </para> + <para> + Les flags optionnels modifient les comportements du champs. Ils peuvent prendre + les valeurs suivantes : + <itemizedlist> + <listitem> + <simpara> + SWFTEXTFIELD_NOEDIT : indique que le champs ne doit pas être + éditable. + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_PASSWORD : indique que c'est un champs mot de passe + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_DRAWBOX : dessine le contour du champs + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_MULTILINE : autorise les lignes multiples + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_WORDWRAP : autorise la mise en forme du texte + </simpara> + </listitem> + <listitem> + <simpara> + SWFTEXTFIELD_NOSELECT : rend le champs non-sélectionnable + </simpara> + </listitem> + </itemizedlist> + Les flags peuvent être combinés avec l'opérateur + <link linkend="language.operators.bitwise">OR</link>. Par exemple : + <programlisting role="php"> +<?php +$t = newSWFTextField(SWFTEXTFIELD_PASSWORD | SWFTEXTFIELD_NOEDIT); +?> + </programlisting> + crée un champs de mot de passe totalement inéditable (et inutile). + </para> + <simpara> + SWFTextField a les méthodes suivantes : + <function>swftextfield->setfont</function>, + <function>swftextfield->setbounds</function>, <function>swftextfield->align</function>, + <function>swftextfield->setheight</function>, <function>swftextfield->setleftmargin</function>, + <function>swftextfield->setrightmargin</function>, <function>swftextfield->setmargins</function>, + <function>swftextfield->setindentation</function>, <function>swftextfield->setlinespacing</function>, + <function>swftextfield->setcolor</function>, <function>swftextfield->setname</function> et + <function>swftextfield->addstring</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setfont"> + <refnamediv> + <refname>SWFTextField->setFont</refname> + <refpurpose>Modifie la police du champs</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setfont</function></funcdef> + <paramdef>string <parameter>font</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setfont</function> remplace la police courante + par la police <parameter>font</parameter> (police client?). + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setbounds"> + <refnamediv> + <refname>SWFTextField->setbounds</refname> + <refpurpose>Sélectionne la largeur et hauteur du champs</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setbounds</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setbounds</function> fixe la longueu du champs + à <parameter>width</parameter> et sa hauteur à <parameter>height</parameter>. + Si vous ne fixez pas les bords vous-mêmes, Ming tentera de les deviner + lui-même (mais ne le laissez pas faire!!). + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.align"> + <refnamediv> + <refname>SWFTextField->align</refname> + <refpurpose>Modifie l'alignement du texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->align</function></funcdef> + <paramdef>int <parameter>alignement</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->align</function> change l'alignement du + texte par <parameter>alignement</parameter>. Les valeurs valides + pour <parameter>alignement</parameter> sont : SWFTEXTFIELD_ALIGN_LEFT, + SWFTEXTFIELD_ALIGN_RIGHT, SWFTEXTFIELD_ALIGN_CENTER et + SWFTEXTFIELD_ALIGN_JUSTIFY. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setheight"> + <refnamediv> + <refname>SWFTextField->setHeight</refname> + <refpurpose>Modifie la hauteur de la police du champs texte.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setheight</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setheight</function> modifie la hauteur de + la police du champs texte par <parameter>height</parameter>. Par défaut, + c'est 240. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setleftmargin"> + <refnamediv> + <refname>SWFTextField->setLeftMargin</refname> + <refpurpose>Modifie la marge de gauche.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setleftmargin</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setleftmargin</function> modifie la marge de + gauche du champs texte à <parameter>width</parameter>. Par défaut, c'est 0. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setrightmargin"> + <refnamediv> + <refname>SWFTextField->setrightMargin</refname> + <refpurpose>Modifie la marge de droite.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setrightmargin</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setrightmargin</function> modifie la marge de + gauche du champs texte à <parameter>width</parameter>. Par défaut, c'est + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setmargins"> + <refnamediv> + <refname>SWFTextField->setMargins</refname> + <refpurpose>Modifie les marges du champs texte.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setmargins</function></funcdef> + <paramdef>int <parameter>left</parameter></paramdef> + <paramdef>int <parameter>right</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setmargins</function> modifie les deux marges + du champs texte : <parameter>left</parameter> sera la nouvelle largeur de + la marge de gauche, et <parameter>right</parameter>, celle de gauche. + Par défaut, elles sont toutes les deux à 0. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setindentation"> + <refnamediv> + <refname>SWFTextField->setindentation</refname> + <refpurpose>Modifie l'indentation de la première ligne.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setindentation</function></funcdef> + <paramdef>int <parameter>width</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setindentation</function> modifie l'indentation de + la première ligne du champs texte, en la fixant à <parameter>width</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setlinespacing"> + <refnamediv> + <refname>SWFTextField->setLineSpacing</refname> + <refpurpose>Modifie l'espacement de lignes.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setlinespacing</function></funcdef> + <paramdef>int <parameter>height</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setlinespacing</function> modifie l'espacement de lignes, + en le fixant à <parameter>height</parameter>. Par défaut, c'est 40. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setcolor"> + <refnamediv> + <refname>SWFTextField->setcolor</refname> + <refpurpose>Modifie la couleur du champs texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setcolor</function></funcdef> + <paramdef>int <parameter>red</parameter></paramdef> + <paramdef>int <parameter>green</parameter></paramdef> + <paramdef>int <parameter>blue</parameter></paramdef> + <paramdef>int <parameter><optional>a</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setcolor</function> modifie la couleur du + champs texte, en la remplaçant par la couleur fournie. Par défaut, c'est + noir opaque. Les couleurs sont représentées en convention RGB. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.setname"> + <refnamediv> + <refname>SWFTextField->setname</refname> + <refpurpose>Nomme le champs texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->setname</function></funcdef> + <paramdef>string <parameter>name</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setname</function> baptise le champs + texte <parameter>name</parameter>. Cela servira pour les formulaires + et les actions. + </para> + </refsect1> + </refentry> + + <refentry id="function.swftextfield.addstring"> + <refnamediv> + <refname>SWFTextField->addstring</refname> + <refpurpose>Ajoute au texte</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swftextfield->addstring</function></funcdef> + <paramdef>string <parameter>string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swftextfield->setname</function> concatène la chaîne + <parameter>string</parameter> avec la chaîne courante. + </para> + </refsect1> + </refentry> + +<!-- SWFSprite --> + + <refentry id="function.swfsprite"> + <refnamediv> + <refname>SWFSprite</refname> + <refpurpose>Crée un sprite</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfsprite</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfsprite</function> sont aussi connue sous le nom de + "clip" : ils permettent la création d'objet animé dans une animation, + avec un scénario propre. De ce fait, un sprite a les mêmes méthodes + qu'une animation. + </para> + <simpara> + <function>swfsprite</function> a les méthodes suivantes : + <function>swfsprite->add</function>, + <function>swfsprite->remove</function>, <function>swfsprite->nextframe</function> + et <function>swfsprite->setframes</function>. + </simpara> + <para> + Ce exemple pratique fait tourner un superbe carré rouge. + <example> + <title>Exemple de <function>swfsprite</function></title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->movePenTo(-500,-500); + $s->drawLineTo(500,-500); + $s->drawLineTo(500,500); + $s->drawLineTo(-500,500); + $s->drawLineTo(-500,-500); + + $p = new SWFSprite(); + $i = $p->add($s); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + $i->rotate(15); + $p->nextFrame(); + + $m = new SWFMovie(); + $i = $m->add($p); + $i->moveTo(1500,1000); + $i->setName("blah"); + + $m->setBackground(0xff, 0xff, 0xff); + $m->setDimension(3000,2000); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.add"> + <refnamediv> + <refname>SWFSprite->add</refname> + <refpurpose>Ajoute un objet à un sprite</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>swfsprite->add</function></funcdef> + <paramdef>ressource <parameter>object</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfsprite->add</function> ajoute une <function>swfshape</function>, un + <function>swfbutton</function>, un <function>swftext</function>, + une <function>swfaction</function> ou une autre animation + <function>swfsprite</function>. + </para> + <para> + Pour les objets affichables (<function>swfshape</function>, + <function>swfbutton</function>, <function>swftext</function>, + <function>swfaction</function> or <function>swfsprite</function>), + cela retourne une ressource sur l'objet dans la liste d'affichage. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.remove"> + <refnamediv> + <refname>SWFSprite->remove</refname> + <refpurpose>Supprime un objet dans un sprite</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->remove</function></funcdef> + <paramdef>ressource <parameter>object</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfsprite->remove</function> supprime une <function>swfshape</function>, un + <function>swfbutton</function>, un <function>swftext</function>, + une <function>swfaction</function> ou un <function>swfsprite</function> du + sprite courant. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.setframes"> + <refnamediv> + <refname>SWFSprite->setframes</refname> + <refpurpose>Fixe le nombre maximum d'image dans le sprite.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->setframes</function></funcdef> + <paramdef>int <parameter>numberofframes</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfsprite->setframes</function> fixe le nombre total d'images + de l'animation à <parameter>numberofframes</parameter>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfsprite.nextframe"> + <refnamediv> + <refname>SWFSprite->nextframe</refname> + <refpurpose>Va à la prochaine image du sprite.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfsprite->nextframe</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfsprite->setframes</function> se déplace à la prochaine image + du sprite. + </para> + </refsect1> + </refentry> + +<!-- SWFButton --> + + <refentry id="function.swfbutton"> + <refnamediv> + <refname>SWFbutton</refname> + <refpurpose>Crée un nouveau bouton.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfbutton</function></funcdef> + <paramdef>void</paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton</function> crée un nouveau bouton. + Cliquez-le, passez la souris dessus, et appelez des actions. Facile! + </para> + <simpara> + SWFButton a les méthodes suivantes : + <function>swfbutton->addshape</function>, + <function>swfbutton->setup</function>, <function>swfbutton->setover</function> + <function>swfbutton->setdown</function>, <function>swfbutton->sethit</function> + <function>swfbutton->setaction</function> et + <function>swfbutton->addaction</function>. + </simpara> + <para> + Cet exemple simplissime vous montre comme faire un + roll-over, un roll-on, un clic, un relaché de souris, et rien du tout (pas d'action). + <example> + <title>Exemple avec <function>swfbutton</function></title> + <programlisting role="php"> +<?php + + $f = new SWFFont("_serif"); + + $p = new SWFSprite(); + + function label($string) + { + global $f; + + $t = new SWFTextField(); + $t->setFont($f); + $t->addString($string); + $t->setHeight(200); + $t->setBounds(3200,200); + return $t; + } + function addLabel($string) + { + global $p; + + $i = $p->add(label($string)); + $p->nextFrame(); + $p->remove($i); + } + + $p->add(new SWFAction("stop();")); + addLabel("NO ACTION"); + addLabel("SWFBUTTON_MOUSEUP"); + addLabel("SWFBUTTON_MOUSEDOWN"); + addLabel("SWFBUTTON_MOUSEOVER"); + addLabel("SWFBUTTON_MOUSEOUT"); + addLabel("SWFBUTTON_MOUSEUPOUTSIDE"); + addLabel("SWFBUTTON_DRAGOVER"); + addLabel("SWFBUTTON_DRAGOUT"); + + function rect($r, $g, $b) + { + $s = new SWFShape(); + $s->setRightFill($s->addFill($r, $g, $b)); + $s->drawLine(600,0); + $s->drawLine(0,600); + $s->drawLine(-600,0); + $s->drawLine(0,-600); + + return $s; + } + + $b = new SWFButton(); + $b->addShape(rect(0xff, 0, 0), SWFBUTTON_UP | SWFBUTTON_HIT); + $b->addShape(rect(0, 0xff, 0), SWFBUTTON_OVER); + $b->addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(1);"), + SWFBUTTON_MOUSEUP); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(2);"), + SWFBUTTON_MOUSEDOWN); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(3);"), + SWFBUTTON_MOUSEOVER); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(4);"), + SWFBUTTON_MOUSEOUT); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(5);"), + SWFBUTTON_MOUSEUPOUTSIDE); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(6);"), + SWFBUTTON_DRAGOVER); + + $b->addAction(new SWFAction("setTarget('/label'); gotoFrame(7);"), + SWFBUTTON_DRAGOUT); + + $m = new SWFMovie(); + $m->setDimension(4000,3000); + + $i = $m->add($p); + $i->setName("label"); + $i->moveTo(400,1900); + + $i = $m->add($b); + $i->moveTo(400,900); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + Cet exemple simple illustre le déplacement d'un gros bouton + rouge dans la fenêtre. Ce n'est pas du tirer-déposer, mais juste + du tirer. + <example> + <title>Exemple avec <function>swfbutton->addaction</function></title> + <programlisting role="php"> +<?php + + $s = new SWFShape(); + $s->setRightFill($s->addFill(0xff, 0, 0)); + $s->drawLine(1000,0); + $s->drawLine(0,1000); + $s->drawLine(-1000,0); + $s->drawLine(0,-1000); + + $b = new SWFButton(); + $b->addShape($s, SWFBUTTON_HIT | SWFBUTTON_UP | SWFBUTTON_DOWN | SWFBUTTON_OVER); + + $b->addAction(new SWFAction("startDrag('/test', 0);"), + SWFBUTTON_MOUSEDOWN); +// '0' signifie : ne pas verrouiller la souris + + $b->addAction(new SWFAction("stopDrag();"), + SWFBUTTON_MOUSEUP | SWFBUTTON_MOUSEUPOUTSIDE); + + $p = new SWFSprite(); + $p->add($b); + $p->nextFrame(); + + $m = new SWFMovie(); + $i = $m->add($p); + $i->setName('test'); + $i->moveTo(1000,1000); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.addshape"> + <refnamediv> + <refname>SWFbutton->addShape</refname> + <refpurpose>Ajoute une forme à un bouton</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->addshape</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + <paramdef>int <parameter>flags</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->addshape</function> ajoute la forme + <parameter>shape</parameter> au bouton. Les valeurs + possibles de <parameter>flags</parameter> sont : + SWFBUTTON_UP, SWFBUTTON_OVER, SWFBUTTON_DOWN ou SWFBUTTON_HIT. + SWFBUTTON_HIT n'est même pas affiché, elle désigne la + région du clic d'un bouton. C'est-à-dire que tous points + où le bouton est déssiné est considéré + comme accessible. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setup"> + <refnamediv> + <refname>SWFbutton->setUp</refname> + <refpurpose>Alias de SWFbutton->addShape(shape, SWFBUTTON_UP)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setup</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->setup</function> est un alias pour + <literal>SWFbutton->addShape(shape, SWFBUTTON_UP)</literal>. + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setover"> + <refnamediv> + <refname>SWFbutton->setOver</refname> + <refpurpose>Alias de addShape(shape, SWFBUTTON_OVER)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setover</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->setover</function> est un alias pour + <literal>addShape(shape, SWFBUTTON_OVER)</literal>. + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setdown"> + <refnamediv> + <refname>SWFbutton->setDown</refname> + <refpurpose>Alias de addShape(shape, SWFBUTTON_DOWN)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setdown</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->setdown</function> est un alias pour + <literal>addShape(shape, SWFBUTTON_DOWN)</literal>. + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.sethit"> + <refnamediv> + <refname>SWFbutton->setHit</refname> + <refpurpose>Alias de addShape(shape, SWFBUTTON_HIT)</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->sethit</function></funcdef> + <paramdef>ressource <parameter>shape</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->sethit</function> est un alias pour + <literal>addShape(shape, SWFBUTTON_HIT)</literal>. + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.addaction"> + <refnamediv> + <refname>SWFbutton->addAction</refname> + <refpurpose>Ajoute une action au bouton</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->addaction</function></funcdef> + <paramdef>ressource <parameter>action</parameter></paramdef> + <paramdef>int <parameter>flags</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->setaction</function> ajoute l'action + <parameter>action</parameter> (créée par <function>swfaction</function>) + au bouton courant, dans les conditions précisées par <parameter>flags</parameter>. + Les valeurs valides de <parameter>flags</parameter> sont : + SWFBUTTON_MOUSEOVER, SWFBUTTON_MOUSEOUT, SWFBUTTON_MOUSEUP, + SWFBUTTON_MOUSEUPOUTSIDE, SWFBUTTON_MOUSEDOWN, SWFBUTTON_DRAGOUT + et SWFBUTTON_DRAGOVER + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.swfbutton.setaction"> + <refnamediv> + <refname>SWFbutton->setAction</refname> + <refpurpose>Assigne l'action du bouton</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>swfbutton->setaction</function></funcdef> + <paramdef>ressource <parameter>action</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfbutton->setaction</function> assigne l'action qui + sera exécutée lorsque le bouton sera cliqué. C'est un alias de + <literal>addAction(shape, SWFBUTTON_MOUSEUP)</literal>. + <parameter>action</parameter> est une <function>swfaction</function>. + </para> + <para> + Voir aussi : + <function>swfbutton->addshape</function> et + <function>swfaction</function>. + </para> + </refsect1> + </refentry> + +<!-- SWFAction --> + + <refentry id="function.swfaction"> + <refnamediv> + <refname>SWFAction</refname> + <refpurpose>Crée une nouvelle action.</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>new <function>swfaction</function></funcdef> + <paramdef>string <parameter>script</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>swfaction</function> crée une nouvelle action, et + compile le script <parameter>script</parameter>. + </para> + <para> + La syntaxe du script est basée sur le langage C, mais il utilise + aussi beaucoup de notions propres à SWF : le bytecode SWF est trop + simpliste pour faire l'essentiel de ce que l'on veut. Par exemple, + il n'est pas possible de faire des fonctions sans descendre profondément + dans les entrailles de la machine, car le bytecode de saut est écrit + en dur. Pas moyen de pousser une adresse dans la pile, ou de dépiler - + Chaque fonction doit savoir exactement où elle retourne. + </para> + <para> + Alors, que reste-t-il? Le compilateur reconnaît les mots suivants : + <itemizedlist> + <listitem> + <simpara> + break + </simpara> + </listitem> + <listitem> + <simpara> + for + </simpara> + </listitem> + <listitem> + <simpara> + continue + </simpara> + </listitem> + <listitem> + <simpara> + if + </simpara> + </listitem> + <listitem> + <simpara> + else + </simpara> + </listitem> + <listitem> + <simpara> + do + </simpara> + </listitem> + <listitem> + <simpara> + while + </simpara> + </listitem> + </itemizedlist> + </para> + <para> + Il n'y a pas de type de données : toutes les valeurs de SWF sont stockées comme + des chaînes de caractères. Les fonctions suivantes peuvent être utilisées dans + les expressions : + <variablelist> + <varlistentry> + <term>time()</term> + <listitem> + <simpara> + Retourne le nombre de milli-secondes depuis le début de + l'animation. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>random(seed)</term> + <listitem> + <simpara> + Retourne un nombre pseudo-aléatoire, entre 0 et seed. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>length(expr)</term> + <listitem> + <simpara> + Retourne la taille de l'expression donnée. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>int(number)</term> + <listitem> + <simpara> + Retourne le nombre number, arrondi à l'entier inférieur le plus proche. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>concat(expr, expr)</term> + <listitem> + <simpara> + Retourne la concaténation des deux expressions. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>ord(expr)</term> + <listitem> + <simpara> + Retourne le code ASCII du caractère expr. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>chr(num)</term> + <listitem> + <simpara> + Retourne le caractère pour le code ASCII num. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>substr(string, location, length)</term> + <listitem> + <simpara> + Retourne la sous-chaîne, extraite de string, de longueur + length et commençant au caractère location. + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + De plus, les commandes suivantes sont accessibles : + <variablelist> + <varlistentry> + <term>duplicateClip(clip, name, depth)</term> + <listitem> + <simpara> + Duplique le sprite nommé clip. La nouvelle animation a le nouveau nom + name et la profondeur depth. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>removeClip(expr)</term> + <listitem> + <simpara> + Supprime l'animation nommée expr. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>trace(expr)</term> + <listitem> + <simpara> + Ecrit l'expression expr dans le fichier de d'historique. + Il est peut probable que le navigateur ou le lecteur ne fasse + quoi que ce soit avec. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>startDrag(target, lock, [left, top, right, bottom])</term> + <listitem> + <simpara> + Comment à déplacer l'animation target. L'argument lock indique + si le déplacement verrouille la souris (utilisez 0, &false;) + ou 1 (&true;)). Les paramètres optionnels + délimitent la zone de déplacement. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stopDrag()</term> + <listitem> + <simpara> + Cesse le déplacement de l'animation. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>callFrame(expr)</term> + <listitem> + <simpara> + Appelle l'image expr comme une fonction. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>getURL(url, target, [method])</term> + <listitem> + <simpara> + Charge l'URL url dans l'objet target. target peut être l'image courante + (je pense) ou une des valeurs magiques "_level0" (remplace l'animation + courante) ou "_level1" (charge une nouvelle animation à la place de + la courante). L'argument optionnel method peut être post ou get, si vous + voulez envoyer des variables au serveur. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>loadMovie(url, target)</term> + <listitem> + <simpara> + La même chose que ci-dessus, plus ou moins. En fait, je ne sais pas + trop quelle est la différence. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>nextFrame()</term> + <listitem> + <simpara> + Va à l'image suivante. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>prevFrame()</term> + <listitem> + <simpara> + Va à l'image précédente. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>play()</term> + <listitem> + <simpara> + Joue l'animation. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stop()</term> + <listitem> + <simpara> + Cesse de jouer l'animation. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>toggleQuality()</term> + <listitem> + <simpara> + Passe de haute en basse qualité (et vice-versa). + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>stopSounds()</term> + <listitem> + <simpara> + Cesse de jouer les sons. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>gotoFrame(num)</term> + <listitem> + <simpara> + Va à l'image numéro num. Les images sont numérotées à + partir de 0. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>gotoFrame(name)</term> + <listitem> + <simpara> + Va à l'image nommée name. Ce qui est carrément cool, car + les labels ne sont pas encore supportés pour les images. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>setTarget(expr)</term> + <listitem> + <simpara> + Modifie le contexte de l'action. C'est ce qu'ils disent, mais + je n'ai pas trop d'idées là-dessus. + </simpara> + </listitem> + </varlistentry> + </variablelist> + Et il y a un truc bizarre : l'expression frameLoaded(num) peut être + utilise dans les conditions if et dans les boucles while pour + vérifier si une image a été chargée. En tous cas, c'est ce qu'il est + supposé faire, mais je ne l'ai jamais testé, et je doute sérieusement + que cela fonctionne. Vous pouvez utiliser plutôt /:framesLoaded à la place. + </para> + <para> + Les sprites ont des propriétés. Vous pouvez les lire toutes + (vraiment?), en modifier quelques unes. Les voici : + <itemizedlist> + <listitem> + <simpara> + x + </simpara> + </listitem> + <listitem> + <simpara> + y + </simpara> + </listitem> + <listitem> + <simpara> + xScale + </simpara> + </listitem> + <listitem> + <simpara> + yScale + </simpara> + </listitem> + <listitem> + <simpara> + currentFrame - (lecture seule) + </simpara> + </listitem> + <listitem> + <simpara> + totalFrames - (lecture seule) + </simpara> + </listitem> + <listitem> + <simpara> + alpha - Niveau de transparence + </simpara> + </listitem> + <listitem> + <simpara> + visible - 1=on, 0=off (?) + </simpara> + </listitem> + <listitem> + <simpara> + width - (lecture seule) + </simpara> + </listitem> + <listitem> + <simpara> + height - (lecture seule) + </simpara> + </listitem> + <listitem> + <simpara> + rotation + </simpara> + </listitem> + <listitem> + <simpara> + target - (lecture seule) (???) + </simpara> + </listitem> + <listitem> + <simpara> + framesLoaded - (lecture seule) + </simpara> + </listitem> + <listitem> + <simpara> + name + </simpara> + </listitem> + <listitem> + <simpara> + dropTarget - (lecture seule) (???) + </simpara> + </listitem> + <listitem> + <simpara> + url - (lecture seule) (???) + </simpara> + </listitem> + <listitem> + <simpara> + highQuality - 1=high, 0=low (?) + </simpara> + </listitem> + <listitem> + <simpara> + focusRect - (???) + </simpara> + </listitem> + <listitem> + <simpara> + soundBufTime - (???) + </simpara> + </listitem> + </itemizedlist> + Modifier la position d'un sprite est aussi simple que + <literal>/box.x = 100;</literal>. Pourquoi le slash initial? + C'est comme cela que Flash garde la trace des sprites dans les + animations, un peu comme des fichiers sous Unix. Si le sprite + qui s'appelle box a lui-même un autre sprite appelé biff, vous + pouvez y accéder avec la commande <literal>/box/biff.x = 100;</literal>. + En tous cas, ça marche pour moi. Corrigez moi si c'est faux!. + </para> + <para> + Cet exemple simple va déplacer le gros carré rouge dans la fenêtre. + <example> + <title>Exemple avec <function>swfaction</function></title> + <programlisting role="php"> +<?php + $s = new SWFShape(); + $f = $s->addFill(0xff, 0, 0); + $s->setRightFill($f); + + $s->movePenTo(-500,-500); + $s->drawLineTo(500,-500); + $s->drawLineTo(500,500); + $s->drawLineTo(-500,500); + $s->drawLineTo(-500,-500); + + $p = new SWFSprite(); + $i = $p->add($s); + $i->setDepth(1); + $p->nextFrame(); + + for($n=0; $n<5; ++$n) + { + $i->rotate(-15); + $p->nextFrame(); + } + + $m = new SWFMovie(); + $m->setBackground(0xff, 0xff, 0xff); + $m->setDimension(6000,4000); + + $i = $m->add($p); + $i->setDepth(1); + $i->moveTo(-500,2000); + $i->setName("box"); + + $m->add(new SWFAction("/box.x += 3;")); + $m->nextFrame(); + $m->add(new SWFAction("gotoFrame(0); play();")); + $m->nextFrame(); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + Cet exemple suit votre souris sur l'écran. + <example> + <title>Exemple avec <function>swfaction</function></title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setRate(36.0); + $m->setDimension(1200, 800); + $m->setBackground(0, 0, 0); + + /* sprite de suivi de souris : vide, mais il suit la souris + de manière à ce que nous connaissions ses coordonnées*/ + + $i = $m->add(new SWFSprite()); + $i->setName('mouse'); + + $m->add(new SWFAction(" + startDrag('/mouse', 1); /* '1' signifie verrouiller la souris */ + ")); + + + /* On peut tout simplement virer l'anti-aliasing, car il n'y a + que des gros carrés, finalement */ + + $m->add(new SWFAction(" + this.quality = 0; + ")); + + /* boîte de morphing */ + $r = new SWFMorph(); + $s = $r->getShape1(); + + /* Notez que ce n'est pas pratique pour les formes habituelles. + Aucune idée de pourquoi */ + $s->setLeftFill($s->addFill(0xff, 0xff, 0xff)); + $s->movePenTo(-40, -40); + $s->drawLine(80, 0); + $s->drawLine(0, 80); + $s->drawLine(-80, 0); + $s->drawLine(0, -80); + + $s = $r->getShape2(); + + $s->setLeftFill($s->addFill(0x00, 0x00, 0x00)); + $s->movePenTo(-1, -1); + $s->drawLine(2, 0); + $s->drawLine(0, 2); + $s->drawLine(-2, 0); + $s->drawLine(0, -2); + + + /* sprite contenant la boîte de morphing - + c'est juste un scénario avec une boîte de morphing */ + + $box = new SWFSprite(); + $box->add(new SWFAction(" + stop(); + ")); + $i = $box->add($r); + + for($n=0; $n<=20; ++$n) + { + $i->setRatio($n/20); + $box->nextFrame(); + } + + + /* ce conteneur nous permet d'utiliser la même action plusieurs fois */ + + $cell = new SWFSprite(); + $i = $cell->add($box); + $i->setName('box'); + + $cell->add(new SWFAction(" + + setTarget('box'); + + /* ...x signifie abscisse du parent, c'est-à-dire (..).x */ + dx = (/mouse.x + random(6)-3 - ...x)/5; + dy = (/mouse.y + random(6)-3 - ...y)/5; + gotoFrame(int(dx*dx + dy*dy)); + + ")); + + $cell->nextFrame(); + $cell->add(new SWFAction(" + + gotoFrame(0); + play(); + + ")); + + $cell->nextFrame(); + + + /* finalement, ajoutons quelques cellules à l'animation */ + + for($x=0; $x<12; ++$x) + { + for($y=0; $y8; ++$y) + { + $i = $m->add($cell); + $i->moveTo(100*$x+50, 100*$y+50); + } + } + + $m->nextFrame(); + + $m->add(new SWFAction(" + + gotoFrame(1); + play(); + + ")); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + La même chose que ci-dessus, mais en couleurs. + <example> + <title>Exemple avec <function>swfaction</function></title> + <programlisting role="php"> +<?php + + $m = new SWFMovie(); + $m->setDimension(11000, 8000); + $m->setBackground(0x00, 0x00, 0x00); + + $m->add(new SWFAction(" + +this.quality = 0; +/frames.visible = 0; +startDrag('/mouse', 1); + + ")); + + // sprite de suivi de souris + $t = new SWFSprite(); + $i = $m->add($t); + $i->setName('mouse'); + + $g = new SWFGradient(); + $g->addEntry(0, 0xff, 0xff, 0xff, 0xff); + $g->addEntry(0.1, 0xff, 0xff, 0xff, 0xff); + $g->addEntry(0.5, 0xff, 0xff, 0xff, 0x5f); + $g->addEntry(1.0, 0xff, 0xff, 0xff, 0); + + // gradient + $s = new SWFShape(); + $f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT); + $f->scaleTo(0.03); + $s->setRightFill($f); + $s->movePenTo(-600, -600); + $s->drawLine(1200, 0); + $s->drawLine(0, 1200); + $s->drawLine(-1200, 0); + $s->drawLine(0, -1200); + + // on en fait un sprite pour utiliser la fonction multColor() + $p = new SWFSprite(); + $p->add($s); + $p->nextFrame(); + + // Ajoute la forme ici, chaque forme dans une couleur différente + $q = new SWFSprite(); + $q->add(new SWFAction("gotoFrame(random(7)+1); stop();")); + $i = $q->add($p); + + $i->multColor(1.0, 1.0, 1.0); + $q->nextFrame(); + $i->multColor(1.0, 0.5, 0.5); + $q->nextFrame(); + $i->multColor(1.0, 0.75, 0.5); + $q->nextFrame(); + $i->multColor(1.0, 1.0, 0.5); + $q->nextFrame(); + $i->multColor(0.5, 1.0, 0.5); + $q->nextFrame(); + $i->multColor(0.5, 0.5, 1.0); + $q->nextFrame(); + $i->multColor(1.0, 0.5, 1.0); + $q->nextFrame(); + + // Enfin, le code de l'action + $p = new SWFSprite(); + $i = $p->add($q); + $i->setName('frames'); + $p->add(new SWFAction(" + +dx = (/:mousex-/:lastx)/3 + random(10)-5; +dy = (/:mousey-/:lasty)/3; +x = /:mousex; +y = /:mousey; +alpha = 100; + + ")); + $p->nextFrame(); + + $p->add(new SWFAction(" + +this.x = x; +this.y = y; +this.alpha = alpha; +x += dx; +y += dy; +dy += 3; +alpha -= 8; + + ")); + $p->nextFrame(); + + $p->add(new SWFAction("prevFrame(); play();")); + $p->nextFrame(); + + $i = $m->add($p); + $i->setName('frames'); + $m->nextFrame(); + + $m->add(new SWFAction(" + +lastx = mousex; +lasty = mousey; +mousex = /mouse.x; +mousey = /mouse.y; + +++num; + +if(num == 11) + num = 1; + +removeClip('char' & num); +duplicateClip(/frames, 'char' & num, num); + + ")); + + $m->nextFrame(); + $m->add(new SWFAction("prevFrame(); play();")); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); +?> + </programlisting> + </example> + </para> + <para> + Cet exemple simple gère le clavier (vous devrez cependant + cliquer dans la fenêtre pour lui donner le focus, et vous + devrez aussi laisser votre souris dans la fenêtre. Si vous + savez comment faire cela automatiquement, dites-le moi!). + <example> + <title>Exemple avec <function>swfaction</function></title> + <programlisting role="php"> +<?php + + /* Le sprite n'a qu'une lettre par image */ + + $p = new SWFSprite(); + $p->add(new SWFAction("stop();")); + + $chars = "abcdefghijklmnopqrstuvwxyz". + "ABCDEFGHIJKLMNOPQRSTUVWXYZ". + "1234567890!@#$%^&*()_+-=/[]{}|;:,.<>?`~"; + + $f = new SWFFont("_sans"); + + for($n=0; $nremove($i); + $t = new SWFTextField(); + $t->setFont($f); + $t->setHeight(240); + $t->setBounds(600,240); + $t->align(SWFTEXTFIELD_ALIGN_CENTER); + $t->addString($c); + $i = $p->add($t); + $p->labelFrame($c); + $p->nextFrame(); + } + + + /* région de clic pour le bouton : toute la fenêtre */ + + $s = new SWFShape(); + $s->setFillStyle0($s->addSolidFill(0, 0, 0, 0)); + $s->drawLine(600, 0); + $s->drawLine(0, 400); + $s->drawLine(-600, 0); + $s->drawLine(0, -400); + + + /* le bouton s'assure des touches pressées, et envoie le bon + sprite à l'image de droite */ + + $b = new SWFButton(); + $b->addShape($s, SWFBUTTON_HIT); + + for($n=0; $naddAction(new SWFAction(" + +setTarget('/char'); +gotoFrame('$c'); + + "), SWFBUTTON_KEYPRESS($c)); + } + + $m = new SWFMovie(); + $m->setDimension(600,400); + $i = $m->add($p); + $i->setName('char'); + $i->moveTo(0,80); + + $m->add($b); + + header('Content-type: application/x-shockwave-flash'); + $m->output(); + +?> + </programlisting> + </example> + </para> + </refsect1> + </refentry> + </reference> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +-->