W poprzedniej części,  zostały zdefiniowane klasy abstrakcyjne służące za stworzenie narzędzi do użycia na płótnie. W tej części skupie się nad stworzeniem i implementacją konkretnego narzędzia.

Za przykład posłuży klasa FullEllipse, która dziedziczy po klasie ABrushType

Wyjaśnienie

Klasa FullEllipse ma za zadanie stworzyć konkretne narzędzie w tym przypadku pełną elipsę (pełna – wypełniona jednolitym kolorem). Klasa ta definiuje metody oraz konstruktor zadeklarowany klasach nadrzędnych.  Klasa EmptyEllipse dziedziczy po klasie APenToolType jest to pusta elipsa, bez wypełnienia.

Do klasy dziedziczącej po klasie abstrakcyjnej APenToolType należą:

  • EmptyEllipse
  • LineWithPen
  • EmptyRectangle

Do klasy dziedziczącej po klasie abstrakcyjnej ABrushToolType należą:

  • FullEllipse
  • FullRectangle
  • Eraser
  • SimpleBrush

Wywołanie w kodzie aplikacji:

Wyjaśnienie

Wywołanie odpowiedniego narzędzia odbywa się na zdarzeniu mouse_up przypisanego do płótna. W warunku sprawdzam czy jest to konkretne narzędzie. Myślę że refaktoryzacja nie zakończyła się na tym punkcie, klasy odpowiedzialne za prosty pędzel  (SimpleBrush)  i gumkę (Eraser) wymagają pewnej integracji lub też stworzenia bardziej rozbudowanych klas. Klasa odpowiedzialna za gumkę mogła by wykrywać jaki kolor tła jest żeby dobrać do niego odpowiedni kolor gumki. Aktualnie jest tylko biały i nie da się go zmienić. Klasa SimpleBrush mogła by implementować różne style pędzla nie tylko jego rozmiar.

Część kolejna

Kategorie: Archiwum