3.4. El vostre primer codi de Script-Fu
| 3. Programa d'aprenentatge de l'Script-Fu |

### 3.4. El vostre primer codi de Script-Fu

No necessiteu parar i respirar? No? Bé, doncs llavors procedirem amb la quarta lliçó, el vostre primer codi de Script-Fu.

#### 3.4.1. Creació d'un script: un quadre de text

Una de les operacions més comunes que es realitza amb el GIMP és crear un quadre amb algun text dins per a una pàgina web, o un logotip. Però quan es comença, mai no se sap la mida adequada de la imatge, ni l'espai que ocuparà el text amb la mida de la lletra.

Els mestres de Script-Fu (i els estudiants) reconeixen ràpidament que aquest problema pot ser fàcilment resolt i automatitzat amb l'Script-Fu.

Crearem un script anomenat «Text Box», que crearà una imatge amb la mida correcta, ajustada a una línia de text que l'usuari ha introduït. També deixarem a l'usuari triar la lletra tipogràfica, la seva mida i el color del text.

#### 3.4.2. Editeu i deseu els vostres scripts

Up until now, we've been working in the Script-Fu Console. Now, however, we're going to switch to editing script files. Script files should be plain text files that you can edit in a text or code editor. The name you give is not that important, except for being able to recognize the script. You should give your script file the extension «.scm».

Where you place your scripts is a matter of preference. In GIMP's folder preferences you can see in which folders GIMP looks for scripts. It is also possible to add a new folder there. The folder where GIMP stores its own scripts is usually not the best choice for your scripts, but for the rest feel free to choose what suits you best.

#### 3.4.3. Les necessitats essencials

Cada script de Script-Fu defineix almenys una funció, que és la funció principal de l'script. És on fa la feina.

Cada script ha de registrar-se també en la base de dades de procediments, de manera que s'hi pugui accedir amb el GIMP .

Es defineix primer la funció principal:

            (define (script-fu-text-box inText inFont inFontSize inTextColor))

Aquí s'ha definit una nova funció anomenada `script-fu-text-box` amb quatre paràmetres que més tard correspondran al text, a una mida de lletra i al color del text. La funció està actualment buida i no fa res. Fins aquí tot bé - res de nou, res d'especial.

#### 3.4.4. Convencions de nomenclatura

Les Convencions de nomenclatura de l'Scheme prefereixen minúscules amb guions i s'han respectat dins el nom de la funció. No obstant això, es parteix de la convenció amb els paràmetres. Es volen noms més descriptius pels paràmetres i variables, i s'hi afegeix el prefix «in» als paràmetres, així es pot veure ràpidament quins valors entren en l'script, en comptes dels que es creen en ell. S'utilitza el prefix «the» per a les variables definides en l'script.

És la convenció del GIMP per a anomenar les funcions del vostre script `script-fu-abc`, perquè així apareixeran en la base de dades de procediments, totes elles es mostraran sota l'Script-Fu quan s'estiguin llistant les funcions. Això també ajuda a distingir-les dels connectors.

#### 3.4.5. Registre de la funció

Ara, registrem la funció amb el GIMP. Això es fa cridant la funció `script-fu-register`. Quan el GIMP llegeixi un script, executarà aquesta funció, que registrarà l'script en la base de dades de procediments. Podeu situar aquesta funció on vulgueu dins el vostre script, però normalment se situa al final, després de la resta de les línies del codi.

Aquest és el llistat de registre d'aquesta funció (s'explicaran tots aquests paràmetres de seguida):

      (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
      )
      (script-fu-menu-register "script-fu-text-box" "<Image>/File/Create/Text")

Si deseu aquestes funcions en un fitxer de text amb el sufix `.scm` al directori dels vostres scripts, seleccioneu Filtres → Script-Fu → Actualitza els scripts, aquest script nou apareixerà com Fitxer → Crea → Text → Text Box.

Si crideu aquest nou script, no farà res, per descomptat, però podeu veure les anotacions que es van fer quan es va registrar l'script (més informació del que es va fer, es mostrarà després).

Finalment, si obriu el Navegador de procediments (Ajuda → Navegador de procediments), veureu que l'script apareix en la base de dades.

#### 3.4.6. Passos per a registrar l'script

Per a registrar l'script en el GIMP, es cridarà la funció `script-fu-register`, s'ompliran els set paràmetres requerits i s'hi afegiran els nostres paràmetres, junt amb una descripció i els valors per defecte de cada paràmetre.

Els paràmetres requerits

