dams            Mon Apr  2 10:57:36 2001 EDT

  Added files:                 
    /phpdoc/fr/functions        ming.xml 
  Log:
  Translated in French.Should be translatable, but wait for another week .
  

Index: phpdoc/fr/functions/ming.xml
+++ phpdoc/fr/functions/ming.xml
 <reference id="ref.ming">
  <title>Fonctions Ming pour Flash</title>
  <titleabbrev>Ming (Flash)</titleabbrev>
  <partintro>
   <sect1 id="ming.intro">
    <title>Introduction</title>
    <simpara>
         Ming est une librairie open-source (LGPL) qui vous permet de 
         cr&eacute;er des animations au format Flash. Ming supporte toutes les
         fonctionnalit&eacute;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 &eacute;v&eacute;nements sons.
    </simpara>
    <simpara>
     Ming n'est pas un acronyme.
    </simpara>
    <simpara>
     Notez que toutes les distances sp&eacute;cifi&eacute;es (longeurs, distances, 
     tailles...) sont en "twips", c'est &agrave; dire 20 unit&eacute;s par pixels. 
     C'est plus ou moins arbitraire, car le lecteur Flash fait une
     mise &agrave; l'&eacute;chelle avec les valeurs qui lui sont fournis dans la 
     balise embed, ou la frame courante si la balise embed n'est pas
     utilis&eacute;e.
    </simpara>
    <simpara>
         Ming propose de nombreux avantages par rapport &agrave; l'extension swf.
         Vous pouvez utiliser Ming sur tous les OS o&ugrave; vous pouvez compiler
         le code, tandis que swf est limit&eacute; &agrave; Windows. Ming vous 
&eacute;vite
         la d&eacute;concertante complexit&eacute; du format SWF, en transformant les
         &eacute;l&eacute;ments des animations en objets PHP. Enfin, Ming est toujours
         en cours de d&eacute;veloppement et surveill&eacute; par son auteur : si vous
         souhaitez une nouvelle fonctionnalit&eacute;, dites le lui : 
         <ulink url="mailto:&email.ming;">&email.ming;</ulink>.
    </simpara>
    <simpara>
     Ming et tous les objets cit&eacute;s ont &eacute;t&eacute; ajout&eacute; 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&eacute; Ming.
    </para>
    <para>
     T&eacute;l&eacute;chargez l'archive Ming. D&eacute;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 &lt;phpdir&gt;/ext/ming 
       cp php_ext/* &lt;phpdir&gt;/ext/ming 
       cd &lt;phpdir&gt; 
       ./buildconf 
       ./configure --with-ming &lt;other config options&gt; 
       Compilez et installez PHP comme d'habitude.
       Red&eacute;marrez votre serveur web si n&eacute;cessaire.
      </literallayout>
     </para>
    </sect2>
    <sect2 id="ming.install.php_module.unix">
     <title>Compilation en module avec PHP (Unix)</title>
     <para>
      t&eacute;l&eacute;chargez <filename>php_ming.so.gz</filename>. 
      D&eacute;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 &ecirc;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&eacute;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&eacute;e un objet 'animation', 
    repr&eacute;sentant une animation Flash version 4.
   </para>
   <simpara>
    SWFMovie a les m&eacute;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&icirc;te le pr&eacute;c&eacute;der de la fonction
     <function>header</function>.
     <programlisting role="php">
&lt;?php
header('Content-type: application/x-shockwave-flash'); 
?&gt;
         </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&eacute;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 &ecirc;tre de
     n'importe quel type : forme (shape), texte (text), police (font)... etc.
     Ils doivent &ecirc;tre ajout&eacute; &agrave; une animation pour &ecirc;tre 
utilis&eacute;.
    </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&ecirc;me forme plusieurs fois dans la m&ecirc;me 
     animation, et obtenir des ressources diff&eacute;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
     &ecirc;tre affich&eacute; ou utilis&eacute;.
    </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&eacute;flechissez quelques instants :-) ). En fait, cela ne serait pas si
     stupide : vous pouvez laisser apercevoir le fond HTML &agrave; 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&eacute;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
     &agrave; <parameter>rate</parameter> images par secondes. L'animation ralentira
     d'elle-m&ecirc;me si le lecteur Flash ne peut pas afficher suffisament rapidement,
     &agrave; moins qu'il n'y ait du son en stream, auquel cas les images sont 
sacrifi&eacute;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 &agrave; <parameter>numberofframes</parameter>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.swfmovie.nextframe">
   <refnamediv>
    <refname>SWFMovie->nextframe</refname>
    <refpurpose>Passe &agrave; 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 &agrave; 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&egrave;s robuste,
     et se prend facilement les pieds dans le tapis (elle peut
     &eacute;viter la balise initiale ID3, mais c'est bien tout).
     Tout comme swfshape->addjpegfill(), ce n'est pas
     une fonction stable. Il faudra s&ucirc;rement faire un objet 
s&eacute;par&eacute;, pour
     g&eacute;rer les types de son.
    </para>
    <para>
     Notez que l'animation n'est pas suffisament intelligente pour
     ajouter un nombre suffisant d'images, afin de correspondre &agrave; la 
dur&eacute;e
     totale du stream MP3. Il vous faudra ajouter des images jusqu'&agrave;
     dur&eacute;e de la musique multipli&eacute; par le nombre d'images par secondes.
    </para>
    <para>
     Oui, vous pouvez utiliser Ming pour mettre un rock-'n-roll endiabl&eacute;
     dans vos animation. Evitez d'en parler &agrave; l'RIAA ou la SACEM. 
     <example>
      <title>Exemple avec <function>swfmovie->streammp3</function></title>
      <programlisting role="php">
&lt;?php
  $m = new SWFMovie();
  $m-&gt;setRate(12.0);
  $m-&gt;streamMp3("distortobass.mp3");
// utilisez vos propres MP3
// assurez vous des droits

  // 11.85 secondes avec 12.0 images par secondes = 142 frames
  $m-&gt;setFrames(142);

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>

<!--      SWFDisplayItem   -->

  <refentry id="function.swfdisplayitem">
   <refnamediv>
    <refname>SWFDisplayItem</refname>
    <refpurpose>Cr&eacute;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&eacute;e un nouvel objet d'affichage 
displayitem.
    </para>
    <para>
     C'est l&agrave; que toute l'animation prend vie. Une fois que vous avez 
d&eacute;fini une
     forme, un texte, un sprite ou un bouton, vous l'ajoutez &agrave; une animation, 
puis
     vous utilisez la resource retourn&eacute;e pour d&eacute;placer, &eacute;tirer, 
contracter, faire
     tourner ou incliner la forme.
    </para>
    <simpara>
     SWFDisplayItem a les m&eacute;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&eacute;place un objet en coordonn&eacute;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&eacute;place la forme courante
     jusqu'au point de coordonn&eacute;es globales 
     (<parameter>x</parameter>,<parameter>y</parameter>).
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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&eacute;place un objet en coordonn&eacute;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&eacute;place la forme courante
     de <parameter>dx</parameter> et <parameter>dy</parameter> unit&eacute;s, depuis
     sa position courante.
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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&eacute;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> &eacute;tire un objet 
     jusqu'au dimensions (<parameter>x</parameter>,<parameter>y</parameter>).
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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> &eacute;tire un objet 
     de (<parameter>dx</parameter>,<parameter>dy</parameter>), &agrave; partir
     de sa taille courante.
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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'&agrave;
     l'angle absolu<parameter>degrees</parameter>, en degr&eacute;s.
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; une animation
     avec la fonction <function>swfmovie->add</function>.
    </simpara>
    <para>
     Cet exemple am&egrave;ne trois cha&icirc;nes tournoyantes depuis le fond de
     l'&eacute;cran. Plut&ocirc;t sympa.
     <example>
      <title>Exemple avec <function>swfdisplayitem->rotateto</function></title>
      <programlisting role="php">
&lt;?php
  $thetext =  "ming!";

  $f = new SWFFont("Bauhaus 93.fdb");

  $m = new SWFMovie();
  $m-&gt;setRate(24.0);
  $m-&gt;setDimension(2400, 1600);
  $m-&gt;setBackground(0xff, 0xff, 0xff);

  // Les fonctions avec un nombre d'arguments sont vraiement une bonne id&eacute;es.
  // Sinc&egrave;rement!

  function text($r, $g, $b, $a, $rot, $x, $y, $scale, $string)
  {
    global $f, $m;

    $t = new SWFText();
    $t-&gt;setFont($f);
    $t-&gt;setColor($r, $g, $b, $a);
    $t-&gt;setHeight(960);
    $t-&gt;moveTo(-($f-&gt;getWidth($string))/2, $f-&gt;getAscent()/2);
    $t-&gt;addString($string);

    // On peut ajouter des propri&eacute;t&eacute;s comme pour une variable PHP 
standard
    // tant que les noms ne sont pas d&eacute;j&agrave; pris.
    // e.g., vous ne pouvez pas utilisez $i-&gt;scale, car c'est une fonction.

    $i = $m-&gt;add($t);
    $i-&gt;x = $x;
    $i-&gt;y = $y;
    $i-&gt;rot = $rot;
    $i-&gt;s = $scale;
    $i-&gt;rotateTo($rot);
    $i-&gt;scale($scale, $scale);

    // mais les modification sont locales &agrave; une fonction, donc il faut 
    // retourner l'objet modifi&eacute;. Pas pratique... 

    return $i;
 }

  function step($i)
  {
    $oldrot = $i-&gt;rot;
    $i-&gt;rot = 19*$i-&gt;rot/20;
    $i-&gt;x = (19*$i-&gt;x + 1200)/20;
    $i-&gt;y = (19*$i-&gt;y + 800)/20;
    $i-&gt;s = (19*$i-&gt;s + 1.0)/20;

    $i-&gt;rotateTo($i-&gt;rot);
    $i-&gt;scaleTo($i-&gt;s, $i-&gt;s);
    $i-&gt;moveTo($i-&gt;x, $i-&gt;y);

    return $i;
  }

  // Alors? Ca 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-&gt;nextFrame();
  }

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </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&eacute;s, en plus de sa rotation
     courante.
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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) &agrave; <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&eacute;, et s'il vaut moins, ce sera plus droit.
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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>
     &agrave; l'inclinaison courante (x-skew). 
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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) &agrave; <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&eacute;, et s'il vaut moins, ce sera plus droit.
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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>
     &agrave; l'inclinaison courante (y-skew).
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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 &agrave;
     la profondeur <parameter>depth</parameter>. Par d&eacute;faut, l'objet
     est plac&eacute; au niveau o&ugrave; il a &eacute;t&eacute; ajout&eacute; dans 
l'animation. Les objets
     les plus anciens sont plac&eacute;s tout en bas, et les nouveaux sont
     superpos&eacute;s.
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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 &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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 &agrave; l'objet courant
     le nom de <parameter>name</parameter>. Cela servira &agrave; rep&eacute;rer les 
acteurs
     d'un script d'action. Cela ne sert qu'avec les sprites.
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; une animation
     avec la fonction <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>double <parameter>ratio</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swfdisplayitem->setratio</function> modifie le ratio de l'objet,
     et le fixe &agrave; <parameter>ratio</parameter>. Uniquement utile pour les
     morphings.
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; une animation
     avec la fonction <function>swfmovie->add</function>.
    </simpara>
    <para>
     Cet exemple simple effectue un morphing d&eacute;licat de trois cercles 
     concentriques.
     <example>
      <title>Exemple <function>swfdisplayitem->setname</function></title>
      <programlisting role="php">
&lt;?php

  $p = new SWFMorph();

  $g = new SWFGradient();
  $g-&gt;addEntry(0.0, 0, 0, 0);
  $g-&gt;addEntry(0.16, 0xff, 0xff, 0xff);
  $g-&gt;addEntry(0.32, 0, 0, 0);
  $g-&gt;addEntry(0.48, 0xff, 0xff, 0xff);
  $g-&gt;addEntry(0.64, 0, 0, 0);
  $g-&gt;addEntry(0.80, 0xff, 0xff, 0xff);
  $g-&gt;addEntry(1.00, 0, 0, 0);

  $s = $p-&gt;getShape1();
  $f = $s-&gt;addFill($g, SWFFILL_RADIAL_GRADIENT);
  $f-&gt;scaleTo(0.05);
  $s-&gt;setLeftFill($f);
  $s-&gt;movePenTo(-160, -120);
  $s-&gt;drawLine(320, 0);
  $s-&gt;drawLine(0, 240);
  $s-&gt;drawLine(-320, 0);
  $s-&gt;drawLine(0, -240);

  $g = new SWFGradient();
  $g-&gt;addEntry(0.0, 0, 0, 0);
  $g-&gt;addEntry(0.16, 0xff, 0, 0);
  $g-&gt;addEntry(0.32, 0, 0, 0);
  $g-&gt;addEntry(0.48, 0, 0xff, 0);
  $g-&gt;addEntry(0.64, 0, 0, 0);
  $g-&gt;addEntry(0.80, 0, 0, 0xff);
  $g-&gt;addEntry(1.00, 0, 0, 0);

  $s = $p-&gt;getShape2();
  $f = $s-&gt;addFill($g, SWFFILL_RADIAL_GRADIENT);
  $f-&gt;scaleTo(0.05);
  $f-&gt;skewXTo(1.0);
  $s-&gt;setLeftFill($f);
  $s-&gt;movePenTo(-160, -120);
  $s-&gt;drawLine(320, 0);
  $s-&gt;drawLine(0, 240);
  $s-&gt;drawLine(-320, 0);
  $s-&gt;drawLine(0, -240);

  $m = new SWFMovie();
  $m-&gt;setDimension(320, 240);
  $i = $m-&gt;add($p);
  $i-&gt;moveTo(160, 120);

  for($n=0; $n<=1.001; $n+=0.01)
  {
    $i-&gt;setRatio($n);
    $m-&gt;nextFrame();
  }

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>
  
  <refentry id="function.swfdisplayitem.addcolor">
   <refnamediv>
    <refname>SWFDisplayItem->addColor</refname>
    <refpurpose>Ajoute une couleur &agrave; une transoformation.</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>void <function>swfdisplayitem->addcolor</function></funcdef>
      <paramdef>integer <parameter><optional>red</optional></parameter></paramdef>
      <paramdef>integer <parameter><optional>green</optional></parameter></paramdef>
      <paramdef>integer <parameter><optional>blue</optional></parameter></paramdef>
      <paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swfdisplayitem->addcolor</function> ajoute une couleur &agrave; 
     la transformations courante. La couleur est donn&eacute;e sous la forme
     RGB.
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; 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>integer <parameter><optional>red</optional></parameter></paramdef>
      <paramdef>integer <parameter><optional>green</optional></parameter></paramdef>
      <paramdef>integer <parameter><optional>blue</optional></parameter></paramdef>
      <paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swfdisplayitem->multcolor</function> multiplie la couleur de
     transformation par les valeurs donn&eacute;es.
    </para>
    <simpara>
     L'objet peut &ecirc;tre <function>swfshape</function>, 
     <function>swfbutton</function>, <function>swftext</function> ou
     <function>swfsprite</function>. Il doit avoir &eacute;t&eacute; ajout&eacute; 
&agrave; une animation
     avec la fonction <function>swfmovie->add</function>.
    </simpara>
    <para>
     Cet exemple simple modifie l'atmosph&egrave;re de votre image, et
     en fait une sc&egrave;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">
&lt;?php

  $b = new SWFBitmap("backyard.jpg");
  // Utilisez une de vos images 
  $s = new SWFShape();
  $s-&gt;setRightFill($s-&gt;addFill($b));
  $s-&gt;drawLine($b-&gt;getWidth(), 0);
  $s-&gt;drawLine(0, $b-&gt;getHeight());
  $s-&gt;drawLine(-$b-&gt;getWidth(), 0);
  $s-&gt;drawLine(0, -$b-&gt;getHeight());

  $m = new SWFMovie();
  $m-&gt;setDimension($b-&gt;getWidth(), $b-&gt;getHeight());

  $i = $m-&gt;add($s);

  for($n=0; $n<=20; ++$n)
  {
    $i-&gt;multColor(1.0-$n/10, 1.0, 1.0);
    $i-&gt;addColor(0xff*$n/20, 0, 0);
    $m-&gt;nextFrame();
  }

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry> 
  
<!--      SWFShape  -->

  <refentry id="function.swfshape">
   <refnamediv>
    <refname>SWFShape</refname>
    <refpurpose>Cr&eacute;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&eacute;e une nouvelle forme.
    </para>
    <simpara>
     SWFShape a les m&eacute;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">
&lt;?php
  $s = new SWFShape();
  $s-&gt;setLine(40, 0x7f, 0, 0);
  $s-&gt;setRightFill($s-&gt;addFill(0xff, 0, 0));
  $s-&gt;movePenTo(200, 200);
  $s-&gt;drawLineTo(6200, 200);
  $s-&gt;drawLineTo(6200, 4600);
  $s-&gt;drawCurveTo(200, 4600, 200, 200);

  $m = new SWFMovie();
  $m-&gt;setDimension(6400, 4800);
  $m-&gt;setRate(12.0);
  $m-&gt;add($s);
  $m-&gt;nextFrame();

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </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>integer <parameter><optional>red</optional></parameter></paramdef>
      <paramdef>integer <parameter><optional>green</optional></parameter></paramdef>
      <paramdef>integer <parameter><optional>blue</optional></parameter></paramdef>
      <paramdef>integer <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&eacute; (et tous les
     autres arguments sont ignor&eacute;s). Si <parameter>width</parameter> > 0, 
     alors la couleur de la ligne devient (<parameter>red</parameter>, 
     <parameter>green</parameter>, <parameter>blue</parameter>). Les couleurs
     sonr repr&eacute;sent&eacute;es en RGB. Le dernier param&egrave;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&eacute;clarer un style avant de l'utiliser (voir exemple).
    </para>
    <para>
     Cet exemple enfantin dessine une cha&icirc;ne "!#%*@", dans des couleurs
     marrantes et un style rigolo.
     <example>
      <title>Exemple <function>swfshape->setline</function></title>
      <programlisting role="php">
&lt;?php
  $s = new SWFShape();
  $f1 = $s-&gt;addFill(0xff, 0, 0);
  $f2 = $s-&gt;addFill(0xff, 0x7f, 0);
  $f3 = $s-&gt;addFill(0xff, 0xff, 0);
  $f4 = $s-&gt;addFill(0, 0xff, 0);
  $f5 = $s-&gt;addFill(0, 0, 0xff);

  // erreur : il faut d&eacute;clarer tous les styles avant
  // de les utiliser.
  $s-&gt;setLine(40, 0x7f, 0, 0);
  $s-&gt;setLine(40, 0x7f, 0x3f, 0);
  $s-&gt;setLine(40, 0x7f, 0x7f, 0);
  $s-&gt;setLine(40, 0, 0x7f, 0);
  $s-&gt;setLine(40, 0, 0, 0x7f);

  $f = new SWFFont('Techno.fdb');

  $s-&gt;setRightFill($f1);
  $s-&gt;setLine(40, 0x7f, 0, 0);
  $s-&gt;drawGlyph($f, '!');
  $s-&gt;movePen($f-&gt;getWidth('!'), 0);

  $s-&gt;setRightFill($f2);
  $s-&gt;setLine(40, 0x7f, 0x3f, 0);
  $s-&gt;drawGlyph($f, '#');
  $s-&gt;movePen($f-&gt;getWidth('#'), 0);

  $s-&gt;setRightFill($f3);
  $s-&gt;setLine(40, 0x7f, 0x7f, 0);
  $s-&gt;drawGlyph($f, '%');
  $s-&gt;movePen($f-&gt;getWidth('%'), 0);

  $s-&gt;setRightFill($f4);
  $s-&gt;setLine(40, 0, 0x7f, 0);
  $s-&gt;drawGlyph($f, '*');
  $s-&gt;movePen($f-&gt;getWidth('*'), 0);

  $s-&gt;setRightFill($f5);
  $s-&gt;setLine(40, 0, 0, 0x7f);
  $s-&gt;drawGlyph($f, '@');

  $m = new SWFMovie();
  $m-&gt;setDimension(3000,2000);
  $m-&gt;setRate(12.0);
  $i = $m-&gt;add($s);

// note la chaine est ici!!!
  $i-&gt;moveTo(1500-$f-&gt;getWidth("!#%*@")/2, 1000+$f-&gt;getAscent()/2);

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.swfshape.addfill">
   <refnamediv>
    <refname>SWFShape->addFill</refname>
    <refpurpose>Ajoute un remplissage plein &agrave; la forme.</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>void <function>swfshape->addfill</function></funcdef>
      <paramdef>integer <parameter>red</parameter></paramdef>
      <paramdef>integer <parameter>green</parameter></paramdef>
      <paramdef>integer <parameter>blue</parameter></paramdef>
      <paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <funcsynopsis>
     <funcprototype>
      <funcdef>void <function>swfshape->addfill</function></funcdef>
      <paramdef>SWFbitmap <parameter>bitmap</parameter></paramdef>
      <paramdef>integer <parameter><optional>flags</optional></parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <funcsynopsis>
     <funcprototype>
      <funcdef>void <function>swfshape->addfill</function></funcdef>
      <paramdef>SWFGradient <parameter>gradient</parameter></paramdef>
      <paramdef>integer <parameter><optional>flags</optional></parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swfshape->addfill</function> ajoute un remplissage plein &agrave;
     la forme. <function>swfshape->addfill</function> accepte trois diff&eacute;rents 
types
     d'arguments.
    </para>
    <para>
     <parameter>red</parameter>, <parameter>green</parameter>, 
<parameter>blue</parameter>
     est une couleur (format RGB). Le dernier param&egrave;tre 
<parameter>a</parameter> 
     est optionnel.
    </para>
    <para>
     L'argument <parameter>bitmap</parameter> est un objet 
     <function>swfbitmap</function>. Le param&egrave;tre <parameter>flags</parameter>
     peut &ecirc;tre l'un des suivants : SWFFILL_CLIPPED_BITMAP ou 
SWFFILL_TILED_BITMAP. 
     Par d&eacute;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&eacute;faut, 
     c'est SWFFILL_LINEAR_GRADIENT. Cette fois ci, j'en suis s&ucirc;r.
    </para>
    <para>
     <function>swfshape->addfill</function> retourne un objet 
<function>swffill</function>
     &agrave; utiliser avec <function>swfshape->setleftfill</function>, 
     et <function>swfshape->setrightfill</function> d&eacute;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'&eacute;tirer avec la forme dans cet exemple...
     <example>
      <title>Exemple avec <function>swfshape->addfill</function></title>
      <programlisting role="php">
&lt;?php

  $p = new SWFMorph();

  $b = new SWFBitmap("alphafill.jpg");
  // utilisez vos propres bitmaps!
  $width = $b-&gt;getWidth();
  $height = $b-&gt;getHeight();

  $s = $p-&gt;getShape1();
  $f = $s-&gt;addFill($b, SWFFILL_TILED_BITMAP);
  $f-&gt;moveTo(-$width/2, -$height/4);
  $f-&gt;scaleTo(1.0, 0.5);
  $s-&gt;setLeftFill($f);
  $s-&gt;movePenTo(-$width/2, -$height/4);
  $s-&gt;drawLine($width, 0);
  $s-&gt;drawLine(0, $height/2);
  $s-&gt;drawLine(-$width, 0);
  $s-&gt;drawLine(0, -$height/2);

  $s = $p-&gt;getShape2();
  $f = $s-&gt;addFill($b, SWFFILL_TILED_BITMAP);

  // ces d&eacute;placements n'ont aucun effet
  $f-&gt;moveTo(-$width/4, -$height/2);
  $f-&gt;scaleTo(0.5, 1.0);

  $s-&gt;setLeftFill($f);
  $s-&gt;movePenTo(-$width/4, -$height/2);
  $s-&gt;drawLine($width/2, 0);
  $s-&gt;drawLine(0, $height);
  $s-&gt;drawLine(-$width/2, 0);
  $s-&gt;drawLine(0, -$height);

  $m = new SWFMovie();
  $m-&gt;setDimension($width, $height);
  $i = $m-&gt;add($p);
  $i-&gt;moveTo($width/2, $height/2);

  for($n=0; $n<1.001; $n+=0.03)
  {
    $i-&gt;setRatio($n);
    $m-&gt;nextFrame();
  }

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>
  
  <refentry id="function.swfshape.setleftfill">
   <refnamediv>
    <refname>SWFShape->setLeftFill</refname>
    <refpurpose>Modifie la couleur de rast&eacute;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>integer <parameter>red</parameter></paramdef>
      <paramdef>integer <parameter>green</parameter></paramdef>
      <paramdef>integer <parameter>blue</parameter></paramdef>
      <paramdef>integer <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&eacute;, il est pratique de
     savoir &agrave; l'avance quelle sont les remplissages, et le format
     SWF les demande.
    </para>
    <para>
     <function>swfshape->setleftfill</function> affecte &agrave; la couleur
     de rast&eacute;risation de gauche, c'est &agrave; dire l'int&eacute;rieur d'un 
objet,
     si vous d&eacute;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&eacute; par la fonction
     <function>swfshape->addfill</function> ci-dessus.
    </para>
    <para>
     Cela semble &ecirc;tre le contraire lorsque vous d&eacute;fnissez une forme
     dans un morphing. Si votre navigateur crashe, essayez de placer
     le remplissage sur l'autre cot&eacute;.
    </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>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>
    <funcsynopsis>
     <funcprototype>
      <funcdef>void <function>swfshape->setrightfill</function></funcdef>
      <paramdef>integer <parameter>red</parameter></paramdef>
      <paramdef>integer <parameter>green</parameter></paramdef>
      <paramdef>integer <parameter>blue</parameter></paramdef>
      <paramdef>integer <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&eacute;place le stylo.</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>void <function>swfshape->movepento</function></funcdef>
      <paramdef>integer <parameter>x</parameter></paramdef>
      <paramdef>integer <parameter>y</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <simpara>
     <function>swfshape->setrightfill</function> d&eacute;place le stylo dans la
     forme jusqu'au coordonn&eacute;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&eacute;place le stylo relativement.</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>void <function>swfshape->movepen</function></funcdef>
      <paramdef>integer <parameter>dx</parameter></paramdef>
      <paramdef>integer <parameter>dy</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <simpara>
     <function>swfshape->setrightfill</function> d&eacute;place le stylo dans la
     forme depuis les coordonn&eacute;es (current x,current y) jusqu'au
     coordonn&eacute;es (current x + <parameter>dx</parameter>,
     current y + <parameter>dy</parameter>), dans l'espace de coordonn&eacute;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>integer <parameter>x</parameter></paramdef>
      <paramdef>integer <parameter>y</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <simpara>
     <function>swfshape->setrightfill</function> dessine une ligne
     (avec le style courant de ligne, modifi&eacute; par 
     <function>swfshape->setline</function>) depuis le point courant
     jusqu'au point (<parameter>x</parameter>,<parameter>y</parameter>) 
     dans l'espace de coordonn&eacute;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>integer <parameter>dx</parameter></paramdef>
      <paramdef>integer <parameter>dy</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <simpara>
     <function>swfshape->setrightfill</function> dessine une ligne
     (avec le style courant de ligne, modifi&eacute; par 
     <function>swfshape->setline</function>) depuis le point courant,
     et sur le d&eacute;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>integer <parameter>controlx</parameter></paramdef>
      <paramdef>integer <parameter>controly</parameter></paramdef>
      <paramdef>integer <parameter>anchorx</parameter></paramdef>
      <paramdef>integer <parameter>anchory</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <simpara>
     <function>swfshape->drawcurveto</function> dessine une courbe quadratique
     (avec le style courant de ligne, modifi&eacute; 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&ocirc;le. C'est &agrave; dire qu'il commence en allant vers 
le point
     de contr&ocirc;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>integer <parameter>controldx</parameter></paramdef>
      <paramdef>integer <parameter>controldy</parameter></paramdef>
      <paramdef>integer <parameter>anchordx</parameter></paramdef>
      <paramdef>integer <parameter>anchordy</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <simpara>
     <function>swfshape->drawcurve</function> dessine une courbe
     quadratique (avec le style courant de ligne, modifi&eacute; 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&ocirc;le 
(<parameter>controldx</parameter>,<parameter>controldy</parameter>).
     C'est &agrave; dire qu'il commence en allant vers le point
     de contr&ocirc;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&eacute;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&eacute;e un nouvel objet gradient.
    </para>
    <simpara>
     Une fois que vous avez ajout&eacute; les couleurs &agrave; votre gradient, vous
     pouvez l'utiliser dans des formes, avec la fonction 
     <function>swfshape->addfill</function>. 
    </simpara>
    <simpara>
     SWFGradient a la m&eacute;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">
&lt;?php

  $m = new SWFMovie();
  $m-&gt;setDimension(320, 240);

  $s = new SWFShape();

  // gradient noir-blanc
  $g = new SWFGradient();
  $g-&gt;addEntry(0.0, 0, 0, 0);
  $g-&gt;addEntry(1.0, 0xff, 0xff, 0xff);

  $f = $s-&gt;addFill($g, SWFFILL_LINEAR_GRADIENT);
  $f-&gt;scaleTo(0.01);
  $f-&gt;moveTo(160, 120);
  $s-&gt;setRightFill($f);
  $s-&gt;drawLine(320, 0);
  $s-&gt;drawLine(0, 240);
  $s-&gt;drawLine(-320, 0);
  $s-&gt;drawLine(0, -240);

  $m-&gt;add($s);

  $s = new SWFShape();

  // gradient radial : rouge vers transparent
  $g = new SWFGradient();
  $g-&gt;addEntry(0.0, 0xff, 0, 0, 0xff);
  $g-&gt;addEntry(1.0, 0xff, 0, 0, 0);

  $f = $s-&gt;addFill($g, SWFFILL_RADIAL_GRADIENT);
  $f-&gt;scaleTo(0.005);
  $f-&gt;moveTo(160, 120);
  $s-&gt;setRightFill($f);
  $s-&gt;drawLine(320, 0);
  $s-&gt;drawLine(0, 240);
  $s-&gt;drawLine(-320, 0);
  $s-&gt;drawLine(0, -240);

  $m-&gt;add($s);

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>
    
  <refentry id="function.swfgradient.addentry">
   <refnamediv>
    <refname>SWFGradient->addEntry</refname>
    <refpurpose>Ajoute une couleur &agrave; 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>integer <parameter>red</parameter></paramdef>
      <paramdef>integer <parameter>green</parameter></paramdef>
      <paramdef>integer <parameter>blue</parameter></paramdef>
      <paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swfgradient->addentry</function> ajoute une couleur &agrave; la liste
     des couleurs du gradient. <parameter>ratio</parameter> est un nombre
     de 0 &agrave; 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&eacute;sente une couleur, au format RGB. Le dernier param&egrave;tre
     <parameter>a</parameter> est optionnel.
    </para>
   </refsect1>
  </refentry>

<!--      SWFBitmap  -->
  
  <refentry id="function.swfbitmap">
   <refnamediv>
    <refname>SWFBitmap</refname>
    <refpurpose>Cr&eacute;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>integer 
<parameter><optional>alphafilename</optional></parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swfbitmap</function> cr&eacute;e un objet bitmap &agrave; partir d'un
     fichier JPEG ou DBL, nomm&eacute; <parameter>filename</parameter>. 
     <parameter>alphafilename</parameter> indique un fichier de masque &agrave;
     utiliser comme canal alpha sur une image JPEG.
    </para>
    <note>
     <para>
      Seule les JPEG baseline (frame 0) sont support&eacute;s. Les baseline 
optimis&eacute;e
      ou les JPEG progressives ne sont pas support&eacute;es.
     </para>
    </note>
    <simpara>
     SWFBitmap a les m&eacute;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&eacute;pendance avec la librairie PNG. Le fichier
     d'autoconfiguration devrait r&eacute;gler ce probl&egrave;me, mais il n'est pas 
     encore fait.
     <example>
      <title>Importation de fichiers PNG sous Ming</title>
      <programlisting role="php">
&lt;?php
  $s = new SWFShape();
  $f = $s-&gt;addFill(new SWFBitmap("png.dbl"));
  $s-&gt;setRightFill($f);

  $s-&gt;drawLine(32, 0);
  $s-&gt;drawLine(0, 32);
  $s-&gt;drawLine(-32, 0);
  $s-&gt;drawLine(0, -32);

  $m = new SWFMovie();
  $m-&gt;setDimension(32, 32);
  $m-&gt;add($s);

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </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">
&lt;?php

  $s = new SWFShape();

  //les fichiers .msk sont g&eacute;n&eacute;r&eacute;s par l'utilitaire "gif2mask"
  $f = $s-&gt;addFill(new SWFBitmap("alphafill.jpg", "alphafill.msk"));
  $s-&gt;setRightFill($f);

  $s-&gt;drawLine(640, 0);
  $s-&gt;drawLine(0, 480);
  $s-&gt;drawLine(-640, 0);
  $s-&gt;drawLine(0, -480);

  $c = new SWFShape();
  $c-&gt;setRightFill($c-&gt;addFill(0x99, 0x99, 0x99));
  $c-&gt;drawLine(40, 0);
  $c-&gt;drawLine(0, 40);
  $c-&gt;drawLine(-40, 0);
  $c-&gt;drawLine(0, -40);

  $m = new SWFMovie();
  $m-&gt;setDimension(640, 480);
  $m-&gt;setBackground(0xcc, 0xcc, 0xcc);

  // d&eacute;cide un fond &agrave; damier
  for($y=0; $y<480; $y+=40)
  {
    for($x=0; $x<640; $x+=80)
    {
      $i = $m-&gt;add($c);
      $i-&gt;moveTo($x, $y);
    }

    $y+=40;

    for($x=40; $x<640; $x+=80)
    {
      $i = $m-&gt;add($c);
      $i-&gt;moveTo($x, $y);
    }
  }

  $m-&gt;add($s);

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </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&eacute;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&eacute;&eacute; par <function>swfshape->addfill</function>. 
    </para>
    <simpara>
     SWFFill a les m&eacute;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>Moves fill origin</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>void <function>swffill->moveto</function></funcdef>
      <paramdef>integer <parameter>x</parameter></paramdef>
      <paramdef>integer <parameter>y</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swffill->moveto</function> d&eacute;place l'origine de la forme
     jusqu'au point de coordonn&eacute;es globales 
     (<parameter>x</parameter>,<parameter>y</parameter>). 
    </para>
   </refsect1>
  </refentry>
  
  <refentry id="function.swffill.scaleto">
   <refnamediv>
    <refname>SWFFill->scaleTo</refname>
    <refpurpose>Modifie l'&eacute;chelle de la forme</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>void <function>swffill->scaleto</function></funcdef>
      <paramdef>integer <parameter>x</parameter></paramdef>
      <paramdef>integer <parameter>y</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swffill->scaleto</function> modifie l'&eacute;chelle de 
     la forme de <parameter>x</parameter> dans le sens des
     absisse et <parameter>y</parameter> dans le sens des
     ordonn&eacute;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'&agrave; un angle de 
     <parameter>degrees</parameter> degr&eacute;s. 
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.swffill.skewxto">
   <refnamediv>
    <refname>SWFFill->skewXTo</refname>
    <refpurpose>Incline (absisse)</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 absisses. Si <parameter>x</parameter> 
vaut 1.0, 
     l'inclinaison sera de 45¡ degr&eacute;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&eacute;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 absisses. Si <parameter>y</parameter>.
     vaut 1.0, l'inclinaison sera de 45¡ degr&eacute;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&eacute;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&eacute;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 &agrave; genou votre ordinateur. Joie!
    </para>
    <para>
     Les m&eacute;thodes ici sont plut&ocirc;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&egrave;me forme
     a besoin de savoir qu'elle est l'aboutissement d'un morphing.
     (Tout cela, parce que Flash commence &agrave; dessiner aussit&ocirc;t qu'il a les
     commandes de dessins. S'il conservait les descriptions de ses propres
     formes, et attendait leur totalit&eacute; avant d'&eacute;crire, ceci et bien 
d'autres
     choses serait tellement plus simple).
    </para>
    <simpara>
     SWFMorph a les m&eacute;thodes suivantes : 
     <function>swfmorph->getshape1</function> et 
<function>swfmorph->getshape1</function>.
    </simpara>
    <para>
     Cet exemple simple effectue le morphing d'une gros carr&eacute; rouge en un
     carr&eacute; plus petit, bleu et bord&eacute; de noir.
     <example>
      <title>Exemple avec <function>swfmorph</function></title>
      <programlisting role="php">
&lt;?php
  $p = new SWFMorph();

  $s = $p-&gt;getShape1();
  $s-&gt;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&eacute;e de pourquoi... */

  $s-&gt;setLeftFill($s-&gt;addFill(0xff, 0, 0));
  $s-&gt;movePenTo(-1000,-1000);
  $s-&gt;drawLine(2000,0);
  $s-&gt;drawLine(0,2000);
  $s-&gt;drawLine(-2000,0);
  $s-&gt;drawLine(0,-2000);

  $s = $p-&gt;getShape2();
  $s-&gt;setLine(60,0,0,0);
  $s-&gt;setLeftFill($s-&gt;addFill(0, 0, 0xff));
  $s-&gt;movePenTo(0,-1000);
  $s-&gt;drawLine(1000,1000);
  $s-&gt;drawLine(-1000,1000);
  $s-&gt;drawLine(-1000,-1000);
  $s-&gt;drawLine(1000,-1000);

  $m = new SWFMovie();
  $m-&gt;setDimension(3000,2000);
  $m-&gt;setBackground(0xff, 0xff, 0xff);

  $i = $m-&gt;add($p);
  $i-&gt;moveTo(1500,1000);

  for($r=0.0; $r<=1.0; $r+=0.1)
  {
    $i-&gt;setRatio($r);
    $m-&gt;nextFrame();
  }

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>
    
  <refentry id="function.swfmorph.getshape1">
   <refnamediv>
    <refname>SWFMorph->getshape1</refname>
    <refpurpose>S&eacute;lectionne la forme de d&eacute;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&eacute;lectionne la forme de 
     d&eacute;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&eacute;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&eacute;lectionne la forme de 
     d&eacute;but de morphing. <function>swfmorph->getshape2</function> retourne un
     objet <function>swfshape</function>. 
    </para>
   </refsect1>
  </refentry>

<!--      SWFText  -->
  
  <refentry id="function.swftext">
   <refnamediv>
    <refname>SWFMorph</refname>
    <refpurpose>Cr&eacute;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&eacute;e un nouvel objet texte,
     pr&ecirc;t &agrave; &ecirc;tre manipul&eacute;.
    </para>
    <simpara>
     SWFText a les m&eacute;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">
&lt;?php
  $f = new SWFFont("Techno.fdb");
  $t = new SWFText();
  $t-&gt;setFont($f);
  $t-&gt;moveTo(200, 2400);
  $t-&gt;setColor(0xff, 0xff, 0);
  $t-&gt;setHeight(1200);
  $t-&gt;addString("PHP fait du Flash avec Ming!!");

  $m = new SWFMovie();
  $m-&gt;setDimension(5400, 3600);

  $m-&gt;add($t);

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>
    
  <refentry id="function.swftext.setfont">
   <refnamediv>
    <refname>SWFText->setFont</refname>
    <refpurpose>S&eacute;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>integer <parameter>height</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swftext->setheight</function> fixe la hauteur courante de 
     la police courante &agrave; <parameter>height</parameter>. Par d&eacute;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 &agrave; <parameter>spacing</parameter><parameter>spacing</parameter>. 
     par d&eacute;faut, c'est 1.0. 0 signifie que toutes les lettres seront 
     &eacute;crites au m&ecirc;me point. Cela fonctionne pas terrible, car l'avance
     des lettres augmente, et l'espacement entre lettre n'est pas toujours 
     le m&ecirc;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>integer <parameter>red</parameter></paramdef>
      <paramdef>integer <parameter>green</parameter></paramdef>
      <paramdef>integer <parameter>blue</parameter></paramdef>
      <paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swftext->setspacing</function> change la couleur de la
     police courante. Par d&eacute;faut, c'est noir. La couleur est 
repr&eacute;sent&eacute;e avec
     la convention RGB.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.swftext.moveto">
   <refnamediv>
    <refname>SWFText->moveTo</refname>
    <refpurpose>D&eacute;place le stylo de texte</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>void <function>swftext->moveto</function></funcdef>
      <paramdef>integer <parameter>x</parameter></paramdef>
      <paramdef>integer <parameter>y</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swftext->moveto</function> d&eacute;place le style (ou le curseur, si
     &ccedil;a a un sens) jusqu'au coordonn&eacute;es 
(<parameter>x</parameter>,<parameter>y</parameter>)
     dans l'espace de coordonn&eacute;es du texte. Si <parameter>x</parameter>
     ou <parameter>y</parameter> vaut 0, la valeur de coordonn&eacute;es de la 
dimension
     reste la m&ecirc;me. C'est ennuyeux, et cela devrait &ecirc;tre corrig&eacute;.
    </para>
   </refsect1>
  </refentry>
  
  <refentry id="function.swftext.addstring">
   <refnamediv>
    <refname>SWFText->addString</refname>
    <refpurpose>Ajoute du texe</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&eacute; sur la ligne de base
     du texte, c'est &agrave; dire que le texte sera &eacute;crit horizontalement.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.swftext.getwidth">
   <refnamediv>
    <refname>SWFText->getWidth</refname>
    <refpurpose>Calcule la longueur d'une cha&icirc;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&icirc;ne
     <parameter>string</parameter>, une fois qu'elle est dessin&eacute;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&egrave;te de la police. Vous pouvez 
