3.4. Det første Script-Fu skriptet ditt

Du har kanskje hatt ein velfortent pause for å få igjen pusten? I alle fall burde du no vers klar for den fjerde leksjonen – det første skriptet ditt i Script-Fu.

3.4.1. Vi lagar eit tekstboks-skript

Eg brukar gjerne GIMP for å laga boksar med litt tekst og/eller bilete for heimesidene mine. Ulempen er at eg aldri veit på førehand kor stor denne boksen vert, og har dermed problem med å vita kor stort startvindauget må vera. Alt er avhengig av skrifttype, skriftstorleik og eventuelle andre ting som skal vera med.

Script-Fu-meisteren, og kanskje også studenten hans, har sjølvsagt oppdaga at dette problemet kan løysast og automatiserast ved hjelp av Script-Fu.

Vi vill difor laga eit skript som vi kallar «Text Box», og som lagar eit bilete i høveleg storleik til å passa pent rundt ei tekstlinje som brukaren skriv inn. Sjølvsagt kan brukaren også velja både type, storleik og farge for skrifta.

3.4.2. Å redigera og lagra skripta dine

Opp til no har vi arbeidd på Script-Fu-konsollen. No skal vi gå over til å redigera skriptfiler. Skriptfiler er reine tekstfiler som kan redigerast i program for å redigera tekst eller kode. Kva namn du brukar på fila er ikkje så viktig, men bør vera slik at det er lett å finna igjen skriptet. Du gjev skriptfila utvidinga «.scm».

Kvar du lagrar skripta dine er eit spørsmål om preferanse. I GIMPs mappeinnstillingar kan du sjå kva mapper GIMP ser etter skript i. Det er også mogleg å leggja til ei ny mappe der. Til vanleg er mappa som GIMP lagrar sine eigne skript i ikkje det beste valet for å lagra skripta dine, men sjølvsagt brukar du staden som passar deg best.

3.4.3. Det essensielle

Kvart einaste skript i Script-Fu må definera minst ein funksjon, og det er hovudfunksjonen for skriptet. Det er her du definerer kva skriptet skal gjera.

Alle skripta må også kunne registrerast i prosedyredatabasen slik at dei er tilgjengelege for GIMP.

Vi må altså først definera hovudfunksjonen:

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

Setninga ovanfor definerer ein ny funksjon som vi har kalla script-fu-text-box. Funksjonen tar fire parameterar, som seinare vert tilordna noko tekst («inText»), ein skrifttype («inFont»), ein skriftstorleik («inFontSize») og ein tekstfarge («inTextColor»). (Eigentleg kunne vi like gjerne ha brukt norske namn her, men i programmering er det vanleg å bruka engelske namn slik at programmet er forståeleg også for andre). Funksjonen vi har laga er førebels tom og gjer ikkje noko som helst. Så langt inkje nytt eller merkverdig.

3.4.4. Namnereglar

Eigentleg godtar Scheme fleire måtar å skriva namn på. Har du gode vanar med deg frå andre språk, kan du stort sett nytta desse. Som i alle(?) programmeringsspråk, kan du ikkje dela opp eit namn med mellomrom. I Scheme er det difor vanleg praksis å gjera samansette ord meir forståelege ved å dela dei opp med bindestrek (-) slik du ser det er brukt i funksjonsnamnet. Dette vert av mange også brukt i parameternamna. Her har eg likevel nytta ein annan metode, nemleg å markera dei ulike orda med stor bokstav. I tillegg legg eg inn eit «in» framføre for å markera at dette er inndata og ikkje noko som er lagt til seinare. (Eg har lagt med til den vanen å bruka prefikset «the» framføre variablar som vert oppretta inne i skriptet).

GIMP vil helst gje skriptfunksjonane namnet script-fu-abc slik at dei vert lista ut under Script-Fu i prosedyredatabasen. Dette også for å skilja i frå programtillegg.

3.4.5. Å registrere funksjonen

No må vi registrera funksjonen vår i GIMP. Dette gjer vi ved å kalla opp funksjonen script-fu-register. Når GIMP les inn eit skript, vil denne funksjonen leggja skriptet inn i prosedyredatabasen. Du kan eigentleg skriva inn dette funksjonsoppkallet kvar som helst i skriptet, men det er vanleg å setja det heilt på slutten, etter alle dei andre kodane.

