Zamysł i struktura WonderBrush:

WonderBrush jest aktualnie zaprojektowany dla "jednego okna". Dodatkowe okna pojawiają się tylko w formie paneli, które w założeniu nie są używane przez cały czas. Jedyne głowne okno zawiera dowolną ilość projektów. Każdy projekt ma przypisaną nazwę, wymiary i inne właściwości oraz reprezentuje do dwóch plików na dysku twardym: jeden to bitmapa w wybranym formacie obsługiwanym przez TranslationKit, drugi to plik projektu WonderBrush zawierający wszystkie dane potrzebne do jego odtworzenia w tej samej formie. Wybrany format translatora jest także zapamiętywany w pliku projektu. Plik projektu to aktualnie spłaszczony (flattened) obiekt BMessage.

Każdy projekt może zawierać dowolną ilość warstw, aktualnie organizowanych w listę. Każda warstwa reprezentuje indywidualną bitmapę o wymiarach projektu. Uwzględniając tryb nakładania, są one składane jedna na drugą tworząc ostateczną bitmapę projektu.
Każda warstwa jest domyślnie przezroczysta. Zawartość warstwy jest produkowana poprzez "Obiekty", na przykład pociągnięcia Pędzla. Każda z warstw ma swoją własną listę Obiektów przypisanych do niej, która w zasadzie jest historią konstrukcji warstwy. Jednakże ta istoria jest nie linearna, gdyż Obiekty mogą być rearanżowane poprzez przeciąganie myszką, a każda z ich właściwości może być pózniej zmieniana. Stosowna część bitmapy danej warstwy zostanie w takim przypadku wyrenderowana ponownie poprzez wyrenderowanie każdego obiektu znajdującego się w danym obszarze. Wszelkie zależności zostaną także uwzględnione. Na przykład jeżeli część warstwy, która została skopiowana narzędziem Klonowanie, zostanie zmieniona, obszar zawierający pociągnięcia narzędzia Klonowanie także zostanie wyrenderowany ponownie.
Teoretycznie każda właściwość może później zostać zmieniona, jednak aktualnie tylko obiekty typu Kształt i Tekst mogą być w pełni edytowane (pojedyńczo). Można także zmieniać kolor dowolnie wybranych obiektów. Wystarczy tylko przeciągnąć i upuścić kolor na listę Obiektów - wszystkie zaznaczone obiekty zmienią kolor na nowy.
Warstwy i obiekty mogą być duplikowane poprzez przytrzymanie wciśniętego klawisza <Shift>  podczas przeciągania i upuszczania myszką. Istnieją też odpowiednie menu poprzez które można uzyskać ten sam efekt. Dzięki schowkowi listy Obiektów, obiekty mogą być przenoszone bądź kopiowane z jednej warstwy do drugiej (a nawet z jednego projektu do drugiego). Schowek Obiektów jest utrzymywany pomiędzy sesjami WonderBrush, aż do ponownego uruchomienia systemu operacyjnego.

"Nie linearna struktura historii" ma zarówno plusy jak i minusy. Niektóre z plusów to małe zużycie pamięci przez stos obiektów oraz, oczywiście, nie linearność. Struktura jest zapisywana w pliku projektu. Obliczenia są dokładniejsze, zmiana wymiarów projektu po prostu renderuje wszystkie warstwy z przeskalowanymi obiektami. Do minusów należy zaliczyć czasem wolne wykonywanie Cofnij/Ponów oraz trudności w implementacji pewnych popularnych narzędzi jak na przyklad Wypełnienie. Wypełnienie jest aktualnie zaimplementowane poprzez tworzenie własnego, niezależnego Kształtu. Nie wypełnia calego projektu po usunięciu wypełnianego obiektu z historii, co może być uznane za niekonsekwencję. Jednak prawdopodobnie jest bardziej użyteczne.

Część operacji znanych z innych programów graficznych jest uzyskiwana w WonderBrush w inny sposób. Na przykład narzucanie kanału przezroczystości może być uzyskane poprzez duplikację warstwy i ustawienie trybu nakładania nowej warstwy na "Krycie". Następne malowanie na oryginalnej warstwie będzie wtedy maskowane przez duplikat. Niestety maska zostanie zaaplikowana także do wszystkich pozostałych warstw. Jednakże w przyszłości WonderBrush będzie posiadał drzewo kompozycji zamiast listy warstw, co pozwoli na ograniczenie efektu warstwy do konkretnej gałęzi warstw.