- El nom de la funció que es defineix. Això és la crida de la funció quan es crida el nostre script (el punt d'entrada a l'script). És important perquè es poden definir funcions addicionals sota el mateix fitxer, i el GIMP necessita saber quines d'aquestes funcions crida. En aquest exemple, només es defineix una funció, «text-box», que s'ha registrat.

- The menu label is the name that will be shown in the menu. In previous versions of GIMP you could specify the menu location here, but that has changed. How to specify the location will be shown below.

- Una descripció del vostre script, que es mostrarà en el navegador de procediments.

- El vostre nom (l'autor de l'script).

- Informació dels Drets d'autor.

- La data en què es va fer l'script, o la data de la darrera revisió.

- Els tipus d'imatges amb què treballa l'script. Podrien ser: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. O no podrien ser cap d'elles, en aquest cas, s'està creant una imatge i no cal establir-ne el tipus.

#### 3.4.7. Registre dels paràmetres de l'script

Una vegada que s'han llistat els paràmetres requerits, cal precisar quins són els que corresponen amb les necessitats del nostre script. En llistar aquests paràmetres, es donen indicacions del tipus que són; això és pel diàleg que apareix quan l'usuari selecciona l'script. També es poden proporcionar valors per defecte.

Aquesta secció del procés de registre té el següent format:

Tipus de paràmetre | Descripció | Exemple
--- | --- | ---
`SF-IMAGE` | Si el vostre script opera en una imatge, hauria de ser el primer paràmetre després dels paràmetres requerits. El GIMP transmetrà una referència a la imatge en aquest paràmetre. | 3
`SF-DRAWABLE` | Si el vostre script opera sobre una imatge oberta, hauria de ser el segon paràmetre després del paràmetre `SF-IMAGE`. Es refereix a la capa activa. El GIMP transmetrà una referència a la capa activa en aquest paràmetre. | 17
`SF-VALUE` | Accepta nombres i cadenes de caràcters. Tingueu en compte que les cometes han d'estar precedides pel caràcter d'escapament, per la qual cosa és millor utilitzar `SF-STRING`. | 42
`SF-STRING` | Accepta cadenes de caràcters. | «Un text»
`SF-COLOR` | Indica que un color es requereix en aquest paràmetre. | '(0 102 255)
`SF-TOGGLE` | Es mostra una casella de selecció, per a obtenir un valor booleà. | TRUE o FALSE (Vertader o Fals)

#### 3.4.8. Els paràmetres de l'API de Script-Fu[6]

| Nota
Al costat dels tipus de paràmetres anteriors n'hi ha d'altres en mode interactiu, cadascun d'ells crea un giny en el control del diàleg. Trobareu una llista d'aquests paràmetres amb descripcions i exemples en l'script de prova `plug-ins/script-fu/scripts/test-sphere.scm` subministrat amb el codi font del GIMP.

Tipus de paràmetre | Descripció
--- | ---

`SF-ADJUSTMENT`

Crea un giny d'ajustament en el diàleg.

SF-ADJUSTMENT "label" '(value lower upper step_inc page_inc digits type)

Llista d'arguments del giny

