diff --git a/Firmware/CoverUI/YardForce/WYM240128K1.hpp b/Firmware/CoverUI/YardForce/WYM240128K1.hpp index 9680f10..947854a 100644 --- a/Firmware/CoverUI/YardForce/WYM240128K1.hpp +++ b/Firmware/CoverUI/YardForce/WYM240128K1.hpp @@ -22,6 +22,7 @@ #include "LEDcontrol.h" #include "WidgetLedSymbol.hpp" #include "WidgetBar.hpp" +#include "WidgetTextTicker.hpp" // C images LV_IMG_DECLARE(OM_Logo_Inv_120x54x1); @@ -41,6 +42,7 @@ namespace display // Status Screen Widgets WidgetLedSymbol *v_led_ros, *v_led_charge; WidgetBar *bar_gps, *bar_bat; + WidgetTextTicker *text_ticker_status; /** * @brief Rounder callback will round the display area to a multiple of 3, on x axis (RGB control lines of a pixel are connected to 3 monochrome pixels) @@ -89,6 +91,9 @@ namespace display // GPS & Battery bars bar_gps = new WidgetBar(FA_SYMBOL_GPS2 " %d %%", LV_ALIGN_TOP_MID, 0, 30, UC1698_DISPLAY_WIDTH, 21); bar_bat = new WidgetBar(FA_SYMBOL_BATTERY " %d %%", LV_ALIGN_TOP_MID, 0, 60, UC1698_DISPLAY_WIDTH, 21); + // Mower status text (ticker) + text_ticker_status = new WidgetTextTicker(LV_ALIGN_TOP_MID, 0, 95, UC1698_DISPLAY_WIDTH); + text_ticker_status->set_text("Bla bla"); } static void anim_x_cb(void *var, int32_t v) @@ -161,8 +166,8 @@ namespace display disp = lv_disp_drv_register(&lv_disp_drv); // Register the driver and save the created display objects lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x000000), LV_PART_MAIN); // No background color - openmower_anim(); - //mainStatusScreen(); + //openmower_anim(); + mainStatusScreen(); // test1(); // testCanvas(); diff --git a/Firmware/CoverUI/YardForce/WidgetBar.hpp b/Firmware/CoverUI/YardForce/WidgetBar.hpp index 4d1e99b..8c12928 100644 --- a/Firmware/CoverUI/YardForce/WidgetBar.hpp +++ b/Firmware/CoverUI/YardForce/WidgetBar.hpp @@ -25,20 +25,20 @@ namespace display { // Init bar style settings for custom (labeled) bar graph lv_style_init(&bar_style_bg); - lv_style_set_border_color(&bar_style_bg, lv_color_hex(0xffffff)); + lv_style_set_border_color(&bar_style_bg, lv_color_white()); lv_style_set_border_width(&bar_style_bg, 2); lv_style_set_pad_all(&bar_style_bg, 3); // To make the indicator smaller lv_style_set_radius(&bar_style_bg, 4); lv_style_init(&bar_style_indic); lv_style_set_bg_opa(&bar_style_indic, LV_OPA_COVER); - lv_style_set_bg_color(&bar_style_indic, lv_color_hex(0xffffff)); + lv_style_set_bg_color(&bar_style_indic, lv_color_white()); lv_style_set_radius(&bar_style_indic, 1); // Draw bar bar = lv_bar_create(lv_scr_act()); lv_obj_set_user_data(bar, (void *)bar_label.c_str()); // Store bar label to object user data - lv_obj_remove_style_all(bar); // To have a clean start + lv_obj_remove_style_all(bar); // To have a clean start lv_obj_add_style(bar, &bar_style_bg, 0); lv_obj_add_style(bar, &bar_style_indic, LV_PART_INDICATOR); @@ -52,7 +52,6 @@ namespace display lv_bar_set_value(bar, value, LV_ANIM_OFF); } - private: lv_obj_t *bar; lv_style_t bar_style_bg, bar_style_indic; diff --git a/Firmware/CoverUI/YardForce/WidgetTextTicker.hpp b/Firmware/CoverUI/YardForce/WidgetTextTicker.hpp new file mode 100644 index 0000000..23c9e01 --- /dev/null +++ b/Firmware/CoverUI/YardForce/WidgetTextTicker.hpp @@ -0,0 +1,45 @@ +/** + * @file WidgetTextTicker.hpp + * @author Apehaenger (joerg@ebeling.ws) + * @brief Tiny class/wrapper for a text-ticker, which get displayed for mower status messages (as LVGL label + anim) for OpenMower https://github.com/ClemensElflein/OpenMower + * @version 0.1 + * @date 2023-09-12 + * + * @copyright Copyright (c) 2023 + */ +#ifndef __WIDGETTEXTTICKER_HPP +#define __WIDGETTEXTTICKER_HPP + +#include +#include +#include "LEDcontrol.h" + +LV_FONT_DECLARE(PerfectPixel_20); + +namespace display +{ + class WidgetTextTicker + { + public: + WidgetTextTicker(lv_align_t align, lv_coord_t x_ofs, lv_coord_t y_ofs, lv_coord_t w) + { + label = lv_label_create(lv_scr_act()); + //lv_obj_set_style_text_color(lv_scr_act(), lv_color_hex(0xffffff), LV_PART_MAIN); + lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_CENTER, 0); + lv_obj_set_style_text_font(label, &PerfectPixel_20, LV_PART_MAIN); + lv_obj_align(label, align, x_ofs, y_ofs); + lv_obj_set_width(label, w); + lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR); + } + + void set_text(const char *t_text) + { + lv_label_set_text(label, t_text); + } + + private: + lv_obj_t *label; + }; +} // namespace display + +#endif // __WIDGETTEXTTICKER_HPP \ No newline at end of file diff --git a/Firmware/CoverUI/YardForce/assets/PerfectPixel_20.c b/Firmware/CoverUI/YardForce/assets/PerfectPixel_20.c new file mode 100644 index 0000000..4511518 --- /dev/null +++ b/Firmware/CoverUI/YardForce/assets/PerfectPixel_20.c @@ -0,0 +1,653 @@ +/******************************************************************************* + * Size: 20 px + * Bpp: 1 + * Opts: + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef PERFECTPIXEL_20 +#define PERFECTPIXEL_20 1 +#endif + +#if PERFECTPIXEL_20 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0020 " " */ + 0x0, + + /* U+0021 "!" */ + 0xff, 0xff, 0xff, 0xfc, 0xf, 0xf8, + + /* U+0022 "\"" */ + 0xe7, 0xe7, 0xe7, 0xe7, + + /* U+0023 "#" */ + 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0xff, 0xff, + 0xff, 0xff, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, + 0x1c, 0x38, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x38, + 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, + + /* U+0025 "%" */ + 0x38, 0x3, 0x87, 0x38, 0x73, 0x87, 0x0, 0xf0, + 0x1f, 0x3, 0xe0, 0x78, 0xf, 0x1, 0xe0, 0x7c, + 0xf, 0x80, 0xf0, 0xe, 0x1c, 0xe1, 0xce, 0x1c, + + /* U+0026 "&" */ + 0x3f, 0x3, 0xfc, 0x3f, 0xf1, 0xc3, 0x8e, 0x0, + 0x70, 0x3, 0xe7, 0xef, 0x3f, 0xf9, 0xff, 0x3, + 0xb8, 0x1d, 0xc0, 0xef, 0xff, 0x3f, 0xf0, 0xff, + 0x0, + + /* U+0027 "'" */ + 0xff, 0xf0, + + /* U+0028 "(" */ + 0x3f, 0xfe, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, + 0x38, 0xe3, 0x8e, 0x3f, 0x3c, + + /* U+0029 ")" */ + 0xf3, 0xf1, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, + 0xc7, 0x1c, 0x71, 0xff, 0xf0, + + /* U+002A "*" */ + 0x27, 0xdc, 0xef, 0x90, + + /* U+002B "+" */ + 0xe, 0x1, 0xc0, 0x38, 0x7f, 0xff, 0xff, 0xff, + 0xc3, 0x80, 0x70, 0xe, 0x1, 0xc0, + + /* U+002C "," */ + 0x39, 0xce, 0xe0, + + /* U+002D "-" */ + 0xff, 0xff, 0xff, 0xe0, + + /* U+002E "." */ + 0xff, 0x80, + + /* U+002F "/" */ + 0x0, 0x70, 0x7, 0x0, 0x70, 0xf, 0x1, 0xe0, + 0x3c, 0x7, 0x80, 0xf0, 0x1e, 0x3, 0xc0, 0xf8, + 0xf, 0x0, 0xe0, 0xe, 0x0, 0xe0, 0x0, + + /* U+0030 "0" */ + 0x3f, 0xc7, 0xfe, 0xff, 0xff, 0xf, 0xe1, 0xfe, + 0x3f, 0xe7, 0xfe, 0xf7, 0xfe, 0x7f, 0xc7, 0xf8, + 0x7f, 0xf, 0xff, 0xf7, 0xfe, 0x3f, 0xc0, + + /* U+0031 "1" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + + /* U+0032 "2" */ + 0xff, 0xcf, 0xfe, 0xff, 0xf0, 0xf, 0x0, 0x70, + 0xf, 0x3f, 0xf7, 0xfe, 0xff, 0xcf, 0x0, 0xe0, + 0xe, 0x0, 0xff, 0xff, 0xff, 0xff, 0xf0, + + /* U+0033 "3" */ + 0xff, 0xcf, 0xfe, 0xff, 0xf0, 0xf, 0x0, 0x70, + 0xf, 0x7f, 0xe7, 0xfe, 0x7f, 0xf0, 0xf, 0x0, + 0x70, 0xf, 0xff, 0xff, 0xfe, 0xff, 0xc0, + + /* U+0034 "4" */ + 0x0, 0xf0, 0x1f, 0x3, 0xf0, 0x7f, 0xf, 0x71, + 0xe7, 0x3c, 0x77, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0x7, 0x0, 0x70, 0x7, 0x0, 0x70, + + /* U+0035 "5" */ + 0xff, 0xef, 0xfe, 0xff, 0xee, 0x0, 0xe0, 0xf, + 0xfc, 0xff, 0xef, 0xff, 0x0, 0xf0, 0x7, 0x0, + 0x70, 0xf, 0xff, 0xff, 0xfe, 0xff, 0xc0, + + /* U+0036 "6" */ + 0x3f, 0xc7, 0xfc, 0xff, 0xce, 0x0, 0xe0, 0xe, + 0x0, 0xff, 0xcf, 0xfe, 0xe0, 0xfe, 0x7, 0xe0, + 0x7e, 0xf, 0xff, 0xf7, 0xfe, 0x3f, 0xc0, + + /* U+0037 "7" */ + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1e, 0x3, 0xc0, + 0x78, 0x1f, 0x1, 0xe0, 0x1c, 0x1, 0xc0, 0x1c, + 0x1, 0xc0, 0x1c, 0x1, 0xc0, 0x1c, 0x0, + + /* U+0038 "8" */ + 0x3f, 0xc7, 0xfe, 0xff, 0xff, 0xf, 0xe0, 0x7f, + 0xf, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xf, 0xe0, + 0x7f, 0xf, 0xff, 0xf7, 0xfe, 0x3f, 0xc0, + + /* U+0039 "9" */ + 0x3f, 0xc7, 0xfe, 0xff, 0xfe, 0x7, 0xe0, 0x7e, + 0x7, 0x7f, 0xf3, 0xff, 0x0, 0x70, 0x7, 0x0, + 0x70, 0x7, 0x3f, 0xf3, 0xfe, 0x3f, 0xc0, + + /* U+003A ":" */ + 0xff, 0x80, 0x0, 0xff, 0x80, + + /* U+003B ";" */ + 0x39, 0xce, 0x0, 0x0, 0x0, 0x39, 0xce, 0xe0, + + /* U+003C "<" */ + 0x3, 0xe0, 0xfc, 0x3f, 0x8f, 0x3, 0xc0, 0xf0, + 0x3c, 0x7, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, + 0x0, 0xfe, 0xf, 0xc0, 0xf8, + + /* U+003D "=" */ + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x3f, 0xff, 0xfe, + + /* U+003E ">" */ + 0xf8, 0x1f, 0x83, 0xf8, 0xf, 0x80, 0xf8, 0xf, + 0x80, 0xf8, 0x7, 0x3, 0xe0, 0xf8, 0x3e, 0xf, + 0x8f, 0xe1, 0xf8, 0x3e, 0x0, + + /* U+003F "?" */ + 0x3f, 0xcf, 0xff, 0xff, 0xf0, 0x7e, 0xe, 0x1, + 0xc3, 0xf8, 0xfe, 0x1f, 0xc3, 0x80, 0x70, 0x0, + 0x0, 0x0, 0x38, 0x7, 0x0, 0xe0, + + /* U+0040 "@" */ + 0x3f, 0xf9, 0xff, 0xfe, 0x0, 0xf3, 0xfb, 0xdf, + 0xef, 0x73, 0xbd, 0xce, 0xf7, 0x3b, 0xdf, 0xef, + 0x3f, 0xbc, 0xf, 0xf8, 0x3e, 0xe0, 0x1, 0xff, + 0xf3, 0xff, 0xc0, + + /* U+0041 "A" */ + 0xf, 0xc0, 0x7f, 0x83, 0xff, 0x1e, 0x1e, 0xf0, + 0x3f, 0x80, 0x7e, 0x1, 0xf8, 0x7, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x7, 0xe0, 0x1f, 0x80, + 0x7e, 0x1, 0xc0, + + /* U+0042 "B" */ + 0xff, 0xf3, 0xff, 0xef, 0xff, 0xf8, 0x7, 0xe0, + 0x1f, 0x80, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0xfb, + 0x80, 0x7e, 0x1, 0xf8, 0x7, 0xff, 0xff, 0xff, + 0xef, 0xff, 0x0, + + /* U+0043 "C" */ + 0x3f, 0xfb, 0xff, 0xff, 0xff, 0xe0, 0xe, 0x0, + 0x70, 0x3, 0x80, 0x1c, 0x0, 0xe0, 0x7, 0x0, + 0x38, 0x1, 0xe0, 0xf, 0xff, 0xbf, 0xfc, 0xff, + 0xe0, + + /* U+0044 "D" */ + 0xff, 0xf3, 0xff, 0xef, 0xff, 0xf8, 0xf, 0xe0, + 0x1f, 0x80, 0x7e, 0x1, 0xf8, 0x7, 0xe0, 0x1f, + 0x80, 0x7e, 0x1, 0xf8, 0xf, 0xff, 0xff, 0xff, + 0xef, 0xff, 0x0, + + /* U+0045 "E" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xe, 0x0, + 0x70, 0x3, 0xff, 0xdf, 0xfe, 0xff, 0xf7, 0x0, + 0x38, 0x1, 0xc0, 0xf, 0xff, 0xff, 0xff, 0xff, + 0xe0, + + /* U+0046 "F" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xe, 0x0, + 0x70, 0x3, 0xff, 0xdf, 0xfe, 0xff, 0xf7, 0x0, + 0x38, 0x1, 0xc0, 0xe, 0x0, 0x70, 0x3, 0x80, + 0x0, + + /* U+0047 "G" */ + 0x3f, 0xf9, 0xff, 0xef, 0xff, 0xbc, 0x0, 0xe0, + 0x3, 0x80, 0xe, 0x1f, 0xf8, 0x7f, 0xe1, 0xff, + 0x80, 0x7e, 0x1, 0xfc, 0xf, 0xff, 0xfd, 0xff, + 0xe3, 0xff, 0x0, + + /* U+0048 "H" */ + 0xe0, 0x3f, 0x1, 0xf8, 0xf, 0xc0, 0x7e, 0x3, + 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1, + 0xf8, 0xf, 0xc0, 0x7e, 0x3, 0xf0, 0x1f, 0x80, + 0xe0, + + /* U+0049 "I" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + + /* U+004A "J" */ + 0xe, 0x1c, 0x38, 0x70, 0xe1, 0xc3, 0x87, 0xe, + 0x1c, 0x38, 0xff, 0xff, 0xbe, 0x0, + + /* U+004B "K" */ + 0xe0, 0xf7, 0xf, 0x38, 0xf1, 0xcf, 0xe, 0xf0, + 0x7f, 0x3, 0xfc, 0x1f, 0xf0, 0xff, 0xc7, 0xf, + 0x38, 0x3d, 0xc0, 0xfe, 0x3, 0xf0, 0x1f, 0x80, + 0xe0, + + /* U+004C "L" */ + 0xe0, 0xe, 0x0, 0xe0, 0xe, 0x0, 0xe0, 0xe, + 0x0, 0xe0, 0xe, 0x0, 0xe0, 0xe, 0x0, 0xe0, + 0xe, 0x0, 0xff, 0xff, 0xff, 0xff, 0xf0, + + /* U+004D "M" */ + 0xe0, 0x7, 0xf0, 0xf, 0xf8, 0x1f, 0xfc, 0x3f, + 0xfe, 0x7f, 0xef, 0xf7, 0xe7, 0xe7, 0xe3, 0xc7, + 0xe1, 0x87, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, + 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, + + /* U+004E "N" */ + 0xe0, 0xf, 0xe0, 0x1f, 0xe0, 0x3f, 0xe0, 0x7f, + 0xe0, 0xff, 0xe1, 0xfb, 0xe3, 0xf3, 0xe7, 0xe3, + 0xef, 0xc3, 0xff, 0x83, 0xff, 0x3, 0xfe, 0x3, + 0xfc, 0x3, 0xf8, 0x3, 0x80, + + /* U+004F "O" */ + 0x3f, 0xf8, 0xff, 0xfb, 0xff, 0xff, 0x80, 0xfe, + 0x0, 0xfc, 0x1, 0xf8, 0x3, 0xf0, 0x7, 0xe0, + 0xf, 0xc0, 0x1f, 0x80, 0x3f, 0x80, 0xff, 0xff, + 0xef, 0xff, 0x8f, 0xfe, 0x0, + + /* U+0050 "P" */ + 0xff, 0xe7, 0xff, 0xbf, 0xff, 0xc0, 0x7e, 0x3, + 0xf0, 0x1f, 0xff, 0xff, 0xfe, 0xff, 0xe7, 0x0, + 0x38, 0x1, 0xc0, 0xe, 0x0, 0x70, 0x3, 0x80, + 0x0, + + /* U+0051 "Q" */ + 0x3f, 0xf8, 0xff, 0xfb, 0xff, 0xff, 0x80, 0xfe, + 0x0, 0xfc, 0x1, 0xf8, 0x3, 0xf0, 0x7, 0xe0, + 0xf, 0xc0, 0x1f, 0x8e, 0x3f, 0x9c, 0xff, 0xff, + 0xef, 0xff, 0x8f, 0xfe, 0x1, 0xc0, 0x3, 0x80, + + /* U+0052 "R" */ + 0xff, 0xe7, 0xff, 0xbf, 0xff, 0xc0, 0xfe, 0x3, + 0xf0, 0x1f, 0x81, 0xff, 0xff, 0xff, 0xff, 0x3, + 0xf8, 0xf, 0xc0, 0x7e, 0x3, 0xf0, 0x1f, 0x80, + 0xe0, + + /* U+0053 "S" */ + 0x3f, 0xf3, 0xff, 0xbf, 0xfd, 0xc0, 0xe, 0x0, + 0x70, 0x3, 0xff, 0x8f, 0xfe, 0x3f, 0xf8, 0x3, + 0xc0, 0xe, 0x0, 0x7f, 0xff, 0xff, 0xfb, 0xff, + 0x80, + + /* U+0054 "T" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1c, 0x0, + 0x38, 0x0, 0x70, 0x0, 0xe0, 0x1, 0xc0, 0x3, + 0x80, 0x7, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x38, + 0x0, 0x70, 0x0, 0xe0, 0x0, + + /* U+0055 "U" */ + 0xe0, 0x3f, 0x1, 0xf8, 0xf, 0xc0, 0x7e, 0x3, + 0xf0, 0x1f, 0x80, 0xfc, 0x7, 0xe0, 0x3f, 0x1, + 0xf8, 0xf, 0xe0, 0xff, 0xff, 0xbf, 0xf8, 0xff, + 0x80, + + /* U+0056 "V" */ + 0xe0, 0x3f, 0x1, 0xf8, 0xf, 0xc0, 0x7e, 0x3, + 0xf0, 0x1f, 0x80, 0xfc, 0x7, 0xe0, 0x3f, 0x83, + 0xde, 0x3c, 0x7b, 0xc1, 0xfc, 0x7, 0xc0, 0x1c, + 0x0, + + /* U+0057 "W" */ + 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, + 0xe0, 0x7, 0xe0, 0x7, 0xe1, 0x87, 0xe3, 0xc7, + 0xe7, 0xe7, 0xef, 0xf7, 0xfe, 0x7f, 0xfc, 0x3f, + 0xf8, 0x1f, 0xf0, 0xf, 0xe0, 0x7, + + /* U+0058 "X" */ + 0xe0, 0x7, 0xf0, 0xf, 0xf8, 0x1f, 0x7c, 0x3e, + 0x3e, 0x7c, 0x1f, 0xf8, 0xf, 0xf0, 0x7, 0xc0, + 0xf, 0xf0, 0x1f, 0xf8, 0x3e, 0x7c, 0x7c, 0x3e, + 0xf8, 0x1f, 0xf0, 0xf, 0xe0, 0x7, + + /* U+0059 "Y" */ + 0xe0, 0x7, 0xf0, 0xf, 0xf8, 0x1f, 0x7c, 0x3e, + 0x3e, 0xf8, 0x1f, 0xf0, 0xf, 0xe0, 0x7, 0xc0, + 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, + 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, + + /* U+005A "Z" */ + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x1, 0xf0, 0x1f, + 0x1, 0xf0, 0x1f, 0x1, 0xf0, 0x1f, 0x1, 0xe0, + 0x1e, 0x1, 0xe0, 0xf, 0xff, 0xff, 0xff, 0xff, + 0xe0, + + /* U+005B "[" */ + 0xff, 0xff, 0xff, 0xe, 0x1c, 0x38, 0x70, 0xe1, + 0xc3, 0x87, 0xe, 0x1c, 0x38, 0x70, 0xff, 0xff, + 0xf8, + + /* U+005C "\\" */ + 0xe0, 0xe, 0x0, 0xe0, 0xf, 0x0, 0xf8, 0x3, + 0xc0, 0x1e, 0x0, 0xf0, 0x7, 0x80, 0x3c, 0x1, + 0xf0, 0xf, 0x0, 0x70, 0x7, 0x0, 0x70, + + /* U+005D "]" */ + 0xff, 0xff, 0xf8, 0x70, 0xe1, 0xc3, 0x87, 0xe, + 0x1c, 0x38, 0x70, 0xe1, 0xc3, 0x87, 0xff, 0xff, + 0xf8, + + /* U+005E "^" */ + 0x7, 0xc0, 0xf, 0xe0, 0x1f, 0xf0, 0x3e, 0xf8, + 0x7c, 0x7c, 0xf8, 0x3e, + + /* U+005F "_" */ + 0xff, 0xff, 0xff, 0xfc, + + /* U+0060 "`" */ + 0xe7, 0x38, 0xe3, 0x80, + + /* U+0061 "a" */ + 0x3f, 0xc7, 0xfc, 0xf1, 0xce, 0x1c, 0xe1, 0xce, + 0x1c, 0xe1, 0xce, 0x1c, 0xf1, 0xc7, 0xff, 0x3f, + 0xf0, + + /* U+0062 "b" */ + 0xe0, 0x38, 0xe, 0x3, 0x80, 0xff, 0x3f, 0xee, + 0x3f, 0x87, 0xe1, 0xf8, 0x7e, 0x1f, 0x87, 0xe3, + 0xff, 0xef, 0xf0, + + /* U+0063 "c" */ + 0x3f, 0xdf, 0xff, 0x3, 0x80, 0xe0, 0x38, 0xe, + 0x3, 0x80, 0xf0, 0x1f, 0xf3, 0xfc, + + /* U+0064 "d" */ + 0x1, 0xc0, 0x70, 0x1c, 0x7, 0x3f, 0xdf, 0xff, + 0x1f, 0x87, 0xe1, 0xf8, 0x7e, 0x1f, 0x87, 0xf1, + 0xdf, 0xf3, 0xfc, + + /* U+0065 "e" */ + 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xff, 0xff, 0xfe, + 0x3, 0x80, 0xe0, 0x1f, 0xe3, 0xf8, + + /* U+0066 "f" */ + 0xf, 0x8f, 0xcf, 0x7, 0xf, 0xf7, 0xf8, 0xe0, + 0x70, 0x38, 0x1c, 0xe, 0x7, 0x3, 0x81, 0xc0, + 0xe0, + + /* U+0067 "g" */ + 0x3f, 0xdf, 0xff, 0x1f, 0x87, 0xe1, 0xf8, 0x7e, + 0x1f, 0x87, 0xf1, 0xdf, 0xf3, 0xfc, 0x7, 0x1, + 0xc0, 0xf7, 0xf9, 0xfc, + + /* U+0068 "h" */ + 0xe0, 0x38, 0xe, 0x3, 0x80, 0xff, 0x3f, 0xee, + 0x1f, 0x87, 0xe1, 0xf8, 0x7e, 0x1f, 0x87, 0xe1, + 0xf8, 0x7e, 0x1c, + + /* U+0069 "i" */ + 0xfc, 0xf, 0xff, 0xff, 0xff, 0xf8, + + /* U+006A "j" */ + 0x1c, 0x71, 0xc0, 0x1c, 0x71, 0xc7, 0x1c, 0x71, + 0xc7, 0x1c, 0x71, 0xc7, 0x1f, 0xff, 0x0, + + /* U+006B "k" */ + 0xe0, 0x1c, 0x3, 0x80, 0x70, 0xe, 0x3d, 0xcf, + 0x3b, 0xc7, 0xf0, 0xfc, 0x1f, 0x3, 0xf0, 0x77, + 0xe, 0x71, 0xc7, 0x38, 0x70, + + /* U+006C "l" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + + /* U+006D "m" */ + 0x3e, 0xf8, 0xff, 0xfb, 0xdf, 0x7f, 0x1c, 0x7e, + 0x38, 0xfc, 0x71, 0xf8, 0xe3, 0xf1, 0xc7, 0xe3, + 0x8f, 0xc7, 0x1f, 0x8e, 0x38, + + /* U+006E "n" */ + 0x3f, 0x1f, 0xee, 0x1f, 0x87, 0xe1, 0xf8, 0x7e, + 0x1f, 0x87, 0xe1, 0xf8, 0x7e, 0x1c, + + /* U+006F "o" */ + 0x3f, 0xcf, 0xff, 0xf0, 0xfe, 0x7, 0xe0, 0x7e, + 0x7, 0xe0, 0x7e, 0x7, 0xf0, 0xff, 0xff, 0x3f, + 0xc0, + + /* U+0070 "p" */ + 0xff, 0x3f, 0xee, 0x3f, 0x87, 0xe1, 0xf8, 0x7e, + 0x1f, 0x87, 0xe3, 0xff, 0xef, 0xf3, 0x80, 0xe0, + 0x38, 0xe, 0x3, 0x80, + + /* U+0071 "q" */ + 0x3f, 0xdf, 0xff, 0x1f, 0x87, 0xe1, 0xf8, 0x7e, + 0x1f, 0x87, 0xf1, 0xdf, 0xf3, 0xfc, 0x7, 0x1, + 0xc0, 0x70, 0x1c, 0x7, + + /* U+0072 "r" */ + 0x3f, 0xff, 0xc7, 0xe, 0x1c, 0x38, 0x70, 0xe1, + 0xc3, 0x80, + + /* U+0073 "s" */ + 0x3f, 0xbf, 0xee, 0x3, 0x80, 0xff, 0xf, 0xf0, + 0x1c, 0x7, 0x1, 0xff, 0xff, 0xf0, + + /* U+0074 "t" */ + 0x38, 0x1c, 0xe, 0x1f, 0xef, 0xf1, 0xc0, 0xe0, + 0x70, 0x38, 0x1c, 0xe, 0x7, 0x81, 0xf8, 0x7c, + + /* U+0075 "u" */ + 0xe1, 0xf8, 0x7e, 0x1f, 0x87, 0xe1, 0xf8, 0x7e, + 0x1f, 0x87, 0xf1, 0xdf, 0xe3, 0xf0, + + /* U+0076 "v" */ + 0xe1, 0xf8, 0x7e, 0x1f, 0x87, 0xe1, 0xf8, 0x7e, + 0x1f, 0xcf, 0x7f, 0x87, 0x80, 0xc0, + + /* U+0077 "w" */ + 0xe3, 0x8f, 0xc7, 0x1f, 0x8e, 0x3f, 0x1c, 0x7e, + 0x38, 0xfc, 0x71, 0xf8, 0xe3, 0xf1, 0xc7, 0xf7, + 0xde, 0xff, 0xf8, 0xfb, 0xe0, + + /* U+0078 "x" */ + 0xc0, 0x7c, 0x1d, 0xc7, 0x1d, 0xc1, 0xf0, 0x1c, + 0x7, 0xc1, 0xdc, 0x71, 0xdc, 0x1f, 0x1, 0x80, + + /* U+0079 "y" */ + 0xe1, 0xf8, 0x7e, 0x1f, 0x87, 0xe1, 0xf8, 0x7e, + 0x1f, 0x87, 0xf1, 0xdf, 0xf3, 0xfc, 0x7, 0x1, + 0xc0, 0xf7, 0xf9, 0xfc, + + /* U+007A "z" */ + 0xff, 0xff, 0xf0, 0x38, 0x1e, 0xf, 0x7, 0x83, + 0xc1, 0xe0, 0xf0, 0x3f, 0xff, 0xfc, + + /* U+007B "{" */ + 0xe, 0x7d, 0xe3, 0x87, 0xe, 0x1c, 0x38, 0x71, + 0xc1, 0xc3, 0x87, 0xe, 0x1c, 0x38, 0x78, 0x7c, + 0x38, + + /* U+007C "|" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + + /* U+007D "}" */ + 0xf0, 0xfc, 0x1e, 0xe, 0xe, 0xe, 0xe, 0xe, + 0xe, 0x7, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, + 0x1e, 0xfc, 0xf0, + + /* U+007E "~" */ + 0x10, 0xe, 0x67, 0xff, 0xfe, 0x6f, 0x1, 0x80, + + /* U+2022 "•" */ + 0x7b, 0xff, 0xff, 0x78 +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 162, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1, .adv_w = 69, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 7, .adv_w = 137, .box_w = 8, .box_h = 4, .ofs_x = 1, .ofs_y = 11}, + {.bitmap_index = 11, .adv_w = 275, .box_w = 16, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 41, .adv_w = 201, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 65, .adv_w = 232, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 90, .adv_w = 64, .box_w = 3, .box_h = 4, .ofs_x = 1, .ofs_y = 11}, + {.bitmap_index = 92, .adv_w = 109, .box_w = 6, .box_h = 17, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 105, .adv_w = 105, .box_w = 6, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 118, .adv_w = 106, .box_w = 5, .box_h = 6, .ofs_x = 1, .ofs_y = 9}, + {.bitmap_index = 122, .adv_w = 191, .box_w = 11, .box_h = 10, .ofs_x = 1, .ofs_y = 3}, + {.bitmap_index = 136, .adv_w = 95, .box_w = 5, .box_h = 4, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 139, .adv_w = 167, .box_w = 9, .box_h = 3, .ofs_x = 1, .ofs_y = 6}, + {.bitmap_index = 143, .adv_w = 69, .box_w = 3, .box_h = 3, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 145, .adv_w = 201, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 168, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 191, .adv_w = 79, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 197, .adv_w = 211, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 220, .adv_w = 208, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 243, .adv_w = 209, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 266, .adv_w = 211, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 289, .adv_w = 211, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 312, .adv_w = 207, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 335, .adv_w = 211, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 358, .adv_w = 214, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 381, .adv_w = 60, .box_w = 3, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 386, .adv_w = 81, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 394, .adv_w = 182, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 415, .adv_w = 129, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 3}, + {.bitmap_index = 423, .adv_w = 185, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 444, .adv_w = 195, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 466, .adv_w = 255, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 493, .adv_w = 249, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 520, .adv_w = 246, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 547, .adv_w = 226, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 572, .adv_w = 244, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 599, .adv_w = 234, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 624, .adv_w = 224, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 649, .adv_w = 251, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 676, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 701, .adv_w = 81, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 707, .adv_w = 131, .box_w = 7, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 721, .adv_w = 231, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 746, .adv_w = 206, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 769, .adv_w = 295, .box_w = 16, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 799, .adv_w = 278, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 828, .adv_w = 265, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 857, .adv_w = 227, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 882, .adv_w = 271, .box_w = 15, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 914, .adv_w = 227, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 939, .adv_w = 232, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 964, .adv_w = 244, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 993, .adv_w = 237, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1018, .adv_w = 230, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1043, .adv_w = 295, .box_w = 16, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1073, .adv_w = 266, .box_w = 16, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1103, .adv_w = 260, .box_w = 16, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1133, .adv_w = 229, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1158, .adv_w = 130, .box_w = 7, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 1175, .adv_w = 201, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1198, .adv_w = 130, .box_w = 7, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1215, .adv_w = 270, .box_w = 16, .box_h = 6, .ofs_x = 1, .ofs_y = 9}, + {.bitmap_index = 1227, .adv_w = 167, .box_w = 10, .box_h = 3, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 1231, .adv_w = 95, .box_w = 5, .box_h = 5, .ofs_x = 1, .ofs_y = 10}, + {.bitmap_index = 1235, .adv_w = 197, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1252, .adv_w = 183, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1271, .adv_w = 176, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1285, .adv_w = 189, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1304, .adv_w = 175, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1318, .adv_w = 142, .box_w = 9, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1335, .adv_w = 181, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 1355, .adv_w = 186, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1374, .adv_w = 72, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1380, .adv_w = 72, .box_w = 6, .box_h = 19, .ofs_x = -2, .ofs_y = -4}, + {.bitmap_index = 1395, .adv_w = 183, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1416, .adv_w = 73, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1422, .adv_w = 264, .box_w = 15, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1443, .adv_w = 183, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1457, .adv_w = 203, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1474, .adv_w = 183, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 1494, .adv_w = 186, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 1514, .adv_w = 126, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1524, .adv_w = 178, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1538, .adv_w = 148, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1554, .adv_w = 183, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1568, .adv_w = 183, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1582, .adv_w = 264, .box_w = 15, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1603, .adv_w = 190, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1619, .adv_w = 184, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 1639, .adv_w = 176, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1653, .adv_w = 126, .box_w = 7, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 1670, .adv_w = 81, .box_w = 3, .box_h = 17, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 1677, .adv_w = 126, .box_w = 8, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1696, .adv_w = 180, .box_w = 10, .box_h = 6, .ofs_x = 1, .ofs_y = 5}, + {.bitmap_index = 1704, .adv_w = 109, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 5} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + + + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 4, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + }, + { + .range_start = 37, .range_length = 90, .glyph_id_start = 5, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + }, + { + .range_start = 8226, .range_length = 1, .glyph_id_start = 95, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LV_VERSION_CHECK(8, 0, 0) +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 3, + .bpp = 1, + .kern_classes = 0, + .bitmap_format = 0, +#if LV_VERSION_CHECK(8, 0, 0) + .cache = &cache +#endif +}; + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LV_VERSION_CHECK(8, 0, 0) +const lv_font_t PerfectPixel_20 = { +#else +lv_font_t PerfectPixel_20 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 22, /*The maximum line height required by the font*/ + .base_line = 5, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -2, + .underline_thickness = 0, +#endif + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + + + +#endif /*#if PERFECTPIXEL_20*/ +