WonderBrush oferuje koncepcję przenośnych właściwości. Oznacza to że właściwości jednego obiektu mogą być transferowane do dowolnej ilości innych obiektów, nawet kiedy te obiekty są różnego typu. Zbiór włąściwości jakie obiekt może posiadać uzależniony jest od jego typu. Jednak część właściwości jest powszechna dla dwóch lub więcej typów obiektów. Na przykład wiele obiektów posiada "Krycie", część posiada "Promień". Nawet jeżeli "Promień" obiektów "Rozmycie Gaussa" i posiągnięcia Pędzla mają różne znaczenie, wartość włąściwości może być transferowana z jednego obiektu na drugi. Możliwość transferu dowolnej liczby właściwości do dowolnej liczby obiektów jest całkiem potężnym narzędziem, za to implementacja jest dosyć prosta. W oknie programu istnieje lista Właściwości, która wyświetla zbiór właściwości i ich specyficzne wartości dla zaznaczonego obiektu na liście Obiektów. Jeżeli zaznaczono więcej niż jeden obiekt lista ta będzie pusta. Większość właściwości może być edytowana bezpośrednio na liście Właściwości, każda z nich na swój sposób. Można zaznaczyć wiele właściwości na raz i skopiować do specjalnego (i trwałego aż do ponownego uruchomienia systemu operacyjnego) schowka Właściwości. Używając tego samego menu, właściwości ze schowka mogą zostać wklejone do zaznaczonych obiektów. Obiekty zostaną zmienione w zależności od tego, które z wklejanych właściwości są przez nie akceptowane.


Aktualne zalety:

Jedną z ważniejszych zalet WonderBrush jest obliczanie barw w przestrzeni RGB skonwertowanej do gamma. Pozwala to na wykluczenie nieprawidłowych barw pośrednich i jest unikalną zaletą pośród programów graficznych na BeOS'a.

System Pędzli, pomimo brakujących jeszcze wielu opcji, oferuje kilka unikalnych możliwości. Ponieważ kształty pędzla są obliczane dynamicznie, ich różne aspekty mogą być kontrolowane poprzez nacisk pióra. Dodatkowo pociągnięcia pędzla są renderowane z podpixelową precyzją co, o ile mi wiadomo, nie jest dostępne w innych programach graficznych na BeOS'a. Niestety nie znalazłem szybkiego sposobu na zaimplementowanie wszystkich pożądanych możliwości.

Sposób w jaki obiekty mogą być duplikowane i przemieszczane stwarza interesujące możliwości. Schowek obiektów jest trwały aż do ponownego uruchomienia systemu operacyjnego.

WonderBrush eksponuje właściwości wybranych obiektów, a właściwości te można transferować pomiędzy obiektami poprzez specjalny schowek właściwości. To bardzo wygodny sposób na edycję wielu obiektów na raz.

Część trybów edycji w WonderBrush wykorzystuje własny, tymczasowy stos Cofnij, co może być całkiem wygodne w użyciu. Oznacza to, że możesz na przykład, cofnąć pojedyńcze modyfikacje *w trakcie* tranfsormowania obiektów, a *po* akceptacji transformacji możesz cofnąć je wszystkie na raz.

WonderBrush w pełni dostosowuje się do używanej czcionki, a używany język interfejsu może być dynamicznie zmieniany. Pliki językowe mogą być edytowane w trakcie działania programu, a wszelkie zmiany zostaną natychmiast wprowadzone do interfejsu.

WonderBrush jest w pełni natywną aplikacją na BeOS'a. Uruchamia się całkiem szybko i wykorzystuje akceleracje sprzętową do rysowania. Jednak będę to musiał jeszcze przemyśleć, kiedy będę chciał się pozbyć migania części interfejsu w przyszłości.

Testowałem ten program tylko na swoich komputerach, ale mogę szczerze powiedzieć, że nie ma w nim żadnych błędów wywalających program, o których bym wiedział. Jeżeli o jakichś wiesz, daj mi znać.

Jeżeli interesuje Cię co jest planowane na przyszłość, zajrzyj do pliku TODO. Poprzez plik LOG możesz za to wejrzeć w proces rozwoju WonderBrush.


Aktualne wady:

WonderBrush nie może eksportować projektów do plików w formacie Photoshop'a lub choćby TIFF, co jest jedną z najbardziej pożądanych możliwości dla profesjonalnego użytku. Niestety WonderBrush posiada opcje, które ciężko byłoby przenieść do tych obcych formatów. Jak tylko WonderBrush zacznie używać drzew kompozycji zamiast list, wszystko stanie sie jeszcze bardziej skomplikowane.