Element | Descripció
--- | ---
"label" | Text imprès abans del giny.
valor | Valor imprès al principi.
lower / upper | Els valors mini / maxi (rang d'elecció).
step_inc | Incrementa/redueix el valor.
page_inc | Incrementa/redueix el valor utilitzant les tecles Pàgina.
dígits | Dígits després del punt (part decimal).
tipus | Un de: SF-SLIDER o 0, SF-SPINNER o 1

`SF-COLOR`

Crea un botó de color en el diàleg.

SF-COLOR "label" '(red green blue)

o

SF-COLOR "label" "color"

Llista d'arguments del giny

Element | Descripció
--- | ---
"label" | Text imprès abans del giny.
(vermell verd blau) | Llista dels tres valors per als components vermell, verd i blau.
"color" | Nom de color en notació CSS.

`SF-FONT`

Crea un giny per a la selecció de la lletra tipogràfica en el diàleg. Retorna un nom de la lletra com una cadena. Hi ha dos nous procediments nous del gimp-text per a facilitar l'ús d'aquest paràmetre de tornada:

(gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font)

(gimp-text-get-extents-fontname text size unit font)

on el paràmetre «font» és el nom de la lletra tipogràfica que s'obté. La mida especificada en el «fontname» s'ignora. S'utilitza només al gestor de la lletra. Us preguntarà que doneu un valor útil (24 píxels és una opció correcta).

SF-FONT "label" "fontname"

Llista d'arguments del giny

Element | Descripció
--- | ---
"label" | Text imprès abans del giny.
"nom de la tipografia" | Nom de la lletra tipogràfica per defecte.

`SF-BRUSH`

Crearà un giny en el diàleg de control. El giny consisteix en una zona de previsualització (que quan es prem produeix una previsualització emergent) i un botó amb l'etiqueta «...». El botó obre un diàleg on es poden seleccionar els pinzells i modificar-ne cadascuna de les característiques.

SF-BRUSH "Brush" '("Cercle (03)" 100 44 0)

En aquest cas, el diàleg del pinzell s'obrirà amb el pinzell per defecte Cercle (03) opacitat 100, espaiat 44 i en mode normal (valor 0).

Si aquesta selecció no canvia el valor passat a la funció com a paràmetre, serà '("Cercle (03)" 100 44 0).

`SF-PATTERN`

Crearà un giny en el diàleg de control. El giny consisteix en una zona de previsualització (que quan es prem produeix una previsualització emergent) i un botó amb l'etiqueta «...». El botó obre un diàleg on es poden seleccionar els patrons.

SF-PATTERN "Pattern" "Maple Leaves"

El valor retornat quan es crida l'script és una cadena que conté el nom del patró. Si la selecció anterior no s'ha modificat, la cadena contindrà «Fulles d'auró».

`SF-GRADIENT`

Crearà un giny en el diàleg de control. El giny consisteix en un botó que conté una previsualització del degradat seleccionat.

Si es prem el botó, apareixerà un diàleg de selecció del degradat.

SF-GRADIENT "Gradient" "Deep Sea"

El valor retornat quan es crida l'script és una cadena que conté el nom del degradat. Si la selecció anterior no s'ha modificat, la cadena contindrà «Mar profund».

`SF-PALETTE` | Crearà un giny en el diàleg de control. El giny consisteix en un botó que conté el nom de la paleta seleccionada. Si premeu el botó, apareixerà un diàleg de selecció de la paleta. SF-PALETTE "Palette" "Named Colors" El valor retornat quan es crida l'script és una cadena que conté el nom del patró. Si la selecció anterior no s'ha modificat, la cadena contindrà «Colors amb nom».
`SF-FILENAME` | Crearà un giny en el diàleg de control. El giny consisteix en un botó que conté el nom d'un fitxer. Si premeu el botó, apareixerà un diàleg de selecció del fitxer. SF-FILENAME "label" (string-append "" gimp-data-directory "/scripts/beavis.jpg") El valor retornat quan es crida l'script és una cadena que conté el nom del fitxer.
`SF-DIRNAME` | Només és útil en mode interactiu. Molt semblant a SF-FILENAME, però el giny creat permet triar un directori en lloc d'un fitxer. SF-DIRNAME "etiqueta" "/var/tmp/images" El valor retornat quan es crida l'script és una cadena que conté el nom del directori.
`SF-OPTION` | Crearà un giny en el diàleg del control. El giny és un quadre combinat (combo-box) que mostra les possibles opcions. La primera opció és l'opció per defecte. SF-OPTION "label" '("option1" "option2") El valor retornat quan es crida l'script és el nombre de l'opció triada, 0 correspon a la primera opció.

`SF-ENUM`

Crearà un giny en el diàleg de control. El giny és un quadre combinat que mostra tots els valors possibles per un tipus d'enumeració donat. Ha de ser el nom d'enumeració registrada, sense el prefix del «GIMP». El segon paràmetre especifica el valor per defecte.

SF-ENUM "Interpolació" '("InterpolationType" "lineal")

El valor retornat quan es crida l'script correspon al valor enumerat triat.

#### 3.4.9. Registering the Menu Location

Once we have registered our script, we need to tell GIMP where it should be found in the menu.

The best menu location of your script depends on its function. Most scripts are found in the Filters and Colors menus.

For the current script, which creates a new image, we choose a submenu of File → Create. This is what the line with the `script-fu-menu-register` function does. Thus, we registered our Text Box script here: File → Create → Text → Text Box.

Si us fixeu, el submenú Text, dins el menú Fitxer/Crea, no hi era al començament: el GIMP crea automàticament menús que no existeixen.

Figura 13.2. El menú de l'script.

[6] Aquesta secció no és part del programa d'aprenentatge original.

3.3. Llistes, llistes i més llistes |  | 3.5. Dona una mica de substància al nostre script

Report a bug in GIMP Report a documentation error