Uczę się i uczę, sprawdzam wiedzę i sprawdzam i wyszło, że z rysowaniem sobie nie do końca poradziłem. Aby to poprawić chciałem coś napisać/narysować, od słowa (kluczowego) do słowa i zacząłem pisać prostego painta. W sumie nic skomplikowanego, a cieszy. Wyciosałem coś co może pretendować do miany prostego rysownika.
Można sobie wybrać kilka prostych opcji do rysowania plus kilka kolorów, nic fikuśnego. Później mnie trochę poniosło i dodałem opcje cofania edycji i zmiany rozmiaru okna do rysowania, co okazało się banalnie proste.
W zasadzie wszystko co powinna robić aplikacja to posiadanie listy kształtów i kolorów które trzeba narysować gdzieś na ekranie.
Potem pomyślałem o tym, że skoro ktoś spędzi przy mojej aplikacji tyle godzin rysując jakieś cuda, szkoda aby jego praca poszła na marne. Można więc zapisywać i odczytywać obrazek, ponad to można go nawet (wow!) wyeksportować do .png tak aby inne mniej zaawansowane programy mogły go odczytać. Mój paint nie zniży się do tego poziomu i działa tylko z własnym formatem pliku (zserializowana lista obiektów). Tak zamierzam wprowadzić nowy standard.
W między czasie przeczytałem krótki art o wzorcu odwiedzający (Visitor), jako że pasował trochę do koncepcji aplikacji, postanowiłem zrobić mały refactor, aby z niego skorzystać. Wzorzec działa całkiem sprytnie, ale wiadomo że nic nie przychodzi za darmo. Prosta zmiana z enum na odwiedzającego, spowodowała lawinę zmian, którą musiałem wprowadzić do aplikacji, aby przystosować do nowej logiki. Jeszcze jedno spostrzeżenie, ten wzorzec szybko zwiększa ilość klas w projekcie.
Od razu przychodzą rozważania nad oczywistą oczywistością – nic na siłę. Jeżeli rozwiązanie z którego korzystam jest zupełnie wystarczające, nie powoduje problemów, etc to nie widzę najmniejszej potrzeby zmiany. Może poza ciekawością lub celami czysto szkoleniowymi. Tak właśnie było w moim przypadku.
Przy okazji poćwiczyłem także XAML i UI, naprawdę sporą część aplikacji robi się właśnie w designerze – to dobre jest. Pisanie GUI całkowicie w kodzie, a potem zabawa w przesuwanie tego po ekranie, powiększanie i obsługa OnSize(…), OnMove(…), szkoda na to czasu, tym bardziej że można to wyklikać, dzięki czemu prawdopodobieństwo popełnienia błędu jest dużo mniejsze.
Jeżeli ktoś będzie ciekawy jak prosto napisać Painta w C# lub chciałby zobaczyć jak ja to zrobiłem. Lub chciałbym zobaczyć jak skorzystałem ze wzorca odwiedzający, lub chciałbym zobaczyć kod lub po prostu jest znudzony lub zbiera kod lub … To właśnie wtedy powinien skorzystać z tego linka xp-dev i zaciągnąć odpowiednie źródła.
Pytania, odpowiedz i drwiny w komentarzach (jak zawsze)
ps.
Poly nie dziala
ps2
Już weekend!