###

Nå er det på tide å gjere noe brukbart ut av skriptet.

####

Fram til nå har vi laga ein tom funksjon og registrert denne i GIMP. Nå er det på tide å legge noe brukbart inn i denne funksjonen. Vi skal lage eit nytt bilete med noen tekst i. Deretter skal vi endra storleiken på biletet slik at det høver nøyaktig til teksten.

Sidan du nå kjenner til korleis du kan tilordna variablar, definera funksjonar og få tilgang til listeverdiar, er resten strake landevegen. Det einaste du treng er å bli kjent med prosedyredatabasen i GIMP og korleis du kan kalla opp prosedyrar derifrå direkte. Fyr opp prosedyre-lesaren og la oss kome i gang med noe nyttig.

Vi byrjar med å lage eit nytt bilete. Då må vi ha ein ny variabel, `theImage`, som blir laga ved å kalla opp den innebygde funksjonen `gimp-image-new`. Som du ser av prosedyre-lesaren, treng denne funksjonen tre parametrar: Breidda og høgda på biletet og bilettypen. Sidan vi likevel må endra storleiken på biletet seinare, vel vi å lage eit RGB-bilete på 10 × 10. Verdiane for høgde og breidde lagrar vi i eit par variablar til seinare bruk.

            (define (script-fu-text-box inText inFont inFontSize inTextColor)
            (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

Merk. Vi brukte verdien RGB for å spesifisera at vi ville lage eit RGB-bilde. Vi kunne ha brukt “0” i staden, men “RGB” er lettare å forstå.

Du bør også legge merke til at vi bruker listehovudet for å ta ut resultatet av funksjonsoppkallet. Dette kan sjå litt merkeleg ut all den tid databasen fortel oss at funksjonen returnerer bare ein verdi: ID-en til det nye biletet. Forklaringa er at alle funksjonane i GIMP returnerer ei liste, sjølv om denne lista innehald bare eitt element. Derfor må vi ta ut listehovudet.

####

Nå når du endeleg har fått eit bilete, treng du også eit nytt lag til dette biletet. Dette gjer du ved å kalla opp funksjonen `gimp-layer-new` med ID-en til det nye biletet. (Frå nå av blir bare dei nye linjene i programmet lista opp. Ikkje heile programmet som tidlegare. Du finn det fullstendige skriptet her.) Sidan alle dei lokale variablane nå er definerte, kan du avslutta deklarasjonen med nødvendige parentesar:

            ;create a new layer for the image:
               (theLayer
                         (car
                              (gimp-layer-new
                               theImage
                               theImageWidth
                               theImageHeight
                               RGB-IMAGE
                               "layer 1"
                               100
                               NORMAL
                              )
                          )
                )
             ) ;end of our local variables

Vi må legge det nye laget til biletet:

            (gimp-image-add-layer theImage theLayer 0)

For moro skuld, kan du nå sjå på fruktene av arbeidet så langt. Legg til denne linja for å vise det nye, tomme biletet:

            (gimp-display-new theImage)

Lagra arbeidet ditt og vel Utvid → Script-Fu → Oppdater skript. Dersom du nå køyrer skriptet, skal det dukka opp eit nytt bilete på skjermen. Truleg vil det visa ei tilfeldig fargesamling, utan meining. Dette er fordi biletet ikkje er reint. Vindauget er rett og slett ikkje vaska. Vi kjem til det seinare.

####

Fjern linja som viser biletet på skjermen, eller betre, sett eit semikolon (;) framføre for å gjere ho om til eit notat. Du kan då seinare bare fjerne semikolonet for å gjere linja aktiv igjen dersom du skulle ha bruk for det.

For å gjere teksten synleg, må vi legge inn bakgrunns- og forgrunnsfargane. Også her nyttar vi ferdige funksjonar:

Nå har vi fargane, og manglar bare litt reingjering av biletet. Vel heile biletet og kall opp `clear`:

            (gimp-context-set-background '(255 255 255) )
            (gimp-context-set-foreground inTextColor)

eller (som det står i originalmanuset:)

            (gimp-drawable-fill theLayer BACKGROUND-FILL)

Nå skulle biletet vere klar for å motta teksten:

            (set! theText
                          (car
                               (gimp-text-fontname
                                theImage theLayer
                                0 0
                                inText
                                0
                                TRUE
                                inFontSize PIXELS
                                "Sans")
                           )
            )

Dette var litt av ei lekse. Funksjonen skulle likevel vere forståeleg dersom du studerer parametra samstundes som du tar ein kikk i funksjonslesaren på kva parametrar som er nødvendige. Det som har skjedd, er at vi har laga eit nytt tekstlag og tilordna det til variabelen `theText`.

Sidan vi nå har teksten, er det bare å plukka ut høgda og breidda på denne og utvida biletet og biletelaget slik at det passer til teksten:

            (set! theImageWidth   (car (gimp-drawable-width  theText) ) )
            (set! theImageHeight  (car (gimp-drawable-height theText) ) )
            (gimp-image-resize theImage theImageWidth theImageHeight 0 0)
            (gimp-layer-resize theLayer theImageWidth theImageHeight 0 0)

Dersom du undrar på kva “drawable” betyr, er du ikkje åleine. Det er eit ord som er definert i GIMP til å bety alt som kan teiknast på, både lag, kanalar, lagmasker og det du elles måtte kunne finna på. Eit lag er såleis bare ein spesialversjon av “drawable”.

Nå skulle alt vere klart, og du kan gjenopna, eller skriva inn på nytt, linja som sender biletet ditt til skjermen:

            (gimp-display-new theImage)

Lagra arbeidet, oppdater databasen og prøv det første skriptet ditt.

####

Dersom du prøver å lukke biletet utan å lagra det først, vil GIMP kome med eit spørsmål om du ønskjer å lagra biletet. Dette fordi alle bilete det er gjort endringar i, eller som ikkje er lagra, blir av GIMP definerte til å vere “skitne”. Dette blir markert med eit (for oss usynleg) flagg. For dette skriptet, som er lett å henta tilbake igjen, er det liten vits i å lagra kvar gong du har sett på det. Du kan likegodt fjerna dette flagget.

Du fjerner det skitne flagget med kommandoen

            (gimp-image-clean-all theImage)

Dette vil setje flagget til 0 og vise at biletet er “reint”.

Det er fritt fram om du vil bruke denne kommandoen. Eg nyttar det i skript som lagar nye bilete og der innhaldet er enkelt, som i dette skriptet. Lagar du skript med kompliserte resultat, eller skript som skal nyttast på eksisterande bilete, vil det vere lurt å sløyfa denne slettekommandoen.