cr&eacute;er des
     fichiers FDB &agrave; 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&ecirc;me accessible
     au lecteur. Les polices "_serif", "_sans", et "_typewriter" doivent &ecirc;tre
     universellement disponibles. Par exemple : 
     <programlisting role="php">
&lt;?php
$f = newSWFFont("_sans"); 
?&gt;
         </programlisting>
         vous donne la police standard "sans-serif", probablement identique &agrave; 
celle
         que vous obtenez avec le code <literal>&lt;font 
name="sans-serif"&gt;</literal>.
        </para>
        <para>
         <function>swffont</function> retourne une ressource de police, &agrave; 
utiliser avec 
         les m&eacute;thodes <function>swftext->setfont</function> et 
         <function>swftextfield->setfont</function>.
    </para>
    <simpara>
     SWFFont a les m&eacute;thodes suivantes : 
     <function>swffont->getwidth</function>.
    </simpara>
   </refsect1>
  </refentry>
    
  <refentry id="function.swffont.getwidth">
   <refnamediv>
    <refname>getwidth</refname>
    <refpurpose>Retourne la taille de la cha&icirc;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&icirc;ne <parameter>string</parameter>, avec la police courante. 
     Vous utiliserez plut&ocirc;t la m&ecirc;me m&eacute;thode de l'objet 
     <function>swftext</function>, qui utilise les param&egrave;tres de
     l'objet.
    </para>
   </refsect1>
  </refentry>

<!--      SWFTextField  -->
  
  <refentry id="function.swftextfield">
   <refnamediv>
    <refname>SWFTextField</refname>
    <refpurpose>Cr&eacute;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&eacute;e un nouveau champs texte. 
         Les champs textes sont moins souples que les <function>swftext</function>,
         car ils ne peuvent &ecirc;tre tourn&eacute;s, mis &agrave; l'&eacute;chelle 
ou inclin&eacute;, mais ils peuvent
         &ecirc;tre utilis&eacute;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 &ecirc;tre 
            &eacute;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&eacute;lectionnable
           </simpara>
          </listitem>
         </itemizedlist>
         Les flags peuvent &ecirc;tre combin&eacute;s avec l'op&eacute;rateur
         <link linkend="language.operators.bitwise">OR</link>. Par exemple : 
         <programlisting role="php">
&lt;?php
$t = newSWFTextField(SWFTEXTFIELD_PASSWORD | SWFTEXTFIELD_NOEDIT); 
?&gt;
     </programlisting>
      cr&eacute;e un champs de mot de passe totalement in&eacute;ditable (et inutile).
    </para>
    <simpara>
     SWFTextField a les m&eacute;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&eacute;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
     &agrave; <parameter>width</parameter> et sa hauteur &agrave; 
<parameter>height</parameter>.
     Si vous ne fixez pas les bords vous-m&ecirc;mes, Ming tentera de les deviner
     lui-m&ecirc;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&eacute;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 &agrave; <parameter>width</parameter>. Par d&eacute;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 &agrave; <parameter>width</parameter>. Par d&eacute;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&eacute;faut, elles sont toutes les deux &agrave; 0.
    </para>
   </refsect1>
  </refentry>  
  
  <refentry id="function.swftextfield.setindentation">
   <refnamediv>
    <refname>SWFTextField->setindentation</refname>
    <refpurpose>Modifie l'indentation de la premi&egrave;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&egrave;re ligne du champs texte, en la fixant &agrave; 
<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 &agrave; <parameter>height</parameter>. Par d&eacute;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>integer <parameter>red</parameter></paramdef>
      <paramdef>integer <parameter>green</parameter></paramdef>
      <paramdef>integer <parameter>blue</parameter></paramdef>
      <paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swftextfield->setcolor</function> modifie la couleur du
     champs texte, en la remplacant par la couleur fournie. Par d&eacute;faut, c'est
     noir opaque. Les couleurs sont repr&eacute;sent&eacute;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&egrave;ne la cha&icirc;ne
     <parameter>string</parameter> avec la cha&icirc;ne courante. 
    </para>
   </refsect1>
  </refentry> 
  
<!--      SWFSprite   -->
  
  <refentry id="function.swfsprite">
   <refnamediv>
    <refname>SWFSprite</refname>
    <refpurpose>Cr&eacute;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&eacute;ation d'objet anim&eacute; dans une 
animation,
     avec un sc&eacute;nario propre. De ce fait, un sprite a les m&ecirc;mes 
m&eacute;thodes
     qu'une animation.
    </para>
    <simpara>
     <function>swfsprite</function> a les m&eacute;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&eacute; rouge.
     <example>
      <title>Exemple de <function>swfsprite</function></title>
      <programlisting role="php">
&lt;?php
  $s = new SWFShape();
  $s-&gt;setRightFill($s-&gt;addFill(0xff, 0, 0));
  $s-&gt;movePenTo(-500,-500);
  $s-&gt;drawLineTo(500,-500);
  $s-&gt;drawLineTo(500,500);
  $s-&gt;drawLineTo(-500,500);
  $s-&gt;drawLineTo(-500,-500);

  $p = new SWFSprite();
  $i = $p-&gt;add($s);
  $p-&gt;nextFrame();
  $i-&gt;rotate(15);
  $p-&gt;nextFrame();
  $i-&gt;rotate(15);
  $p-&gt;nextFrame();
  $i-&gt;rotate(15);
  $p-&gt;nextFrame();
  $i-&gt;rotate(15);
  $p-&gt;nextFrame();
  $i-&gt;rotate(15);
  $p-&gt;nextFrame();

  $m = new SWFMovie();
  $i = $m-&gt;add($p);
  $i-&gt;moveTo(1500,1000);
  $i-&gt;setName("blah");

  $m-&gt;setBackground(0xff, 0xff, 0xff);
  $m-&gt;setDimension(3000,2000);

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>
    
  <refentry id="function.swfsprite.add">
   <refnamediv>
    <refname>SWFSprite->add</refname>
    <refpurpose>Ajoute un objet &agrave; 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 resource 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>integer <parameter>numberofframes</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swfsprite->setframes</function> fixe le nombre total d'images
     de l'animation &agrave; <parameter>numberofframes</parameter>.
    </para>
   </refsect1>
  </refentry>
  
  <refentry id="function.swfsprite.nextframe">
   <refnamediv>
    <refname>SWFSprite->nextframe</refname>
    <refpurpose>Va &agrave; 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&eacute;place &agrave; la prochaine 
image
     du sprite.
    </para>
   </refsect1>
  </refentry>

<!--      SWFButton   -->
  
  <refentry id="function.swfbutton">
   <refnamediv>
    <refname>SWFbutton</refname>
    <refpurpose>Cr&eacute;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&eacute;e un nouveau bouton.
     Cliquez-le, passez la souris dessus, et appelez des actions. Facile!
    </para>
    <simpara>
     SWFButton a les m&eacute;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&eacute; de souris, et rien du tout (pas 
d'action).
     <example>
      <title>Exemple avec <function>swfbutton</function></title>
      <programlisting role="php">
&lt;?php

  $f = new SWFFont("_serif");

  $p = new SWFSprite();

  function label($string)
  {
    global $f;

    $t = new SWFTextField();
    $t-&gt;setFont($f);
    $t-&gt;addString($string);
    $t-&gt;setHeight(200);
    $t-&gt;setBounds(3200,200);
    return $t;
  }
  function addLabel($string)
  {
    global $p;

    $i = $p-&gt;add(label($string));
    $p-&gt;nextFrame();
    $p-&gt;remove($i);
  }

  $p-&gt;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-&gt;setRightFill($s-&gt;addFill($r, $g, $b));
    $s-&gt;drawLine(600,0);
    $s-&gt;drawLine(0,600);
    $s-&gt;drawLine(-600,0);
    $s-&gt;drawLine(0,-600);

    return $s;
  }

  $b = new SWFButton();
  $b-&gt;addShape(rect(0xff, 0, 0), SWFBUTTON_UP | SWFBUTTON_HIT);
  $b-&gt;addShape(rect(0, 0xff, 0), SWFBUTTON_OVER);
  $b-&gt;addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN);

  $b-&gt;addAction(new SWFAction("setTarget('/label'); gotoFrame(1);"),
                SWFBUTTON_MOUSEUP);

  $b-&gt;addAction(new SWFAction("setTarget('/label'); gotoFrame(2);"),
                SWFBUTTON_MOUSEDOWN);

  $b-&gt;addAction(new SWFAction("setTarget('/label'); gotoFrame(3);"),
                SWFBUTTON_MOUSEOVER);

  $b-&gt;addAction(new SWFAction("setTarget('/label'); gotoFrame(4);"),
                SWFBUTTON_MOUSEOUT);

  $b-&gt;addAction(new SWFAction("setTarget('/label'); gotoFrame(5);"),
                SWFBUTTON_MOUSEUPOUTSIDE);

  $b-&gt;addAction(new SWFAction("setTarget('/label'); gotoFrame(6);"),
                SWFBUTTON_DRAGOVER);

  $b-&gt;addAction(new SWFAction("setTarget('/label'); gotoFrame(7);"),
                SWFBUTTON_DRAGOUT);

  $m = new SWFMovie();
  $m-&gt;setDimension(4000,3000);

  $i = $m-&gt;add($p);
  $i-&gt;setName("label");
  $i-&gt;moveTo(400,1900);

  $i = $m-&gt;add($b);
  $i-&gt;moveTo(400,900);

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
    <para>
     Cet exemple simple illustre le d&eacute;placement d'un gros bouton
     rouge dans la fen&ecirc;tre. Ce n'est pas du tirer-d&eacute;poser, mais juste
     du tirer.
     <example>
      <title>Exemple avec <function>swfbutton->addaction</function></title>
      <programlisting role="php">