Aktualnie nie ma zaimplementowanej architektury obszarów pamięci, a zatem towrzone mogą być tylko mniejsze bitmapy (do 3000x3000 pixeli jest Ok, powyżej tego... powodzenia!).

Nie otrzymałem jeszcze licencji na użycie metody kompresjii, którą chciałbym wykorzystać (LZO). Przez to kompresja jest wyłączona w tym wydaniu. Zużycie RAM byłoby znacznie mniejsze gdyby była włączona. Kontaktowałem się z twórcą LZO więcej niż raz, jednak nie otrzymałem odpowiedzi. Pliki projektów używają kompresji zlib poczynając od wersji 1.5.0.

Nie ma łatwego sposobu na tworzenie okręgów, kwadratów i innych podobnych figur podstawowych. Taka możliwość zostanie zaimplementowana na bazie aktualnego narzędzie Kształt.

Wybór pixeli jest aktualnie zaimplementowany w bardzo uproszczony sposób. Jak w części przeglądarek graficznych na BeOS'a, użytkownik może zdefiniować prostokątny obszar obrazu i skopiować go do schowka systemowego. Z tamtąd dane mogą być wklejone jako obiekt Bitmapa. To także sposób na wymianę danych z innymi programami graficznymi, jak na przykład ArtPaint.

Zajrzyj do pliku BUGS, jeżeli chcesz poczytać o aktualnie znanych problemach.


Skróty klawiaturowe:

<spacja>		Przełącza na tryb przewijania widocznej powierchni (po wciśnięciu przycisku myszki)

+			kiedy klawisz modyfikatora jest wciśnięty -> zwiększa przybliżenie

			bez modyfikatora, zależy od aktualnie używanego narzędzia:
				narzędzia bazowane na pociągnięciach (Pędzel, Klonowanie, Rozmycie ...):
					przy wciśniętym klawiszu <shift>, dodaje 1.0 do promienia pędzla
					bez żadnych dodatkowych klawiszy, skaluje promień pędzla przez 1.1
				Tekst:
					przy wciśniętym klawiszu <shift>, dodaje 1.0 do rozmiaru tekstu
					bez żadnych dodatkowych klawiszy, skaluje rozmar tekstu przez 1.1
					

-			przeciwieństwo +

klawisze strzałek	zmień wybrane modyfikacje w danym kierunku kiedy używane jest narzędzie Transformacja

z, y		cofnij

Z, Y		powtórz

b			zmień narzędzie na Pędzel

c			zmień narzędzie na Klonuj

p			zmień narzędzie na Ołówek

s			zmień narzędzie na Kształt

e			zmień narzędzie na Gumka

d			zmień narzędzie na Pobór barwy

r			zmień narzędzie na Rozmycie

x			zmień narzędzie na Przycięcie

f			zmień narzędzie na Wypełnienie

t			zmień narzędzie na Tekst

v			zmień narzędzie na Transformacja


Dodatkowe skróty dla narzędzia Kształt:

W trakcie edycji Kształtu, klawisze <Komendy> (<Ctrl>/<Alt>) i
<Opcji> (<Alt>/<Ctrl>) zmienają tryb edycji podczas kliknięcia na punkt kontrolny.

Klawisz <Komendy> spowoduje usunięcie punktów kontrolnych zakrzywienia,
lub ich dodanie (poprzez przeciągnięcie kursora myszki) jeżeli ich nie było. 
Przytrzymanie klawisza <Opcji> podczas kliknięcia na punkt kontrolny
powoduje jego usunięcie. Punkty kontrolne zakrzywienia (te mniejsze niż główny)
także moga być usuwane pojedyńczo w celu uzyskania konta prostego
tylko z jednej strony. Aby przywrócić punkty kontrolne zakrzywienia do punktu
kontrolnego kształtu wystarczy kliknąć i przeciągnąć ten punkt jednocześnie
trzymając klawisz <Komendy> wciśnięty.

Przeciągając jeden z dwóch punktów kontrolnych zakrzywienia, spowoduje
również przesunięcie drugiego, tak że oba będą utrzymane na tej samej
liniii prostej. Można zerwać to połączenie poprzez przytrzymanie wciśniętego
klawisza <Komendy> podczas rozpoczęcia przeciągania. Kliknięcie na główny
punkt kontrolny z jednocześnie wciśniętym klawiszem <Komendy> spowoduje
usunięcie punktów kontrolnych zakrzywienia oraz wyprostowanie linii połączonych
przez główny punkt kontrolny (o ile jakieś zakrzywienie linii istniało).
Ponowne przeciągnięcie głównego punktu kontrolnego przy wciśniętym
klawiszu <Komendy> przywróci połączone punkty kontrolne zakrzywienia.


