kategoria: Blitz
[#1] Program do tworzenia StandardIcons: ICON-MADE
Zakładam wątek dotyczący powstawania konwertera plików IFF do ikonek o nazwie "Icon-Made" w formacie StandardIcon dla Workbencha 1.3/2.0/3.x. Będzie to mój program na AmiToolJam. Nie myślę o podium, myślę o programie, który będzie użyteczny Amigowcom, stąd będę mieć tu kilka pytań.

Program można pobrać stąd: ICON-MADE.

Strukturę formatu .info zaczerpnąłem STĄD.

Do tej pory mam samo GUI:

oparte na GadTools oraz używam filerequesterów z asl.library, więc wymagania to Workbench 2.0 minimum.

- rozkminiłem już praktycznie wszystko, co potrzebuję od strony struktury plików .info.
- można wczytywać nawet 8-bitplanowe pliki IFF o rozmiarze 640x200 - program sam sobie operuje tylko na dwóch pierwszych bitplanach grafik
- program po wczytaniu jednego pliku IFF tworzy ikonkę z ga_Flags=%101, natomiast po wczytaniu dwóch plików IFF tworzy ikonkę z ga_Flags=%110
- program jest odporny na wpisanie szerokości ikonki różnej od wielokrotności 16 i zaokrągla wartość w górę, jeśli wpiszemy WIDTH przykładowo: 17, to zmieni na 32.

Czego potrzebuję:
1. Przy zapisie ikony typu DRAWER ikonka działa w OS 3.2.3, jednak gdy próbowałem ją wyświetlić w WB 3.1, to wyświetliła się tylko kropka. Czy WB 3.1 i wcześniejsze wymagają dodatkowo danych DrawerData w pliku .info?

2. Wyświetlając ikonki w Workbenchu 1.3 zamienione są kolory z indeksami 1 i 2. Czy jest jakiś parametr, który usprawnia wyświetlanie ikon w obu Workbenchach, czy jednak lepiej dodać opcję zamiany indeksów przy zapisie ikonki, aby była prawidłowo wyświetlana w WB 1.3?


A może ktoś ma własne pomysły na rozwinięcie projektu?

Tutaj krótki filmik prezentujący działanie:



Ostatnia aktualizacja: 17.05.2025 12:25:05 przez tukinem
4
[#2] Re: Program do tworzenia StandardIcons: ICON-MADE

@tukinem, post #1

Krashan opisał kiedyś format amigowych ikon, nie umiem znaleźć teraz aktualnej ekspozycji artykułu (gdzieś na rastport.com ?), ale zarchiwizowaną wersję z ppa możesz znaleźć tu:

https://web.archive.org/web/20210225092126/http://krashan.ppa.pl/articles/amigaicons/

Może się przyda.
1
[#3] Re: Program do tworzenia StandardIcons: ICON-MADE

@vojo, post #2

nie umiem znaleźć teraz aktualnej ekspozycji artykułu
Nie ma aktualnej ekspozycji, niestety. Na odtworzenie rzeczy, które znikły bez uprzedzenia z krashan.ppa.pl brakuje mi czasu i chęci.

Ale za to też robię program na ten konkurs. Jak będzie już coś działającego, to dam znać.
1
[#4] Re: Program do tworzenia StandardIcons: ICON-MADE

@vojo, post #2

O widzisz dzięki wielkie

Na pierwszy rzut oka widzę, że prawodpodobnie dlatego ikonka typu drawer nie wyświetla grafiki w WB 3.1:



bo brakuje danych Drawer Data wraz z NewWindow. Nowsze systemy widocznie są odporne na brak tych danych.
[#5] Re: Program do tworzenia StandardIcons: ICON-MADE

@tukinem, post #1

Co do Workbencha 1.3 to trzeba dodać opcję zamiany kolorów. Nie ma flagi by wyższe wersje zrobiły to w locie.
[#6] Re: Program do tworzenia StandardIcons: ICON-MADE

@ppill, post #5

Tak myślałem. W takim razie dodam opcję "WB 1.3 copatibility".
[#7] Re: Program do tworzenia StandardIcons: ICON-MADE

@Krashan, post #3

[#8] Re: Program do tworzenia StandardIcons: ICON-MADE

@tukinem, post #1

Bardzo fajny pomysł i sprytny programik. Z pomysłów, to może od razu wpisywanie ToolTypes dla takiej ikonki? Może jakiś "szablon" ToolTypes w zależności od wybranego IconType?...

Trzymam kciuki i życzę powodzenia w AmiToolJam :)


Ostatnia aktualizacja: 16.05.2025 17:02:01 przez X-Type^HVR
[#9] Re: Program do tworzenia StandardIcons: ICON-MADE

@X-Type^HVR, post #8

Cieszę się, że pomysł się podoba.

DefaultTool, ToolTypes oraz ToolWindow to dane w strukturze text, która jest różnej wielkości w zależności od wpisanego tekstu. Jeśli uporam się z typem katalogu oraz z prawidłowym kolorowaniem dla WB 1.3, to spróbuję się wziąć za tekstowe dane. Może być trudno, bo potrzebowałbym pole do wpisywania tekstu kilkulinijkowego dla ToolTypes, bo jak rozumiem TOOLTYPES jest w tym miejscu?


Wprowadziłem coś takiego:


Przy zaznaczonej opcji "WB 1.3 Colors" zmienia paletę na taką a'la WB 1.3 i wtedy podczas zapisu ikonki zamienia kolory 1-2.


Ostatnia aktualizacja: 16.05.2025 20:09:32 przez tukinem
1
[#10] Re: Program do tworzenia StandardIcons: ICON-MADE

@tukinem, post #1

Systemowe okno informacji o ikonie w OS 3.2 ma to wszystko wbudowane. Można wgrać obrazki IFF jako oba stany ikonki i ustawić wszelakie jej parametry. Jest przekolorowanie palety. Jest dość rozbudowana obsługa tooltypów.
[#11] Re: Program do tworzenia StandardIcons: ICON-MADE

@Krashan, post #10

Rozumiem, lecz nie każdy posiada OS 3.2, a tymbardziej nowsze OS 3.2.2/3.2.3, które posiadają bardzo rozbudowany IconEdit z możliwością wyboru StandardIcon/NewIcon.

Dodałem informacje o typie NewWindow, przekolorowanie działa prawidłowo.

Oto ikonka pod WB 1.3 typu drawer po przekolorowaniu indeksów 1-2:


W weekend założę profil na itch dla tego programiku i podzielę się nim z Wami, abyście mogli go dogłębnie przetestować.

Czy dodać podgląd grafik ikonki? Taki gadget "PREVIEW" i tam byłby wybór pomiędzy normal icon, a selected icon.
[#12] Re: Program do tworzenia StandardIcons: ICON-MADE

@Krashan, post #10

W 3.9 bb2 też jest to już od "dziesiątków lat", ale dla np Workbencha 3.0 jak znalazł OKok, racja
[#13] Re: Program do tworzenia StandardIcons: ICON-MADE

@tukinem, post #11

Hej, czy używasz biblioteki icon.library do wczytania i zapisu plików z ikonkami (.info) ?

Ta biblioteka powinna być używana do wczytania ikonki. Zwraca strukturę DiskObject, zawierającą wszystkie dane.

Co więcej przy zapisie ikonka od razu pojawia się na blacie Workbencha lub w oknie szuflady.

Ja myślałem kiedyś nad programem, który łączy dwa obrazki w ikonę (np. do tworzenia różnych wersji szuflad). Chciałem użyć workbench.library, który pozwala na wygodną współpracę aplikacji z ikonami.

Również polecam tę bibliotekę. Może rozważysz dodanie takiej opcji?

Tutaj więcej o tych bibliotekach i formacie ikonki: http://amigadev.elowar.com/read/ADCD_2.1/Libraries_Manual_guide/node0237.html

Brawo za wszechstronność. Życzę Ci powodzenia w pracy nad tym programem użytkowym.

Ostatnia aktualizacja: 17.05.2025 12:05:26 przez Hexmage960
[#14] Re: Program do tworzenia StandardIcons: ICON-MADE

@Hexmage960, post #13

Nie używam tej biblioteki, ponieważ to program do tworzenia ikonek, a nie ich edycji

W głównym wpisie zamieszczam link do programu, więc można pobrać i testować. Spakowałem go LhA.
[#15] Re: Program do tworzenia StandardIcons: ICON-MADE

@tukinem, post #14

Nie używam tej biblioteki, ponieważ to program do tworzenia ikonek, a nie ich edycji

Rozumiem. Ale w takiej sytuacji ta biblioteka też jest przydatna, bo funkcja GetDiskObject (oraz GetDefDiskObject w wersji V36) utworzą dla Ciebie domyślną strukturę ikonki.

Zapis za pomocą tej biblioteki też w tej sytuacji się przyda.
[#16] Re: Program do tworzenia StandardIcons: ICON-MADE

@Hexmage960, post #15

Może to głupie w jaki sposób tu postępuję, ale tworzę po prostu blok pamięci przez AllocMem o rozmiarze w zależności od typu ikonki, rozmiaru obrazków itd, a następnie ręcznie wprowadzam dane litanią POKE

Tak to mniej więcej wygląda:


Wiem wiem, lubię sobie robić pod górkę
[#17] Re: Program do tworzenia StandardIcons: ICON-MADE

@tukinem, post #16

Nie uważam tego za głupie. Postępujesz właściwie.

Biblioteka upraszcza sprawę, jest kompatybilna z różnymi wersjami systemu i zna pewne reguły i prawidłowości w strukturze ikony. Oraz wspołpracuje z blatem Workbencha od razu wyświetlając utworzoną lub zmienioną ikonkę.

Tak jak postępujesz wypełniając strukturę jest OK. Gratuluję Ci sprawności i talentu. Chciałem tylko dopomóc.
[#18] Re: Program do tworzenia StandardIcons: ICON-MADE

@Hexmage960, post #17

Początkowo chciałem stworzyć edytor graficzny dla ikonek w stylu Brilliance, ale szybko się przekonałem, że to mnie przerośnie, bo samo powiększanie/pomniejszanie oraz rysowanie linii na powiększeniu to byłaby mozolna katorga każdy szanujący się pikselowy grafik ma przecież swój ulubiony edytor graficzny.

Z pomysłów, jakie mi przychodzą do głowy, to:
- dodanie przycisku "PREVIEW" jako podgląd dla grafik
- dodanie obsługi ikonek 8-kolorowych MagicWB, tylko tu nie bardzo się orientuję jeszcze jak rozgryźć zapis do pliku .info
[#19] Re: Program do tworzenia StandardIcons: ICON-MADE

@tukinem, post #18

- dodanie obsługi ikonek 8-kolorowych MagicWB, tylko tu nie bardzo się orientuję jeszcze jak rozgryźć zapis do pliku .info

Z tego co się orientuję podajesz odpowiedni 8-kolorowy obrazek w strukturze Image podanej w GadgetRender i SelectRender.

Czyli wypełniasz pole Depth w Image na 3 oraz załączasz dane graficzne o odpowiedniej wielkości. Pamiętaj by dostarczyć liczbę bitplanów odpowiednią dla głębi oraz parametru PlanePick struktury Image.

Jeżeli nie podasz odpowiednich danych, obrazek może źle być wyświetlany w pewnych warunkach - co można zobaczyć w przypadku niektórych ikonek utworzonych przez różne programy, które źle to zapisują.

Ostatnia aktualizacja: 17.05.2025 13:59:08 przez Hexmage960
[#20] Re: Program do tworzenia StandardIcons: ICON-MADE

@Hexmage960, post #19

No właśnie nie bardzo orientuję się, jak należy ustawiać wartości w strukturze IMAGE dla im_PlanePick oraz im_PlaneOnOff. Podglądałem inne ikonki i ustawiam im odpowiednio tak samo, czyli:
im_PlanePick = 3
im_PlaneOnOff = 1.

Przy GadgetRender i SelectRender podaję dowolną wartość różną od 0. To automatycznie wskazuje, że w pliku znajdują się dane grafiki. Dla ikonki 1-obrazkowej SelectRender ustawiam na 0. Taki mam opis dla GadgetRender przykładowo: "In memory a pointer to the first Image, used for not selected state. In file it should be any non-zero value. Zero here should not happen."
[#21] Re: Program do tworzenia StandardIcons: ICON-MADE

@tukinem, post #20

PlanePick i PlaneOnOff to maski bitowe, a nie liczby. Normalnie ustawiasz w PlanePick wartość szesnastkową FFh. Wtedy trzeba dostarczyć tyle bitplanów, ile jest w parametrze Depth.

Można też bez problemu podać tam tyle bitów zapalonych ile jest w Depth, czyli:

- dla głębi 2, PlanePick to bitowo 11b = 3h,
- dla głębi 3, PlanePick to bitowo 111b = 7h.

Jeżeli dostarczasz np. tylko dwa bitplany, a trzeci chcesz ustawić na same jedynki, to wówczas w PlanePick podajesz 11b = 3h, a w PlaneOnOff 100b = 4h. Za głębię ustawiasz 3.

PlaneOnOff właśnie odpowiada za to jak ustawić pozostałe niezdefiniowane bitplany, wchodzące w Depth.

Nota: Zastosowałem zapis, w którym b oznacza wartość binarną, zaś h wartość heksadecymalną.

Przy GadgetRender i SelectRender podaję dowolną wartość różną od 0. To automatycznie wskazuje, że w pliku znajdują się dane grafiki. Dla ikonki 1-obrazkowej SelectRender ustawiam na 0. Taki mam opis dla GadgetRender przykładowo: "In memory a pointer to the first Image, used for not selected state. In file it should be any non-zero value. Zero here should not happen."

Tak jest poprawnie. Pamiętaj by przy obrazku jednostanowym dać w polu Flags struktury Gadget wartość GFLG_GADGHCOMP lub GFLG_GADGHBOX, natomiast w obrazku dwustanowym wartość GFLG_GADGHIMAGE.

Ostatnia aktualizacja: 17.05.2025 15:24:08 przez Hexmage960
[#22] Re: Program do tworzenia StandardIcons: ICON-MADE

@Hexmage960, post #21

Zastosowałem zapis, w którym b oznacza wartość binarną, zaś h wartość heksadecymalną.

Domyśliłem się

Pamiętaj by przy obrazku jednostanowym dać w polu Flags struktury Gadget wartość GFLG_GADGHCOMP lub GFLG_GADGHBOX, natomiast w obrazku dwustanowym wartość GFLG_GADGHIMAGE.

Nie orientuję się w nazwach stałych dla wartości, ale chyba pisałem, że przy jednoobrazkowej ikonce ga_Flags ustawiam na %101, natomiast przy dwuobrazkowej ustawiam %110. Drugi bit oznacza pierwszy obrazek, który zawsze występuje, pierwszy bit oznacza drugi obrazek, natomiast bit zerowy oznacza backfill mode podczas kliknięcia na ikonkę.
[#23] Re: Program do tworzenia StandardIcons: ICON-MADE

@tukinem, post #22

Wygląda na to, że ustawiłeś to jak najbardziej prawidłowo.

Tutaj cytuję dokument z definicjami stałych (w języku C).

Nie znam się na BlitzBasic, ale jestem przekonany, że w razie czego możesz przypisać nazwy do stałych.

/* --- Gadget.Flags values	--- */
/* combinations in these bits describe the highlight technique to be used */
#define GFLG_GADGHIGHBITS 0x0003
#define GFLG_GADGHCOMP	  0x0000  /* Complement the select box */
#define GFLG_GADGHBOX	  0x0001  /* Draw a box around the image */
#define GFLG_GADGHIMAGE	  0x0002  /* Blast in this alternate image */
#define GFLG_GADGHNONE	  0x0003  /* don't highlight */

#define GFLG_GADGIMAGE		  0x0004  /* set if GadgetRender and SelectRender
				   * point to an Image structure, clear
				   * if they point to Border structures
				   */
[#24] Re: Program do tworzenia StandardIcons: ICON-MADE

@Hexmage960, post #23

W tym wypadku tak, bo posiłkowałem się opisem z tej stronki.. Tutaj jest ga_Flags:
b) The Gadget structure:
0x00 APTR  ga_Next           <undefined> always 0
0x04 WORD  ga_LeftEdge       unused ???
0x06 WORD  ga_TopEdge        unused ???
0x08 WORD  ga_Width          the width of the gadget
0x0A WORD  ga_Height         the height of the gadget
0x0C UWORD ga_Flags          gadget flags
     bit 2                   always set (image 1 is an image ;-)
     bit 1                   if set, we use 2 image-mode
     bit 0                   if set we use backfill mode, else complement mode
                             complement mode: gadget colors are inverted
                             backfill mode: like complement, but region
                             outside (color 0) of image is not inverted
     As you see, it makes no sense having bit 0 and 1 set.
0x0E UWORD ga_Activation     <undefined>
0x10 UWORD ga_GadgetType     <undefined>
0x12 APTR  ga_GadgetRender   <boolean> unused??? always true
0x16 APTR  ga_SelectRender   <boolean> (true if second image present)
0x1A APTR  ga_GadgetText     <undefined> always 0 ???
0x1E LONG  ga_MutualExclude  <undefined>
0x22 APTR  ga_SpecialInfo    <undefined>
0x26 UWORD ga_GadgetID       <undefined>
0x28 APTR  ga_UserData       lower 8 bits:  0 for old, 1 for icons >= OS2.x
			     upper 24 bits: undefined


Oczywiście mogę używać stałych w BB2. Miałem na myśli, że nazwy stałych używane oficjalnie w programowaniu nie są mi znane, dlatego wolę zapamiętywać wartości i nazywać je po swojemu stałymi W moim kodzie przykładowo ic_Magic, czyli wartość $E310 u mnie jest stałym longiem #TAG=$E3100001, bo taką wartość zawsze mają dwa pierwsze słowa każdej ikonki.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem