Graficzny interfejs użytkownika GUI: etykiety i przyciski (3)

Kontynuujemy prezentację możliwości biblioteki „STM32 embedded GUI library” na przykładzie dwóch elementów graficznego interfejsu uzytkownika: etykiety i przycisku. Projekt aplikacji interfejsu graficznego został opracowany do pracy w zestawie składającym się z: płytki STM32F4Discovery, płytki bazowej DM-STF4BB oraz modułu wyświetlacza DM-LCD35RT.

 

 

Warstwa API: Podstawowe elementy – przycisk i etykieta

Dodawanie każdego obiektu graficznego jest związane z zadeklarowaniem odpowiednich struktur i inicjalizacją pól wchodzących w ich skład. W pliku graphicObjectTypes.h znajdują się definicje takich struktur, między innymi dotyczące przycisku i etykiety:

Powyższe struktury przechowują tylko specyficzne dla danego elementu parametry i oprócz nich zdefiniowana jest również taka która przechowuje współrzędne tych elementów, ich rodzaj, wskaźnik do specyficznej struktury oraz wskaźnik do funkcji rysującej dany element:

oraz struktura przechowująca współrzędne:

Wszystkie elementy interfejsu GUI są „przechowywane” w obiektach typu GL_PageObj:

Tworzenie obiektu sprowadza się do wywołania funkcji NewNazwaObiektuGUI() z zadanymi parametrami. W przypadku przycisku tymi parametrami są: unikalny numer ID, wskaźnik do ciągu znaków będących etykietą oraz wskaźnik do funkcji wywoływanej po kliknięciu. Budowa funkcji NewButton() jest następująca (plik graphicObject.c):

W podobny sposób tworzona jest etykieta, przy czym podać należy tutaj jeszcze jej orientację oraz rozmiar i kolor czcionki:

Funkcja rysująca element GUI jako argumenty przyjmuje: wskaźnik na strukturę typu GL_PageControls_TypeDef opisującą ogólne parametry tego elementu oraz obiekt struktury typu GL_Coordinates_TypeDef zawierający jego współrzędne. W przypadku przycisku funkcja SetButtonVisible() wygląda następująco:

Niektóre elementy, jak np. przycisk, można wyświetlić na dwa sposoby: przez narysowanie prostych figur geometrycznych lub mapy bitowej. W pierwszym przypadku w projekcie należy zdefiniować stałą globalną USE_2D_OBJECTS. Natomiast mapy bitowe elementów są zdefiniowane w pliku images.c, a funkcje odwołują się do nich poprzez wskaźniki.

Wyświetlanie etykiety wygląda podobnie i realizuje to funkcja SetLabelVisible():

Umieszczaniem elementu GUI na określonej stronie w zadanym punkcie zajmuje się funkcja AddPageControlObj():

Główna pętla programu

W głównej pętli programu sprawdzane jest czy zmienna touch_done wynosi 1 (ustawiana w przerwaniu od dotknięcia panelu) i jeżeli tak to wywoływana jest funkcja sprawdzająca czy punkt dotknięcia znajduje się w granicach położenia jednego z elementów interfejsu GUI na aktywnej stronie. Funkcja main() wygląda w następujący sposób:


Jan Szemiet


Materiały dodatkowe

[1] AN3128 – STM32 embedded graphic objects and touchscreen library

[2] Float variables not working in sprintf and printf, http://www.coocox.org/forum/topic.php?id=346

[3] Hard FPU/Soft FPU Libraries – http://blog.stm32f4.eu/development-chain/setting-up-coocox/

[4] Dokumentacja kontrolera SSD2119

[5] Krótki opis biblioteki Embedded GUI – http://www.emcu.it/STM32/Embedded-GUIandTOUCH-Library/EmbeddedGUIandTOUCH.html

Do pobrania

Autor: