### 3.6. Compléter le script Text Box

#### 3.6.1. Gérer correctement l’annulation d’action

When creating a script, you want to give your users the ability to undo their actions, should they make a mistake. This is easily accomplished by calling the functions `gimp-image-undo-group-start` and `gimp-image-undo-group-end` around the code that manipulates the image. You can think of them as matched statements that let GIMP know when to start and stop recording manipulations on the image, so that those manipulations can later be undone.

Si vous créez une image entièrement, il est de peu d’intérêt d’utiliser ces fonctions, puisque vous ne modifiez pas une image existante. Il en va tout autrement pour une image existante.

L’annulation d’un script marche presque parfaitement en utilisant ces fonctions.

#### 3.6.2. Compléter un peu plus notre script

Ajoutons encore quelques fonctionnalités à notre script :

- Currently, the image is resized to fit exactly around the text there's no room for anything, like drop shadows or special effects (even though many scripts will automatically resize the image as necessary). Let's add a buffer around the text, and even let the user specify how much buffer to add as a percentage of the size of the resultant text.

- Ce script pourrait aisément être utilisé dans d’autres scripts travaillant sur du texte. Enrichissons-le donc aussi pour qu’il retourne l’image et les calques, de telle sorte que les autres scripts puissent les récupérer et les utiliser.

#### 3.6.3. Modifier les paramètres et la fonction d’enregistrement

Pour permettre à l’utilisateur de spécifier la taille du tampon, nous ajouterons un paramètre à notre fonction et à la fonction d’enregistrement :

      (define (script-fu-text-box inTest inFont inFontSize inTextColor inBufferAmount)
      (let*
            (
               ; define our local variables
               ; create a new image:
               (theImageWidth  10)
               (theImageHeight 10)
               (theImage (car
                              (gimp-image-new
                               theImageWidth
                               theImageHeight
                               RGB
                              )
                         )
               )
               (theText)          ;a declaration for the text
                                  ;we create later

               (theBuffer)        ;added

               (theLayer
                         (car
                             (gimp-layer-new
                              theImage
                               "layer 1"
                              theImageWidth
                              theImageHeight
                              RGB-IMAGE
                              100
                              LAYER-MODE-NORMAL
                             )
                         )
               )
            ) ;end of our local variables

       [Code here]
     )

      (script-fu-register
        "script-fu-text-box"                        ;function name
        "Text Box"                                  ;menu label
        "Creates a simple text box, sized to fit\
          around the user's choice of text,\
          font, font size, and color."              ;description
        "Michael Terry"                             ;author
        "copyright 1997, Michael Terry;\
          2009, the GIMP Documentation Team"        ;copyright notice
        "October 27, 1997"                          ;date created
        ""                                      ;image type that the script works on
        SF-STRING      "Text"          "Text Box"   ;a string variable
        SF-FONT        "Font"          "Charter"    ;a font variable
        SF-ADJUSTMENT  "Font size"     '(50 1 1000 1 10 0 1)
                                                    ;a spin-button
        SF-COLOR       "Color"         '(0 0 0)     ;color variable
        SF-ADJUSTMENT  "Buffer amount" '(35 0 100 1 10 1 0)
                                                    ;a slider
      )
      (script-fu-menu-register "script-fu-text-box" "<Image>/Filters/Tutorial")

#### 3.6.4. Ajoutons ce nouveau code

Nous allons ajouter du code à deux endroits : juste avant de redimensionner l’image, et à la fin du script (pour retourner la nouvelle image, le calque et le texte).

Après avoir obtenu la hauteur et la largeur du texte, nous devons changer ces valeurs sur la base de la taille du tampon spécifiée par l’utilisateur. Nous ne commettrons pas d’erreur en ne recherchant pas si la valeur est dans l’intervalle 0-100%, parce que ce n’est pas vital, et qu’il n’y a aucune raison que l’utilisateur ne puisse pas donner une valeur de 200% au tampon.

            (set! theBuffer (* theImageHeight (/ inBufferAmount 100) ) )

            (set! theImageHeight (+ theImageHeight theBuffer theBuffer) )
            (set! theImageWidth  (+ theImageWidth  theBuffer theBuffer) )

Tout ce que nous faisons ici est de régler le tampon sur la hauteur du texte, et de l’ajouter deux fois à la hauteur et à la largeur de notre nouvelle image (deux fois parce que le tampon doit être ajouté des deux côtés du texte).

Maintenant que nous avons redimensionné l’image pour permettre une zone tampon, nous devons centrer le texte dans l’image. Nous le faisons en le déplaçant vers les coordonnées (x,y) de (`theBuffer`, `theBuffer`). J’ai ajouté cette ligne après le redimensionnement du calque et de l’image :

            (gimp-layer-set-offsets theText theBuffer theBuffer)

Go ahead and save your script, and try it out after restarting GIMP.

Tout ce qui reste à faire est de retourner notre image, le calque et le calque de texte. Après l’affichage de l’image, nous ajoutons cette ligne :

    (list theImage theLayer theText)

C’est la dernière ligne de la fonction, qui rend cette liste disponible pour les autres scripts qui veulent l’utiliser.

Pour utiliser notre nouveau script de boîte de texte dans un autre script, nous pourrions écrire quelque chose comme :

            (set! theResult (script-fu-text-box
                             "Some text"
                             "Charter" "30"
                             '(0 0 0)
                             "35"
                            )
            )
            (gimp-image-flatten (car theResult))

Félicitations, vous êtes sur le chemin de votre Ceinture Noire de Scrip-Fu !

3.5. Adding Additional Functionality |  | 3.7. Votre script et son fonctionnement

Report a bug in GIMP Report a documentation error