Tagać, tagać…

Po przybyciu na party-plejs wygenerowaliśmy kilka fraktali na trawniku, skopaliśmy śmietnik i naubliżaliśmy staruszce…
Uh-oh, to nie ten rok, nie to miejsce i nie ten artykuł, ale jak już zacząłem i najwyraźniej ktoś to czyta, to zabiorę was na wyboistą jazdę Kniejami Ostrokrzewu, z angielska zwanego Hollywoodem.

Od razu zaznaczam, że jeśli ktoś oczekuje fulprofeski-super-hiper tutoriala to może przestać czytać w tym miejscu i udać się pod ten adres: forums.hollywood-mal.com, tam znajdzie (albo i nie) coś odpowiedniego dla siebie.

A wracając na party-plejs… hmm i znowu. Zacznijmy jeszcze raz.
A wracając do rzeczy istotnych, będzie to bardziej opis moich doświadczeń podczas prób nauczenia się tego języka programowania, niż tutorial. Taki tekstowy odpowiednik filmów na jutjubie, które ludziki nagrywają podczas swoich pierwszych, a czasami ostatnich razów, na przykład z rozbrajania niewybuchów czy denerwowania swoich żon (nie wiem co gorsze).

Ostrzegam i zastrzegam, że nie mam żadnego planu, będzie to pełen spontan, z tego powodu nawet ja nie wiem o czym, kiedy i czy w ogóle będzie następna część. Wiecie jak to jest – obiecanki cacanki a czekającemu smutek.
Dla równowagi, jeżeli już coś napiszę będę się starał z całych sił żeby było jasno, czytelnie, zrozumiale i żeby można coś z nabytą w znoju wiedzą zrobić. Czyli taki praktyczny poradnik raczej niż sucha wiedza, z którą nie bardzo wiadomo co zrobić – takie zresztą mam odczucie podczas czytania manuala do Hollywood. Nie zrozumcie mnie źle, manual jest wporzo, aczkolwiek pisany przez autora i czasami rzeczy dla niego oczywiste, które w nim pomija, dla mnie – nieprogramisty – są niezłą zagwozdką.
Z rzeczy organizacyjnych muszę jeszcze dodać, że przeprowadzenie kompotów było… Do stu zielonych Superfrogów! Co się ze mną dzieje?! …Muszę jeszcze dodać, że będę się starał pisać tak żeby każdy użytkownik amigowego en-gje, bez względu na smak/obóz (jak zwał tak zwał), mógł bez jakichkolwiek przeróbek, ściągania czcionek itp. uruchomić/skompilować taki skrypt u siebie.

Przechodząc do rzeczy napiszę szybko o podstawach, znajomość których ułatwi nam naukę Hollywood.

Kod źródłowy to nic innego jak zwykły plik tekstowy najlepiej w UTF-8, pisane w jakimkolwiek nadającym się edytorze tekstu.
Niestety GUI Hollywoodowe na Amidze nie posiada, tak jak wersja (tfu) pecetowa, wbudowanego edytora z podświetlaniem składni. Można sobie poradzić zakupując CubicIDE albo zasysając odpowiedni plik z sieci dla edytora Annotate.
Póki co nasz kod (ależ to brzmi ; )) będzie tak mało skomplikowany, że będę używał systemowego NotePada.

To jedziemy z tym koksem.
Pliki Hollywoodowe mają cztery rozszerzenia:
.hws – pliki źródłowe/skrypty
.hwa – applety
.hwd – pliki tworzone przez Designera
.hwp – pliki wtyczek/pluginów

Oczywiście są jeszcze pliki wykonywalne ale one nie mają żadnego konkretnego rozszerzenia, zależy ono od systemu dla jakiego został skompilowany nasz program.

Uruchomienie naszego skryptu możliwe jest na co najmniej dwa sposoby: poprzez przycisk „Display” w GUI, albo poprzez dwuklik na plik źródłowy.
W drugim przypadku trzeba zmienić „Domyślne narzędzie/Default tool” w ikonce pliku ze skryptem z „SYS:Utilities/MultiView” na „Hollywood”.

Mi najbardziej odpowiada ostatnia możliwość, ale wy zrobicie jak wam będzie najwygodniej. Kompilacji natomiast możemy dokonać poprzez klik w „Compile” w GUI Hollywooda albo z linii poleceń.
Nie będę opisywał opcji dostępnych dla kompilacji bo dostępne są w sieci pod adresem: http://www.hollywood-mal.com/docs/html/hollywood/ManualUsage.html.
Dodam tylko, że wszystkie te argumenty można zastosować do już skompilowanego programu poprzez dodanie odpowiednich tooltype’ów do ikony naszego programu albo przez dodanie ich w wierszu poleceń podczas uruchamiania z shella.

Odnośnie opcji kompilowania z wiersza poleceń napiszę tylko, że główny program/interpreter Hollywood to nic więcej jak komenda, których wiele w systemowym katalogu C:.
Nadmienię tym co nie czytają manuali, że bezwzględnie nie można tym plikiem dzielić się z nikim, to jest serce Hollywood chronione prawami autorskimi.

Dobra, dość kwasu, czas zacząć kodowanie.

Tworzymy plik tekstowy.
Ja nazwałem swój czcionki.hws, wywaliłem na blat WB i zmieniłem tooltype na Hollywood, dla szybkości i wygody dostępu:


Niestety muszę jeszcze posmęcić, bo jest kilka rzeczy o których musimy wiedzieć pisząc skrypty dla Hollywood.

Na początku każdego skryptu musi znajdować się komenda preprocesora @VERSION.
Mówi ona interpreterowi jaka wersja Hollywood jest konieczna do skompilowania naszego skryptu. Bierze się to stąd, że różne możliwości dodawane były w różnych wersjach Hollywood i na nas spada odpowiedzialność aby dokładnie czytać dokumentację i umieścić tam odpowiedni numerek.

Każda opisywana funkcja ma podaną wersję wymaganego Hollywood, a nawet poszczególne argumenty przekazywane do funkcji pojawiają się w różnych wersjach Hollywood.
Dla przykładu funkcja Font wymaga wersji 4.5:


Gwoli jasności, ta komenda nie musi być w pierwszym wierszu pliku ze skryptem, bo tam może być komentarz który chcieliśmy umieścić dla naszej lub innych wygody. Ale musi znajdować się na pierwszej interpretowanej linii skryptu. Mam nadzieję że czujecie różnicę.

Póki co biednie, ale nasz plik wygląda tak jak na zrzucie:

Komentarze

Przy tej okazji muszę napisać kilka słów o następnym elemencie pojawiającym się w naszym kodzie, a mowa tu o komentarzach. Jak widzicie po średniku jest wpis:
– podałem wersję 1,0 bo nie ma tu nic co wymagałoby wyższej.

W Hollywood występują dwa rodzaje komentarzy, wielo i jedno liniowe.
Jednoliniowy komentarz następuje po średniku „;” i może zająć przestrzeń tylko do końca linii, taki komentarz może znajdować się na samym początku linii albo tak jak w naszym przykładzie znajdować się po funkcji i jej argumentach.

Drugim rodzajem komentarzy jest ten wieloliniowy i zaczyna się od sekwencji znaków „/*” a kończy się na „*/”. Wszystko pomiędzy nimi będzie ignorowane przez Hollywood, więc możemy tam wpisać co nam się żywnie podoba, ale najlepiej coś co pomoże nam odnaleźć się w naszym kodzie. Ilość linii nie jest ograniczona i może zająć jeden albo nieskończenie wiele wierszy.

@DISPLAY [id,] table

Jak już przebrnęliśmy przez absolutną podstawę, to musimy teraz określić wielkość i rodzaj okna w jakim będzie wyświetlany nasz program:


Służy do tego kolejna funkcja preprocesora @DISPLAY. Jeszcze jedna kwestia, autor Hollywood zaleca aby komendy preprocesora zapisywać dużymi literami. Wszystkie funkcje preprocesora zaczynają się małpą „@”.

Komenda @DISPLAY służy do określenia rodzaju, rozmiaru, tła i chyba z setki innych opcji dla naszego okna albo ekranu naszego programu.
Po cały opis wysyłam pod: http://www.hollywood-mal.com/docs/html/hollywood/atDISPLAY.html.

Ta komenda jest dobrym przykładem pokazującym jak poszczególne argumenty pojawiały się w różnych wersjach Hollywood.
Nasze okienko będzie miało szerokość 800 i wysokość 600 pikseli i nie będzie miało ramki. Dodajmy teraz jakąś czcionkę, którą będziemy mogli pisać w naszym okienku.
Na samym początku zwróćcie uwagę, że zmienił się numer wersji wymaganego Hollywood, powodem jest użycie „Engine=#FONTENGINE_INBUILT” który to argument pojawił się w Hollywood 4.7.

@FONT id, fontname$, size[, table]

Teraz rozpracujmy ten rozkaz:


Komenda ta ładuje nam font o podanej nazwie i rozmiarze i przypisuje mu identyfikator. W naszym wypadku są dwie takie komendy. Pierwsza przypisuje identyfikatorowi „1” czcionkę Arial o wielkości 50 pikseli, druga zaś identyfikatorowi „2” tę samą czcionkę ale o wielkości 20 pikseli.
W obu przypadkach na końcu występuje w nawiasie klamrowym atrybut funkcji:
„Engine=#FONTENGINE_INBUILT”
Powoduje on że wykorzystywany jest wbudowany w Hollywood sposób wyświetlania czcionek, co gwarantuje że tekst będzie wyglądał tak samo na każdym systemie dla jakiego skompilujemy nasz program.
Ta komenda ma tę właściwość, że automatycznie dołącza czcionki do naszego programu. Daje nam to pewność, że nie zabraknie czcionki wykorzystanej w naszym programie. Z drugiej strony musimy uważać jakie czcionki używamy i jakim prawom autorskim podlegają. Ponad to ma to tę zaletę że czcionki są dostępne od samego początku wykonywania się programu, nie trzeba ich „ładować”.

W Hollywood poza używaniem czcionek bitmapowych i trutajpów zassanych z sieci mamy jeszcze jedną możliwość, a mianowicie możemy użyć czcionki wbudowanej. Ma to tę zaletę, że nie musimy linkować plików z czcionkami, ani ładować ich z dysku użytkownika, ta czcionka jest wszędzie i zawsze dostępna. Dodatkowym atutem jest gwarancja tego samego wyglądu na wszelkich systemach pod jakimi może działać nasz program.
Ograniczeniem natomiast jest to, że mamy tylko po jednym kroju czcionek bitmapowych i truetajpów do wyboru i żadnych znaków narodowych, czyli możemy póki co zapomnieć o „ę”, „ó” i tak dalej. Może się to kiedyś zmieni.
Jeżeli wspomniane ograniczenia nie będą mieć wpływu na nasz program, to myślę, że jest to całkiem dobry wybór. Bo bardzo łatwy w użyciu i nie nastręcza kłopotów z ładowaniem plików z dysku (co może być dość błędogenne w przypadku kompilowania pod wiele systemów, ale o tym napiszę nieco później), ani zmartwień o licencje w przypadku ich linkowania.

Żeby zadeklarować chęć użycia wbudowanej w Hollywood czcionki zamiast nazwy kroju używamy znacznika „#” plus nazwa z dużej litery.
Mamy do wyboru pięć, a właściwie póki co cztery rodzaje czcionek:
#SANS – otwiera wbudowaną czcionkę trutype bezszeryfową
#SERIF – otwiera wbudowaną czcionkę trutype z szeryfami
#MONOSPACE – otwiera wbudowaną czcionkę trutype o stałej szerokości znaku
#TRUETYPE_DEFAULT – póki co daje taki sam wynik jak użycie #SANS (stąd cztery a nie pięć rodzajów)
#BITMAP_DEFAULT – otwiera wbudowaną czcionkę bitmapową o rozmiarze 8 pikseli, i w żaden sposób na razie nie możemy tego zmienić.

Zmieńmy teraz czcionkę Arial 20 pikseli na wbudowaną w program. Dodatkowo żeby sprawdzić jak wygląda czcionka bitmapowa dodamy sobie jeden wiersz z poleceniem jej załadowania. I tak nasza źródłówka wygląda tak jak na zrzucie:


Jak widzicie użycie jest bardzo proste, z jedną uwagą. Nawet jeśli mamy do wyboru tylko czcionkę bitmapową o rozmiarze 8 pikseli, to i tak musimy podać rozmiar funkcji @FONT, bo przy kompilacji wyskoczy nam błąd. Poza tym w przypadku czcionki wbudowanej nie musimy podawać atrybutu „Engine=#FONTENGINE_INBUILT” bo jest on wybierany automatycznie.

OpenFont (id, fontname$, size[, table])

Żeby umożliwić użycie jakiegoś kroju czcionek w naszym programie poza funkcją preprocesora @FONT, możemy użyć funkcji OpenFont.
Jedyna różnica po między tymi rozkazami jest taka, że czcionki załadowane przez OpenFont są dostępne od miejsca użycia tej funkcji.
Czyli czcionki nie będą dostępne od samego początku działania programu, a dopiero gdy nastąpi wykonanie rozkazu OpenFont.
Ponadto, jak wspomniałem wyżej. funkcja „@FONT” dołącza/linkuje czcionki do pliku wykonywalnego naszego programu. To zachowanie można zmienić ale musimy o tym pamiętać, bo zmienia to wielkość pliku wykonywalnego, szczególnie w wypadku dołączenia wielu krojów, i nakłada na nas odpowiedzialność stosowania się do licencji.
Oczywiście zdaję sobie sprawę że tworząc nasze programiki nikt takimi bzdurami jak prawa autorskie
nie będzie się przejmował, ale mając przed oczami świetlaną przyszłość naszych zaawansowanych wieloplatformowych tworów, muszę o tym wspomnieć żeby uchronić nas przed hordą wygłodniałych prawników w chwili gdy nasz soft odniesie komercyjny sukces ; ).

Jak dotąd udało nam się otworzyć okno naszego programu i udostępnić czcionki, które będziemy mogli używać w naszym programie.
Teraz zajmiemy się funkcjami które będą przypisywać krój i w zależności od potrzeb zmieniać jego właściwości:

UseFont (id)

Rozkaz ten zmienia czcionkę domyślną na tę określoną identyfikatorem w nawiasach, w naszym przykładzie jest to 1, czyli Arial o rozmiarze 50 pikseli. Styl czcionki zostanie przywrócony do domyślnego po użyciu tej funkcji. Na przykład jeśli zmieniliśmy krój naszej czcionki na pogrubioną kursywę to po zastosowaniu tej funkcji zostanie on zmieniony na zwykły niepogrubiony. Ta funkcja jest bardzo prosta ale i ograniczona, bo narzuca nam krój, rozmiar itd. bez możliwości jakichkolwiek zmian w jej obrębie. Czyli w naszym przykładzie jeśli użyjemy UseFont(1) to nasz tekst będzie pisany Arialem o wysokości 50 pikseli i bez użycia innych rozkazów w żaden sposób tego nie zmienimy.

SetFont (font$, size[, table])