Her er utlistinga av programbiten som registrerer denne funksjonen (forklaringa kjem etterpå):

  (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")
      

Dersom du lagrar dette i skriptkatalogen som ei tekstfil med filutvidinga .scm og deretter vel FilterScript-FuOppdater skript, vil dette skriptet dukka opp i FilHent innTextText Box.

Førebels gjer dette skriptet naturleg nok ingenting. Einaste er at du ser korleis skriptet vert registrert i GIMP og få ein kontroll på at du har gjort alt rett så langt.

Dersom du aktiverer prosedyrelesaren ( HjelpProsedyrelesar) vil du finna at scriptet ditt no er registrert i databasen.

3.4.6. Å registrere skriptet

For å registrera skriptet i GIMP, må vi skriva inn dei sju obligatoriske parameterane, leggja til skriptet sine eigne parameterar og ei beskriving av skriptet, og endeleg dei verdiane du ønskjer skriptet skal opnast med i dei variable parameterane. Deretter kallar du opp funksjonen «script-fu-register» frå skriptet ditt.

Dei nødvendige parametra

  • Namnet på funksjonen. Dette er funksjonen som vert aktivert når du kallar opp skriptet. Inngangen til skriptet, om du vil. Dette er heilt nødvendig fordi du kan definera mange funksjonar innan same fila, og GIMP må vita kva for funksjonar som skal kallast opp. I eksemplet definerte vi berre ein funksjon, «text-box», som så vart registrert.

  • menu label er namnet som vert vist i menyen. I tidlegare versjonar av GIMP måtte du spesifisera menyplasseringa her, men det er endra. Korleis du spesifiserer plasseringa vert vist nedanfor.

  • Ei beskriving av skriptet slik det skal visast i prosedyrelesarren.

  • Namnet ditt (dvs. forfattaren av skriptet).

  • Copyright-informasjon.

  • Datoen skriptet vart laga eller sist revidert.

  • Bilettypar skriptet kan brukast på. Dette kan vera RGB, RGBA, GRAY, GRAYA, INDEXED eller INDEXEDA. Eller ingen i det heile. I dette tilfellet opprettar skriptet sitt eige bilete, og treng såleis ikkje definera bilettype.

3.4.7. Registrering av skriptparametra

Når vi endeleg er ferdige med dei obligatoriske parametra, er tida komen for dei skriptavhengige parametra. Når vi listar opp parametra for skriptet, tar vi også med kva for type dei er. Dette er for dialogvindauget som sprett opp når nokon vel skriptet ditt. I tillegg treng vi også ein førehandsvald verdi for parametra. Den verdien programmet vil nytte om brukaren ikkje gjer endringar.

Dette avsnittet i registreringsprosessen har dette formatet:

Parametertype

Penselnamn

Eksempel

SF-IMAGE

Dersom skriptet skal arbeida på eit opna bilete, må dette vera den første parameteren etter dei obligatoriske parameterane. GIMP vil leggja inn referanse til biletet i denne parameteren.

3

SF-DRAWABLE

Dersom skriptet skal arbeida på eit opna bilete, må dette vera den andre parameteren etter parameteren SF-IMAGE. Det refererer til eit aktivt lag. GIMP vil leggja inn referanse til det aktive laget i denne parameteren.

17

SF-VALUE

Godtar tal og strengar. Merk at hermeteikn må markerast med \ framføre. Bruk heller SF-STRING.

42

SF-STRING

Godtar tekststrenger.

«Ein tekst»

SF-COLOR

Indikerer at her skal det vera ein fargeverdi.

'(0 102 255)

SF-TOGGLE

Viser ein avkryssingsboks for å lesa inn ein logisk verdi.

TRUE eller FALSE (sant/usant)

3.4.8. Script-Fu-parameter API[6]

[Notat] Notat

Utanom dei parametertypane som er nemnde ovanfor, finst det også ei samling parameterar for interaktiv modus. Kvar av desse vil laga eit skjermelement («widget») i kontrolldialogvindauget. Du kan finna ei beskriving av desse parameterane og eksempel på bruk av dei i testskriptet plug-ins/script-fu/scripts/test-sphere.scm som følgjer med kjeldekodene for GIMP.

Parametertype

Penselnamn

SF-ADJUSTMENT

Opprettar eit justeringselement i dialogvindauget.

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

Argumentliste for skjermelementet
ElementPenselnamn
«merkelapp»Teksten framføre skjermelementet.
verdiStartverdi.
nedre/øvrenedre / øvre : nedre/øvre verdi (område for vala).
step_incIncrement/decrement verdi.
page_incIncrement/decrement verdi ved bruk av «page key».
sifferDigits: kor mange desimalar.
typeAnten SF-SLIDER, 0, SF-SPINNER eller 1

SF-COLOR

Oppretter ein fargeknapp i dialogvindauget.

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

eller

SF-COLOR "label" "color"

Argumentliste for skjermelementet
ElementPenselnamn
«merkelapp»Teksten framføre skjermelementet.
'(red green blue)Liste med ein verdi for kvar av komponentane raud, grøn og blå.
"color"Fargenamn i CSS-notasjon.

SF-FONT

Oppretter eit område for å velje skrifttype. Namnet på skrifttypen vert returnert som ein streng. Det er oppretta to nye tekstprosedyrar for å forenkla bruken av desse returparametra:

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

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

der fontname er namnet på skrifttypen. Storleiken som vert spesifisert i skriftnamnet vert ignorert. Denne verdien vert berre brukt i skrifttypeveljaren. Difor bør du helst setja denne til ein førehandvald verdi, for eksempel 24.

SF-FONT "label" "fontname"

Argumentliste for skjermelementet
ElementPenselnamn
«merkelapp»Teksten framføre skjermelementet.
"fontname"Namn på standardskrifta.

SF-BRUSH

Denne vil oppretta eit område i kontrolldialogvindauget som du kan klikka på for å få opp ei førehandsvising. Det vert også laga ein «...»-knapp. Når du klikkar på denne, kjem det opp ein meny der du kan velja pensel og endra innstillingane for denne.

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

Penseldialogvindauget vert førehandssett med verdiane for "Circle (03)" dekkevne = 100, avstand = 44 og normal skrivemodus (verdi = 0).

Dersom du ikkje gjer endringar i denne, vil verdiane som vert sende vidare som parameterar til funksjonen vera '("Circle (03)" 100 44 0).

SF-PATTERN

Denne vil oppretta eit område i kontrolldialogvindauget som du kan klikka på for å få opp ei førehandsvising av mønsterelementa. Det vert også laga ein «...»-knapp. Når du klikkar på denne, kjem det opp ein meny der du kan velja mønsterelement.

SF-PATTERN "Pattern" "Maple Leaves"

Denne vil returnere ein streng med namnet på mønsterelementet. I dette tilfellet «Maple Leaves».

SF-GRADIENT

Oppretter eit område i kontrolldialogvindauget med ein knapp som inneheld ei førehandsvising av den valde fargeovergangen.

Dersom du klikkar på knappen, kjem det opp eit dialogvindauge der du kan velja fargeovergang.

SF-GRADIENT "Gradient" "Deep Sea"

Denne vil returnere ein streng med namnet på fargeovergangen. I dette tilfellet «Deep Sea».

SF-PALETTE

Opprettar eit område i kontrolldialogvindauget med ein knapp som inneheld namnet på den valde paletten.

Klikk på knappen for å opna dialogvindauget for å velja palett.

SF-PALETTE "Palette" "Named Colors"

Denne vil returnere ein streng med namnet på paletten. I dette tilfellet «Named Colors».

SF-FILENAME

Opprettar eit område i kontrolldialogvindauget med ein knapp som inneheld eit filnamn.

Klikk på knappen for å opna dialogvindauget for å velja fil.

SF-FILENAME "label" (string-append "" gimp-data-directory "/scripts/beavis.jpg")

Denne vil returnere ein streng med filnamnet.

SF-DIRNAME

Berre brukbar i interaktiv modus. Liknar svært på SF-FILENAME, men du kan velje ein katalog i staden for ei fil.

SF-DIRNAME "label" "/var/tmp/images"

Denne vil returnere ein streng med katalognamnet.

SF-OPTION

Opprettar eit område i kontrolldialogvindauget med ein kombinasjonsboks som viser dei valde innstillingane på listeform.

Den første innstillinga er den førehandsvalde.

SF-OPTION "label" '("option1" "option2")

Returverdien er nummeret for den valde innstillinga. Teljinga byrjar frå 0.

SF-ENUM

Oppretter eit skjermelement i kontrolldialogvindauget. Skjermelementet viser alle oppføringane for den gjevne listetypen. Dette må vera namnet på ei registrert liste, utan «Gimp»-prefikset. Den andre parameteren spesifiserer standardverdien ved å bruka forkortinga for listeverdien.

SF-ENUM "Interpolation" '("InterpolationType" "linear")

Returverdien tilsvarer den valde listeverdien.

3.4.9. Registrera menyplasseringa

Når skriptet er registrert, må vi fortelja GIMP kva det skal vera i menyen.

Den beste menyplasseringa er avhengig av kva funksjon skriptet har. Dei fleste skripta er plasserte i menyane Filter og Fargar.

For det gjeldande skriptet, som lagar eit nytt bilete, vel vi ein undermeny med FilOpprett. Dette er det linja med script-fu-menu-register-funksjonen gjer. Dermed registrerte vi tekstboksskriptet vårt her: FilOpprettTekstTekstboks.

Du la kanskje merke til at text-undermenyen i Fil - Hent inn ikkje var der til å byrja med. GIMP opprettar nye menyar automatisk.

Figur 13.2. Menyen for skriptet ditt.

Menyen for skriptet ditt.



[6] Denne bolken er ikkje med i originalversjonen.