Ten post chciałbym poświęcić na opisanie generacji polskiej czcionki w bibliotece STemWin bardzo szybkim sposobem, bez konieczności zastosowania TTF.
Na samym początku należy pobrać oprogramowanie FontCvtST. Można je znaleźć w paczce z wszystkimi sterownikami dla tego modelu dicovery. Są one do pobrania ze strony ST (link).
Program wspomniany wcześniej znajduje się w lokalizacji:
en.stm32cubef7\STM32Cube_FW_F7_V1.5.0\Middlewares\ST\STemWin\Software
Generacja czcionki
Należy mieć czcionkę obsługująca polskie znaki, większość w windowsie spełnia te wymagania. Pod tym linkiem znajduje się całkiem przyjemna strona z różnymi czcionkami z polskimi znakami, bardzo szybkie do ściągnięcia w plikach TTF, które wystarczy zainstalować w systemie.
Teraz czas na program generujący, wspomniany wcześniej. Poniżej pokażę poszczególne kroki jakie należy w nim wykonać.
W kolejnym oknie pokaże się wybór typu czcionki jaka ma zostać wygenerowana oraz tryb dekodowania:
Następne okno pozwoli na wybranie konkretnej czcionki, jej rozmiaru oraz stylu.
Następne okno będzie zawierało wykaz poszczególnych znaków wraz z przypisanymi do nich numerami:
Tak wygeneorwaną czcionkę można teraz zapisać jako plik C (File->Save As). Następnie należy ją dołączyć do projektu np. do folderu src.
Po jego dodaniu należy jeszcze wprowadzić modyfikację w dwóch miejscach w bibliotece GUI, tak aby czcionka była przez nią rozpoznawana.
W pliku GUI.h należy dopisać linijkę:
- //W zależniści jakie czcionki będą wykorzystywane
- //Definicje czcionek już zdefiniowanych znajdują się
- //w linikach około 2000 pod tytułem Macros to be used
- /*********************************************************************
- *
- * Macros to be used
- */
- //
- // Proportional fonts
- //
- #define GUI_FONT_8_ASCII &GUI_Font8_ASCII
- //....
- //....
- //....
- #define GUI_ANDANA_14 &GUI_FontAndada14
- #define GUI_ANDANA_16 &GUI_FontAndada16
- #define GUI_ANDANA_44 &GUI_FontAndada44
- #define GUI_ANDANA_32 &GUI_FontAndada32
Druga zmiana w bibliotece znajduje się kilka linijek wcześniej, tutaj trzeba zaznaczyć że czcionka przechowywana jest w osobnym pliku wraz z jej strukturą:
- /*********************************************************************
- *
- * Addresses of standard fonts
- */
- //
- // Proportional fonts
- //
- extern GUI_CONST_STORAGE GUI_FONT GUI_Font8_ASCII, GUI_Font8_1;
- //...
- //...
- //...
- extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada14;
- extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada42;
- extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada44;
- extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada32;
- extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada16;
Program
Po dołączeniu czcionek ich odpalenie z znakami polskimi jest bardzo proste. Wystarczy ją ustawić, po czym włączyć kodowanie UTF8, podobnie jak w HTML-u. Fragment programu wykonujący te czynności wygląda następująco:
- //Część inicjalizacji potrzebnych części sprzętowych
- MX_LTDC_Init(); //Wlaczenie sterownika LTDC
- BSP_TS_Init(480, 272); //Wlaczenie modulu dotykowego
- __HAL_RCC_BKPSRAM_CLK_ENABLE();
- BSP_SDRAM_Init(); //Wlaczenie modulu SDRAM
- __HAL_RCC_CRC_CLK_ENABLE(); //Wlaczenie zegara dla CRC
- //Biblioteka STemWin
- WM_SetCreateFlags(WM_CF_MEMDEV); //Ustawienie buforowania przed wgraniem na ekran
- GUI_Init(); //Inicjalizacja biblioteki graficznej
- GUI_Clear(); //Czyszczenie
- GUI_SetLayerVisEx(0, 1); //Wlaczenie warstwy 0
- GUI_SetLayerVisEx(1, 0); //Wylaczenie warstwy 1
- GUI_SetBkColor(GUI_MAKE_COLOR(Used_Kolor)); //Ustawienie koluru tla kolor custom
- TS_State.Layer = 2; //Wybranie wartstwy dla dotyku
- GUI_SetFont(&GUI_FontAndada16); //Wybranie domyslnej czcionki
- GUI_UC_SetEncodeUTF8(); //Ustawienie kodowanie na UTF8
- GUI_DispStringAt("ŚśąęćĄĘĆóżź", 185, 5); //Wyświetlenie tekstu
Dodatkowo do pliku main.c gdzie wywoływane będzie wypisanie tekstu można dołączyć wykorzystywane czcionki:
Jeśli polska czcionka nie chciała by się pojawiać w tym pliku lub po wywołaniu funkcji wyświetlania znajdującej się w innym pliku to należy włączyć kodowanie UTF8 dla całego projektu, przynajmniej w eclipsie. Wykonuje się to poprzez wejście w zakładkę Window->Preferences->Workspace. Na dole w strony będzie się znajdowała kontrolka groupBox o nazwie Text file encoding. W niej należy zaznaczyć na Other z Default(Cp1250) po czym z listBoxa wybrac UTF-8. Następnie należy kliknąć OK po czym wyczyścić i zbudować projekt ponownie. Wszystkie polskie znaki zostaną zastąpione krzakami. Po ich ponownym wpisaniu program powinien działać jak należy.
Pod tym linkiem znajdują się przykładowe czcionki wygenerowane przeze mnie w wyżej wspomnianym programie.
- extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada14;
- extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada16;
- extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada32;
Jeśli polska czcionka nie chciała by się pojawiać w tym pliku lub po wywołaniu funkcji wyświetlania znajdującej się w innym pliku to należy włączyć kodowanie UTF8 dla całego projektu, przynajmniej w eclipsie. Wykonuje się to poprzez wejście w zakładkę Window->Preferences->Workspace. Na dole w strony będzie się znajdowała kontrolka groupBox o nazwie Text file encoding. W niej należy zaznaczyć na Other z Default(Cp1250) po czym z listBoxa wybrac UTF-8. Następnie należy kliknąć OK po czym wyczyścić i zbudować projekt ponownie. Wszystkie polskie znaki zostaną zastąpione krzakami. Po ich ponownym wpisaniu program powinien działać jak należy.
Pod tym linkiem znajdują się przykładowe czcionki wygenerowane przeze mnie w wyżej wspomnianym programie.