3.5. Blås liv i skriptet

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 <code>gimp-image-new</code>. 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.

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 <code>clear</code>:

        (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.