Tryby nakładania warstw:

Normalny			Pixel nakładanej warsty zastępuje pixel warstwy zasłanianej.

Pomnażanie		Przemnaża komponenty barwy, przy uwzględnieniu komponentu
				przezroczystości pixela zasłanianego, nie zmieniając barwy pixela
				nakładanego.
				To znaczy że nakładany biały pixel będzie widoczny jeżeli pixel
				zasłanianej warstwy jest przezroczysty, a będzie niewidoczny
				kiedy zasłaniany pixel jest w pełni widoczny.

Odwrócone pomnażanie	Tak jak powyżej, tylko pomnaża używając odwrotności kanałów barw.

Luminescencja		Zamienia luminescencję pixela zasłanianego na luminescencję
				pixela nakładanego.
				Operacja wykonywana jest w przestrzeni barw Lab i może być
				wykorzystana jako mapa światła/cienia (jednak działające bardzo powoli!).

Krycie			Przezroczystość pixeli zasłanianych jest przemnażana przez przezroczystość
				pixeli nakładanych. Warstwa służy jako maska.

Odwrotne krycie		Przezroczystość pixeli zasłanianych jest przemnażana przez odwrotność
				przezroczystości pixeli nakładanych. Warstwa służy jako odwrotna maska.


Keyfiles, odblokowanie WonderBrush:

Ta wersja programu jest tak jakby "demo wersją" WonderBrush. Aplikacja nie potrafi zapisywać plików projektów. Licencję na WonderBrush do użytku komercyjnego i odblokowanie wersji demo możesz zakupić poprzez sklep online Kagi <http://order.kagi.com/?8JD>. Pojedyńcza licencja kosztuje 7.50 USD. Po zapłaceniu otrzymasz mail, w którym znajdziesz plik(i) keyfile odblokowujące zapisywanie projektów. Dziękuję za rozważenie możliwości zakupu WonderBrush.

Jeżeli uprzednio zakupiłeś już licencję, plik keyfile nadal będzie działać.


Tłumaczenie WonderBrush:

Folder "Languages - incomplete" zawiera część tłumaczeń WonderBrush, które są niekompletne. Możesz utworzyć własne tłumacznie zaczynając od pliku "_English_". Format pliku jest "łatwy". Pliki językowe są kompilowane jako addon z poziomu WonderBrush. A więc wszystko co możesz zrobić w języku programowania C/C++, możesz też zrobić w pliku językowym. To powoduje że musisz mieć zainstalowane narzędzia programistyczne (DevTools) lub poprosić kogoś innego o skompilowanie pliku.

Dziękuję autorom oryginalnych tłumaczeń. Ich imiona są podane w plikach językowych. Część z autorów kontynuuje tłumaczenie kolejnych wersji programu, za co bardzo dziękuję. Dziękuję także wszystkim którzy przesłali tłumaczenia w międzyczasie.


Anti-Grain Geometry:

Większa część engine'u renderowania WonderBrush jest już oparta  o Anti-Grain Geometry napisane przez Maxim'a Shemanarev'a. Dzięki temu mogę używać Afinicznych Transformacji w przyzwoity sposób bez spędzania masy czasu na programowanie. Narzędzie Kształt używa AGG do renderowania krzywych. Anti-alias jest bardzo dobrej jakości ponieważ jest obliczany na podstawie dokładnych wartości geometrycznych pokrycia, co daje 256 odcieni we wszystkich przypadkach. Wiele profesjonalnych programów, jak na przykład Photoshop, obsługuje tylko do 16 odcieni szarości w często spotykanych sytuacjach (sub-sampling).


FreeType:

Pierwsza implementacja narzędzia Tekst była oparta o FreeType. Teraz jest oparte na Anti-Grain Geometry, które z kolei jest oparte na FreeType. FreeType to doskonały renderer czcionek, także obliczający anti-aliasing na podstawie dokładnych wartości geometrycznych pokrycia. Generalnie jest to dobre rozwiązanie, aczkolwiek w pewnych sytuacjach, czytelność tekstu mogłaby być polepszona poprzez hinting (mechanizm optymalizacji kształtu liter w bardzo małych stopniach pisma), który jednak wyłączyłem ponieważ nie ma większego sensu dla transformowanego tekstu.