Aby móc zmienić różne rodzaje czcionki, czy ją samą na inną, użyjemy rozkazu SetFont. Atrybut font$ określa czcionkę jaką chcemy użyć, tu muszę wrócić do „błędogenności” wspomnianej przy opisywaniu komendy @FONT. Aby móc załadować konkretny krój czcionki z dysku trzeba trzymać się pewnych reguł narzuconych przez Hollywood. Podając nazwę czcionki wpisujemy jej nazwę, a nie ścieżkę dostępu (choć jest wyjątek od tej reguły). Nazwa musi być identyczna z nazwą pliku na dysku bez rozszerzenia. I tak jeżeli chcemy użyć czcionki Arial bold italic, to jako atrybut musimy wpisać „Arial Bold Italic”, zwróćcie uwagę że nazwa czcionki i jej atrybuty muszą być oddzielone spacją, a całość zamknięta w cudzysłowie. Wyjątek stanowi przypadek, kiedy chcemy użyć czcionki wektorowej TTF, która znajduje się na dysku wraz z wbudowanym w Hollywood sposobem wyświetlania czcionek {ENGINE=#FONTENGINE_INBUILT}, wtedy to możemy podać całą ścieżkę dostępu wraz z nazwą pliku czcionki z rozszerzeniem. To tyczy się jedynie czcionek TTF.
Dla przykładu, możemy wtedy podać jako argument funkcji SetFont(„SYS:Fonts/_ttf/Arial.TTF”, 30, {Engine=#FONTENGINE_INBUILT} ).
Błędogenność wynika stąd, że różne systemy instalują czcionki pod różnymi nazwami. Dla przykładu gdy plik czcionki ma nazwę arialbolditalic to jesteśmy pozamiatani, bo nie dosyć że nie ma spacji to cechy bold i italic są pisane z małych liter (Wielkość liter w nazwach pod niektórymi systemami też ma znaczenie).
Więcej na temat jak radzić sobie z przyjazną Hollywoodowi instalacją i użyciem czcionek znajdziecie pod poniższymi adresami:

http://www.hollywood-mal.com/docs/html/hollywood/PrgG2KFonts.html

http://www.hollywood-mal.com/docs/html/hollywood/FontSpecification.html

Print/NPrint (var, …)

Zastosujemy teraz w naszym programie rozkaz wyświetlający tekst na ekranie, abyśmy mogli w końcu zobaczyć wynik naszej pracy w działaniu.
Znacznie lepiej się wtedy pracuje czy wprowadza poprawki no i usuwa błędy. Do tego celu użyjemy funkcji Print i NPrint. Opisuję obydwie jednocześnie bo są prawie identyczne. Jedyna różnica jest taka, że NPrint dodaje znak końca linii.

Za pomocą tej funkcji możemy wyświetlić zawartość atrybutu „var”, cokolwiek to jest – ciąg znaków, liczby, tablice czy wartość zmiennych, które to mogą być całymi plikami ładowanymi do odczytania. Rozkaz ten zaczyna wyświetlać tekst w obecnym położeniu kursora, czyli w naszym wypadku lewy górny róg. Można to zmienić ale o tym kiedy indziej. Funkcja potrafi interpretować kody ucieczki (ang. escape codes), jak i znaczniki formatujące tekst znane choćby z for internetowych, takie jak
[b][/b], [i][/i], [u][/u], a poza tym:
[shadow=color,size,direction][/shadow] – cień, [edge=color,size][/edge] – obrys krawędzi,
[color=color][/color] – kolor czcionki.
Trzy pierwsze nie wymagają chyba opisu, a pozostałe trzy opiszę dokładniej trochę później przy opisie następnych funkcji.
Dodajmy do naszego skryptu dwie funkcje: NPrint(„Cześć”)
Print(„C[edge=#RED,1]z[b]e[/b][/edge][u]ś[/u][color=#GREEN]ć[/color]”)

Pierwsza linia wypisuje po prostu Cześć i przesuwa kursor do następnej linii, za to w drugiej się dopiero dzieje. „Ce” jest nie zmienione, „Zet” ma czerwoną obwódkę o szerokości jednego piksela, podobnie jak „E”, ale jest ono dodatkowo pogrubione. To żeby pokazać, że tagi formatujące można zagnieżdżać. „Ś” jest natomiast podkreślone, a „Ć” zielone:

Poniżej nieco powiększony zrzut okna, dla lepszego pokazania fontów, taka próbka możliwości. Spróbujcie w ramach ćwiczenia dla siebie napisać samodzielnie odpowiedni kod żeby uzyskać to samo.

escape codes

SetFont, OpenFont, UseFont i @FONT ustawiają tylko rodzinę i rozmiar czcionki, żeby zmienić kolor i przeźroczystość, dodać cień czy obrys, albo wygładzanie opiszę teraz dwa nowe rozkazy SetFontColor i SetFontStyle. Ustawiają one styl domyślny dla tekstu, czyli nie musimy przy każdej funkcji Print czy NPrint wpisywać oddzielnie jeśli chcemy żeby nasz tekst był na przykład czerwony z zieloną obwódką.

SetFontColor (color) 

Jak nazwa wskazuje, rozkaz ten ustawia kolor czcionki aktualnej na inny niż domyślny (na marginesie domyślne kolory to biały dla czcionki i czarny dla tła). Aktualnej to znaczy, wszystko co napiszemy poprzez N/Print czy inne funkcje wyprowadzające tekst na ekran będzie miało wybrany przez nas kolor. Musimy pamiętać, że styl czcionki jest resetowany na domyślny po każdym użyciu funkcji SetFont czy UseFont. Czyli znowu musimy użyć SetFontColor czy SetFontStyle jeśli chcemy zmienić wygląd czcionki.
Wybierając kolor w zależności od potrzeby mamy do wyboru z i bez przeźroczystości. Wartości możemy podawać w formie dziesiętnej lub szesnastkowej. Jeżeli zdecydujemy się na szesnastkową to bezpośrednio przed podanymi wartościami wpisujemy znak dolara „$”$RRGGBB, $AARRGGBB, a w przypadku drugiego sposobu wpisujemy RGB albo ARGB – RBG(0, 255, 255), w obu wypadkach pierwszy to bez, a drugi to z przeźroczystością. Kolory możemy też podawać w formie „stałych wbudowanych”, czyli na przykład chcemy czerwony z 50% przezroczystości ARGB(128, #RED), to samo osiągniemy wpisując ARGB(128, $FF0000) albo ($80FF0000). Jak widać można łączyć sposoby wprowadzania wartości, ale są trzy duże ale, po pierwsze takie mieszanki mogą sprawiać kłopot a po drugie funkcja ta NIE przyjmuje zapisu w pełni dziesiętnego ARGB(128, 255, 0,0) nie wiem czy to błąd czy zamierzone zachowanie. I po trzecie jeśli w wypadku zapisu szesnastkowego chcemy użyć ARGB przed nawiasem to w jego wnętrzu musimy oddzielnie podać wartości dla przeźroczystości i koloru, w taki sposób: ARGB($80, $FF0000), czyli wartości muszą być oddzielone przecinkiem i każda mieć swojego $ – dolara. Poza tym zauważcie że sam znacznik A/RGB można pominąć jedynie w wypadku użycia formy w pełni szesnastkowej, w każdym innym wypadku musi się pojawić przed nawiasami z podanymi wartościami.
Wszystkie stałe wbudowane w Hollywood, bez względu na rodzaj, zawsze zaczynają się znakiem # i są pisane z dużych liter, na przykład #RED, #WHITE, #BLUE. Dzięki temu widząc tak opisany ciąg znaków w skrypcie możecie być pewni, że jest to stała wbudowana.
Oczywiście jeśli autor skryptu stosował się do zaleceń odnośnie stylizacji kodu Hollywood. Stałych w wbudowanych jest znacznie więcej, chętnych na zapoznanie się z nimi zapraszam pod adres: http://www.hollywood-mal.com/docs/html/hollywood/. Niestety nie są wszystkie opisane, wiele z nich zależy bowiem od funkcji przez nas użytej, a Andreas Falkenhahn nie jest wstanie wszystkiego sam ogarnąć. W jakimś wywiadzie przeczytałem że pisanie dokumentacji zajmuje mu więcej czasu niż sam rozwój tego języka. Mówi samo za siebie.

SetFontStyle (style, …)

Poza kolorem możemy zmienić lub dodać naszej czcionce kilka rzeczy. Możemy użyć do tego stałych wbudowanych takich jak: #NORMAL, #BOLD, #ITALIC, #UNDERLINED. Nie będę opisywał co jaka stała robi bo pewnie łatwo się domyślić. Odnośnie tych czterech stałych stylizujących czcionkę jest takie zastrzeżenie, że każda czcionka TTF zazwyczaj ma swój wektorowy odpowiednik dla zwykłej, pogrubionej itd. I najlepiej wybrać go przy wyborze czcionki funkcjami takimi jak SetFont, OpenFont czy @FONT, raczej niż używać SetFontStyle do tego celu. Bo algorytm wbudowany w Hollywood nie będzie tak dobry jak zaprojektowana czcionka.
Poza tymi czterema stylami, mamy jeszcze #ANTIALIAS, #EDGE i #SHADOW. Pierwsza wygładza czcionkę, ale jedynie czcionki wektorowe – TTF, druga dodaje obwódkę. Podany kolor może być, tak jak w przypadku koloru dla czcionki, z lub bez przeźroczystości, zasady określania koloru są takie same (Zresztą nie tylko odnośnie czcionek, wszędzie tam gdzie znajduje się potrzeba podania koloru stosujemy zasady jak przy SetFontColor). #SHADOW natomiast dodaje cień pod czcionką.

W wypadku #NORMAL, #BOLD, #ITALIC, #UNDERLINED, #ANTIALIAS możemy je ze sobą łączyć w jednym wywołaniu funkcji, na przykład SetFontStyle(#BOLD|#UNDERLINED) Nie można tego robić w wypadku #EDGE i #SHADOW.

Styl #EDGE przyjmuje dwa argumenty kolor i grubość obrysu w pikselach, na przykład SetFontStyle(#EDGE RGB(255, 0, 0), 1) doda nam czerwony obrys o grubości jednego piksela. W przypadku #SHADOW wymaganych argumentów jest trzy – kolor, odległość w pikselach o czcionki rzucającej cień i kierunek rzucania cienia podawany tylko i wyłącznie za pomocą „kierunkowych stałych wbudowanych” (Directional Constants). Jest ich osiem i możecie o nich poczytać pod tym linkiem:
http://www.hollywood-mal.com/docs/html/hollywood/PrgDirectionCst.html.

Rzućmy trochę cienia na południowy wschód, cień zazwyczaj jest przeźroczysty, więc i nasz niech będzie: SetFontStyle(#SHADOW ARGB(128, $FFFFFF), 4, #SHDWSOUTHEAST).
Z powodu, że nasze tło jest czarne, nasz cień będzie biały, bo czarny byłby kiepsko widoczny ; ). Żeby dodać jednocześnie cień i obrys do czcionki aktualnej musimy wywołać funkcję SetFontStyle dwa razy, raz dla każdego stylu. A jeśli chcielibyśmy ją dodatkowo podkreślić i wygładzić to nawet musimy ją wywołać trzykrotnie. Zobaczcie sami na kod:

Do wyczerpania tematu czcionek pozostało nam do wspomnienia kilka funkcji, nie będę się o nich rozpisywał, możecie sami o nich poczytać na stronie Hollywooda.

GetAvailableFonts sprawdza jakie zainstalowane są czcionki na komputerze, z którego odpalany jest nasz program i zwraca nam informacje w formie tabeli zawierającą podtabelę z elementami: NAME, FAMILY, WEIGHT, SLANT, BITMAP, SIZES.

FreeGlyphCache (mode[, id])
Czyści z pamięci podręcznej informacje o wszystkich czcionkach albo szczególnej określonej identyfikatorem. Jeśli chcemy wyrzucić wszystkie czcionki z pamięci możemy pominąć argument ID, a jako mode podajemy 0 – zero. FreeGlyphCache(0). A jeśli chcemy wyrzucić czcionkę z identyfikatorem 2 i/lub 3, (nie używamy ich w naszym skrypcie więc pozbądźmy się ich z pamięci) to nasz rozkaz będzie wyglądał następująco: FreeGlyphCache(1, 2|3). Zwróćcie uwagę na sposób podania identyfikatorów 2 i 3, jak widać można je rozdzielać znakiem „|” i podawać dowolnie wiele.

CloseFont
Kompletnie wyrzuca z pamięci jakiekolwiek informacje o czcionce o podanym identyfikatorze.

AddFontPath
Za pomocą tej funkcji, możemy dodać miejsce w którym Hollywood będzie szukał czcionek, poza tymi domyślnymi.
Żeby opisać wszystkie funkcje występujące w naszym skrypcie nie mogę pominąć dwóch ostatnich:

WaitLeftMouse()
Funkcja ta wstrzymuje wykonywanie skryptu dopóki użytkownik nie kliknie lewym przyciskiem myszki. W naszym wypadku potrzebna jest żeby móc cokolwiek zobaczyć, gdybyśmy jej nie zastosowali to skrypt wykonałby się z taką szybkością, że widzielibyśmy jedynie błysk.

End()
Rozkaz ten kończy wykonywanie naszego programu.

Jeszcze krótko ogólnie o składni funkcji. Nawet jeśli nie przekazujemy w nawiasach żadnych argumentów, to i tak dla lepszej czytelności kodu powinniśmy je stosować.

Uffff, przebrnęliśmy jakoś przez gęste zarośla pełne literek i krojów, stylów i kolorów. Myślałem już, że to się nigdy nie skończy. Ta część może nie jest zbyt porywająca, ale od czegoś trzeba zacząć, czcionki to dobry start bo w końcu bez nich nic byśmy nie napisali. W toku pisania, mimo odgrażania się na początku artykułu, wykiełkował plan na przyszłość. Jako że pisaliśmy o czcionkach to w następnej części napiszemy o kontroli tekstu, sposobach wyświetlania, manipulowania i innych aniach.
A wjeżdżając na końcową stację, wystrzeliliśmy z pociągu na peron, bo konduktor chciał żebyśmy zabrali ze sobą te sześćdziesiąt dziewięć pustych butelek od piwa. Chyba go Bóg opuścił jeżeli myślał, że po trzech dniach i dwóch nocach ostrego obcowania z gawiedzią scenową, będziemy w stanie unieść cokolwiek innego niż nasze na wpół żywe ciała.

’ferin’ – Amiga NG 1/2017

—> do spisu artykułów

Ten post ma jeden komentarz

  1. Adam

    Nie mogłem pojąć czemu półprzezroczystość 50% ma wartość $80. Zapytałem autora artykułu, i wyjaśnił to tak:
    „To zapis szesnastkowy, w tym zapisie 80 to nie jest wartość przeźroczystości, tylko podaje ile razy trzeba pomnożyć liczbę szesnaście; w tym wypadku 8×16, bo 256 = 16×16 = FF, czyli połowa to 8×16; gdybyś miał $81 to byłoby 8×16 plus 1 czyli 129.”
    Widocznie zapisując szesnastkowo trzeba przekazać dwa znaki na jedną wartość, dlatego zero to 00.

Dodaj komentarz