3.4. Váš první Script-Fu skript

Nepotřebujete se na chvíli zastavit a popadnout dech? Ne? Pak tedy vzhůru na čtvrtou lekci – váš první Script-Fu skript!

3.4.1. Vytvoření skriptu Text Box

Jedna z nejčastějších operací, kterou v Gimpu provádím, je vytvoření textu pro webovou stránku, logo nebo něco takového. V takovém případě ale nikdy nevím, jak velký obrázek mám vytvořit, protože nevím přesně, kolik místa text v požadovaném řezu písma a velikosti zabere.

Mistr Script-Fu (ale i nadaný student) si brzy uvědomí, že lze takový problém snadno a automaticky řešit pomocí Script-Fu.

Proto vytvoříme skript, který pojmenujeme Text Box a který vytvoří obrázek o velikosti přesně odpovídající zadanému textu. Uživatel bude mít možnost zvolit i řez písma, jeho velikost a barvu.

3.4.2. Editace a ukládání skriptů

Do této chvíle jsme pracovali se Script-Fu konzolí. Od této chvíle však budeme pracovat s textovými soubory.

Kam skripty uložíte záleží jen na vás. Pokud máte přístup do výchozího adresáře Gimpu pro skripty, můžete uložit své skripty tam. Já nicméně raději ukládám své vlastní skripty do vlastního adresáře, abych je měl oddělené od skriptů dodávaných přímo s Gimpem.

V adresáři .gimp-2.2, který GIMP vytvořil ve vašem domovském adresáři, byste měli najít podadresář jménem scripts. GIMP tento adresář automaticky prohledává a skripty, které v něm nalezne, přidává do Script-Fu databáze. Nejjednodušší bude, pokud své skripty uložíte právě sem.

3.4.3. Úplné základy

Každý Script-Fu skript definuje alespoň jednu funkci, hlavní funkci skriptu. Ta je zodpovědná za činnost skriptu.

Každý skript musí být navíc zaregistrován v databázi procedur, aby k němu mohlo být přistupováno z Gimpu.

Nejprve definujeme hlavní funkci:

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

Takto jsme definovali funkci jménem script-fu-text-box se čtyřmi parametry, které se vztahují k textu, písmu, velikosti písma a jeho barvě. Funkce je zatím prázdná a proto nic nedělá. Zatím nic zajímavého ani složitého.

3.4.4. Jmenné konvence

Konvence jazyka Scheme pro vytváření jmen upřednostňují malá písmena a pomlčky, tak jako jsme učinili při výběru jména funkce. Při pojmenovávání jejích parametrů jsme se však od konvence odchýlili. Mám rád jména popisná, která o funkci nebo parametru hodně říkají, proto jsme pro parametry použili předponu in, která naznačuje, že parametry obsahují hodnoty předávané skriptu, nikoliv skriptem vytvořené. Pro proměnné vytvořené uvnitř skriptu používám předponu the.

V Gimpu je zvykem pojmenovávat všechny Script-Fu funkce podle vzoru script-fu-jmeno-funkce, protože v databázi procedur jsou pak všechny pěkně pohromadě a jsou snadno odlišitelné od zásuvných modulů.

3.4.5. Registrace funkce

Nyní je třeba funkci v Gimpu zaregistrovat. To se dělá voláním funkce script-fu-register. Při načítání skriptu GIMP tuto funkci spustí, a tak je skript zaregistrován v databázi procedur. Tuto funkci můžete ve skriptu umístit kamkoliv, ale obvykle se nachází úplně na konci.

Zde je výpis naší registrační funkce (její parametry vzápětí vysvětlím):

        (script-fu-register
          "script-fu-text-box"                        ;func 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"             ;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" "<Toolbox>/Xtns/Script-Fu/Text")
      

Pokud tyto funkce zapíšete do souboru s příponou .scm, který uložíte do vašeho adresáře pro skripty, a pak zvolíte z nabídky Panelu nástrojů Rozš.Script-FuObnovit skripty, objeví se nový skript jako Rozš.Script-FuTextText Box.

Pokud ale skript spustíte, neudělá samozřejmě nic užitečného, ale uvidíte výzvy vytvořené při registraci skriptu (podrobnosti dále).

Pokud otevřete Prohlížeč procedur, volbou Rozš.Prohlížeč procedur), zjistíte, že náš nový skript je skutečně uveden v databázi.

3.4.6. Jednotlivé kroky registrace skriptu

Aby byl náš skript v Gimpu zaregistrován, voláme funkci script-fu-register, zadáme sedm povinných parametrů, parametry specifické pro náš skript, popis a implicitní hodnotu každého parametru.

Povinné parametry

  • Jméno funkce, která se volá při spuštění skriptu (vstupní bod skriptu). Je to nutné, neboť v souboru skriptu může být definováno funkcí více. Gimpu musí být jasné, kterou z nich má zavolat. V našem příkladu jsme definovali funkci jedinou, text-box, kterou jsme také zaregistrovali.

  • Umístění v nabídce, kam bude skript vložen. Přesné umístění se určuje stejně jako cesta k souboru v unixovém systému; kořenovým adresářem je buď Panel nástrojů nebo kliknutí pravým tlačítkem myši.

    Pokud skript nepracuje s již existujícím obrázkem (a vytváří tedy obrázek nový, tak jako náš skript Text Box), je třeba jej umístit do nabídky Panelu nástrojů, což je hlavní, vždy otevřené, okno Gimpu.

    Pokud skript naopak pracuje s již existujícím otevřeným obrázkem, je třeba jej vložit do nabídky obrázku, která se zobrazuje po kliknutí pravým tlačítkem myši do obrázku, případně v horní liště okna obrázku. Zbytek cesty ukazuje na jednotlivé nabídky a podnabídky v cestě. Náš skript jsme zaregistrovali v podnabídce Text podnabídky Script-Fu nabídky Rozš. Panelu nástrojů ( ( Rozš.Script-FuTextText Box ).

    Možná jste si všimli, že podnabídka Text před registrací skriptu vůbec neexistovala. GIMP automaticky vytvoří všechny chybějící nabídky.

  • Popis skriptu, který se zobrazuje v Prohlížeči procedur.

  • Vaše jméno (jméno autora skriptu).

  • Copyright, informace o autorských právech.

  • Datum, kdy byl skript napsán nebo naposledy revidován.

  • Typy obrázků, se kterými umí skript pracovat. Může to být kterýkoliv z následujících: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Nemusí to však být typ žádný, jako v případě našeho skriptu, který vytváří nový obrázek a tudíž nepracuje s žádným stávajícím obrázkem.

3.4.7. Registrace parametrů skriptu

Po uvedení obecných, povinných parametrů je třeba uvést parametry, které vyžaduje náš skript. V seznamu těchto parametrů je také třeba uvést jejich typ, což umožní správně zobrazit dialog, ve kterém uživatel parametry nastavuje. Také zadáme výchozí hodnoty těchto parametrů.

Tato část registračního procesu používá následující formát:

Typ parametru

Popis

Příklad

SF-VALUE

Přijímá čísla a řetězce. Uvozovky ve výchozím textu je třeba eskapovat, je proto lepší použít SF-STRING.

42

SF-STRING

Přijímá řetězce.

"Nějaký text"

SF-COLOR

Označuje parametr vyžadující barvu.

'(0 102 255)

SF-TOGGLE

Přijímá booleovskou hodnotu (pravda či nepravda). V dialogu se zobrazuje jako zaškrtávací políčko, přepínač.

TRUE nebo FALSE

SF-IMAGE

Pokud skript pracuje s otevřeným obrázkem, měl by toto být první parametr uvedený po povinných parametrech. GIMP v tomto parametru předá odkaz na obrázek.

3

SF-DRAWABLE

Pokud skript pracuje s otevřeným obrázkem, měl by tento parametr následovat ihned za parametrem SF-IMAGE. Odkazuje na aktivní vrstvu. GIMP na ni přes tento parametr předá odkaz.

17