3.5. Leggja til tilleggsfunksjonar

No er det på tide å gjera noko brukbart ut av skriptet.

3.5.1. Å lage eit nytt bilete

Fram til no har me laga ein tom funksjon og registrert denne i GIMP. No er det på tide å leggja noko brukbart inn i denne funksjonen. Me skal laga eit nytt bilete med litt tekst i. Deretter skal me endra storleiken på biletet slik at det høver nøyaktig til teksten.

Sidan du no kjenner til korleis du kan tilordna variablar, definera funksjonar og få tilgang til listeverdiar, er resten strake landevegen. Det einaste du treng er å verta kjent med funksjonane som er tilgjengelege i prosedyredatabasen i GIMP og korleis du kan kalla opp prosedyrar derifrå direkte. Opna Del 12.9, «Prosedyrelesaren».

Me byrjar med å laga eit nytt bilete. Då må me ha ein ny variabel, theImage, som vert sett til resultatet av å kalla opp den innebygde funksjonen gimp-image-new.

Som du kan sjå på DB-utforskaren, tek funksjonen gimp-image-new tre parametrar — biletbreidda, bilethøgda og bilettypen. Sidan me seinare skal forandra storleiken på biletet slik at det passar til teksten, lagar me eit RGB-bilete på 10 × 10 pikslar. Bilethøgda og breidda vert lagra i variablar slik at me kan endra verdiane seinare i skriptet.

        (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. Me brukte verdien RGB for å spesifisera at biletet er i RGB. Dette er meir forståeleg enn om me hadde brukt 0, som også er fullt lovleg.

Legg merke til at me tok hovudet frå tilbakemeldinga frå funksjonskallet. Dette kan verke litt underleg i og med at databasen seier at berre ein verdi vert returnert, nemleg ID-en for det nyleg oppretta biletet. I GIMP vil alle funksjonar returnere ei liste sjølv om det berre er eitt element i lista. Difor må me plukka ut listehovudet.

3.5.2. Å leggja eit nytt lag til biletet

No 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å no av vert berre dei nye linjene i programmet lista opp, ikkje heile programmet som tidlegare. Du finn det fullstendige skriptet her). Sidan alle dei lokale variablane no er definerte, kan du avslutta deklarasjonen med nødvendige parentesar:

        ;opprettar eit nytt lag for biletet:
           (theLayer
                     (car
                          (gimp-layer-new
                           theImage
                           theImageWidth
                           theImageHeight
                           RGB-IMAGE
                           "layer 1"
                           100
                           LAYER-MODE-NORMAL
                          )
                      )
            )
         ) ;slutten på dei lokale variablane
      

Når me har det nye laget, må me leggja det inn i biletet:

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

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

(gimp-display-new theImage)

Lagra arbeidet ditt og starta GIMP på nytt. Køyr skriptet og det skal koma opp eit nytt bilete. Det vil truleg innehalda søppel (tilfeldige fargar) fordi me ikkje har tømt det. Dette vil me gjera straks.

3.5.3. Leggja til tekst

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

For å gjera teksten synleg, må me leggja inn bakgrunns- og forgrunnsfargane. Også her nyttar me ferdige funksjonar:

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

Med fargane sette slik me ønskjer, kan me no fjerna søpla i biletet ved å fylla teikneflata med bakgrunnsfargen:

        (gimp-drawable-fill theLayer BACKGROUND-FILL)
      

No kan me leggja til litt tekst i det reine biletet:

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

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

No når me har teksten, brukar me denne for å setja biletet og biletlaget til same breidd og høgd som 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 berre ein spesialversjon av «drawable».

No når biletet er ferdig, kan du gjenopna, eller skriva inn på nytt, linja som sender biletet ditt til skjermen:

        (gimp-display-new theImage)
      

Lagra arbeidet, starta GIMP på nytt og køyr det første skriptet ditt!

3.5.4. Stryk det skitne flagget

Dersom du prøver å lukka biletet utan å lagra det først, vil GIMP koma med eit spørsmål om du ønskjer å lagra biletet. Dette fordi alle bilete det er gjort endringar i, eller som ikkje er lagra, vert definerte til å vere «skitne». Dette vert 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 like godt fjerna dette flagget.

For å gjera dette, kan me fjerna det skitne flagget etter å ha vist biletet:

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