ArtPaint:

Wiele filtrów w WonderBrush jest bazowana na filtrach ArtPaint. Kod ArtPaint został ofiarowany BeUnited przez Heikki Suhonen i tam jest utrzymywany. Wewnętrzne architektury WonderBrush i ArtPaint są zupełnie różne, a więc wykorzystane zostały tylko algorytmy. Zostały one także zmodyfikowane aby lepiej obsługiwać przezroczystości kolorów. W niektórych przypadkach udało się uzyskać poprawę szybkości wykonywania. Jeżeli ktoś jest zainteresowany uzyskaniem moich ulepszeń, proszę dać mi znać.


Specjalne podziękowania:

Jestem bardzo wdzięczny Marcinowi Konickiemu (ahwayakchih) za jego liczne, wyczerpujące raporty o błędach i generalnie za bycie fajnym gościem. Bez niego ostatnie wydania z pewnością byłyby niższej jakości. Wielkie dzięki także dla DarkWyrm'a za jego szczegółowe opinie na temat możliwych ulepszeń interfejsu. Pierre Arnaud także pomagał mi kilka razy poprzez udostępnienie kawałków użytecznego kodu do implementacji narzędzia Kształt.


Historia:

1 Września 2004
	- w narzędziu Kształt:
		- znacznie ulepszona obsługa wyboru punktów kontrolnych podcza edycji ścieżek
		- transformacja wybranych punktów kontrolnych z kompletnym Cofnij/Ponów
	- część obrazu z przezroczystymi pixelami jest teraz usuwana podczas zapisywania,
		dzięki czemu pliki mogą być lepiej skompresowane
	- poprawki w narzędziu Tekst kiedy nie ma żadnych ustawień,
		lepszy wybór czcionek
	- poprawa wklejania ze schowka podczas edycji Tekstu lub Kształtu
		(historia operacji była pomieszana)
	- wszystkie ikony są teraz prawdziwie przezroczyste, dzięki czemu wyglądają dobrze
		wyrenderowane na nie szarym-256 tle w Zeta.

11 Sierpnia 2004
	- nowe narzędzie Kopiowanie, które kopiuje prostokątny obszar do schowka systemowego
	- drobne poprawki w narzędziu Przycięcie
	- pozycja menu "Wklej" jest teraz tłumaczona
	- świeższe pliki językowe Japoński i Polski

5 Sierpnia 2004
	- Akceptuj/Anuluj narzędzia Przycięcie i Transformacja
	- Narzędzie Kształt ma teraz tryb konturu z wybraną szerokością
	- prosokąt oznaczający wybrane obiekty w narzędziu Transformacja
	- nowe globalne "Ustawienia programu", można wybrać operacje wykonywaną na starcie
	- wiele poprawek błędów w narzędziach Kształt, Tekst, Przesunięcie, Przycięcie i Wypełnienie
	- wiele ulepszeń użytkowania
	- nowy mechanizm wgrywania w odzdzielnym wątku
	- pliki projektów mogą być teraz dodawane do istniejących projektów
		(trzymając wciśnięty klawisz <Shift> upuść plik na główne okno WonderBrush
		(a lepiej na listę warstw))
	- poprawka błędu nakładania warstw w trybie Krycie
	- lepsze generowanie obiektów bitmap po Scaleniu
		(wykluczanie pustych przestrzeni jest teraz inteligentniejsze)
	- znów wszystkie napisy mogą być tłumaczone
	- zmieniona nazwa listy Historia na Obiekt
	- kontrola promienia i krycia Pędzla poprzez nacisk pióra jest teraz domyślnie wyłączona
		(Błąd app_server'a Zeta ne jest wywoływany przy domyślnych ustawieniach)
	- inne drobne poprawki

12 Kwietnia 2004
	- Nowe narzędzie: Kształt
		brakuje:	transformacji wybranych punktów kontrolnych,
					wielu ścieżek do definicji wycięć, itp..
	- Akceptuj/Anuluj edycję narzędzi Tekst i Kształt
	- edycja obiektów Tekst i Kształt w dowolnym momencie,
		wystarczy podwójnie kliknąć na obiekt na liście Historia

19 Maja 2004
	- publicznie dostępna wersja rozwojowa
	- Nowe narzędzia: Przycięcie, Transformacja, Wypełnienie i Tekst
	- zmiany w układzie interfejsu
	- wiele poprawek
	- prace trwają...

25 Sierpnia 2003 - pierwsza publicznie dostępna wersja




