Jak pisa? GUI

Witam

Ma ktoś jakieś doświadczenie w pisaniu *prostego* GUI dla mikrokontrolerów z wyświetlaczem dotykowym monochromatycznym? Potrzebuję zrobić coś takiego (rysowanie przycisków, okienek, bitmap itp) na podstawie istniejących funkcji (linia, bitmapa, tekst) no i nie wiem, w jakiej strukturze najlepiej to zorganizować, żeby łatwo było to wyświetlać, tworzyć jak i obsługiwać ("kliknięcie")? System pracuje pod FreeRTOS'em, piszę w C. Trzeba zapewne stworzyć listę obiektów, np. w kolejności rysowania... Ale jak to zrobić, żeby się później nie narobić?? Problemy które widzę, to:

-elementy są różnego typu, każdy posiada inne cechy szczególne...

-trzeba jakość obsłużyć "klikanie" na element, a różne elementy są obsługiwane przez różne wątki...

-nie wiem, czy przydatna nie byłaby pewna hierarchiczność zaszyta w tej strukturze (możliwość usunięcia, przesunięcia, ukrycia całej grupy elementów).

Ja to widzę tak - tworzę listę elementów, każdy element opisuje:

- położenie i rozmiar (X,Y,W,H)

- typ obiektu (bitmapa, tekst, przycisk...)

- wskaźnik na kolejkę (queue), do której należy wysłać informację np. o kliknięciu na dany element

- wskaźnik do dodatkowych ifnformacji o danym elemencie...

- wskaźnik na następny element Tylko, że nie wiem, czy to najlepsze wyjście... może lepiej to trochę pozmieniać? Może mniej danych wystarczy, może przyda się więcej?? Wolę sobie wcześniej zaprojektować taką strukturę, niż potem wszystko robić trzykrotnie... Bo się okażę, że czegoś nie przewidziałem, że apetyt rośnie w czasie jedzenia itp itd...

Będę wdzięczny za wszelkie uwagi do mojego pomysłu :).

Pozdrawiam Konop

Reply to
Konop
Loading thread data ...

"Ja to widzę tak - tworzę listę elementów, każdy element opisuje:

- położenie i rozmiar (X,Y,W,H)

- typ obiektu (bitmapa, tekst, przycisk...)

- wskaźnik na kolejkę (queue), do której należy wysłać informację np. o kliknięciu na dany element

- wskaźnik do dodatkowych ifnformacji o danym elemencie...

- wskaźnik na następny element Tylko, że nie wiem, czy to najlepsze wyjście... może lepiej to trochę"

Ja nie rozumiem, po co stosować takie objekty? Przypomina to Windows, który od 20 lat "ładuje się", każdego dnia po kolei, często widać jak pojawiają się w rządku te same ikony. Raz na 2 miesiące jakąś dodam, a może raz na tydzień jakaś mi się przesunie przez pomyłkę. Pamiętam kiedyś przeniosłem z pół pulpitu do katalogu "stare" :-)

Dlaczego komputer po każdym włączeniu nie może wyswietlić bitmapy z ostatniego dnia lub obrazu startowego w postaci panelu użytkowego, a nie reklamy, ale musi po kolei coś uruchamiać? Potem dorobić obsługę naciśnięcia [X;Y] i porównać ją z zakresem dostępnych w danej chwili działań.

Ja tak bym napisał.

Reply to
Sylwester Łazar

W dniu 2010-12-29 13:32, Konop pisze:

Ja zrealizowałem to w taki sposób: Całość podzieliłem na wirtualne ekrany. W strukturze między innymi mam zapisane takie parametry jak położenie, wielkość, parametr czy ekran jest widoczny, wskaźnik kolejki komunikatów/zdarzeń oraz kolejną tablicę struktur która opisuje konkretne kontrolki na tym ekranie. W strukturze kontrolek mam to piszesz plus wskaźniki konkretnych funkcji odpowiedzialnych za rysowanie, rysowanie po kliknięciu itd. Dzięki temu struktura jest uniwersalna i zawsze taka sama dla różnych typów kontrolek. Każdy ekran to osobny wątek i osobna kolejka komunikatów. Do tego stworzyłem szereg funkcji typu: CreateScreen, ShowScreen, HideScreen, CreateButton, CreateBitmap itd... Nie wiem czy to najlepsze rozwiązanie w każdym razie działa i nie jest upierdliwe jak trzeba dodać coś nowego.

pozdrawiam

Reply to
Robert Zemla

formatting link
cos znajdziesz, jest od wxWidgets po podełko zapałek czy GPE

Reply to
WoW

Watpie, zasadniczo to widze dwie drogi :

  1. Jak w poscie ponizej - statyczny obrazek w postaci mapy bitowej oraz napisane z palca psedo-widgety typu np. 3 cyfry w stalym miejscu ( nie ma mowy o zadnych oknach a tym bardziej historiach typu mysz, przesuwanie okien czy zdarzenia).
  2. Uzycie istniejacego mikro-GUI - patrz ponizej.

Po lekturze powyzszych wymagan moge stwierdzic iz to "proste" GUI w implemntacji bedzie calkiem rozbudowanym projektem. Zasadniczo w takej systuacji polecam wykorzystanie istniejacego tworu lub chociaz spojrzenie pt. "Jak to robia inni" aby uniknac wywazania otwartych drzwi. Jakis czas temu poszukiwalem jakiegos embedded GUI i z projektow open source jak na razie znalazlem tylko Nano-X ->

formatting link
ale obawiam sie iz port dla FreeRTOS'a bedzie wyzwaniem - jest on oparty o architekture klient-serwer co powoduje iz komunikacja odbywa sie przez sockety BSD na localhostcie :) Z komercyjnych ciekawie wyglada C/PEG ->

formatting link
aczkolwiek tez ne ma portu dla FreeRTOS'a. Polecam tez spojrzec na GUI systemiku Contiki ->
formatting link
biblioteke graficzna PW dla wyswietlaczy monochromatycznych ->

formatting link
(jest on blizsza "podejsciu mikrokontrolerowemu" niz Nano-X).

Reply to
brak

W dniu 2010-12-29 13:32, Konop pisze:

Rzuć okiem na bibliotekę microchipa

formatting link

Reply to
Zbych

Fakt, można... chodzi tylko o wygodę :). Pomyśle nad tym, bo to kurcze, proste jest, mało pamięci potrzebuje i w ogóle ;)... Fajne :)... Muszę tylko samemu dokładnie określić na czym mi zależy... W Twoim wydaniu przesunięcie przycisku np. przycisku to kupa roboty - trzeba przerobić bitmapę na kompie, trzeba ją przekonwertować i dołączyć do programu, w programie zmienić obszar, na którym ten przycisk obowiązuje. W przypadku takiej struktury po prostu zmieniam wartości X i Y i przycisk się sam przesuwa :)... Problem pojawia się po prostu w momencie, w którym chce mieć różne elementy... na starcie chcę widzieć pulpit z paroma ikonkami i tyle... potem przechodzić dalej. Czasem mieć klawiaturę numeryczną itp.. czyli kilka bitmap, które trzeba podmieniać i się w tym nie pogubić :). I tak muszę stworzyć sobie taką "listę obszarów", gdyż w jednym momencie danemu (X,Y) przyporządkowany będzie przycisk A, a w innym momencie, będzie to przycisk B... itd... Tak więc nie wiem, jak to w sumie wyjdzie :)... Ale pomysł na pewno wart jest przemyślenia. Uwzględniając istniejące opóźnienie w projekcie, nie wiem, czy się jednak nie skuszę :)...

Reply to
Konop

Pisząc o "oknach" miałem na myśli coś na czymś - to się nie musi przesuwać ani nic, ale NA PEWNO będę potrzebował kilka różnych "ekranów"... więc w sumie mała różnica , czy nowy ekran zajmie cały wyświetlacz, czy będzie nałożony na poprzedni i obramowany (okno :)).

No właśnie, wymagania są małe - proste GUI. To, co napisałem później, to był efekt mojej analizy ;D...

Właściwie o tym FreeRTOSie nie potrzebnie pisałem, bo to taki system, choćby żaden. Procek to ARM7, obecnie jadę na płytce testowej z LPC2378, docelowo zastosuję taki, lub jego słabszy "odpowiednik" (mniej pamięci, bajerów - zależnie od tego ile mi projekt zajmie). Generalnie nie ma tam systemu a'la linux czy coś ;)... No ale będę się przyglądał Twoim linkom :)...

Reply to
Konop

arm7 to potwor w porownaniu z contiki

Reply to
WoW

W dniu 2010-12-29 13:32 Konop napisał(a):

Przyjrzyj się bibliotece Skia:

formatting link
Na procku ARM7 powinna śmigać aż miło. Skia robi rysowanie 2D podstawowych obiektów, dopiszesz sobie do tego jeszcze tylko obsługę eventów (klikania) i będzie OK.

BTW: Skia leży na samym dnie Androida, poniżej jest już tylko driver LCD.

Reply to
Adam Dybkowski

A znasz moze jakas biblioteke do grafiki 2D. Krzywe beziera, odleglosc od krzywej, koła. grubosc linii zmienna, odleglosc na krzywej.

Reply to
WoW

W dniu 2010-12-30 11:32 WoW napisał(a):

Przejrzyj kod źródłowy np. programu Inkscape (to jest coś a'la wektorowy Corel Draw czy Adobe Illustrator). Rysowanie krzywych powinno gdzieś tam siedzieć, niewykluczone że w większej bibliotece "do wszystkiego". I jak najbardziej tylko 2D.

Reply to
Adam Dybkowski

Pan Adam Dybkowski napisał:

I jeszcze do źródeł wszystkich źródeł, czyli do METAFONTa. Zwłaszcza jak ktoś chce wiedzieć o co Knuthowi chodziło z tymi bezierami i bernsteinami. Oczywiście nie do źródeł w sensie pliku mf.web -- to trzeba przepuuścić przez program weave aby otrzymać algorytm z komentarzami i opisami w wygodnej formie podręcznika. Do tego można jeszcze się dowiedzieć jak zrobić dobrą rasteryzację tych wektorów.

Reply to
Jarosław Sokołowski

Klik-klik-klik... To WoW donosi :

Moze libart?

formatting link

Sławek

Reply to
Sławomir Szczyrba

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.