&lt;?php

  $s = new SWFShape();
  $s-&gt;setRightFill($s-&gt;addFill(0xff, 0, 0));
  $s-&gt;drawLine(1000,0);
  $s-&gt;drawLine(0,1000);
  $s-&gt;drawLine(-1000,0);
  $s-&gt;drawLine(0,-1000);

  $b = new SWFButton();
  $b-&gt;addShape($s, SWFBUTTON_HIT | SWFBUTTON_UP | SWFBUTTON_DOWN | SWFBUTTON_OVER);

  $b-&gt;addAction(new SWFAction("startDrag('/test', 0);"), 
                SWFBUTTON_MOUSEDOWN);
// '0' signifie : ne pas verrouiller la souris

  $b-&gt;addAction(new SWFAction("stopDrag();"),
                SWFBUTTON_MOUSEUP | SWFBUTTON_MOUSEUPOUTSIDE);

  $p = new SWFSprite();
  $p-&gt;add($b);
  $p-&gt;nextFrame();

  $m = new SWFMovie();
  $i = $m-&gt;add($p);
  $i-&gt;setName('test');
  $i-&gt;moveTo(1000,1000);

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>
    
  <refentry id="function.swfbutton.addshape">
   <refnamediv>
    <refname>SWFbutton->addShape</refname>
    <refpurpose>Ajoute une forme &agrave; un bouton</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>void <function>swfbutton->addshape</function></funcdef>
      <paramdef>ressource <parameter>shape</parameter></paramdef>
      <paramdef>integer <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&ecirc;me pas affich&eacute;, elle d&eacute;signe la 
     r&eacute;gion du clic d'un bouton. C'est &agrave; dire que tout point
     o&ugrave; le bouton est d&eacute;ssin&eacute; est consid&eacute;r&eacute; 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>integer <parameter>flags</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>swfbutton->setaction</function> ajoute l'action
     <parameter>action</parameter> (cr&eacute;&eacute;e par 
<function>swfaction</function>) 
     au bouton courant, dans les conditions pr&eacute;cis&eacute;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&eacute;cut&eacute;e lorsque le bouton sera cliqu&eacute;. 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&eacute;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&eacute;e une nouvelle action, et
     compile le script <parameter>script</parameter>.
    </para>
    <para>
     La syntaxe du script est bas&eacute;e sur le langage C, mais il utilise
     aussi beaucoup de notions propres &agrave; 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&eacute;ment
     dans les entrailles de la machine, car le bytecode de saut est &eacute;crit
     en dur. Pas moyen de pousser une adresse dans la pile, ou de d&eacute;piler - 
     Chaque fonction doit savoir exactement o&ugrave; elle retourne.
    </para>
    <para>
     Alors, que reste-t-il? Le compilateur reconnait 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&eacute;es : toutes les valeurs de SWF sont 
stock&eacute;es comme
     des cha&icirc;nes de caract&egrave;res. Les fonctions suivantes peuvent 
&ecirc;tre utilis&eacute;es dans
     les expressions : 
     <variablelist>
      <varlistentry>
       <term>time()</term>
       <listitem>
            <simpara>
         Retourne le nombre de milli-secondes depuis le d&eacute;but de
         l'animation.
            </simpara>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term>random(seed)</term>
       <listitem>
            <simpara>
             Retourne un nombre pseudo-al&eacute;atoire, entre 0 et seed.
            </simpara>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term>length(expr)</term>
       <listitem>
            <simpara>
             Retourne la taille de l'expression donn&eacute;e.
            </simpara>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term>int(number)</term>
       <listitem>
            <simpara>
             Retourne le nombre number, arrondi &agrave; l'entier inf&eacute;rieur le 
plus proche.
            </simpara>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term>concat(expr, expr)</term>
       <listitem>
            <simpara>
             Retourne la concat&eacute;nation des deux expressions.
            </simpara>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term>ord(expr)</term>
       <listitem>
            <simpara>
             Retourne le code ASCII du caract&egrave;re expr.
            </simpara>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term>chr(num)</term>
       <listitem>
            <simpara>
             Retourne le caract&egrave;re pour le code ASCII num.
            </simpara>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term>substr(string, location, length)</term>
       <listitem>
            <simpara>
             Retourne la sous-cha&icirc;ne, extraite de string, de longueur
             length et commencant au caract&egrave;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&eacute; 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&eacute;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 &agrave; d&eacute;placer l'animation target. L'argument lock 
indique
             si le d&eacute;placement verrouille la souris (utilisez 0 (false) ou 
             1 (true)). Les param&egrave;tres optionnels d&eacute;limitent la zone de
             d&eacute;placement.
            </simpara>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term>stopDrag()</term>
       <listitem>
            <simpara>
             Cesse le d&eacute;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 etre l'image courante
             (je pense) ou une des valeurs magiques "_level0" (remplace l'animation
             courante) ou "_level1" (charge une nouvelle animation &agrave; la place de
             la courante). L'argument optionnel method peut &ecirc;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&ecirc;me chose que ci-dessus, plus ou moins. En fait, je ne sais pas
             trop quelle est la diff&eacute;rence.
            </simpara>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term>nextFrame()</term>
       <listitem>
            <simpara>
             Va &agrave; l'image suivante.
            </simpara>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term>prevFrame()</term>
       <listitem>
            <simpara>
             Va &agrave; l'image pr&eacute;c&eacute;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&eacute; (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 &agrave; l'image num&eacute;ro num. Les images sont 
num&eacute;rot&eacute;es &agrave; 
             partir de 0.
            </simpara>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term>gotoFrame(name)</term>
       <listitem>
            <simpara>
             Va &agrave; l'image nomm&eacute;e name. Ce qui est carr&eacute;ment cool, 
car
             les labels ne sont pas encore support&eacute;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&eacute;es l&agrave;-dessus.
            </simpara>
       </listitem>   
      </varlistentry>
     </variablelist>
     Et il y a un truc bizarre : l'expression frameLoaded(num) peut &ecirc;tre
     utilise dans les conditions if et dans les boucles while pour 
     v&eacute;rifier si une image a &eacute;t&eacute; charg&eacute;e. En tous cas, 
c'est ce qu'il est
     suppos&eacute; faire, mais je ne l'ai jamais test&eacute;, et je doute 
s&eacute;rieusement
     que cela fonctionne. Vous pouvez utiliser plut&ocirc;t /:framesLoaded &agrave; la 
place. 
    </para>
    <para>
     Les sprites ont des propri&eacute;t&eacute;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&ecirc;me un autre sprite appel&eacute; biff, vous
      pouvez y acc&eacute;der avec la commande <literal>/box/biff.x = 100;</literal>.
      En tous cas, ca marche pour moi. Corrigez moi si c'est faux!.
    </para>
    <para>
     Cet exemple simple va d&eacute;placer le gros carr&eacute; rouge dans la 
fen&ecirc;tre.
     <example>
      <title>Exemple avec <function>swfaction</function></title>
      <programlisting role="php">
&lt;?php
 $s = new SWFShape();
  $f = $s-&gt;addFill(0xff, 0, 0);
  $s-&gt;setRightFill($f);

  $s-&gt;movePenTo(-500,-500);
  $s-&gt;drawLineTo(500,-500);
  $s-&gt;drawLineTo(500,500);
  $s-&gt;drawLineTo(-500,500);
  $s-&gt;drawLineTo(-500,-500);

  $p = new SWFSprite();
  $i = $p-&gt;add($s);
  $i-&gt;setDepth(1);
  $p-&gt;nextFrame();

  for($n=0; $n&lt;5; ++$n)
  {
    $i-&gt;rotate(-15);
    $p-&gt;nextFrame();
  }

  $m = new SWFMovie();
  $m-&gt;setBackground(0xff, 0xff, 0xff);
  $m-&gt;setDimension(6000,4000);

  $i = $m-&gt;add($p);
  $i-&gt;setDepth(1);
  $i-&gt;moveTo(-500,2000);
  $i-&gt;setName("box");

  $m-&gt;add(new SWFAction("/box.x += 3;"));
  $m-&gt;nextFrame();
  $m-&gt;add(new SWFAction("gotoFrame(0); play();"));
  $m-&gt;nextFrame();

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
    <para>
     Cet exemple suit votre souris sur l'&eacute;cran.
     <example>
      <title>Exemple avec <function>swfaction</function></title>
      <programlisting role="php">
&lt;?php

  $m = new SWFMovie();
  $m-&gt;setRate(36.0);
  $m-&gt;setDimension(1200, 800);
  $m-&gt;setBackground(0, 0, 0);

  /* sprite de suivi de souris : vide, mais il suit la souris
  de mani&egrave;re &agrave; ce que nous connaissions ses coordonn&eacute;es*/

  $i = $m-&gt;add(new SWFSprite());
  $i-&gt;setName('mouse');

  $m-&gt;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&eacute;s, finalement */

  $m-&gt;add(new SWFAction("
    this.quality = 0;
  "));

  /* bo&icirc;te de morphing */
  $r = new SWFMorph();
  $s = $r-&gt;getShape1();

  /* Notez que ce n'est pas pratique pour les formes habituelles.
  Aucune id&eacute;e de pourquoi */
  $s-&gt;setLeftFill($s-&gt;addFill(0xff, 0xff, 0xff));
  $s-&gt;movePenTo(-40, -40);
  $s-&gt;drawLine(80, 0);
  $s-&gt;drawLine(0, 80);
  $s-&gt;drawLine(-80, 0);
  $s-&gt;drawLine(0, -80);

  $s = $r-&gt;getShape2();

  $s-&gt;setLeftFill($s-&gt;addFill(0x00, 0x00, 0x00));
  $s-&gt;movePenTo(-1, -1);
  $s-&gt;drawLine(2, 0);
  $s-&gt;drawLine(0, 2);
  $s-&gt;drawLine(-2, 0);
  $s-&gt;drawLine(0, -2);


  /* sprite contenant la bo&icirc;te de morphing - 
     c'est juste un sc&eacute;nario avec une bo&icirc;te de morphing */

  $box = new SWFSprite();
  $box-&gt;add(new SWFAction("
    stop();
  "));
  $i = $box-&gt;add($r);

  for($n=0; $n&lt;=20; ++$n)
  {
    $i-&gt;setRatio($n/20);
    $box-&gt;nextFrame();
  }


  /* ce conteneur nous permet d'utiliser la m&ecirc;me action plusieurs fois */
  
  $cell = new SWFSprite();
  $i = $cell-&gt;add($box);
  $i-&gt;setName('box');

  $cell-&gt;add(new SWFAction("

    setTarget('box');

    /* ...x signifie absisse du parent, c'est &agrave; 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-&gt;nextFrame();
  $cell-&gt;add(new SWFAction("

    gotoFrame(0);
    play();

  "));

  $cell-&gt;nextFrame();


  /* finalement, ajoutons quelques cellules &agrave; l'animation */

  for($x=0; $x&lt;12; ++$x)
  {
    for($y=0; $y8; ++$y)
    {
      $i = $m-&gt;add($cell);
      $i-&gt;moveTo(100*$x+50, 100*$y+50);
    }
  }

  $m-&gt;nextFrame();

  $m-&gt;add(new SWFAction("

    gotoFrame(1);
    play();

  "));

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
    <para>
     La m&ecirc;me chose que ci-dessus, mais en couleurs.
     <example>
      <title><function>swfaction</function> example</title>
      <programlisting role="php">
&lt;?php

  $m = new SWFMovie();
  $m-&gt;setDimension(11000, 8000);
  $m-&gt;setBackground(0x00, 0x00, 0x00);

  $m-&gt;add(new SWFAction("

this.quality = 0;
/frames.visible = 0;
startDrag('/mouse', 1);

  "));

  // sprite de suivi de souris
  $t = new SWFSprite();
  $i = $m-&gt;add($t);
  $i-&gt;setName('mouse');

  $g = new SWFGradient();
  $g-&gt;addEntry(0, 0xff, 0xff, 0xff, 0xff);
  $g-&gt;addEntry(0.1, 0xff, 0xff, 0xff, 0xff);
  $g-&gt;addEntry(0.5, 0xff, 0xff, 0xff, 0x5f);
  $g-&gt;addEntry(1.0, 0xff, 0xff, 0xff, 0);

  // gradient
  $s = new SWFShape();
  $f = $s-&gt;addFill($g, SWFFILL_RADIAL_GRADIENT);
  $f-&gt;scaleTo(0.03);
  $s-&gt;setRightFill($f);
  $s-&gt;movePenTo(-600, -600);
  $s-&gt;drawLine(1200, 0);
  $s-&gt;drawLine(0, 1200);
  $s-&gt;drawLine(-1200, 0);
  $s-&gt;drawLine(0, -1200);

  // on en fait un sprite pour utiliser la fonction multColor()
  $p = new SWFSprite();
  $p-&gt;add($s);
  $p-&gt;nextFrame();

  // Ajoute la forme ici, chaque forme dans une couleur diff&eacute;rente
  $q = new SWFSprite();
  $q-&gt;add(new SWFAction("gotoFrame(random(7)+1); stop();"));
  $i = $q-&gt;add($p);

  $i-&gt;multColor(1.0, 1.0, 1.0);
  $q-&gt;nextFrame();
  $i-&gt;multColor(1.0, 0.5, 0.5);
  $q-&gt;nextFrame();
  $i-&gt;multColor(1.0, 0.75, 0.5);
  $q-&gt;nextFrame();
  $i-&gt;multColor(1.0, 1.0, 0.5);
  $q-&gt;nextFrame();
  $i-&gt;multColor(0.5, 1.0, 0.5);
  $q-&gt;nextFrame();
  $i-&gt;multColor(0.5, 0.5, 1.0);
  $q-&gt;nextFrame();
  $i-&gt;multColor(1.0, 0.5, 1.0);
  $q-&gt;nextFrame();

  // Enfin, le code de l'action
  $p = new SWFSprite();
  $i = $p-&gt;add($q);
  $i-&gt;setName('frames');
  $p-&gt;add(new SWFAction("

dx = (/:mousex-/:lastx)/3 + random(10)-5;
dy = (/:mousey-/:lasty)/3;
x = /:mousex;
y = /:mousey;
alpha = 100;

  "));
  $p-&gt;nextFrame();

  $p-&gt;add(new SWFAction("

this.x = x;
this.y = y;
this.alpha = alpha;
x += dx;
y += dy;
dy += 3;
alpha -= 8;

  "));
  $p-&gt;nextFrame();

  $p-&gt;add(new SWFAction("prevFrame(); play();"));
  $p-&gt;nextFrame();

  $i = $m-&gt;add($p);
  $i-&gt;setName('frames');
  $m-&gt;nextFrame();

  $m-&gt;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-&gt;nextFrame();
  $m-&gt;add(new SWFAction("prevFrame(); play();"));

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();
?&gt;
      </programlisting>
     </example>
    </para>
    <para>
     Cet exemple simple g&egrave;re le clavier (vous devrez cependant
     cliquer dans la fen&ecirc;tre pour lui donner le focus, et vous
     devrez aussi laisser votre souris dans la fen&ecirc;tre. Si vous
     savez comment faire cela automatiquement, dites-le moi!).
     <example>
      <title>Exemple avec <function>swfaction</function></title>
      <programlisting role="php">
&lt;?php

  /* Le sprite n'a qu'une lettre par image */

  $p = new SWFSprite();
  $p-&gt;add(new SWFAction("stop();"));

  $chars = "abcdefghijklmnopqrstuvwxyz".
           "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
           "1234567890!@#$%^&*()_+-=/[]{}|;:,.&lt;&gt;?`~";

  $f = new SWFFont("_sans");

  for($n=0; $nremove($i);
    $t = new SWFTextField();
    $t-&gt;setFont($f);
    $t-&gt;setHeight(240);
    $t-&gt;setBounds(600,240);
    $t-&gt;align(SWFTEXTFIELD_ALIGN_CENTER);
    $t-&gt;addString($c);
    $i = $p-&gt;add($t);
    $p-&gt;labelFrame($c);
    $p-&gt;nextFrame();
  }


  /* r&eacute;gion de clic pour le bouton : toute la fen&ecirc;tre */

  $s = new SWFShape();
  $s-&gt;setFillStyle0($s-&gt;addSolidFill(0, 0, 0, 0));
  $s-&gt;drawLine(600, 0);
  $s-&gt;drawLine(0, 400);
  $s-&gt;drawLine(-600, 0);
  $s-&gt;drawLine(0, -400);


  /* le bouton s'assure des touches press&eacute;es, et envoie le bon 
     sprite &agrave; l'image de droite */

  $b = new SWFButton();
  $b-&gt;addShape($s, SWFBUTTON_HIT);

  for($n=0; $naddAction(new SWFAction("

setTarget('/char');
gotoFrame('$c');

    "), SWFBUTTON_KEYPRESS($c));
  }

  $m = new SWFMovie();
  $m-&gt;setDimension(600,400);
  $i = $m-&gt;add($p);
  $i-&gt;setName('char');
  $i-&gt;moveTo(0,80);

  $m-&gt;add($b);

  header('Content-type: application/x-shockwave-flash');
  $m-&gt;output();

?&gt;
      </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:
-->

Reply via email to