Compare commits

..

151 Commits

Author SHA1 Message Date
Gabor Kiss-Vamosi
51f95f3286 Release v7.8.0 2020-12-01 15:08:50 +01:00
Carlos Diaz
bf08ff444e Update Kconfig. (#1917)
* Kconfig: Add missing _HEX to LV_COLOR_TRANSP option.

* lv_conf_checker: Define LV_CONF_SKIP if CONFIG_LV_CONF_SKIP is defined.

* fix(indev): disabled object shouldn't absorb clicks but let the parent to be clicked

* Update README.md

* fix(arabic): support processing again alraedy processed texts with _lv_txt_ap_proc

* fix(textarea): support Arabic letter connections

fixes #1888

* Fix #1924: incorrect date on changelog

December 1st is two weeks from 7.7.2 release.

* Kconfig: Fix LV_CONF_MINIMAL related options.

* fix(arabic): support Arabic letter connections

fixes #1920

* fix(arabic): support Arabic letter connections in value string property

* Update CHANGELOG.md

* Update CHANGELOG.md

* Kconfig: Add Zephyr specific code.

* fix: fix double include in lv_obj.c

fix #1926

* Removed trailing semi-colon from macros (#1928)

* Removed commented out test definition

Removed commented out test definition LV_BUILD_TEST

* Remove blank line

* Fix comment spelling

* Added blank line

* Removed trailing semi-colon in macros

* fix(indev): in LV_INDEV_TYPE_BUTTON recognize 1 cycle long presses too

Fixes https://forum.lvgl.io/t/bug-in-indev-button-proc-misses-buttons-that-are-pressed-for-a-single-callback/3699

* fix(arc): make arc work with encoder

fixes https://forum.lvgl.io/t/lv-arc-with-encoder-lv-group/3769

* fix(slider): adjusting the left knob too with encoder

https://forum.lvgl.io/t/slider-with-2-knobs-and-encoder-functionality/3770

* fix(arc_draw): remove statments that do nothing

fix #1930

* Change LV_DRAW_BUF_MAX_NUM to LV_MEM_BUF_MAX_NUM (#1931)

* Update CHANGELOG.md

* fix(draw polygon): join adjacent points if they are on the same coordinate

* fix(draw polygon): fix memory leak and vertex joining

* fix(style): invalidate cache on every PART

Inherited properties on parts other than MAIN  needs to be recached on property change beacuse they
are inherted from MAIN

fixes #1933

* fix(anim): fix bounce path

* fix(slider): do not let edit left knob in non-range mode

* Update ROADMAP.md

* Fix hardfault when DCache is disabled with no callback (#1935)

* fix(linemeter): fix invalidation when setting new value

The old complex but more optimal invalidation was buggy in some cases

fixes #1904

* fix(linemeter): fix invalidation when setting new value

The old complex but more optimal invalidation was buggy in some cases

fixes #1904

* fix(table): add missing invalidation when changeing cell type

fixes https://forum.lvgl.io/t/bug-of-table-click-to-change-style/3842

* CMakeLists.txt: Let the user configure whether LV_ATTRIBUTE_FAST_MEM is IRAM_ATTR (#1939)

* fix(slider): fix left/right knob control with encoder

* fix(img): increase the size of invalidated area in lv_img_set_zoom

Becasue of the pivot placement there can be some rounding errors

* feat(perf_monitor): add lv_refr_get_fps_avg()

* Add 8px and 10px montserrat fonts to build (#1941)

* Fix #1942: lv_textarea_set_pwd_mode not changing to bullets

Thanks to @fvanroie for investigating.

* fix(material): make button pressed color darker (#1940)

* simplify touch handling in the Arduino example

* Update ROADMAP.md

* Update ROADMAP.md

* feat(lv_conf_kconfig): add LV_CONF_KCONFIG_EXTERNAL_INCLUDE

Co-authored-by: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
Co-authored-by: embeddedt <42941056+embeddedt@users.noreply.github.com>
Co-authored-by: xennex22 <25083624+xennex22@users.noreply.github.com>
Co-authored-by: incity <610455681@qq.com>
Co-authored-by: Andrey <spirit@spirit.re>
Co-authored-by: defogprog <22955033+defogprog@users.noreply.github.com>
2020-12-01 15:04:20 +01:00
Gabor Kiss-Vamosi
41b1a7ea15 Merge branch 'master' of https://github.com/littlevgl/lvgl 2020-12-01 12:51:53 +01:00
Gabor Kiss-Vamosi
4e5b262401 refactor(roller): rename LV_ROLLER_MODE_INIFINITE -> LV_ROLLER_MODE_INFINITE 2020-12-01 12:50:42 +01:00
Gabor Kiss-Vamosi
c52482efa2 Update ROADMAP.md 2020-12-01 12:19:45 +01:00
Gabor Kiss-Vamosi
5b09c3879d Update ROADMAP.md 2020-12-01 12:15:59 +01:00
Gabor Kiss-Vamosi
e43d6da389 simplify touch handling in the Arduino example 2020-12-01 11:40:21 +01:00
embeddedt
73f4156aad fix(material): make button pressed color darker (#1940) 2020-12-01 11:25:43 +01:00
embeddedt
bc2ca71bf5 Fix #1942: lv_textarea_set_pwd_mode not changing to bullets
Thanks to @fvanroie for investigating.
2020-11-28 19:57:14 -05:00
defogprog
b1a7dbadcd Add 8px and 10px montserrat fonts to build (#1941) 2020-11-28 12:19:46 -05:00
Gabor Kiss-Vamosi
1b37ee8873 Merge branch 'master' of https://github.com/littlevgl/lvgl 2020-11-28 12:41:23 +01:00
Gabor Kiss-Vamosi
9c5fec9b79 feat(perf_monitor): add lv_refr_get_fps_avg() 2020-11-28 12:41:06 +01:00
Gabor Kiss-Vamosi
65f7ff66d5 fix(img): increase the size of invalidated area in lv_img_set_zoom
Becasue of the pivot placement there can be some rounding errors
2020-11-28 12:38:48 +01:00
Gabor Kiss-Vamosi
dded9b383a fix(slider): fix left/right knob control with encoder 2020-11-28 12:37:26 +01:00
Carlos Diaz
3c55dfb672 CMakeLists.txt: Let the user configure whether LV_ATTRIBUTE_FAST_MEM is IRAM_ATTR (#1939) 2020-11-27 13:17:15 -05:00
Gabor Kiss-Vamosi
9797c555c0 fix conflits 2020-11-27 11:15:08 +01:00
Gabor Kiss-Vamosi
87e26d4997 fix(table): add missing invalidation when changeing cell type
fixes https://forum.lvgl.io/t/bug-of-table-click-to-change-style/3842
2020-11-27 11:14:36 +01:00
Gabor Kiss-Vamosi
6c62a8eeb5 fix(linemeter): fix invalidation when setting new value
The old complex but more optimal invalidation was buggy in some cases

fixes #1904
2020-11-27 09:49:10 +01:00
Gabor Kiss-Vamosi
4853eacfa4 fix(linemeter): fix invalidation when setting new value
The old complex but more optimal invalidation was buggy in some cases

fixes #1904
2020-11-27 09:48:59 +01:00
Andrey
48a676f404 Fix hardfault when DCache is disabled with no callback (#1935) 2020-11-26 19:12:21 -05:00
Gabor Kiss-Vamosi
2f6eaa516c Update ROADMAP.md 2020-11-26 15:54:39 +01:00
Gabor Kiss-Vamosi
5e8581a345 fix(slider): do not let edit left knob in non-range mode 2020-11-26 15:30:50 +01:00
Gabor Kiss-Vamosi
d6d5903be1 fix(anim): fix bounce path 2020-11-26 15:23:50 +01:00
Gabor Kiss-Vamosi
313f7f30a7 fix(style): invalidate cache on every PART
Inherited properties on parts other than MAIN  needs to be recached on property change beacuse they
are inherted from MAIN

fixes #1933
2020-11-26 15:23:50 +01:00
Gabor Kiss-Vamosi
89eca30da8 fix(draw polygon): fix memory leak and vertex joining 2020-11-26 15:23:50 +01:00
Gabor Kiss-Vamosi
819f01c930 fix(draw polygon): join adjacent points if they are on the same coordinate 2020-11-26 15:23:50 +01:00
embeddedt
8cd738eaa1 Update CHANGELOG.md 2020-11-25 12:22:11 -05:00
incity
d6dd6199f3 Change LV_DRAW_BUF_MAX_NUM to LV_MEM_BUF_MAX_NUM (#1931) 2020-11-25 12:21:22 -05:00
Gabor Kiss-Vamosi
9d0335f38c fix(arc_draw): remove statments that do nothing
fix #1930
2020-11-25 11:35:12 +01:00
Gabor Kiss-Vamosi
82fdfb34c0 fix(slider): adjusting the left knob too with encoder
https://forum.lvgl.io/t/slider-with-2-knobs-and-encoder-functionality/3770
2020-11-25 10:12:58 +01:00
Gabor Kiss-Vamosi
a2535fe6f1 fix(arc): make arc work with encoder
fixes https://forum.lvgl.io/t/lv-arc-with-encoder-lv-group/3769
2020-11-25 09:56:24 +01:00
Gabor Kiss-Vamosi
fa49f35b14 fix(indev): in LV_INDEV_TYPE_BUTTON recognize 1 cycle long presses too
Fixes https://forum.lvgl.io/t/bug-in-indev-button-proc-misses-buttons-that-are-pressed-for-a-single-callback/3699
2020-11-25 09:48:37 +01:00
xennex22
bc369de6fa Removed trailing semi-colon from macros (#1928)
* Removed commented out test definition

Removed commented out test definition LV_BUILD_TEST

* Remove blank line

* Fix comment spelling

* Added blank line

* Removed trailing semi-colon in macros
2020-11-24 18:16:16 +01:00
Gabor Kiss-Vamosi
3d81bb40da fix: fix double include in lv_obj.c
fix #1926
2020-11-24 15:27:42 +01:00
Gabor Kiss-Vamosi
5848aa59e5 Update CHANGELOG.md 2020-11-23 14:06:27 +01:00
Gabor Kiss-Vamosi
68300a5dec Update CHANGELOG.md 2020-11-23 13:24:34 +01:00
Gabor Kiss-Vamosi
07a95b5b33 fix(arabic): support Arabic letter connections in value string property 2020-11-23 13:12:13 +01:00
Gabor Kiss-Vamosi
d90cbe92de fix(arabic): support Arabic letter connections
fixes #1920
2020-11-23 13:12:13 +01:00
embeddedt
45599c2c2a Fix #1924: incorrect date on changelog
December 1st is two weeks from 7.7.2 release.
2020-11-22 15:01:37 -05:00
Gabor Kiss-Vamosi
85b3e8766f Merge branch 'master' of https://github.com/littlevgl/lvgl 2020-11-21 23:53:15 +01:00
Gabor Kiss-Vamosi
07c63b8ad3 fix(textarea): support Arabic letter connections
fixes #1888
2020-11-21 23:53:05 +01:00
Gabor Kiss-Vamosi
8361d89a55 fix(arabic): support processing again alraedy processed texts with _lv_txt_ap_proc 2020-11-21 23:51:57 +01:00
embeddedt
510bc7ca11 Update README.md 2020-11-21 15:45:11 -05:00
Gabor Kiss-Vamosi
440c79e40c fix(indev): disabled object shouldn't absorb clicks but let the parent to be clicked 2020-11-21 20:54:39 +01:00
Gabor Kiss-Vamosi
baa1f848b1 Update ROADMAP.md 2020-11-19 17:21:52 +01:00
Gabor Kiss-Vamosi
522e975a4e fix(btnmatrix): fix seg. fault with arabic text processing 2020-11-19 11:49:34 +01:00
Gabor Kiss-Vamosi
e511fe53c9 Update ROADMAP.md 2020-11-18 13:52:01 +01:00
Gabor Kiss-Vamosi
4903bdb908 fix(btnmatrix): handle arabic texts in button matrices 2020-11-17 12:12:19 +01:00
Gabor Kiss-Vamosi
6b99545e50 fix(release): minor fixes in the release script 2020-11-17 12:02:32 +01:00
Gabor Kiss-Vamosi
70438d158d Merge branch 'master' into dev 2020-11-17 11:29:58 +01:00
Gabor Kiss-Vamosi
52f52397cb Release v7.7.2 2020-11-17 11:29:58 +01:00
Gabor Kiss-Vamosi
94a25b86a8 fix confilcts 2020-11-17 11:15:14 +01:00
Gabor Kiss-Vamosi
3979024660 fix(spinbox): update cursor position in lv_spinbox_set_step
fix #1907
2020-11-17 10:52:33 +01:00
Carlos Diaz
16567f5705 Add Kconfig (#1875)
* Kconfig: Add first revision of Kconfig.

* Kconfig: Let the user edit LV_COLOR_TRANSP directly.

* Kconfig: Define CONFIG_LV_CONF_SKIP.

* Kconfig: Let the user edit LV_THEME_DEFAULT_COLOR_PRIMARY and LV_THEME_DEFAULT_COLOR_SECONDARY directly.

* Kconfig: add LV_CONF_MINIMAL

* Kconfig: Expose LV_CONF_MINIMAL option.

* Kconfig: Fix LV_CONF_SKIP missing type.

* Remove garbage files

* lv_conf_kconfig: Fix wrong check for LV_THEME_DEFAULT_COLOR_PRIMARY and SECONDARY symbols.

* Add Unscii 16 options.

* Multiply LV_MEM_SIZE by 1024

* Fix message on API compability options

Co-authored-by: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
2020-11-16 12:49:48 +01:00
github-actions[bot]
0b79b1690f Merge 4f0beee01b into dev 2020-11-15 12:50:02 +00:00
Tim Gates
4f0beee01b docs: fix simple typo, obejct -> object (#1900)
There is a small typo in src/lv_core/lv_obj.c, src/lv_core/lv_obj.h.

Should read `object` rather than `obejct`.
2020-11-15 07:49:31 -05:00
github-actions[bot]
d018558134 Merge 6060d4d1f6 into dev 2020-11-13 22:16:32 +00:00
Gabor Kiss-Vamosi
6060d4d1f6 fix(list): in lv_list remove clean last_sel_btn and act_sel_btn only if arelated button was deleted
related to #1895
2020-11-13 23:15:46 +01:00
github-actions[bot]
0c6a627b92 Merge 54883792e1 into dev 2020-11-13 15:29:55 +00:00
Gabor Kiss-Vamosi
54883792e1 fix(list): fix compiler error if LV_USE_GROUP = 0 2020-11-13 16:29:18 +01:00
github-actions[bot]
e2f96b9007 Merge 20fef93fea into dev 2020-11-13 15:21:10 +00:00
Gabor Kiss-Vamosi
20fef93fea fix(list): fix removing list elements
remove the button from last_sel_btn adn act_sel_btn
related to #1895
2020-11-13 16:20:11 +01:00
Gabor Kiss-Vamosi
63dfe9e8e3 fix(imgbtn): guess a the closest availabe state with valid src 2020-11-13 16:18:34 +01:00
Gabor Kiss-Vamosi
0ae70c027b fix(anim): tune overshoth path 2020-11-13 15:57:38 +01:00
github-actions[bot]
3e404b1583 Merge 43771fa2f7 into dev 2020-11-11 12:22:27 +00:00
Gabor Kiss-Vamosi
43771fa2f7 fix(theme_material): remove the bottom border from tabview header
If the tabs were placed to the bottom the bottom border looked like gap on the bottom

fix #1882
2020-11-11 13:21:40 +01:00
github-actions[bot]
34635da14c Merge b79d615ae8 into dev 2020-11-11 11:30:19 +00:00
iDalink
b79d615ae8 look ahead chars when be in LV_LABEL_LONG_DOT (#1881)
Co-authored-by: Dalink <Dalink@gitee.com>
Co-authored-by: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
2020-11-11 12:29:51 +01:00
github-actions[bot]
af27c16793 Merge 945f5900d5 into dev 2020-11-10 21:07:35 +00:00
Gabor Kiss-Vamosi
945f5900d5 fix(arc): update knob position when bg_angle(s) changes 2020-11-10 22:06:58 +01:00
github-actions[bot]
24340fa927 Merge a7c4fc410a into dev 2020-11-10 21:00:26 +00:00
Gabor Kiss-Vamosi
a7c4fc410a fix(arc): fix and improve arc dragging
It was difficult to handle the pressed angle on the arc when it crossed the 360 degree boundery.
The solution is to handle the angle relative to the bg_start_angle. This way no angle can be larger than 360.
The other issue was the case when a smaller than min. or larger than max. angle was pressed.
It is handled by introducing 'min_close' flag which stores which end is closer on the last valid press
and prefer this end in uncleary situation.
2020-11-10 21:59:37 +01:00
github-actions[bot]
08fcf03c3f Merge 93138759a9 into dev 2020-11-10 16:26:09 +00:00
Gabor Kiss-Vamosi
93138759a9 fix(btnmatrix): fix setting the same map with modified pointers
fix #1889
2020-11-10 17:25:17 +01:00
Gabor Kiss-Vamosi
380df4578e fix(lv_font_unscii_16) use relative include path to lvgl.h 2020-11-10 10:18:08 +01:00
github-actions[bot]
71619aa8f6 Merge a07583331e into dev 2020-11-09 15:12:28 +00:00
Gabor Kiss-Vamosi
a07583331e docs(changelog): update changelog 2020-11-09 16:11:48 +01:00
github-actions[bot]
2afd887fdf Merge 1bc1d278eb into dev 2020-11-09 15:11:28 +00:00
Gabor Kiss-Vamosi
1bc1d278eb fix(draw_triangle): fix polygon/triangle drawing when the order of points is counter-clockwise 2020-11-09 16:10:46 +01:00
github-actions[bot]
fc5709d04c Merge b3c9096830 into dev 2020-11-09 12:13:49 +00:00
Gabor Kiss-Vamosi
b3c9096830 Use copy of va_list rather than original va_list in txt_set_text_vfmt (#1890)
Fix issue #1886

Co-authored-by: Wenting Zhang <zephray@outlook.com>
2020-11-09 13:13:18 +01:00
github-actions[bot]
74efc2e73e Merge 85c5e786a4 into dev 2020-11-09 09:30:43 +00:00
Gabor Kiss-Vamosi
85c5e786a4 fix(library.json) set the version to the last release
platform.io haven't recognized the last version
https://forum.lvgl.io/t/platformio-repository-for-lvgl-not-updating/3607
2020-11-09 10:30:14 +01:00
github-actions[bot]
8a489b3a8e Merge b19fb8620f into dev 2020-11-06 08:51:06 +00:00
Maureen Helm
b19fb8620f lv_font: Fix compiler warning when compressed fonts are disabled (#1880)
Fixes a compiler warning in lv_font_fmt_txt.c when compressed fonts are
disabled (LV_USE_FONT_COMPRESSED=0):

/home/maureen/zephyrproject/modules/lib/gui/lvgl/src/lv_font/lv_font_fmt_txt.c:349:13: warning: 'decompress' defined but not used [-Wunused-function]
  349 | static void decompress(const uint8_t * in, uint8_t * out, lv_coord_t w, lv_coord_t h, uint8_t bpp, bool prefilter)
      |             ^~~~~~~~~~

This was found after upgrading Zephyr to use LVGL v7.6.1, building with
the Zephyr SDK 0.11.3 toolchain.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2020-11-06 09:50:32 +01:00
Gabor Kiss-Vamosi
2d986871c9 fix(lv_conf_internal): re-generate to add LV_FONT_UNSCII_16 2020-11-05 12:42:20 +01:00
Gabor Kiss-Vamosi
ef81e0fbc3 feat(font): add unscii-16 built-in font
https://forum.lvgl.io/t/more-unscii-font-version/3433
2020-11-05 12:38:44 +01:00
Gabor Kiss-Vamosi
b00628e77d merge master 2020-11-03 11:04:34 +01:00
Gabor Kiss-Vamosi
d110731409 add v7.7.2 to changelog 2020-11-03 11:03:26 +01:00
Gabor Kiss-Vamosi
92c75a6e8c minor release script fixes 2020-11-03 11:02:26 +01:00
Gabor Kiss-Vamosi
2f40ca37df Update master version 2020-11-03 10:02:00 +01:00
Gabor Kiss-Vamosi
112c894e73 Merge branch 'master' into dev 2020-11-03 09:23:29 +01:00
Gabor Kiss-Vamosi
f42afb1c52 Update lv_conf_kconfig.h 2020-11-02 16:12:24 +01:00
github-actions[bot]
4f9869fc7e Merge f915b4cfb6 into dev 2020-11-02 15:04:17 +00:00
github-actions[bot]
06ae6be9d4 Merge b62ddf8f64 into dev 2020-11-02 15:03:22 +00:00
github-actions[bot]
a85ed5b949 Merge 929d9f7a57 into dev 2020-11-02 12:13:31 +00:00
github-actions[bot]
20d034c279 Merge 23aec1e1ce into dev 2020-11-02 11:52:32 +00:00
github-actions[bot]
0931bb6cae Merge d487acd7cc into dev 2020-11-02 11:51:39 +00:00
github-actions[bot]
380b59fddd Merge 6d92d084f7 into dev 2020-11-02 11:24:52 +00:00
Carlos Diaz
16678b78bc lv_conf_kconfig: Update (#1870)
* lv_conf_kconfig: Update

* lv_conf_kconfig: Define CONFIG_LV_COLOR_TRANSP with lv_color_hex.
2020-11-02 11:10:33 +01:00
github-actions[bot]
8f14c31bc9 Merge a2b4bbcd2a into dev 2020-10-29 22:05:58 +00:00
github-actions[bot]
20f901f9e3 Merge 85c8014880 into dev 2020-10-28 10:18:12 +00:00
github-actions[bot]
b5ddf8d19d Merge b3cca917df into dev 2020-10-28 09:14:53 +00:00
github-actions[bot]
6bae5c7af5 Merge 4dafa10017 into dev 2020-10-27 12:50:23 +00:00
github-actions[bot]
622472387c Merge 6e9714c545 into dev 2020-10-27 12:42:40 +00:00
github-actions[bot]
6e12abe015 Merge 8788317bb1 into dev 2020-10-26 14:19:22 +00:00
Carlos Diaz
f9da89d77d Add CMakeLists.txt (#1868) 2020-10-26 10:05:32 -04:00
Carlos Diaz
def8e047af lv_conf_checker: Update lv_conf_checker so it is ESP-IDF aware. (#1864)
* lv_conf_checker: Update lv_conf_checker so it is ESP-IDF aware.

Include ESP-IDF headers and lv_conf_kconfig.h when using the ESP-IDF framework.
Also remove the CONFIG_LV_CONF_SKIP as it is not generated by the Kconfig file.

* lv_conf_checker: Always include lv_conf_kconfig.h.

Co-authored-by: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
2020-10-26 13:18:06 +01:00
github-actions[bot]
6b59b1f706 Merge cc921dae17 into dev 2020-10-26 11:46:26 +00:00
github-actions[bot]
ae0d498cf6 Merge 18ae2fe7fb into dev 2020-10-26 11:40:55 +00:00
github-actions[bot]
54a8a4ba33 Merge b3bfa3c58b into dev 2020-10-26 11:02:04 +00:00
github-actions[bot]
9d7ba3fcb1 Merge b44ddb5b64 into dev 2020-10-26 08:14:38 +00:00
github-actions[bot]
1a66a485f9 Merge d6c87cb753 into dev 2020-10-24 18:50:24 +00:00
github-actions[bot]
bd59dafa42 Merge 51a522c8d3 into dev 2020-10-24 18:07:52 +00:00
github-actions[bot]
120d579c88 Merge 200d3aa26d into dev 2020-10-22 11:57:58 +00:00
github-actions[bot]
e6a4860d96 Merge c03160abc2 into dev 2020-10-22 11:55:51 +00:00
Gabor Kiss-Vamosi
232d6a5530 merge master 2020-10-21 14:15:37 +02:00
github-actions[bot]
63ea07c0ab Merge aec831d277 into dev 2020-10-21 12:09:15 +00:00
Gabor Kiss-Vamosi
9c78f86880 Merge branch 'master' into dev 2020-10-20 13:33:37 +02:00
github-actions[bot]
8627389837 Merge 64c68ec25b into dev 2020-10-20 11:28:56 +00:00
github-actions[bot]
5e1b08131b Merge 62a21e912c into dev 2020-10-19 10:34:20 +00:00
github-actions[bot]
eb2ad01a89 Merge 3d4284b02c into dev 2020-10-18 16:33:09 +00:00
github-actions[bot]
0dd1dc41be Merge 4ca5d4e86d into dev 2020-10-16 11:13:15 +00:00
github-actions[bot]
6f41624b14 Merge 55d78e1f92 into dev 2020-10-16 11:06:54 +00:00
github-actions[bot]
dcaa2e037f Merge cf8e40fcbe into dev 2020-10-16 09:28:14 +00:00
github-actions[bot]
e32b3bf13b Merge 8c0ab944af into dev 2020-10-15 13:22:29 +00:00
github-actions[bot]
77b4bd597b Merge 79433deeb8 into dev 2020-10-13 10:56:14 +00:00
github-actions[bot]
8a54450984 Merge ddb4ae8685 into dev 2020-10-13 09:53:40 +00:00
github-actions[bot]
5a946fc3f4 Merge 489f426b27 into dev 2020-10-12 13:49:28 +00:00
Gabor Kiss-Vamosi
8cddd4bdab fix conflicts 2020-10-12 13:16:43 +02:00
github-actions[bot]
5347779e50 Merge 68629c725a into dev 2020-10-12 10:44:29 +00:00
github-actions[bot]
a81a8b8d3e Merge 20363b09e6 into dev 2020-10-12 10:09:46 +00:00
Gabor Kiss-Vamosi
6d120b1f7f Merge branch 'dev' of https://github.com/littlevgl/lvgl into dev 2020-10-12 11:55:22 +02:00
Gabor Kiss-Vamosi
5d0c00a201 update CHANGELOG 2020-10-12 11:54:54 +02:00
Gabor Kiss-Vamosi
9a029a1784 make DMA2S non blovking 2020-10-12 11:53:56 +02:00
Sergei Kolotovchenkov
cb5ad1e9d3 Improve compatibility with C++14 (#1843) 2020-10-12 11:53:56 +02:00
Gabor Kiss-Vamosi
4d614e60ef skip objects in groups if they are in disabled state 2020-10-12 11:53:56 +02:00
github-actions[bot]
6fcfe72df6 Merge e1f222d04f into dev 2020-10-09 13:12:06 +00:00
github-actions[bot]
de7cb0fa71 Merge 56c4cab228 into dev 2020-10-09 08:34:38 +00:00
github-actions[bot]
0429c501b7 Merge 5d91c24723 into dev 2020-10-08 13:19:22 +00:00
github-actions[bot]
8ec2030cab Merge 6e48cde2f1 into dev 2020-10-08 12:31:00 +00:00
github-actions[bot]
73c0bf6439 Merge 9ec4b61417 into dev 2020-10-07 18:18:09 +00:00
github-actions[bot]
28c9cf0aa5 Merge 6c426aa855 into dev 2020-10-07 12:03:39 +00:00
github-actions[bot]
2b47542bbd Merge c804fadf40 into dev 2020-10-07 11:55:43 +00:00
github-actions[bot]
d9c75f61c5 Merge 1ee9c13a1d into dev 2020-10-07 11:49:04 +00:00
github-actions[bot]
0b5f414ca8 Merge 0266244c58 into dev 2020-10-07 11:48:30 +00:00
github-actions[bot]
beda277316 Merge f1a198bd93 into dev 2020-10-07 10:45:39 +00:00
github-actions[bot]
63c4b43a57 Merge 1d50bc962d into dev 2020-10-07 10:23:59 +00:00
github-actions[bot]
ec616da1ac Merge fff3a00de2 into dev 2020-10-06 09:32:55 +00:00
github-actions[bot]
6f312e34e3 Merge faf50714a1 into dev 2020-10-06 09:24:17 +00:00
Gabor Kiss-Vamosi
3c9468a621 Update dev version 2020-10-06 09:54:32 +02:00
58 changed files with 2861 additions and 704 deletions

View File

@@ -1,6 +1,40 @@
# Changelog
## v7.7.1 (04.11.2020)
## v7.8.0 (Planned to 01.12.2020)
### New features
- make DMA2D non blocking
- add unscii-16 built-in font
- add KConfig
- add lv_refr_get_fps_avg()
### Bugfixes
- fix(btnmatrix) handle arabic texts in button matrices
- fix(indev) disabled object shouldn't absorb clicks but let the parent to be clicked
- fix(arabic) support processing again already processed texts with _lv_txt_ap_proc
- fix(textarea) support Arabic letter connections
- fix(dropdown) support Arabic letter connections
- fix(value_str) support Arabic letter connections in value string property
- fix(indev) in LV_INDEV_TYPE_BUTTON recognize 1 cycle long presses too
- fix(arc) make arc work with encoder
- fix(slider) adjusting the left knob too with encoder
- fix reference to LV_DRAW_BUF_MAX_NUM in lv_mem.c
- fix(polygon draw) join adjacent points if they are on the same coordinate
- fix(linemeter) fix invalidation when setting new value
- fix(table) add missing invalidation when changeing cell type
- refactor(roller) rename LV_ROLLER_MODE_INIFINITE -> LV_ROLLER_MODE_INFINITE
## v7.7.2 (17.11.2020)
### Bugfixes
- fix(draw_triangle): fix polygon/triangle drawing when the order of points is counter-clockwise
- fix(btnmatrix): fix setting the same map with modified pointers
- fix(arc) fix and improve arc dragging
- label: Repair calculate back `dot` character logical error which cause infinite loop.
- fix(theme_material): remove the bottom border from tabview header
- fix(imgbtn) guess a the closest availabe state with valid src
- fix(spinbox) update cursor position in lv_spinbox_set_step
## v7.7.1 (03.11.2020)
### Bugfixes
- Respect btnmatrix's `one_check` in `lv_btnmatrix_set_btn_ctrl`
- Gauge: make the needle images to use the styles from `LV_GAUGE_PART_PART`

17
CMakeLists.txt Normal file
View File

@@ -0,0 +1,17 @@
if(ESP_PLATFORM)
file(GLOB_RECURSE SOURCES src/*.c)
idf_component_register(SRCS ${SOURCES}
INCLUDE_DIRS . src)
target_compile_definitions(${COMPONENT_LIB} PUBLIC "-DLV_CONF_INCLUDE_SIMPLE")
target_compile_definitions(${COMPONENT_LIB} PUBLIC "-DLV_CONF_SKIP")
if (CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM)
target_compile_definitions(${COMPONENT_LIB} PUBLIC "-DLV_ATTRIBUTE_FAST_MEM=IRAM_ATTR")
endif()
else()
message(FATAL_ERROR "Unknown platform.")
endif()

1129
Kconfig Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -11,6 +11,7 @@ LVGL provides everything you need to create embedded GUI with easy-to-use graphi
<h4 align="center">
<a href="https://lvgl.io">Website </a> &middot;
<a href="https://lvgl.io/demos">Online demo</a> &middot;
<a href="https://lvgl.github.io/lv_examples/">Nightly demos</a> &middot;
<a href="https://docs.lvgl.io/">Docs</a> &middot;
<a href="https://forum.lvgl.io">Forum</a>
</h4>

View File

@@ -5,7 +5,7 @@ This is a summary for thenew fatures of the major releases and a collection of i
This list indicates only the current intention and can be changed.
## v8
Planned to September/October 2020
Planned to November/December 2020
- Create an `lv_components` repository for compley widgets
- It makes the core LVGL leaner
- In `lv_components` we can have a lot and specific widgets
@@ -27,29 +27,35 @@ Planned to September/October 2020
- Simplified File system interface ([feat/new_fs_api](https://github.com/lvgl/lvgl/tree/feat/new-fs-api) branch) to make porting easier
- Work in progress
- Remove the align parameter from `lv_canvas_draw_text`
- Make the `copy` parameter of `create` functions deprecated
- Remove the copy paramter from create functions
- Style selectors and style-based states See [#1832](https://github.com/lvgl/lvgl/issues/1832)
- Add Object Orianted system [#1919](https://github.com/lvgl/lvgl/issues/1919)
## v8.1
- Add radio button widget
## v9
- Simplify `group`s. Discussion is [here](https://forum.lvgl.io/t/lv-group-tabindex/2927/3).
## v8.x
- Unit testing (gtest?). See [#1658](https://github.com/lvgl/lvgl/issues/1658)
- Benchmarking (gem5?). See [#1660](https://github.com/lvgl/lvgl/issues/1660)
## v9
- Simplify `group`s. Discussion is [here](https://forum.lvgl.io/t/lv-group-tabindex/2927/3).
- Consider direct binary font format support
- Remove the copy paramter from create functions
- Style selectors and style-based states See [#1832](https://github.com/lvgl/lvgl/issues/1832)
- Optimize line and cirle drawing and masking
- Reconsider color format management for run time color format setting, and custom color format usage. (Also [RGB888](https://github.com/lvgl/lvgl/issues/1722))
- 9-patch support for `lv_imgbtn`.
- Handle stride. See [#1858](https://github.com/lvgl/lvgl/issues/1858)
- Make gradients more versatile
- Make image transformations more versatile
- Allow snapshoting object to tranfrom them as images
## v10
- Remove property level states
## Ideas
- 9-patch support for `lv_imgbtn`.
- lv_mem_alloc_aligned(size, align)
- Text node. See [#1701](https://github.com/lvgl/lvgl/issues/1701#issuecomment-699479408)
- RGB888 support [#1722](https://github.com/lvgl/lvgl/issues/1722)
- Consider ARGB4444, ARGB1555 format
- CPP binding. See [Forum](https://forum.lvgl.io/t/is-it-possible-to-officially-support-optional-cpp-api/2736)
- Optmize font decompression
- Switch to RGBA colors in styles
@@ -57,3 +63,4 @@ Planned to September/October 2020
- Need static analize (via coverity.io or somehing else)
- Support dot_begin and dot_middle long modes for labels
- Add new label alignment modes. [#1656](https://github.com/lvgl/lvgl/issues/1656)
- Support larger images: [#1892](https://github.com/lvgl/lvgl/issues/1892)

View File

@@ -36,26 +36,11 @@ bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data)
bool touched = tft.getTouch(&touchX, &touchY, 600);
if(!touched)
{
if(!touched) {
data->state = LV_INDEV_STATE_REL;
return false;
}
else
{
} else {
data->state = LV_INDEV_STATE_PR;
}
if(touchX>screenWidth || touchY > screenHeight)
{
Serial.println("Y or y outside of expected parameters..");
Serial.print("y:");
Serial.print(touchX);
Serial.print(" x:");
Serial.print(touchY);
}
else
{
/*Set the coordinates*/
data->point.x = touchX;
data->point.y = touchY;
@@ -65,7 +50,6 @@ bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data)
Serial.print("Data y");
Serial.println(touchY);
}
return false; /*Return `false` because we are not buffering and no more data to read*/

View File

@@ -1,6 +1,6 @@
{
"name": "lvgl",
"version": "7.7.1",
"version": "7.8.0",
"keywords": "graphics, gui, embedded, tft, lvgl",
"description": "Graphics library to create embedded GUI with easy-to-use graphical elements, beautiful visual effects and low memory footprint. It offers anti-aliasing, opacity, and animations using only one frame buffer.",
"repository": {

View File

@@ -1,5 +1,5 @@
name=lvgl
version=7.7.1
version=7.8.0
author=kisvegabor
maintainer=kisvegabor,embeddedt,pete-pjb
sentence=Full-featured Graphics Library for Embedded Systems

View File

@@ -1,6 +1,6 @@
/**
* @file lv_conf.h
* Configuration file for v7.7.1-dev
* Configuration file for v7.8.0-dev
*/
/*
@@ -410,6 +410,7 @@ typedef void * lv_indev_drv_user_data_t; /*Type of user data in the i
/*Pixel perfect monospace font
* http://pelulamu.net/unscii/ */
#define LV_FONT_UNSCII_8 0
#define LV_FONT_UNSCII_16 0
/* Optionally declare your custom fonts here.
* You can use these fonts as default font too

6
lvgl.h
View File

@@ -15,8 +15,8 @@ extern "C" {
* CURRENT VERSION OF LVGL
***************************/
#define LVGL_VERSION_MAJOR 7
#define LVGL_VERSION_MINOR 7
#define LVGL_VERSION_PATCH 1
#define LVGL_VERSION_MINOR 8
#define LVGL_VERSION_PATCH 0
#define LVGL_VERSION_INFO ""
/*********************
@@ -82,8 +82,6 @@ extern "C" {
#include "src/lv_api_map.h"
//#define LV_BUILD_TEST 1
/*********************
* DEFINES
*********************/

View File

@@ -27,11 +27,22 @@ fout.write(
#define LV_CONF_INTERNAL_H
/* clang-format off */
/*Handle special Kconfig options*/
#include "lv_conf_kconfig.h"
#include <stdint.h>
/* Add ESP-IDF related includes */
#if defined (ESP_PLATFORM)
# include "sdkconfig.h"
# include "esp_attr.h"
#endif
/* Handle special Kconfig options */
#include "lv_conf_kconfig.h"
#ifdef CONFIG_LV_CONF_SKIP
#define LV_CONF_SKIP
#endif
/* If "lv_conf.h" is available from here try to use it later.*/
#if defined __has_include
# if __has_include("lv_conf.h")
# ifndef LV_CONF_INCLUDE_SIMPLE
@@ -41,7 +52,7 @@ fout.write(
#endif
/*If lv_conf.h is not skipped include it*/
#if !defined(LV_CONF_SKIP) && !defined(CONFIG_LV_CONF_SKIP)
#if !defined(LV_CONF_SKIP)
# if defined(LV_CONF_PATH) /*If there is a path defined for lv_conf.h use it*/
# define __LV_TO_STR_AUX(x) #x
# define __LV_TO_STR(x) __LV_TO_STR_AUX(x)
@@ -105,7 +116,7 @@ fout.write(
'''
/*If running without lv_conf.h add typdesf with default value*/
#if defined(LV_CONF_SKIP) || defined(CONFIG_LV_CONF_SKIP)
#if defined(LV_CONF_SKIP)
/* Type of coordinates. Should be `int16_t` (or `int32_t` for extreme cases) */
typedef int16_t lv_coord_t;

View File

@@ -13,7 +13,7 @@ def cmd(c, ask_on_err = True):
r = os.system(c)
if r:
print("### Error: " + str(r))
if exit_on_err:
if ask_on_err:
input("Press Enter to continue exectution...")
def define_set(fn, name, value):
@@ -77,8 +77,7 @@ def get_lvgl_version(br):
return ver
def push(c):
return
cmd(c)
cmd("git push " + c)
def update_version(ver):
ver_str = ver_format(ver)

View File

@@ -7,7 +7,7 @@ from os import path
from datetime import date
import com
def lvgl_upadte_ver(ver, br):
def lvgl_update_ver(ver, br):
os.chdir("./lvgl")
com.cmd("git checkout " + br)
@@ -45,26 +45,26 @@ def merge_dev_to_master():
def make(mode):
ver = com.get_lvgl_version("dev")
ver[3] = "dev"
if(mode == "bugfix"):
ver[2] = ver[2] + 1
lvgl_update_ver(ver, "master")
docs_update_ver(ver, "latest")
ver = com.get_lvgl_version("master")
ver[3] = "dev"
ver[2] = str(int(ver[2]) + 1)
lvgl_update_ver(ver, "master")
docs_update_ver(ver, "latest")
else:
merge_dev_to_master()
if(mode == "major"):
ver[0] = str(int(ver[0]) + 1)
ver[1] = '0'
ver[2] = '0'
if(mode == "minor"):
ver[1] = str(int(ver[1]) + 1)
ver[2] = '0'
ver = com.get_lvgl_version("dev")
ver[3] = "dev"
merge_dev_to_master()
if(mode == "major"):
ver[0] = str(int(ver[0]) + 1)
ver[1] = '0'
ver[2] = '0'
if(mode == "minor"):
ver[1] = str(int(ver[1]) + 1)
ver[2] = '0'
lvgl_upadte_ver(ver, "dev")
docs_update_ver(ver, "dev")
lvgl_update_ver(ver, "dev")
docs_update_ver(ver, "dev")
if __name__ == '__main__':
if(len(sys.argv) != 2):

View File

@@ -55,6 +55,7 @@ if __name__ == '__main__':
print("Invalid argument. Usage ./release.py bugfix | minor | major")
exit(1)
os.chdir(workdir)
clone_repos()
release.make()
for p in proj_list:

View File

@@ -186,6 +186,11 @@ static inline lv_obj_t * lv_page_get_scrl(lv_obj_t * page)
* V7.0 COMPATIBILITY
*--------------------*/
#if LV_USE_API_EXTENSION_V7
#if LV_USE_ROLLER
#define LV_ROLLER_MODE_INFINITE LV_ROLLER_MODE_INIFINITE
#endif
#if LV_USE_WIN
static inline lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * img_src)

View File

@@ -8,11 +8,22 @@
#define LV_CONF_INTERNAL_H
/* clang-format off */
/*Handle special Kconfig options*/
#include "lv_conf_kconfig.h"
#include <stdint.h>
/* Add ESP-IDF related includes */
#if defined (ESP_PLATFORM)
# include "sdkconfig.h"
# include "esp_attr.h"
#endif
/* Handle special Kconfig options */
#include "lv_conf_kconfig.h"
#ifdef CONFIG_LV_CONF_SKIP
#define LV_CONF_SKIP
#endif
/* If "lv_conf.h" is available from here try to use it later.*/
#if defined __has_include
# if __has_include("lv_conf.h")
# ifndef LV_CONF_INCLUDE_SIMPLE
@@ -22,7 +33,7 @@
#endif
/*If lv_conf.h is not skipped include it*/
#if !defined(LV_CONF_SKIP) && !defined(CONFIG_LV_CONF_SKIP)
#if !defined(LV_CONF_SKIP)
# if defined(LV_CONF_PATH) /*If there is a path defined for lv_conf.h use it*/
# define __LV_TO_STR_AUX(x) #x
# define __LV_TO_STR(x) __LV_TO_STR_AUX(x)
@@ -1058,6 +1069,13 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h" */
# define LV_FONT_UNSCII_8 0
# endif
#endif
#ifndef LV_FONT_UNSCII_16
# ifdef CONFIG_LV_FONT_UNSCII_16
# define LV_FONT_UNSCII_16 CONFIG_LV_FONT_UNSCII_16
# else
# define LV_FONT_UNSCII_16 0
# endif
#endif
/* Optionally declare your custom fonts here.
* You can use these fonts as default font too
@@ -1975,7 +1993,7 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h" */
/*If running without lv_conf.h add typdesf with default value*/
#if defined(LV_CONF_SKIP) || defined(CONFIG_LV_CONF_SKIP)
#if defined(LV_CONF_SKIP)
/* Type of coordinates. Should be `int16_t` (or `int32_t` for extreme cases) */
typedef int16_t lv_coord_t;

View File

@@ -10,19 +10,56 @@
extern "C" {
#endif
#ifdef LV_CONF_KCONFIG_EXTERNAL_INCLUDE
# include LV_CONF_KCONFIG_EXTERNAL_INCLUDE
#else
# if defined ESP_PLATFORM
# include "sdkconfig.h"
# include "esp_attr.h"
# endif
# ifdef __NuttX__
# include <nuttx/config.h>
# endif
#endif /*LV_CONF_KCONFIG_EXTERNAL_INCLUDE*/
/*******************
* LV_MEM_SIZE
*******************/
#ifndef LV_MEM_SIZE
#if defined (CONFIG_LV_MEM_SIZE_BYTES)
#define CONFIG_LV_MEM_SIZE (CONFIG_LV_MEM_SIZE_BYTES * 1024U)
#endif
#endif
/*******************
* LV COLOR TRANSP
*******************/
#ifndef LV_COLOR_TRANSP
#if defined (CONFIG_LV_COLOR_TRANSP_HEX)
#define CONFIG_LV_COLOR_TRANSP lv_color_hex(CONFIG_LV_COLOR_TRANSP_HEX)
#else
#define CONFIG_LV_COLOR_TRANSP LV_COLOR_LIME
#endif
#endif
/*******************
* THEME SELECTION
*******************/
#ifndef LV_THEME_DEFAULT_INIT
#if defined (CONFIG_LV_THEME_DEFAULT_INIT_EMPTY)
#define LV_THEME_DEFAULT_INIT lv_theme_empty_init
#define CONFIG_LV_THEME_DEFAULT_INIT lv_theme_empty_init
#elif defined (CONFIG_LV_THEME_DEFAULT_INIT_TEMPLATE)
#define LV_THEME_DEFAULT_INIT lv_theme_template_init
#define CONFIG_LV_THEME_DEFAULT_INIT lv_theme_template_init
#elif defined (CONFIG_LV_THEME_DEFAULT_INIT_MATERIAL)
#define LV_THEME_DEFAULT_INIT lv_theme_material_init
#define CONFIG_LV_THEME_DEFAULT_INIT lv_theme_material_init
#elif defined (CONFIG_LV_THEME_DEFAULT_INIT_MONO)
#define LV_THEME_DEFAULT_INIT lv_theme_mono_init
#define LV_THEME_DEFAULT_INIT lv_theme_mono_init
#endif
#endif
@@ -30,13 +67,13 @@ extern "C" {
* COLOR SELECTION
*******************/
#ifdef LV_THEME_DEFAULT_COLOR_PRIMARY
#ifndef LV_THEME_DEFAULT_COLOR_PRIMARY
#ifdef CONFIG_LV_THEME_DEFAULT_COLOR_PRIMARY
#define LV_THEME_DEFAULT_COLOR_PRIMARY lv_color_hex(CONFIG_LV_THEME_DEFAULT_COLOR_PRIMARY)
#endif
#endif
#ifdef LV_THEME_DEFAULT_COLOR_SECONDARY
#ifndef LV_THEME_DEFAULT_COLOR_SECONDARY
#ifdef CONFIG_LV_THEME_DEFAULT_COLOR_SECONDARY
#define LV_THEME_DEFAULT_COLOR_SECONDARY lv_color_hex(CONFIG_LV_THEME_DEFAULT_COLOR_SECONDARY)
#endif
@@ -56,57 +93,59 @@ extern "C" {
*-----------------*/
#ifndef LV_THEME_DEFAULT_FONT_SMALL
#if defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_8
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_8
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_8
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_10
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_10
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_10
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_12
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_12
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_12
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_14
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_14
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_14
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_16
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_16
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_16
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_18
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_18
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_18
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_20
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_20
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_20
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_22
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_22
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_22
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_24
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_24
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_24
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_26
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_26
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_26
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_28
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_28
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_28
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_30
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_30
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_30
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_32
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_32
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_32
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_34
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_34
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_34
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_36
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_36
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_36
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_38
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_38
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_38
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_40
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_40
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_40
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_42
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_42
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_42
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_44
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_44
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_44
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_46
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_46
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_46
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_48
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_48
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_48
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_UNSCII_8
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_unscii_8
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_unscii_8
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_UNSCII_16
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_unscii_16
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT12SUBPX
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_12_subpx
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_12_subpx
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT28COMPRESSED
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_28_compressed
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_28_compressed
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_DEJAVU_16_PERSIAN_HEBREW
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_dejavu_16_persian_hebrew
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_dejavu_16_persian_hebrew
#elif defined CONFIG_LV_FONT_DEFAULT_SMALL_SIMSUN_16_CJK
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_simsun_16_cjk
#define CONFIG_LV_THEME_DEFAULT_FONT_SMALL &lv_font_simsun_16_cjk
#endif
#endif
@@ -115,57 +154,59 @@ extern "C" {
*-----------------*/
#ifndef LV_THEME_DEFAULT_FONT_NORMAL
#if defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_8
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_8
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_8
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_10
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_10
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_10
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_12
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_12
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_12
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_14
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_14
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_14
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_16
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_16
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_16
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_18
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_18
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_18
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_20
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_20
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_20
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_22
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_22
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_22
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_24
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_24
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_24
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_26
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_26
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_26
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_28
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_28
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_28
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_30
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_30
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_30
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_32
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_32
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_32
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_34
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_34
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_34
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_36
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_36
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_36
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_38
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_38
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_38
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_40
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_40
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_40
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_42
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_42
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_42
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_44
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_44
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_44
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_46
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_46
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_46
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_48
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_48
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_48
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_UNSCII_8
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_unscii_8
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_unscii_8
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_UNSCII_16
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_unscii_16
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT12SUBPX
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_12_subpx
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_12_subpx
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT28COMPRESSED
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_28_compressed
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_28_compressed
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_DEJAVU_16_PERSIAN_HEBREW
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_dejavu_16_persian_hebrew
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_dejavu_16_persian_hebrew
#elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_SIMSUN_16_CJK
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_simsun_16_cjk
#define CONFIG_LV_THEME_DEFAULT_FONT_NORMAL &lv_font_simsun_16_cjk
#endif
#endif
@@ -174,57 +215,59 @@ extern "C" {
*-----------------*/
#ifndef LV_THEME_DEFAULT_FONT_SUBTITLE
#if defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_8
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_8
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_8
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_10
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_10
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_10
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_12
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_12
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_12
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_14
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_14
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_14
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_16
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_16
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_16
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_18
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_18
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_18
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_20
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_20
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_20
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_22
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_22
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_22
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_24
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_24
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_24
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_26
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_26
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_26
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_28
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_28
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_28
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_30
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_30
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_30
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_32
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_32
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_32
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_34
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_34
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_34
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_36
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_36
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_36
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_38
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_38
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_38
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_40
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_40
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_40
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_42
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_42
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_42
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_44
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_44
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_44
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_46
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_46
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_46
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_48
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_48
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_48
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_UNSCII_8
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_unscii_8
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_unscii_8
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_UNSCII_16
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_unscii_16
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT12SUBPX
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_12_subpx
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_12_subpx
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT28COMPRESSED
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_28_compressed
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_28_compressed
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_DEJAVU_16_PERSIAN_HEBREW
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_dejavu_16_persian_hebrew
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_dejavu_16_persian_hebrew
#elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_SIMSUN_16_CJK
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_simsun_16_cjk
#define CONFIG_LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_simsun_16_cjk
#endif
#endif
@@ -233,57 +276,127 @@ extern "C" {
*-----------------*/
#ifndef LV_THEME_DEFAULT_FONT_TITLE
#if defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_8
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_8
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_8
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_10
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_10
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_10
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_12
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_12
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_12
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_14
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_14
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_14
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_16
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_16
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_16
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_18
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_18
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_18
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_20
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_20
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_20
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_22
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_22
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_22
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_24
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_24
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_24
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_26
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_26
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_26
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_28
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_28
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_28
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_30
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_30
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_30
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_32
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_32
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_32
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_34
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_34
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_34
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_36
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_36
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_36
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_38
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_38
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_38
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_40
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_40
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_40
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_42
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_42
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_42
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_44
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_44
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_44
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_46
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_46
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_46
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_48
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_48
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_48
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_UNSCII_8
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_unscii_8
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_unscii_8
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_UNSCII_16
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_unscii_16
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT12SUBPX
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_12_subpx
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_12_subpx
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT28COMPRESSED
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_28_compressed
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_28_compressed
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_DEJAVU_16_PERSIAN_HEBREW
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_dejavu_16_persian_hebrew
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_dejavu_16_persian_hebrew
#elif defined CONFIG_LV_FONT_DEFAULT_TITLE_SIMSUN_16_CJK
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_simsun_16_cjk
#define CONFIG_LV_THEME_DEFAULT_FONT_TITLE &lv_font_simsun_16_cjk
#endif
#endif
/*------------------
* TEXT ENCODING
*-----------------*/
#ifndef LV_TEXT_ENC
#ifdef CONFIG_LV_TXT_ENC_UTF8
#define CONFIG_LV_TXT_ENC LV_TXT_ENC_UTF8
#elif defined CONFIG_LV_TXT_ENC_ASCII
#define CONFIG_LV_TXT_ENC LV_TXT_ENC_ASCII
#endif
#endif
/*------------------
* BIDI DIRECTION
*-----------------*/
#ifndef LV_BIDI_BASE_DIR_DEF
#ifdef CONFIG_LV_BIDI_DIR_LTR
#define CONFIG_LV_BIDI_BASE_DIR_DEF LV_BIDI_DIR_LTR
#elif defined CONFIG_LV_BIDI_DIR_RTL
#define CONFIG_LV_BIDI_BASE_DIR_DEF LV_BIDI_DIR_RTL
#elif defined CONFIG_LV_BIDI_DIR_AUTO
#define CONFIG_LV_BIDI_BASE_DIR_DEF LV_BIDI_DIR_AUTO
#endif
#endif
/*------------------
* EXT CLICK AREA
*-----------------*/
#ifndef LV_USE_EXT_CLICK_AREA
#ifdef CONFIG_LV_USE_EXT_CLICK_AREA_OFF
#define CONFIG_LV_USE_EXT_CLICK_AREA LV_EXT_CLICK_AREA_OFF
#elif defined CONFIG_LV_USE_EXT_CLICK_AREA_TINY
#define CONFIG_LV_USE_EXT_CLICK_AREA LV_EXT_CLICK_AREA_TINY
#elif defined CONFIG_LV_USE_EXT_CLICK_AREA_FULL
#define CONFIG_LV_USE_EXT_CLICK_AREA LV_EXT_CLICK_AREA_FULL
#endif
#endif
/*------------------
* LINEMETER PRECISE
*-----------------*/
#ifndef LV_LINEMETER_PRECISE
#ifdef CONFIG_LV_LINEMETER_PRECISE_NO_EXTRA_PRECISION
#define CONFIG_LV_LINEMETER_PRECISE 0
#elif defined CONFIG_LV_LINEMETER_PRECISE_SOME_EXTRA_PRECISION
#define CONFIG_LV_LINEMETER_PRECISE 1
#elif defined CONFIG_LV_LINEMETER_PRECISE_BEST_PRECISION
#define CONFIG_LV_LINEMETER_PRECISE 2
#endif
#endif
/*------------------
* SPINNER DEF ANIM
*-----------------*/
#ifndef LV_SPINNER_DEF_ANIM
#ifdef CONFIG_LV_SPINNER_TYPE_SPINNING_ARC
#define CONFIG_LV_SPINNER_DEF_ANIM LV_SPINNER_TYPE_SPINNING_ARC
#elif defined CONFIG_LV_SPINNER_TYPE_FILLSPIN_ARC
#define CONFIG_LV_SPINNER_DEF_ANIM LV_SPINNER_TYPE_FILLSPIN_ARC
#elif defined CONFIG_LV_SPINNER_TYPE_CONSTANT_ARC
#define CONFIG_LV_SPINNER_DEF_ANIM LV_SPINNER_TYPE_CONSTANT_ARC
#endif
#endif

49
src/lv_conf_zephyr.h Normal file
View File

@@ -0,0 +1,49 @@
/*
* Copyright (c) 2020 Jan Van Winkel <jan.van_winkel@dxplore.eu>
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifdef __ZEPHYR__
#include <autoconf.h>
#define LV_MEM_CUSTOM 1
#define LV_MEMCPY_MEMSET_STD 1
#ifdef CONFIG_LVGL_MEM_POOL_HEAP_KERNEL
#define LV_MEM_CUSTOM_INCLUDE "kernel.h"
#define LV_MEM_CUSTOM_ALLOC k_malloc
#define LV_MEM_CUTOM_FREE k_free
#elif defined(CONFIG_LVGL_MEM_POOL_HEAP_LIB_C)
#define LV_MEM_CUSTOM_INCLUDE "stdlib.h"
#define LV_MEM_CUSTOM_ALLOC malloc
#define LV_MEM_CUTOM_FREE free
#else
#define LV_MEM_CUSTOM_INCLUDE "lvgl_mem.h"
#define LV_MEM_CUSTOM_ALLOC lvgl_malloc
#define LV_MEM_CUTOM_FREE lvgl_free
#endif
#define LV_ENABLE_GC 0
#define LV_TICK_CUSTOM 1
#define LV_TICK_CUSTOM_INCLUDE "kernel.h"
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (k_uptime_get_32())
#define LV_SPRINTF_CUSTOM 1
#if LV_SPRINTF_CUSTOM
#define LV_SPRINTF_INCLUDE "stdio.h"
#define lv_snprintf snprintf
#define lv_vsnprintf vsnprintf
#endif
#endif

View File

@@ -807,19 +807,28 @@ static void indev_button_proc(lv_indev_t * i, lv_indev_data_t * data)
return;
}
i->proc.types.pointer.act_point.x = i->btn_points[data->btn_id].x;
i->proc.types.pointer.act_point.y = i->btn_points[data->btn_id].y;
lv_coord_t x = i->btn_points[data->btn_id].x;
lv_coord_t y = i->btn_points[data->btn_id].y;
/*Still the same point is pressed*/
if(i->proc.types.pointer.last_point.x == i->proc.types.pointer.act_point.x &&
i->proc.types.pointer.last_point.y == i->proc.types.pointer.act_point.y && data->state == LV_INDEV_STATE_PR) {
indev_proc_press(&i->proc);
}
else {
/*If a new point comes always make a release*/
indev_proc_release(&i->proc);
/*If a new point comes always make a release*/
if(data->state == LV_INDEV_STATE_PR) {
if(i->proc.types.pointer.last_point.x != x ||
i->proc.types.pointer.last_point.y != y) {
indev_proc_release(&i->proc);
}
}
if(indev_reset_check(&i->proc)) return;
/*Save the new points*/
i->proc.types.pointer.act_point.x = x;
i->proc.types.pointer.act_point.y = y;
if(data->state == LV_INDEV_STATE_PR) indev_proc_press(&i->proc);
else indev_proc_release(&i->proc);
if(indev_reset_check(&i->proc)) return;
i->proc.types.pointer.last_point.x = i->proc.types.pointer.act_point.x;
i->proc.types.pointer.last_point.y = i->proc.types.pointer.act_point.y;
}
@@ -868,11 +877,6 @@ static void indev_proc_press(lv_indev_proc_t * proc)
indev_drag_throw(proc);
}
/*Do not use disabled objects*/
if(indev_obj_act && (lv_obj_get_state(indev_obj_act, LV_OBJ_PART_MAIN) & LV_STATE_DISABLED)) {
indev_obj_act = proc->types.pointer.act_obj;
}
/*If a new object was found reset some variables and send a pressed signal*/
if(indev_obj_act != proc->types.pointer.act_obj) {
proc->types.pointer.last_point.x = proc->types.pointer.act_point.x;
@@ -1144,7 +1148,7 @@ lv_obj_t * lv_indev_search_obj(lv_obj_t * obj, lv_point_t * point)
hidden_i = lv_obj_get_parent(hidden_i);
}
/*No parent found with hidden == true*/
if(hidden_i == NULL) found_p = obj;
if(hidden_i == NULL && (lv_obj_get_state(obj, LV_OBJ_PART_MAIN) & LV_STATE_DISABLED) == false) found_p = obj;
}
}

View File

@@ -20,8 +20,6 @@
#include "../lv_misc/lv_fs.h"
#include "../lv_misc/lv_gc.h"
#include "../lv_misc/lv_math.h"
#include "../lv_misc/lv_gc.h"
#include "../lv_misc/lv_math.h"
#include "../lv_misc/lv_log.h"
#include "../lv_hal/lv_hal.h"
#include <stdint.h>
@@ -1900,7 +1898,7 @@ lv_res_t lv_event_send(lv_obj_t * obj, lv_event_t event, const void * data)
/**
* Send LV_EVENT_REFRESH event to an object
* @param obj point to an obejct. (Can NOT be NULL)
* @param obj point to an object. (Can NOT be NULL)
* @return LV_RES_OK: success, LV_RES_INV: to object become invalid (e.g. deleted) due to this event.
*/
lv_res_t lv_event_send_refresh(lv_obj_t * obj)
@@ -4629,7 +4627,7 @@ static bool style_prop_is_cacheble(lv_style_property_t prop)
/**
* Update the cache of style list
* @param obj pointer to an obejct
* @param obj pointer to an object
* @param part the part of the object
* @param prop the property which triggered the update
*/
@@ -4761,25 +4759,19 @@ static void invalidate_style_cache(lv_obj_t * obj, uint8_t part, lv_style_proper
{
if(style_prop_is_cacheble(prop) == false) return;
if(part != LV_OBJ_PART_ALL) {
for(part = 0; part < _LV_OBJ_PART_REAL_FIRST; part++) {
lv_style_list_t * list = lv_obj_get_style_list(obj, part);
if(list == NULL) return;
if(list == NULL) break;
list->valid_cache = 0;
}
else {
for(part = 0; part < _LV_OBJ_PART_REAL_FIRST; part++) {
lv_style_list_t * list = lv_obj_get_style_list(obj, part);
if(list == NULL) break;
list->valid_cache = 0;
}
for(part = _LV_OBJ_PART_REAL_FIRST; part < 0xFF; part++) {
lv_style_list_t * list = lv_obj_get_style_list(obj, part);
if(list == NULL) break;
list->valid_cache = 0;
}
for(part = _LV_OBJ_PART_REAL_FIRST; part < 0xFF; part++) {
lv_style_list_t * list = lv_obj_get_style_list(obj, part);
if(list == NULL) break;
list->valid_cache = 0;
}
lv_obj_t * child = lv_obj_get_child(obj, NULL);
while(child) {
update_style_cache_children(child);

View File

@@ -850,7 +850,7 @@ lv_res_t lv_event_send(lv_obj_t * obj, lv_event_t event, const void * data);
/**
* Send LV_EVENT_REFRESH event to an object
* @param obj point to an obejct. (Can NOT be NULL)
* @param obj point to an object. (Can NOT be NULL)
* @return LV_RES_OK: success, LV_RES_INV: to object become invalid (e.g. deleted) due to this event.
*/
lv_res_t lv_event_send_refresh(lv_obj_t * obj);

View File

@@ -54,6 +54,10 @@ static void lv_refr_vdb_flush(void);
**********************/
static uint32_t px_num;
static lv_disp_t * disp_refr; /*Display being refreshed*/
#if LV_USE_PERF_MONITOR
static uint32_t fps_sum_cnt;
static uint32_t fps_sum_all;
#endif
/**********************
* MACROS
@@ -290,17 +294,28 @@ void _lv_disp_refr_task(lv_task_t * task)
}
static uint32_t perf_last_time = 0;
static uint32_t elaps_max = 1;
static uint32_t elaps_sum = 0;
static uint32_t frame_cnt = 0;
if(lv_tick_elaps(perf_last_time) < 300) {
elaps_max = LV_MATH_MAX(elaps, elaps_max);
if(px_num > 5000) {
elaps_sum += elaps;
frame_cnt ++;
}
}
else {
perf_last_time = lv_tick_get();
uint32_t fps = 1000 / (elaps_max == 0 ? 1 : elaps_max);
elaps_max = 1;
uint32_t fps_limit = 1000 / disp_refr->refr_task->period;
uint32_t fps;
if(elaps_sum == 0) elaps_sum = 1;
if(frame_cnt == 0) fps = fps_limit;
else fps = (1000 * frame_cnt) / elaps_sum;
elaps_sum = 0;
frame_cnt = 0;
if(fps > fps_limit) fps = fps_limit;
fps_sum_all += fps;
fps_sum_cnt ++;
uint32_t cpu = 100 - lv_task_get_idle();
lv_label_set_text_fmt(perf_label, "%d FPS\n%d%% CPU", fps, cpu);
lv_obj_align(perf_label, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
@@ -310,6 +325,13 @@ void _lv_disp_refr_task(lv_task_t * task)
LV_LOG_TRACE("lv_refr_task: ready");
}
#if LV_USE_PERF_MONITOR
uint32_t lv_refr_get_fps_avg(void)
{
return fps_sum_all / fps_sum_cnt;
}
#endif
/**********************
* STATIC FUNCTIONS
**********************/
@@ -381,7 +403,7 @@ static void lv_refr_areas(void)
disp_refr->driver.buffer->last_part = 0;
lv_refr_area(&disp_refr->inv_areas[i]);
if(disp_refr->driver.monitor_cb) px_num += lv_area_get_size(&disp_refr->inv_areas[i]);
px_num += lv_area_get_size(&disp_refr->inv_areas[i]);
}
}
}

View File

@@ -78,6 +78,14 @@ lv_disp_t * _lv_refr_get_disp_refreshing(void);
*/
void _lv_refr_set_disp_refreshing(lv_disp_t * disp);
#if LV_USE_PERF_MONITOR
/**
* Get the average FPS since start up
* @return the average FPS
*/
uint32_t lv_refr_get_fps_avg(void);
#endif
/**
* Called periodically to handle the refreshing
* @param task pointer to the task itself

View File

@@ -394,20 +394,11 @@ static void get_rounded_area(int16_t angle, lv_coord_t radius, uint8_t tickness,
int32_t thick_half = tickness / 2;
uint8_t thick_corr = (tickness & 0x01) ? 0 : 1;
int32_t rx_corr;
int32_t ry_corr;
if(angle > 90 && angle < 270) rx_corr = 0;
else rx_corr = 0;
if(angle > 0 && angle < 180) ry_corr = 0;
else ry_corr = 0;
int32_t cir_x;
int32_t cir_y;
cir_x = ((radius - rx_corr - thick_half) * _lv_trigo_sin(90 - angle)) >> (LV_TRIGO_SHIFT - ps);
cir_y = ((radius - ry_corr - thick_half) * _lv_trigo_sin(angle)) >> (LV_TRIGO_SHIFT - ps);
cir_x = ((radius - thick_half) * _lv_trigo_sin(90 - angle)) >> (LV_TRIGO_SHIFT - ps);
cir_y = ((radius - thick_half) * _lv_trigo_sin(angle)) >> (LV_TRIGO_SHIFT - ps);
/* Actually the center of the pixel need to be calculated so apply 1/2 px offset*/
if(cir_x > 0) {

View File

@@ -25,7 +25,6 @@
*********************/
#define GPU_SIZE_LIMIT 240
/**********************
* TYPEDEFS
**********************/
@@ -401,6 +400,7 @@ LV_ATTRIBUTE_FAST_MEM static void fill_normal(const lv_area_t * disp_area, lv_co
lv_coord_t line_h = LV_HOR_RES_MAX / draw_area_w;
for(y = 0; y <= draw_area_h - line_h; y += line_h) {
lv_gpu_stm32_dma2d_blend(disp_buf_first, disp_w, blend_buf, opa, draw_area_w, draw_area_w, line_h);
lv_gpu_stm32_dma2d_wait_cb(NULL);
disp_buf_first += disp_w * line_h;
}

View File

@@ -10,6 +10,7 @@
#include "lv_draw_blend.h"
#include "lv_draw_mask.h"
#include "../lv_misc/lv_math.h"
#include "../lv_misc/lv_txt_ap.h"
#include "../lv_core/lv_refr.h"
#include "../lv_misc/lv_debug.h"
@@ -1295,8 +1296,16 @@ static void draw_value_str(const lv_area_t * coords, const lv_area_t * clip, con
if(dsc->value_str == NULL) return;
if(dsc->value_opa <= LV_OPA_MIN) return;
#if LV_USE_ARABIC_PERSIAN_CHARS == 0
const char * str = dsc->value_str;
#else
uint32_t str_len = _lv_txt_ap_calc_bytes_cnt(dsc->value_str);
char * str = _lv_mem_buf_get(str_len + 1);
_lv_txt_ap_proc(dsc->value_str, str);
#endif
lv_point_t s;
_lv_txt_get_size(&s, dsc->value_str, dsc->value_font, dsc->value_letter_space, dsc->value_line_space, LV_COORD_MAX,
_lv_txt_get_size(&s, str, dsc->value_font, dsc->value_letter_space, dsc->value_line_space, LV_COORD_MAX,
LV_TXT_FLAG_NONE);
lv_area_t value_area;
@@ -1321,7 +1330,7 @@ static void draw_value_str(const lv_area_t * coords, const lv_area_t * clip, con
label_dsc.color = dsc->value_color;
label_dsc.opa = dsc->value_opa;
lv_draw_label(&value_area, clip, &label_dsc, dsc->value_str, NULL);
lv_draw_label(&value_area, clip, &label_dsc, str, NULL);
}
#endif

View File

@@ -58,29 +58,53 @@ void lv_draw_polygon(const lv_point_t points[], uint16_t point_cnt, const lv_are
if(point_cnt < 3) return;
if(points == NULL) return;
int16_t i;
/*Join adjacent points if they are on the same coordinate*/
lv_point_t * p = _lv_mem_buf_get(point_cnt * sizeof(lv_point_t));
if(p == NULL) return;
uint16_t i;
uint16_t pcnt = 0;
p[0] = points[0];
for(i = 0; i < point_cnt - 1; i++) {
if(points[i].x != points[i + 1].x || points[i].y != points[i + 1].y) {
p[pcnt] = points[i];
pcnt++;
}
}
/*The first and the last points are also adjacent */
if(points[0].x != points[point_cnt - 1].x || points[0].y != points[point_cnt - 1].y) {
p[pcnt] = points[point_cnt - 1];
pcnt++;
}
point_cnt = pcnt;
if(point_cnt < 3) {
_lv_mem_buf_release(p);
return;
}
lv_area_t poly_coords = {.x1 = LV_COORD_MAX, .y1 = LV_COORD_MAX, .x2 = LV_COORD_MIN, .y2 = LV_COORD_MIN};
for(i = 0; i < point_cnt; i++) {
poly_coords.x1 = LV_MATH_MIN(poly_coords.x1, points[i].x);
poly_coords.y1 = LV_MATH_MIN(poly_coords.y1, points[i].y);
poly_coords.x2 = LV_MATH_MAX(poly_coords.x2, points[i].x);
poly_coords.y2 = LV_MATH_MAX(poly_coords.y2, points[i].y);
poly_coords.x1 = LV_MATH_MIN(poly_coords.x1, p[i].x);
poly_coords.y1 = LV_MATH_MIN(poly_coords.y1, p[i].y);
poly_coords.x2 = LV_MATH_MAX(poly_coords.x2, p[i].x);
poly_coords.y2 = LV_MATH_MAX(poly_coords.y2, p[i].y);
}
bool is_common;
lv_area_t poly_mask;
is_common = _lv_area_intersect(&poly_mask, &poly_coords, clip_area);
if(!is_common) return;
if(!is_common) {
_lv_mem_buf_release(p);
return;
}
/*Find the lowest point*/
lv_coord_t y_min = points[0].y;
lv_coord_t y_min = p[0].y;
int16_t y_min_i = 0;
for(i = 1; i < point_cnt; i++) {
if(points[i].y < y_min) {
y_min = points[i].y;
if(p[i].y < y_min) {
y_min = p[i].y;
y_min_i = i;
}
}
@@ -94,16 +118,28 @@ void lv_draw_polygon(const lv_point_t points[], uint16_t point_cnt, const lv_are
int32_t i_next_right;
uint32_t mask_cnt = 0;
/* Check if the order of points is inverted or not.
* The normal case is when the left point is on `y_min_i - 1`*/
/*Get the index of the left and right points*/
i_next_left = y_min_i - 1;
if(i_next_left < 0) i_next_left = point_cnt + i_next_left;
i_next_right = y_min_i + 1;
if(i_next_right > point_cnt - 1) i_next_right = 0;
/* Check if the order of points is inverted or not.
* The normal case is when the left point is on `y_min_i - 1`
* Explanation:
* if angle(p_left) < angle(p_right) -> inverted
* dy_left/dx_left < dy_right/dx_right
* dy_left * dx_right < dy_right * dx_left
*/
lv_coord_t dxl = p[i_next_left].x - p[y_min_i].x;
lv_coord_t dxr = p[i_next_right].x - p[y_min_i].x;
lv_coord_t dyl = p[i_next_left].y - p[y_min_i].y;
lv_coord_t dyr = p[i_next_right].y - p[y_min_i].y;
bool inv = false;
if(points[i_next_left].x > points[i_next_right].x && points[i_next_left].y < points[i_next_right].y) inv = true;
if(dyl * dxr < dyr * dxl) inv = true;
do {
if(!inv) {
@@ -121,11 +157,11 @@ void lv_draw_polygon(const lv_point_t points[], uint16_t point_cnt, const lv_are
if(i_next_right < 0) i_next_right = point_cnt + i_next_right;
}
if(points[i_next_left].y >= points[i_prev_left].y) {
if(points[i_next_left].y != points[i_prev_left].y &&
points[i_next_left].x != points[i_prev_left].x) {
lv_draw_mask_line_points_init(mp_next, points[i_prev_left].x, points[i_prev_left].y,
points[i_next_left].x, points[i_next_left].y,
if(p[i_next_left].y >= p[i_prev_left].y) {
if(p[i_next_left].y != p[i_prev_left].y &&
p[i_next_left].x != p[i_prev_left].x) {
lv_draw_mask_line_points_init(mp_next, p[i_prev_left].x, p[i_prev_left].y,
p[i_next_left].x, p[i_next_left].y,
LV_DRAW_MASK_LINE_SIDE_RIGHT);
lv_draw_mask_add(mp_next, mp);
mp_next++;
@@ -136,12 +172,12 @@ void lv_draw_polygon(const lv_point_t points[], uint16_t point_cnt, const lv_are
if(mask_cnt == point_cnt) break;
if(points[i_next_right].y >= points[i_prev_right].y) {
if(points[i_next_right].y != points[i_prev_right].y &&
points[i_next_right].x != points[i_prev_right].x) {
if(p[i_next_right].y >= p[i_prev_right].y) {
if(p[i_next_right].y != p[i_prev_right].y &&
p[i_next_right].x != p[i_prev_right].x) {
lv_draw_mask_line_points_init(mp_next, points[i_prev_right].x, points[i_prev_right].y,
points[i_next_right].x, points[i_next_right].y,
lv_draw_mask_line_points_init(mp_next, p[i_prev_right].x, p[i_prev_right].y,
p[i_next_right].x, p[i_next_right].y,
LV_DRAW_MASK_LINE_SIDE_LEFT);
lv_draw_mask_add(mp_next, mp);
mp_next++;
@@ -157,6 +193,7 @@ void lv_draw_polygon(const lv_point_t points[], uint16_t point_cnt, const lv_are
lv_draw_mask_remove_custom(mp);
_lv_mem_buf_release(mp);
_lv_mem_buf_release(p);
}

View File

@@ -24,11 +24,6 @@ extern "C" {
/*********************
* DEFINES
*********************/
/*Number of fractional digits in the advanced width (`adv_w`) field of `lv_font_glyph_dsc_t`*/
#define LV_FONT_WIDTH_FRACT_DIGIT 4
#define LV_FONT_KERN_POSITIVE 0
#define LV_FONT_KERN_NEGATIVE 1
/**********************
* TYPEDEFS
@@ -227,6 +222,10 @@ LV_FONT_DECLARE(lv_font_montserrat_12_subpx)
LV_FONT_DECLARE(lv_font_unscii_8)
#endif
#if LV_FONT_UNSCII_16
LV_FONT_DECLARE(lv_font_unscii_16)
#endif
#if LV_FONT_DEJAVU_16_PERSIAN_HEBREW
LV_FONT_DECLARE(lv_font_dejavu_16_persian_hebrew)
#endif

View File

@@ -1,6 +1,8 @@
CSRCS += lv_font.c
CSRCS += lv_font_fmt_txt.c
CSRCS += lv_font_loader.c
CSRCS += lv_font_montserrat_8.c
CSRCS += lv_font_montserrat_10.c
CSRCS += lv_font_montserrat_12.c
CSRCS += lv_font_montserrat_14.c
CSRCS += lv_font_montserrat_16.c

View File

@@ -42,22 +42,26 @@ static int32_t unicode_list_compare(const void * ref, const void * element);
static int32_t kern_pair_8_compare(const void * ref, const void * element);
static int32_t kern_pair_16_compare(const void * ref, const void * element);
static void decompress(const uint8_t * in, uint8_t * out, lv_coord_t w, lv_coord_t h, uint8_t bpp, bool prefilter);
static inline void decompress_line(uint8_t * out, lv_coord_t w);
static inline uint8_t get_bits(const uint8_t * in, uint32_t bit_pos, uint8_t len);
static inline void bits_write(uint8_t * out, uint32_t bit_pos, uint8_t val, uint8_t len);
static inline void rle_init(const uint8_t * in, uint8_t bpp);
static inline uint8_t rle_next(void);
#if LV_USE_FONT_COMPRESSED
static void decompress(const uint8_t * in, uint8_t * out, lv_coord_t w, lv_coord_t h, uint8_t bpp, bool prefilter);
static inline void decompress_line(uint8_t * out, lv_coord_t w);
static inline uint8_t get_bits(const uint8_t * in, uint32_t bit_pos, uint8_t len);
static inline void bits_write(uint8_t * out, uint32_t bit_pos, uint8_t val, uint8_t len);
static inline void rle_init(const uint8_t * in, uint8_t bpp);
static inline uint8_t rle_next(void);
#endif /* LV_USE_FONT_COMPRESSED */
/**********************
* STATIC VARIABLES
**********************/
static uint32_t rle_rdp;
static const uint8_t * rle_in;
static uint8_t rle_bpp;
static uint8_t rle_prev_v;
static uint8_t rle_cnt;
static rle_state_t rle_state;
#if LV_USE_FONT_COMPRESSED
static uint32_t rle_rdp;
static const uint8_t * rle_in;
static uint8_t rle_bpp;
static uint8_t rle_prev_v;
static uint8_t rle_cnt;
static rle_state_t rle_state;
#endif /* LV_USE_FONT_COMPRESSED */
/**********************
* GLOBAL PROTOTYPES
@@ -338,6 +342,7 @@ static int32_t kern_pair_16_compare(const void * ref, const void * element)
else return (int32_t) ref16_p[1] - element16_p[1];
}
#if LV_USE_FONT_COMPRESSED
/**
* The compress a glyph's bitmap
* @param in the compressed bitmap
@@ -567,6 +572,7 @@ static inline uint8_t rle_next(void)
return ret;
}
#endif /* LV_USE_FONT_COMPRESSED */
/** Code Comparator.
*

View File

@@ -0,0 +1,635 @@
#include "../../lvgl.h"
/*******************************************************************************
* Size: 16 px
* Bpp: 1
* Opts:
******************************************************************************/
#ifndef LV_FONT_UNSCII_16
#define LV_FONT_UNSCII_16 1
#endif
#if LV_FONT_UNSCII_16
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
/* U+20 " " */
0x0,
/* U+21 "!" */
0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
/* U+22 "\"" */
0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf,
/* U+23 "#" */
0x3c, 0xf0, 0xf3, 0xc3, 0xcf, 0xf, 0x3c, 0xff,
0xff, 0xff, 0xf3, 0xcf, 0xf, 0x3c, 0xff, 0xff,
0xff, 0xf3, 0xcf, 0xf, 0x3c, 0x3c, 0xf0, 0xf3,
0xc0,
/* U+24 "$" */
0xf, 0x0, 0xf0, 0x3f, 0xf3, 0xff, 0xf0, 0xf,
0x0, 0x3f, 0xc3, 0xfc, 0x0, 0xf0, 0xf, 0xff,
0xcf, 0xfc, 0xf, 0x0, 0xf0,
/* U+25 "%" */
0xf0, 0x3f, 0xc0, 0xff, 0xf, 0x3c, 0x3c, 0x3,
0xc0, 0xf, 0x0, 0xf0, 0x3, 0xc0, 0x3c, 0x3c,
0xf0, 0xff, 0x3, 0xfc, 0xf,
/* U+26 "&" */
0xf, 0xc0, 0x3f, 0x3, 0xcf, 0xf, 0x3c, 0xf,
0xc0, 0x3f, 0x3, 0xf3, 0xcf, 0xcf, 0xf3, 0xf3,
0xcf, 0xcf, 0xf, 0x3c, 0x3c, 0x3f, 0x3c, 0xfc,
0xf0,
/* U+27 "'" */
0x3c, 0xf3, 0xcf, 0xf3, 0xc0,
/* U+28 "(" */
0xf, 0xf, 0x3c, 0x3c, 0xf0, 0xf0, 0xf0, 0xf0,
0xf0, 0xf0, 0x3c, 0x3c, 0xf, 0xf,
/* U+29 ")" */
0xf0, 0xf0, 0x3c, 0x3c, 0xf, 0xf, 0xf, 0xf,
0xf, 0xf, 0x3c, 0x3c, 0xf0, 0xf0,
/* U+2A "*" */
0x3c, 0x3c, 0x3c, 0x3c, 0xf, 0xf0, 0xf, 0xf0,
0xff, 0xff, 0xff, 0xff, 0xf, 0xf0, 0xf, 0xf0,
0x3c, 0x3c, 0x3c, 0x3c,
/* U+2B "+" */
0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xff, 0xff,
0xff, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0,
/* U+2C "," */
0x3c, 0xf3, 0xcf, 0xf3, 0xc0,
/* U+2D "-" */
0xff, 0xff, 0xff,
/* U+2E "." */
0xff, 0xff,
/* U+2F "/" */
0x0, 0xf, 0x0, 0xf, 0x0, 0x3c, 0x0, 0x3c,
0x0, 0xf0, 0x0, 0xf0, 0x3, 0xc0, 0x3, 0xc0,
0xf, 0x0, 0xf, 0x0, 0x3c, 0x0, 0x3c, 0x0,
0xf0, 0x0, 0xf0, 0x0,
/* U+30 "0" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0xf3, 0xff,
0x3f, 0xfc, 0xff, 0xcf, 0xf0, 0xff, 0xf, 0xf0,
0xff, 0xf, 0x3f, 0xc3, 0xfc,
/* U+31 "1" */
0xf, 0x0, 0xf0, 0x3f, 0x3, 0xf0, 0xf, 0x0,
0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf,
0x0, 0xf0, 0xff, 0xff, 0xff,
/* U+32 "2" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0x3, 0xc0,
0x3c, 0xf, 0x0, 0xf0, 0x3c, 0x3, 0xc0, 0xf0,
0xf, 0x0, 0xff, 0xff, 0xff,
/* U+33 "3" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0x0, 0xf0,
0xf, 0xf, 0xc0, 0xfc, 0x0, 0xf0, 0xf, 0xf0,
0xff, 0xf, 0x3f, 0xc3, 0xfc,
/* U+34 "4" */
0x3, 0xf0, 0xf, 0xc0, 0xff, 0x3, 0xfc, 0x3c,
0xf0, 0xf3, 0xcf, 0xf, 0x3c, 0x3c, 0xff, 0xff,
0xff, 0xf0, 0xf, 0x0, 0x3c, 0x0, 0xf0, 0x3,
0xc0,
/* U+35 "5" */
0xff, 0xff, 0xff, 0xf0, 0xf, 0x0, 0xff, 0xcf,
0xfc, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0xf0,
0xff, 0xf, 0x3f, 0xc3, 0xfc,
/* U+36 "6" */
0xf, 0xc0, 0xfc, 0x3c, 0x3, 0xc0, 0xf0, 0xf,
0x0, 0xff, 0xcf, 0xfc, 0xf0, 0xff, 0xf, 0xf0,
0xff, 0xf, 0x3f, 0xc3, 0xfc,
/* U+37 "7" */
0xff, 0xff, 0xff, 0x0, 0xf0, 0xf, 0x0, 0xf0,
0xf, 0x3, 0xc0, 0x3c, 0xf, 0x0, 0xf0, 0xf,
0x0, 0xf0, 0xf, 0x0, 0xf0,
/* U+38 "8" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0xf0,
0xff, 0xf, 0x3f, 0xc3, 0xfc,
/* U+39 "9" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0x3f, 0xf3, 0xff, 0x0, 0xf0, 0xf, 0x3,
0xc0, 0x3c, 0x3f, 0x3, 0xf0,
/* U+3A ":" */
0xff, 0xff, 0x0, 0x0, 0xff, 0xff,
/* U+3B ";" */
0x3c, 0xf3, 0xcf, 0x0, 0x0, 0x0, 0x3c, 0xf3,
0xcf, 0xf3, 0xc0,
/* U+3C "<" */
0x3, 0xc0, 0xf0, 0xf0, 0x3c, 0x3c, 0xf, 0xf,
0x3, 0xc0, 0x3c, 0xf, 0x0, 0xf0, 0x3c, 0x3,
0xc0, 0xf0,
/* U+3D "=" */
0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0xff, 0xff,
0xff,
/* U+3E ">" */
0xf0, 0x3c, 0x3, 0xc0, 0xf0, 0xf, 0x3, 0xc0,
0x3c, 0xf, 0xf, 0x3, 0xc3, 0xc0, 0xf0, 0xf0,
0x3c, 0x0,
/* U+3F "?" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0x0, 0xf0,
0xf, 0x3, 0xc0, 0x3c, 0xf, 0x0, 0xf0, 0x0,
0x0, 0x0, 0xf, 0x0, 0xf0,
/* U+40 "@" */
0x3f, 0xf0, 0xff, 0xcf, 0x3, 0xfc, 0xf, 0xf3,
0xff, 0xcf, 0xff, 0x3f, 0xfc, 0xff, 0xf3, 0xff,
0xcf, 0xff, 0x0, 0x3c, 0x0, 0x3f, 0xf0, 0xff,
0xc0,
/* U+41 "A" */
0xf, 0x0, 0xf0, 0x3f, 0xc3, 0xfc, 0xf0, 0xff,
0xf, 0xf0, 0xff, 0xf, 0xff, 0xff, 0xff, 0xf0,
0xff, 0xf, 0xf0, 0xff, 0xf,
/* U+42 "B" */
0xff, 0xcf, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xff, 0xcf, 0xfc, 0xf0, 0xff, 0xf, 0xf0,
0xff, 0xf, 0xff, 0xcf, 0xfc,
/* U+43 "C" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xf,
0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0,
0xff, 0xf, 0x3f, 0xc3, 0xfc,
/* U+44 "D" */
0xff, 0xf, 0xf0, 0xf3, 0xcf, 0x3c, 0xf0, 0xff,
0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf3,
0xcf, 0x3c, 0xff, 0xf, 0xf0,
/* U+45 "E" */
0xff, 0xff, 0xff, 0xf0, 0xf, 0x0, 0xf0, 0xf,
0x0, 0xff, 0xcf, 0xfc, 0xf0, 0xf, 0x0, 0xf0,
0xf, 0x0, 0xff, 0xff, 0xff,
/* U+46 "F" */
0xff, 0xff, 0xff, 0xf0, 0xf, 0x0, 0xf0, 0xf,
0x0, 0xff, 0xcf, 0xfc, 0xf0, 0xf, 0x0, 0xf0,
0xf, 0x0, 0xf0, 0xf, 0x0,
/* U+47 "G" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xf,
0x0, 0xf3, 0xff, 0x3f, 0xf0, 0xff, 0xf, 0xf0,
0xff, 0xf, 0x3f, 0xf3, 0xff,
/* U+48 "H" */
0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xf, 0xf0,
0xff, 0xf, 0xf0, 0xff, 0xf,
/* U+49 "I" */
0xff, 0xff, 0xff, 0xf, 0x0, 0xf0, 0xf, 0x0,
0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf,
0x0, 0xf0, 0xff, 0xff, 0xff,
/* U+4A "J" */
0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0,
0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0xf0,
0xff, 0xf, 0x3f, 0xc3, 0xfc,
/* U+4B "K" */
0xf0, 0x3f, 0xc0, 0xff, 0xf, 0x3c, 0x3c, 0xf3,
0xc3, 0xcf, 0xf, 0xf0, 0x3f, 0xc0, 0xf3, 0xc3,
0xcf, 0xf, 0xf, 0x3c, 0x3c, 0xf0, 0x3f, 0xc0,
0xf0,
/* U+4C "L" */
0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf,
0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0,
0xf, 0x0, 0xff, 0xff, 0xff,
/* U+4D "M" */
0xf0, 0x3f, 0xc0, 0xff, 0xcf, 0xff, 0x3f, 0xff,
0xff, 0xff, 0xff, 0x33, 0xfc, 0xcf, 0xf0, 0x3f,
0xc0, 0xff, 0x3, 0xfc, 0xf, 0xf0, 0x3f, 0xc0,
0xf0,
/* U+4E "N" */
0xf0, 0x3f, 0xc0, 0xff, 0xc3, 0xff, 0xf, 0xff,
0x3f, 0xfc, 0xff, 0x3f, 0xfc, 0xff, 0xf0, 0xff,
0xc3, 0xff, 0x3, 0xfc, 0xf, 0xf0, 0x3f, 0xc0,
0xf0,
/* U+4F "O" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0,
0xff, 0xf, 0x3f, 0xc3, 0xfc,
/* U+50 "P" */
0xff, 0xcf, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xff, 0xcf, 0xfc, 0xf0, 0xf, 0x0, 0xf0,
0xf, 0x0, 0xf0, 0xf, 0x0,
/* U+51 "Q" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf3,
0xcf, 0x3c, 0x3c, 0xf3, 0xcf,
/* U+52 "R" */
0xff, 0xcf, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xff, 0xcf, 0xfc, 0xf3, 0xcf, 0x3c, 0xf0,
0xff, 0xf, 0xf0, 0xff, 0xf,
/* U+53 "S" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xf,
0x0, 0x3f, 0xc3, 0xfc, 0x0, 0xf0, 0xf, 0xf0,
0xff, 0xf, 0x3f, 0xc3, 0xfc,
/* U+54 "T" */
0xff, 0xff, 0xff, 0xf, 0x0, 0xf0, 0xf, 0x0,
0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf,
0x0, 0xf0, 0xf, 0x0, 0xf0,
/* U+55 "U" */
0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0,
0xff, 0xf, 0x3f, 0xc3, 0xfc,
/* U+56 "V" */
0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0x3f,
0xc3, 0xfc, 0xf, 0x0, 0xf0,
/* U+57 "W" */
0xf0, 0x3f, 0xc0, 0xff, 0x3, 0xfc, 0xf, 0xf0,
0x3f, 0xc0, 0xff, 0x33, 0xfc, 0xcf, 0xff, 0xff,
0xff, 0xff, 0xcf, 0xff, 0x3f, 0xf0, 0x3f, 0xc0,
0xf0,
/* U+58 "X" */
0xf0, 0xf, 0xf0, 0xf, 0x3c, 0x3c, 0x3c, 0x3c,
0xf, 0xf0, 0xf, 0xf0, 0x3, 0xc0, 0x3, 0xc0,
0xf, 0xf0, 0xf, 0xf0, 0x3c, 0x3c, 0x3c, 0x3c,
0xf0, 0xf, 0xf0, 0xf,
/* U+59 "Y" */
0xf0, 0xf, 0xf0, 0xf, 0x3c, 0x3c, 0x3c, 0x3c,
0xf, 0xf0, 0xf, 0xf0, 0x3, 0xc0, 0x3, 0xc0,
0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0,
0x3, 0xc0, 0x3, 0xc0,
/* U+5A "Z" */
0xff, 0xff, 0xff, 0x0, 0xf0, 0xf, 0x3, 0xc0,
0x3c, 0xf, 0x0, 0xf0, 0x3c, 0x3, 0xc0, 0xf0,
0xf, 0x0, 0xff, 0xff, 0xff,
/* U+5B "[" */
0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff,
/* U+5C "\\" */
0xf0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0x3c, 0x0,
0xf, 0x0, 0xf, 0x0, 0x3, 0xc0, 0x3, 0xc0,
0x0, 0xf0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0x3c,
0x0, 0xf, 0x0, 0xf,
/* U+5D "]" */
0xff, 0xff, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,
0xf, 0xf, 0xf, 0xf, 0xff, 0xff,
/* U+5E "^" */
0x3, 0x0, 0xc, 0x0, 0xfc, 0x3, 0xf0, 0x3c,
0xf0, 0xf3, 0xcf, 0x3, 0xfc, 0xf,
/* U+5F "_" */
0xff, 0xff, 0xff, 0xff,
/* U+60 "`" */
0xf0, 0xf0, 0x3c, 0x3c, 0xf, 0xf,
/* U+61 "a" */
0x3f, 0xc3, 0xfc, 0x0, 0xf0, 0xf, 0x3f, 0xf3,
0xff, 0xf0, 0xff, 0xf, 0x3f, 0xf3, 0xff,
/* U+62 "b" */
0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xff, 0xcf,
0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0,
0xff, 0xf, 0xff, 0xcf, 0xfc,
/* U+63 "c" */
0x3f, 0xcf, 0xff, 0x3, 0xc0, 0xf0, 0x3c, 0xf,
0x3, 0xc0, 0x3f, 0xcf, 0xf0,
/* U+64 "d" */
0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x3f, 0xf3,
0xff, 0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0,
0xff, 0xf, 0x3f, 0xf3, 0xff,
/* U+65 "e" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0xff, 0xff,
0xff, 0xf0, 0xf, 0x0, 0x3f, 0xc3, 0xfc,
/* U+66 "f" */
0xf, 0xc3, 0xf3, 0xc0, 0xf0, 0xff, 0xff, 0xf3,
0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xc0, 0xf0, 0x3c,
0xf, 0x0,
/* U+67 "g" */
0x3f, 0xf3, 0xff, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0x3f, 0xf3, 0xff, 0x0, 0xf0, 0xf, 0xff,
0xcf, 0xfc,
/* U+68 "h" */
0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xff, 0xcf,
0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0,
0xff, 0xf, 0xf0, 0xff, 0xf,
/* U+69 "i" */
0x3c, 0xf, 0x0, 0x0, 0x0, 0xfc, 0x3f, 0x3,
0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xc0, 0xf0, 0x3f,
0xcf, 0xf0,
/* U+6A "j" */
0x3, 0xc0, 0xf0, 0x0, 0x0, 0x3, 0xc0, 0xf0,
0x3c, 0xf, 0x3, 0xc0, 0xf0, 0x3c, 0xf, 0x3,
0xc0, 0xff, 0xf3, 0xfc,
/* U+6B "k" */
0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xff,
0xf, 0xf3, 0xcf, 0x3c, 0xff, 0xf, 0xf0, 0xf3,
0xcf, 0x3c, 0xf0, 0xff, 0xf,
/* U+6C "l" */
0xfc, 0x3f, 0x3, 0xc0, 0xf0, 0x3c, 0xf, 0x3,
0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xc0, 0xf0, 0x3f,
0xcf, 0xf0,
/* U+6D "m" */
0xf0, 0xf3, 0xc3, 0xcf, 0xff, 0xff, 0xff, 0xf3,
0x3f, 0xcc, 0xff, 0x33, 0xfc, 0xcf, 0xf0, 0x3f,
0xc0, 0xf0,
/* U+6E "n" */
0xff, 0xcf, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf,
/* U+6F "o" */
0x3f, 0xc3, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xf0, 0xff, 0xf, 0x3f, 0xc3, 0xfc,
/* U+70 "p" */
0xff, 0xcf, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xff, 0xcf, 0xfc, 0xf0, 0xf, 0x0, 0xf0,
0xf, 0x0,
/* U+71 "q" */
0x3f, 0xf3, 0xff, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0x3f, 0xf3, 0xff, 0x0, 0xf0, 0xf, 0x0,
0xf0, 0xf,
/* U+72 "r" */
0xff, 0xcf, 0xfc, 0xf0, 0xff, 0xf, 0xf0, 0xf,
0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0,
/* U+73 "s" */
0x3f, 0xf3, 0xff, 0xf0, 0xf, 0x0, 0x3f, 0xc3,
0xfc, 0x0, 0xf0, 0xf, 0xff, 0xcf, 0xfc,
/* U+74 "t" */
0x3c, 0x3, 0xc0, 0x3c, 0x3, 0xc0, 0xff, 0xff,
0xff, 0x3c, 0x3, 0xc0, 0x3c, 0x3, 0xc0, 0x3c,
0x3, 0xc0, 0xf, 0xf0, 0xff,
/* U+75 "u" */
0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0xf0, 0xff, 0xf, 0x3f, 0xf3, 0xff,
/* U+76 "v" */
0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0x3f, 0xc3, 0xfc, 0xf, 0x0, 0xf0,
/* U+77 "w" */
0xf0, 0x3f, 0xc0, 0xff, 0x3, 0xfc, 0xf, 0xf3,
0x3f, 0xcc, 0xf3, 0xff, 0xf, 0xfc, 0x3c, 0xf0,
0xf3, 0xc0,
/* U+78 "x" */
0xf0, 0x3f, 0xc0, 0xf3, 0xcf, 0xf, 0x3c, 0xf,
0xc0, 0x3f, 0x3, 0xcf, 0xf, 0x3c, 0xf0, 0x3f,
0xc0, 0xf0,
/* U+79 "y" */
0xf0, 0xff, 0xf, 0xf0, 0xff, 0xf, 0xf0, 0xff,
0xf, 0x3f, 0xf3, 0xff, 0x0, 0xf0, 0xf, 0x3f,
0xc3, 0xfc,
/* U+7A "z" */
0xff, 0xff, 0xff, 0x3, 0xc0, 0x3c, 0xf, 0x0,
0xf0, 0x3c, 0x3, 0xc0, 0xff, 0xff, 0xff,
/* U+7B "{" */
0x3, 0xf0, 0x3f, 0xf, 0x0, 0xf0, 0xf, 0x0,
0xf0, 0xfc, 0xf, 0xc0, 0xf, 0x0, 0xf0, 0xf,
0x0, 0xf0, 0x3, 0xf0, 0x3f,
/* U+7C "|" */
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
/* U+7D "}" */
0xfc, 0xf, 0xc0, 0xf, 0x0, 0xf0, 0xf, 0x0,
0xf0, 0x3, 0xf0, 0x3f, 0xf, 0x0, 0xf0, 0xf,
0x0, 0xf0, 0xfc, 0xf, 0xc0,
/* U+7E "~" */
0x3f, 0x3c, 0xfc, 0xff, 0x3f, 0x3c, 0xfc,
/* U+7F "" */
0xf0, 0x3, 0xc0, 0xc, 0xc0, 0x33, 0x0, 0xcc,
0xff, 0x33, 0xfc, 0xc3, 0x33, 0xc, 0xf0, 0x33,
0xc0, 0xc0, 0x3, 0x0, 0xc, 0x0, 0x30, 0x0,
0xc0
};
/*---------------------
* 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 = 256, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 16},
{.bitmap_index = 1, .adv_w = 256, .box_w = 4, .box_h = 14, .ofs_x = 6, .ofs_y = 2},
{.bitmap_index = 8, .adv_w = 256, .box_w = 12, .box_h = 6, .ofs_x = 2, .ofs_y = 10},
{.bitmap_index = 17, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 42, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 63, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 84, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 109, .adv_w = 256, .box_w = 6, .box_h = 6, .ofs_x = 4, .ofs_y = 10},
{.bitmap_index = 114, .adv_w = 256, .box_w = 8, .box_h = 14, .ofs_x = 4, .ofs_y = 2},
{.bitmap_index = 128, .adv_w = 256, .box_w = 8, .box_h = 14, .ofs_x = 4, .ofs_y = 2},
{.bitmap_index = 142, .adv_w = 256, .box_w = 16, .box_h = 10, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 162, .adv_w = 256, .box_w = 12, .box_h = 10, .ofs_x = 2, .ofs_y = 4},
{.bitmap_index = 177, .adv_w = 256, .box_w = 6, .box_h = 6, .ofs_x = 4, .ofs_y = 0},
{.bitmap_index = 182, .adv_w = 256, .box_w = 12, .box_h = 2, .ofs_x = 2, .ofs_y = 8},
{.bitmap_index = 185, .adv_w = 256, .box_w = 4, .box_h = 4, .ofs_x = 6, .ofs_y = 2},
{.bitmap_index = 187, .adv_w = 256, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 215, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 236, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 257, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 278, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 299, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 324, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 345, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 366, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 387, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 408, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 429, .adv_w = 256, .box_w = 4, .box_h = 12, .ofs_x = 6, .ofs_y = 2},
{.bitmap_index = 435, .adv_w = 256, .box_w = 6, .box_h = 14, .ofs_x = 4, .ofs_y = 0},
{.bitmap_index = 446, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 464, .adv_w = 256, .box_w = 12, .box_h = 6, .ofs_x = 2, .ofs_y = 6},
{.bitmap_index = 473, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 491, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 512, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 537, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 558, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 579, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 600, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 621, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 642, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 663, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 684, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 705, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 726, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 747, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 772, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 793, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 818, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 843, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 864, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 885, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 906, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 927, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 948, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 969, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 990, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1011, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 1036, .adv_w = 256, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 1064, .adv_w = 256, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 1092, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1113, .adv_w = 256, .box_w = 8, .box_h = 14, .ofs_x = 4, .ofs_y = 2},
{.bitmap_index = 1127, .adv_w = 256, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 1155, .adv_w = 256, .box_w = 8, .box_h = 14, .ofs_x = 4, .ofs_y = 2},
{.bitmap_index = 1169, .adv_w = 256, .box_w = 14, .box_h = 8, .ofs_x = 0, .ofs_y = 8},
{.bitmap_index = 1183, .adv_w = 256, .box_w = 16, .box_h = 2, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1187, .adv_w = 256, .box_w = 8, .box_h = 6, .ofs_x = 6, .ofs_y = 10},
{.bitmap_index = 1193, .adv_w = 256, .box_w = 12, .box_h = 10, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1208, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1229, .adv_w = 256, .box_w = 10, .box_h = 10, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1242, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1263, .adv_w = 256, .box_w = 12, .box_h = 10, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1278, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1296, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1314, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1335, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 4, .ofs_y = 2},
{.bitmap_index = 1353, .adv_w = 256, .box_w = 10, .box_h = 16, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1373, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1394, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 4, .ofs_y = 2},
{.bitmap_index = 1412, .adv_w = 256, .box_w = 14, .box_h = 10, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 1430, .adv_w = 256, .box_w = 12, .box_h = 10, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1445, .adv_w = 256, .box_w = 12, .box_h = 10, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1460, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1478, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1496, .adv_w = 256, .box_w = 12, .box_h = 10, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1511, .adv_w = 256, .box_w = 12, .box_h = 10, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1526, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1547, .adv_w = 256, .box_w = 12, .box_h = 10, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1562, .adv_w = 256, .box_w = 12, .box_h = 10, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1577, .adv_w = 256, .box_w = 14, .box_h = 10, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 1595, .adv_w = 256, .box_w = 14, .box_h = 10, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 1613, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1631, .adv_w = 256, .box_w = 12, .box_h = 10, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1646, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1667, .adv_w = 256, .box_w = 4, .box_h = 14, .ofs_x = 6, .ofs_y = 2},
{.bitmap_index = 1674, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 2},
{.bitmap_index = 1695, .adv_w = 256, .box_w = 14, .box_h = 4, .ofs_x = 0, .ofs_y = 12},
{.bitmap_index = 1702, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = 2}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] = {
{
.range_start = 32, .range_length = 96, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
/*Store all the custom data of the font*/
static lv_font_fmt_txt_dsc_t font_dsc = {
.glyph_bitmap = gylph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = NULL,
.kern_scale = 0,
.cmap_num = 1,
.bpp = 1,
.kern_classes = 0,
.bitmap_format = 0
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
lv_font_t lv_font_unscii_16 = {
.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 = 17, /*The maximum line height required by the font*/
.base_line = 0, /*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)
.underline_position = 0,
.underline_thickness = 0,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if LV_FONT_UNSCII_16*/

View File

@@ -19,288 +19,289 @@
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
/* U+20 " " */
0x0,
/* U+21 "!" */
0xf2,
0xff, 0xcc,
/* U+22 "\"" */
0x99, 0x90,
0xcf, 0x3c, 0xc0,
/* U+23 "#" */
0x49, 0x2f, 0xd2, 0xfd, 0x24, 0x80,
0x6c, 0xdb, 0xfb, 0x6f, 0xed, 0x9b, 0x0,
/* U+24 "$" */
0x23, 0xe8, 0xe2, 0xf8, 0x80,
0x31, 0xfc, 0x1e, 0xf, 0xe3, 0x0,
/* U+25 "%" */
0xc7, 0x21, 0x8, 0x4e, 0x30,
0xc7, 0x98, 0x61, 0x86, 0x78, 0xc0,
/* U+26 "&" */
0x62, 0x49, 0x18, 0x96, 0x27, 0x40,
0x38, 0xd8, 0xe3, 0xbd, 0xd9, 0x9d, 0x80,
/* U+27 "'" */
0x2a, 0x0,
0x6f, 0x0,
/* U+28 "(" */
0x2a, 0x48, 0x88,
0x36, 0xcc, 0xc6, 0x30,
/* U+29 ")" */
0x88, 0x92, 0xa0,
0xc6, 0x33, 0x36, 0xc0,
/* U+2A "*" */
0x25, 0x5c, 0x47, 0x54, 0x80,
0x66, 0x3c, 0xff, 0x3c, 0x66,
/* U+2B "+" */
0x21, 0x3e, 0x42, 0x0,
0x30, 0xcf, 0xcc, 0x30,
/* U+2C "," */
0x58,
0x6f, 0x0,
/* U+2D "-" */
0xf8,
0xfc,
/* U+2E "." */
0x80,
0xf0,
/* U+2F "/" */
0x2, 0x8, 0x20, 0x82, 0x8, 0x20, 0x0,
0x3, 0x6, 0xc, 0x18, 0x30, 0x60, 0xc0,
/* U+30 "0" */
0x74, 0x67, 0x5c, 0xc5, 0xc0,
0x7b, 0x3d, 0xfb, 0xcf, 0x37, 0x80,
/* U+31 "1" */
0x23, 0x28, 0x42, 0x13, 0xe0,
0x31, 0xc3, 0xc, 0x30, 0xcf, 0xc0,
/* U+32 "2" */
0x74, 0x42, 0x26, 0x43, 0xe0,
0x7b, 0x31, 0x8c, 0x63, 0xf, 0xc0,
/* U+33 "3" */
0x74, 0x42, 0x60, 0xc5, 0xc0,
0x7b, 0x30, 0xce, 0xf, 0x37, 0x80,
/* U+34 "4" */
0x11, 0x95, 0x2f, 0x88, 0x40,
0x1c, 0x79, 0xb6, 0x6f, 0xe1, 0x83, 0x0,
/* U+35 "5" */
0xfc, 0x3c, 0x10, 0xc5, 0xc0,
0xff, 0xf, 0x83, 0xf, 0x37, 0x80,
/* U+36 "6" */
0x3a, 0x21, 0xe8, 0xc5, 0xc0,
0x39, 0x8c, 0x3e, 0xcf, 0x37, 0x80,
/* U+37 "7" */
0xf8, 0x44, 0x44, 0x21, 0x0,
0xfc, 0x30, 0xc6, 0x30, 0xc3, 0x0,
/* U+38 "8" */
0x74, 0x62, 0xe8, 0xc5, 0xc0,
0x7b, 0x3c, 0xde, 0xcf, 0x37, 0x80,
/* U+39 "9" */
0x74, 0x62, 0xf0, 0x8b, 0x80,
0x7b, 0x3c, 0xdf, 0xc, 0x67, 0x0,
/* U+3A ":" */
0x90,
0xf0, 0xf0,
/* U+3B ";" */
0x41, 0x60,
0x6c, 0x6, 0xf0,
/* U+3C "<" */
0x12, 0x48, 0x42, 0x10,
0x19, 0x99, 0x86, 0x18, 0x60,
/* U+3D "=" */
0xf8, 0x3e,
0xfc, 0xf, 0xc0,
/* U+3E ">" */
0x84, 0x21, 0x24, 0x80,
0xc3, 0xc, 0x33, 0x33, 0x0,
/* U+3F "?" */
0x7a, 0x10, 0x84, 0x10, 0x1, 0x0,
0x7b, 0x30, 0xc6, 0x30, 0x3, 0x0,
/* U+40 "@" */
0x7a, 0x19, 0x6b, 0x9a, 0x7, 0x80,
0x7d, 0x8f, 0x7e, 0xfd, 0xf8, 0x1f, 0x0,
/* U+41 "A" */
0x31, 0x28, 0x7f, 0x86, 0x18, 0x40,
0x31, 0xec, 0xf3, 0xff, 0x3c, 0xc0,
/* U+42 "B" */
0xfa, 0x18, 0x7e, 0x86, 0x1f, 0x80,
0xfb, 0x3c, 0xfe, 0xcf, 0x3f, 0x80,
/* U+43 "C" */
0x7a, 0x18, 0x20, 0x82, 0x17, 0x80,
0x7b, 0x3c, 0x30, 0xc3, 0x37, 0x80,
/* U+44 "D" */
0xf2, 0x28, 0x61, 0x86, 0x2f, 0x0,
0xf3, 0x6c, 0xf3, 0xcf, 0x6f, 0x0,
/* U+45 "E" */
0xfe, 0x8, 0x3c, 0x82, 0xf, 0xc0,
0xff, 0xc, 0x3e, 0xc3, 0xf, 0xc0,
/* U+46 "F" */
0xfe, 0x8, 0x3c, 0x82, 0x8, 0x0,
0xff, 0xc, 0x3e, 0xc3, 0xc, 0x0,
/* U+47 "G" */
0x7a, 0x18, 0x27, 0x86, 0x17, 0x80,
0x7b, 0x3c, 0x37, 0xcf, 0x37, 0xc0,
/* U+48 "H" */
0x86, 0x18, 0x7f, 0x86, 0x18, 0x40,
0xcf, 0x3c, 0xff, 0xcf, 0x3c, 0xc0,
/* U+49 "I" */
0xe9, 0x24, 0xb8,
0xfc, 0xc3, 0xc, 0x30, 0xcf, 0xc0,
/* U+4A "J" */
0x8, 0x42, 0x10, 0xc5, 0xc0,
0xc, 0x30, 0xc3, 0xf, 0x37, 0x80,
/* U+4B "K" */
0x86, 0x29, 0x38, 0x92, 0x28, 0x40,
0xc7, 0x9b, 0x67, 0x8d, 0x99, 0xb1, 0x80,
/* U+4C "L" */
0x82, 0x8, 0x20, 0x82, 0xf, 0xc0,
0xc3, 0xc, 0x30, 0xc3, 0xf, 0xc0,
/* U+4D "M" */
0x87, 0x3b, 0x61, 0x86, 0x18, 0x40,
0xc7, 0xdf, 0xfe, 0xbc, 0x78, 0xf1, 0x80,
/* U+4E "N" */
0x87, 0x1a, 0x65, 0x8e, 0x18, 0x40,
0xc7, 0xcf, 0xde, 0xfc, 0xf8, 0xf1, 0x80,
/* U+4F "O" */
0x7a, 0x18, 0x61, 0x86, 0x17, 0x80,
0x7b, 0x3c, 0xf3, 0xcf, 0x37, 0x80,
/* U+50 "P" */
0xfa, 0x18, 0x7e, 0x82, 0x8, 0x0,
0xfb, 0x3c, 0xfe, 0xc3, 0xc, 0x0,
/* U+51 "Q" */
0x7a, 0x18, 0x61, 0x96, 0x27, 0x40,
0x7b, 0x3c, 0xf3, 0xcf, 0x66, 0xc0,
/* U+52 "R" */
0xfa, 0x18, 0x7e, 0x92, 0x28, 0x40,
0xfb, 0x3c, 0xfe, 0xdb, 0x3c, 0xc0,
/* U+53 "S" */
0x7a, 0x18, 0x1e, 0x6, 0x17, 0x80,
0x7b, 0x3c, 0x1e, 0xf, 0x37, 0x80,
/* U+54 "T" */
0xf9, 0x8, 0x42, 0x10, 0x80,
0xfc, 0xc3, 0xc, 0x30, 0xc3, 0x0,
/* U+55 "U" */
0x86, 0x18, 0x61, 0x86, 0x17, 0x80,
0xcf, 0x3c, 0xf3, 0xcf, 0x37, 0x80,
/* U+56 "V" */
0x86, 0x18, 0x61, 0x85, 0x23, 0x0,
0xcf, 0x3c, 0xf3, 0xcd, 0xe3, 0x0,
/* U+57 "W" */
0x86, 0x18, 0x61, 0xb7, 0x38, 0x40,
0xc7, 0x8f, 0x1e, 0xbf, 0xfd, 0xf1, 0x80,
/* U+58 "X" */
0x86, 0x14, 0x8c, 0x4a, 0x18, 0x40,
0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3,
/* U+59 "Y" */
0x8c, 0x62, 0xe2, 0x10, 0x80,
0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18,
/* U+5A "Z" */
0xf8, 0x44, 0x44, 0x43, 0xe0,
0xfc, 0x31, 0x8c, 0x63, 0xf, 0xc0,
/* U+5B "[" */
0xf2, 0x49, 0x38,
0xfc, 0xcc, 0xcc, 0xf0,
/* U+5C "\\" */
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0xc0, 0x60, 0x30, 0x18, 0xc, 0x6, 0x3,
/* U+5D "]" */
0xe4, 0x92, 0x78,
0xf3, 0x33, 0x33, 0xf0,
/* U+5E "^" */
0x22, 0xa2,
0x10, 0x71, 0xb6, 0x30,
/* U+5F "_" */
0xf8,
/* U+60 "`" */
0x88, 0x80,
/* U+61 "a" */
0x70, 0x5f, 0x17, 0x80,
/* U+62 "b" */
0x84, 0x3d, 0x18, 0xc7, 0xc0,
/* U+63 "c" */
0x74, 0x61, 0x17, 0x0,
/* U+64 "d" */
0x8, 0x5f, 0x18, 0xc5, 0xe0,
/* U+65 "e" */
0x74, 0x7f, 0x7, 0x0,
/* U+66 "f" */
0x18, 0x92, 0x3e, 0x20, 0x82, 0x0,
/* U+67 "g" */
0x7c, 0x62, 0xf0, 0xb8,
/* U+68 "h" */
0x84, 0x3d, 0x18, 0xc6, 0x20,
/* U+69 "i" */
0x43, 0x24, 0xb8,
/* U+6A "j" */
0x10, 0x31, 0x11, 0x96,
/* U+6B "k" */
0x84, 0x23, 0x2e, 0x4a, 0x20,
/* U+6C "l" */
0xc9, 0x24, 0xb8,
/* U+6D "m" */
0xd5, 0x6b, 0x5a, 0x80,
/* U+6E "n" */
0xf4, 0x63, 0x18, 0x80,
/* U+6F "o" */
0x74, 0x63, 0x17, 0x0,
/* U+70 "p" */
0xf4, 0x63, 0xe8, 0x40,
/* U+71 "q" */
0x7c, 0x62, 0xf0, 0x84,
/* U+72 "r" */
0xbe, 0x21, 0x8, 0x0,
/* U+73 "s" */
0x7c, 0x1c, 0x1f, 0x0,
/* U+74 "t" */
0x42, 0x3c, 0x84, 0x24, 0xc0,
/* U+75 "u" */
0x8c, 0x63, 0x17, 0x0,
/* U+76 "v" */
0x8c, 0x62, 0xa2, 0x0,
/* U+77 "w" */
0x8d, 0x6b, 0x55, 0x0,
/* U+78 "x" */
0x8a, 0x88, 0xa8, 0x80,
/* U+79 "y" */
0x8c, 0x62, 0xf0, 0xb8,
/* U+7A "z" */
0xf8, 0x88, 0x8f, 0x80,
/* U+7B "{" */
0x34, 0x48, 0x44, 0x30,
/* U+7C "|" */
0xff,
/* U+60 "`" */
0xc6, 0x30,
/* U+61 "a" */
0x78, 0x37, 0xf3, 0x7c,
/* U+62 "b" */
0xc3, 0xf, 0xb3, 0xcf, 0x3f, 0x80,
/* U+63 "c" */
0x7e, 0x31, 0x87, 0x80,
/* U+64 "d" */
0xc, 0x37, 0xf3, 0xcf, 0x37, 0xc0,
/* U+65 "e" */
0x7b, 0x3f, 0xf0, 0x78,
/* U+66 "f" */
0x3b, 0x3e, 0xc6, 0x31, 0x80,
/* U+67 "g" */
0x7f, 0x3c, 0xdf, 0xf, 0xe0,
/* U+68 "h" */
0xc3, 0xf, 0xb3, 0xcf, 0x3c, 0xc0,
/* U+69 "i" */
0x60, 0x38, 0xc6, 0x31, 0xe0,
/* U+6A "j" */
0x18, 0x6, 0x31, 0x8c, 0x7e,
/* U+6B "k" */
0xc3, 0xc, 0xf6, 0xf3, 0x6c, 0xc0,
/* U+6C "l" */
0xe3, 0x18, 0xc6, 0x31, 0xe0,
/* U+6D "m" */
0xcd, 0xff, 0x5e, 0xbc, 0x60,
/* U+6E "n" */
0xfb, 0x3c, 0xf3, 0xcc,
/* U+6F "o" */
0x7b, 0x3c, 0xf3, 0x78,
/* U+70 "p" */
0xfb, 0x3c, 0xfe, 0xc3, 0x0,
/* U+71 "q" */
0x7f, 0x3c, 0xdf, 0xc, 0x30,
/* U+72 "r" */
0xfb, 0x3c, 0x30, 0xc0,
/* U+73 "s" */
0x7f, 0x7, 0x83, 0xf8,
/* U+74 "t" */
0x61, 0x8f, 0xd8, 0x61, 0x83, 0xc0,
/* U+75 "u" */
0xcf, 0x3c, 0xf3, 0x7c,
/* U+76 "v" */
0xcf, 0x3c, 0xde, 0x30,
/* U+77 "w" */
0xc7, 0x8f, 0x5b, 0xe6, 0xc0,
/* U+78 "x" */
0xc6, 0xd8, 0xe3, 0x6c, 0x60,
/* U+79 "y" */
0xcf, 0x3c, 0xdf, 0xd, 0xe0,
/* U+7A "z" */
0xfc, 0x63, 0x18, 0xfc,
/* U+7B "{" */
0x1c, 0xc3, 0x38, 0x30, 0xc1, 0xc0,
/* U+7C "|" */
0xff, 0xfc,
/* U+7D "}" */
0xc2, 0x21, 0x22, 0xc0,
0xe0, 0xc3, 0x7, 0x30, 0xce, 0x0,
/* U+7E "~" */
0x45, 0x44,
0x77, 0xb8,
/* U+7F "" */
0xc1, 0x42, 0xbd, 0x2c, 0x40, 0x81, 0x0
@@ -312,103 +313,103 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 128, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 0, .adv_w = 128, .box_h = 7, .box_w = 1, .ofs_x = 3, .ofs_y = -1},
{.bitmap_index = 1, .adv_w = 128, .box_h = 3, .box_w = 4, .ofs_x = 2, .ofs_y = 3},
{.bitmap_index = 3, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 9, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 14, .adv_w = 128, .box_h = 6, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 19, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 25, .adv_w = 128, .box_h = 3, .box_w = 3, .ofs_x = 2, .ofs_y = 3},
{.bitmap_index = 27, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
{.bitmap_index = 30, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
{.bitmap_index = 33, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 38, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 42, .adv_w = 128, .box_h = 3, .box_w = 2, .ofs_x = 3, .ofs_y = -2},
{.bitmap_index = 43, .adv_w = 128, .box_h = 1, .box_w = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 44, .adv_w = 128, .box_h = 1, .box_w = 1, .ofs_x = 3, .ofs_y = -1},
{.bitmap_index = 45, .adv_w = 128, .box_h = 7, .box_w = 7, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 52, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 57, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 62, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 67, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 72, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 77, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 82, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 87, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 92, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 97, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 102, .adv_w = 128, .box_h = 4, .box_w = 1, .ofs_x = 3, .ofs_y = 0},
{.bitmap_index = 103, .adv_w = 128, .box_h = 6, .box_w = 2, .ofs_x = 2, .ofs_y = -2},
{.bitmap_index = 105, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 109, .adv_w = 128, .box_h = 3, .box_w = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 111, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 2, .ofs_y = -1},
{.bitmap_index = 115, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 121, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 127, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 133, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 139, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 145, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 151, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 157, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 163, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 169, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 175, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
{.bitmap_index = 178, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 183, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 189, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 195, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 201, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 207, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 213, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 219, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 225, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 231, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 237, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 242, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 248, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 254, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 260, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 266, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 271, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 276, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
{.bitmap_index = 279, .adv_w = 128, .box_h = 7, .box_w = 7, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 286, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
{.bitmap_index = 289, .adv_w = 128, .box_h = 3, .box_w = 5, .ofs_x = 1, .ofs_y = 3},
{.bitmap_index = 291, .adv_w = 128, .box_h = 1, .box_w = 5, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 292, .adv_w = 128, .box_h = 3, .box_w = 3, .ofs_x = 2, .ofs_y = 3},
{.bitmap_index = 294, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 298, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 303, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 307, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 312, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 316, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 322, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 326, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 331, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
{.bitmap_index = 334, .adv_w = 128, .box_h = 8, .box_w = 4, .ofs_x = 2, .ofs_y = -2},
{.bitmap_index = 338, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 343, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
{.bitmap_index = 346, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 350, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 354, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 358, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 362, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 366, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 370, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 374, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 379, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 383, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 387, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 391, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 395, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 399, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 403, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 407, .adv_w = 128, .box_h = 8, .box_w = 1, .ofs_x = 3, .ofs_y = -2},
{.bitmap_index = 408, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 2, .ofs_y = -1},
{.bitmap_index = 412, .adv_w = 128, .box_h = 3, .box_w = 5, .ofs_x = 1, .ofs_y = 3},
{.bitmap_index = 414, .adv_w = 128, .box_h = 7, .box_w = 7, .ofs_x = 0, .ofs_y = -1}
{.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 = 128, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 8},
{.bitmap_index = 1, .adv_w = 128, .box_w = 2, .box_h = 7, .ofs_x = 3, .ofs_y = 1},
{.bitmap_index = 3, .adv_w = 128, .box_w = 6, .box_h = 3, .ofs_x = 1, .ofs_y = 5},
{.bitmap_index = 6, .adv_w = 128, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 13, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 19, .adv_w = 128, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 25, .adv_w = 128, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 32, .adv_w = 128, .box_w = 3, .box_h = 3, .ofs_x = 2, .ofs_y = 5},
{.bitmap_index = 34, .adv_w = 128, .box_w = 4, .box_h = 7, .ofs_x = 2, .ofs_y = 1},
{.bitmap_index = 38, .adv_w = 128, .box_w = 4, .box_h = 7, .ofs_x = 2, .ofs_y = 1},
{.bitmap_index = 42, .adv_w = 128, .box_w = 8, .box_h = 5, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 47, .adv_w = 128, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 2},
{.bitmap_index = 51, .adv_w = 128, .box_w = 3, .box_h = 3, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 53, .adv_w = 128, .box_w = 6, .box_h = 1, .ofs_x = 1, .ofs_y = 4},
{.bitmap_index = 54, .adv_w = 128, .box_w = 2, .box_h = 2, .ofs_x = 3, .ofs_y = 1},
{.bitmap_index = 55, .adv_w = 128, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 62, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 68, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 74, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 80, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 86, .adv_w = 128, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 93, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 99, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 105, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 111, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 117, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 123, .adv_w = 128, .box_w = 2, .box_h = 6, .ofs_x = 3, .ofs_y = 1},
{.bitmap_index = 125, .adv_w = 128, .box_w = 3, .box_h = 7, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 128, .adv_w = 128, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 133, .adv_w = 128, .box_w = 6, .box_h = 3, .ofs_x = 1, .ofs_y = 3},
{.bitmap_index = 136, .adv_w = 128, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 141, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 147, .adv_w = 128, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 154, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 160, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 166, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 172, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 178, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 184, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 190, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 196, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 202, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 208, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 214, .adv_w = 128, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 221, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 227, .adv_w = 128, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 234, .adv_w = 128, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 241, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 247, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 253, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 259, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 265, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 271, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 277, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 283, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 289, .adv_w = 128, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 296, .adv_w = 128, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 303, .adv_w = 128, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 310, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 316, .adv_w = 128, .box_w = 4, .box_h = 7, .ofs_x = 2, .ofs_y = 1},
{.bitmap_index = 320, .adv_w = 128, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 327, .adv_w = 128, .box_w = 4, .box_h = 7, .ofs_x = 2, .ofs_y = 1},
{.bitmap_index = 331, .adv_w = 128, .box_w = 7, .box_h = 4, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 335, .adv_w = 128, .box_w = 8, .box_h = 1, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 336, .adv_w = 128, .box_w = 4, .box_h = 3, .ofs_x = 3, .ofs_y = 5},
{.bitmap_index = 338, .adv_w = 128, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 342, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 348, .adv_w = 128, .box_w = 5, .box_h = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 352, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 358, .adv_w = 128, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 362, .adv_w = 128, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 367, .adv_w = 128, .box_w = 6, .box_h = 6, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 372, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 378, .adv_w = 128, .box_w = 5, .box_h = 7, .ofs_x = 2, .ofs_y = 1},
{.bitmap_index = 383, .adv_w = 128, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 388, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 394, .adv_w = 128, .box_w = 5, .box_h = 7, .ofs_x = 2, .ofs_y = 1},
{.bitmap_index = 399, .adv_w = 128, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 404, .adv_w = 128, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 408, .adv_w = 128, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 412, .adv_w = 128, .box_w = 6, .box_h = 6, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 417, .adv_w = 128, .box_w = 6, .box_h = 6, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 422, .adv_w = 128, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 426, .adv_w = 128, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 430, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 436, .adv_w = 128, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 440, .adv_w = 128, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 444, .adv_w = 128, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 449, .adv_w = 128, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 454, .adv_w = 128, .box_w = 6, .box_h = 6, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 459, .adv_w = 128, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 463, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 469, .adv_w = 128, .box_w = 2, .box_h = 7, .ofs_x = 3, .ofs_y = 1},
{.bitmap_index = 471, .adv_w = 128, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 477, .adv_w = 128, .box_w = 7, .box_h = 2, .ofs_x = 0, .ofs_y = 6},
{.bitmap_index = 479, .adv_w = 128, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1}
};
/*---------------------
@@ -420,8 +421,8 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] = {
{
.range_start = 32, .range_length = 96, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY,
.glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0
.range_start = 32, .range_length = 96, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
@@ -436,12 +437,12 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.glyph_bitmap = gylph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = NULL,
.kern_scale = 0,
.cmap_num = 1,
.bpp = 1,
.kern_scale = 0,
.kern_dsc = NULL,
.kern_classes = 0,
.bitmap_format = 0
};
@@ -451,11 +452,20 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
/*Initialize a public general font descriptor*/
lv_font_t lv_font_unscii_8 = {
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.line_height = 8, /*The maximum line height required by the font*/
.base_line = 2, /*Baseline measured from the bottom of the line*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 9, /*The maximum line height required by the font*/
.base_line = 0, /*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)
.underline_position = 0,
.underline_thickness = 0,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if LV_FONT_UNSCII_8*/

View File

@@ -43,7 +43,7 @@
* STATIC PROTOTYPES
**********************/
static void invalidate_cache(void);
static void dma2d_wait(void);
static void wait_finish(void);
/**********************
* STATIC VARIABLES
@@ -104,7 +104,7 @@ void lv_gpu_stm32_dma2d_fill(lv_color_t * buf, lv_coord_t buf_w, lv_color_t colo
/* start transfer */
DMA2D->CR |= DMA2D_CR_START_Msk;
dma2d_wait();
wait_finish();
}
/**
@@ -149,7 +149,7 @@ void lv_gpu_stm32_dma2d_fill_mask(lv_color_t * buf, lv_coord_t buf_w, lv_color_t
HAL_DMA2D_ConfigLayer(&hdma2d, 0);
HAL_DMA2D_ConfigLayer(&hdma2d, 1);
HAL_DMA2D_BlendingStart(&hdma2d, (uint32_t) mask, (uint32_t) buf, (uint32_t)buf, fill_w, fill_h);
dma2d_wait();
wait_finish();
#endif
}
@@ -179,7 +179,7 @@ void lv_gpu_stm32_dma2d_copy(lv_color_t * buf, lv_coord_t buf_w, const lv_color_
/* start transfer */
DMA2D->CR |= DMA2D_CR_START_Msk;
dma2d_wait();
wait_finish();
}
/**
@@ -217,7 +217,19 @@ void lv_gpu_stm32_dma2d_blend(lv_color_t * buf, lv_coord_t buf_w, const lv_color
/* start transfer */
DMA2D->CR |= DMA2D_CR_START_Msk;
dma2d_wait();
wait_finish();
}
void lv_gpu_stm32_dma2d_wait_cb(lv_disp_drv_t * drv)
{
if(drv && drv->wait_cb) {
while(DMA2D->CR & DMA2D_CR_START_Msk) {
drv->wait_cb(drv);
}
}
else {
while(DMA2D->CR & DMA2D_CR_START_Msk);
}
}
/**********************
@@ -230,14 +242,17 @@ static void invalidate_cache(void)
if(disp->driver.clean_dcache_cb) disp->driver.clean_dcache_cb(&disp->driver);
else {
#if __CORTEX_M >= 0x07
SCB_CleanInvalidateDCache();
if((SCB->CCR) & (uint32_t)SCB_CCR_DC_Msk)
SCB_CleanInvalidateDCache();
#endif
}
}
static void dma2d_wait(void)
static void wait_finish(void)
{
lv_disp_t * disp = _lv_refr_get_disp_refreshing();
if(disp->driver.gpu_wait_cb) return;
while(DMA2D->CR & DMA2D_CR_START_Msk) {
if(disp->driver.wait_cb) disp->driver.wait_cb(&disp->driver);
}

View File

@@ -15,6 +15,7 @@ extern "C" {
*********************/
#include "../lv_misc/lv_area.h"
#include "../lv_misc/lv_color.h"
#include "../lv_hal/lv_hal_disp.h"
/*********************
* DEFINES
@@ -91,6 +92,14 @@ void lv_gpu_stm32_dma2d_copy(lv_color_t * buf, lv_coord_t buf_w, const lv_color_
*/
void lv_gpu_stm32_dma2d_blend(lv_color_t * buf, lv_coord_t buf_w, const lv_color_t * map, lv_opa_t opa,
lv_coord_t map_w, lv_coord_t copy_w, lv_coord_t copy_h);
/**
* Can be used as `gpu_wait_cb` in display driver to
* let the MCU run while the GPU is working
*/
void lv_gpu_stm32_dma2d_wait_cb(lv_disp_drv_t * drv);
/**********************
* MACROS
**********************/

View File

@@ -341,7 +341,7 @@ lv_anim_value_t lv_anim_path_overshoot(const lv_anim_path_t * path, const lv_ani
else
t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time;
int32_t step = _lv_bezier3(t, 0, 1000, 2000, 1024);
int32_t step = _lv_bezier3(t, 0, 1000, 1300, 1024);
int32_t new_value;
new_value = (int32_t)step * (a->end - a->start);
@@ -362,7 +362,7 @@ lv_anim_value_t lv_anim_path_bounce(const lv_anim_path_t * path, const lv_anim_t
LV_UNUSED(path);
/*Calculate the current step*/
uint32_t t;
int32_t t;
if(a->time == a->act_time)
t = 1024;
else
@@ -381,31 +381,32 @@ lv_anim_value_t lv_anim_path_bounce(const lv_anim_path_t * path, const lv_anim_t
t -= 408;
t = t * 5; /*to [0..1024] range*/
t = 1024 - t;
diff = diff / 6;
diff = diff / 20;
}
else if(t >= 614 && t < 819) {
/*Fall back*/
t -= 614;
t = t * 5; /*to [0..1024] range*/
diff = diff / 6;
diff = diff / 20;
}
else if(t >= 819 && t < 921) {
/*Second bounce back*/
t -= 819;
t = t * 10; /*to [0..1024] range*/
t = 1024 - t;
diff = diff / 16;
diff = diff / 40;
}
else if(t >= 921 && t <= 1024) {
/*Fall back*/
t -= 921;
t = t * 10; /*to [0..1024] range*/
diff = diff / 16;
diff = diff / 40;
}
if(t > 1024) t = 1024;
if(t < 0) t = 0;
int32_t step = _lv_bezier3(t, 1024, 1024, 800, 0);
int32_t step = _lv_bezier3(t, 1024, 800, 500, 0);
int32_t new_value;
new_value = (int32_t)step * diff;

View File

@@ -108,9 +108,9 @@ enum {
* Macros for all existing color depths
* to set/get values of the color channels
*------------------------------------------*/
# define LV_COLOR_SET_R1(c, v) (c).ch.red = (uint8_t)((v) & 0x1);
# define LV_COLOR_SET_G1(c, v) (c).ch.green = (uint8_t)((v) & 0x1);
# define LV_COLOR_SET_B1(c, v) (c).ch.blue = (uint8_t)((v) & 0x1);
# define LV_COLOR_SET_R1(c, v) (c).ch.red = (uint8_t)((v) & 0x1)
# define LV_COLOR_SET_G1(c, v) (c).ch.green = (uint8_t)((v) & 0x1)
# define LV_COLOR_SET_B1(c, v) (c).ch.blue = (uint8_t)((v) & 0x1)
# define LV_COLOR_SET_A1(c, v)
# define LV_COLOR_GET_R1(c) (c).ch.red
@@ -118,9 +118,9 @@ enum {
# define LV_COLOR_GET_B1(c) (c).ch.blue
# define LV_COLOR_GET_A1(c) 1
# define LV_COLOR_SET_R8(c, v) (c).ch.red = (uint8_t)(v) & 0x7U;
# define LV_COLOR_SET_G8(c, v) (c).ch.green = (uint8_t)(v) & 0x7U;
# define LV_COLOR_SET_B8(c, v) (c).ch.blue = (uint8_t)(v) & 0x3U;
# define LV_COLOR_SET_R8(c, v) (c).ch.red = (uint8_t)(v) & 0x7U
# define LV_COLOR_SET_G8(c, v) (c).ch.green = (uint8_t)(v) & 0x7U
# define LV_COLOR_SET_B8(c, v) (c).ch.blue = (uint8_t)(v) & 0x3U
# define LV_COLOR_SET_A8(c, v) do {} while(0)
# define LV_COLOR_GET_R8(c) (c).ch.red
@@ -128,10 +128,10 @@ enum {
# define LV_COLOR_GET_B8(c) (c).ch.blue
# define LV_COLOR_GET_A8(c) 0xFF
# define LV_COLOR_SET_R16(c, v) (c).ch.red = (uint8_t)(v) & 0x1FU;
# define LV_COLOR_SET_G16(c, v) (c).ch.green = (uint8_t)(v) & 0x3FU;
# define LV_COLOR_SET_R16(c, v) (c).ch.red = (uint8_t)(v) & 0x1FU
# define LV_COLOR_SET_G16(c, v) (c).ch.green = (uint8_t)(v) & 0x3FU
# define LV_COLOR_SET_G16_SWAP(c, v) {(c).ch.green_h = (uint8_t)(((v) >> 3) & 0x7); (c).ch.green_l = (uint8_t)((v) & 0x7);}
# define LV_COLOR_SET_B16(c, v) (c).ch.blue = (uint8_t)(v) & 0x1FU;
# define LV_COLOR_SET_B16(c, v) (c).ch.blue = (uint8_t)(v) & 0x1FU
# define LV_COLOR_SET_A16(c, v) do {} while(0)
# define LV_COLOR_GET_R16(c) (c).ch.red
@@ -140,10 +140,10 @@ enum {
# define LV_COLOR_GET_B16(c) (c).ch.blue
# define LV_COLOR_GET_A16(c) 0xFF
# define LV_COLOR_SET_R32(c, v) (c).ch.red = (uint32_t)((v) & 0xFF);
# define LV_COLOR_SET_G32(c, v) (c).ch.green = (uint32_t)((v) & 0xFF);
# define LV_COLOR_SET_B32(c, v) (c).ch.blue = (uint32_t)((v) & 0xFF);
# define LV_COLOR_SET_A32(c, v) (c).ch.alpha = (uint32_t)((v) & 0xFF);
# define LV_COLOR_SET_R32(c, v) (c).ch.red = (uint32_t)((v) & 0xFF)
# define LV_COLOR_SET_G32(c, v) (c).ch.green = (uint32_t)((v) & 0xFF)
# define LV_COLOR_SET_B32(c, v) (c).ch.blue = (uint32_t)((v) & 0xFF)
# define LV_COLOR_SET_A32(c, v) (c).ch.alpha = (uint32_t)((v) & 0xFF)
# define LV_COLOR_GET_R32(c) (c).ch.red
# define LV_COLOR_GET_G32(c) (c).ch.green

View File

@@ -536,7 +536,7 @@ void * _lv_mem_buf_get(uint32_t size)
}
}
LV_DEBUG_ASSERT(false, "No free buffer. Increase LV_DRAW_BUF_MAX_NUM.", 0x00);
LV_DEBUG_ASSERT(false, "No free buffer. Increase LV_MEM_BUF_MAX_NUM.", 0x00);
return NULL;
}

View File

@@ -483,7 +483,11 @@ void _lv_txt_cut(char * txt, uint32_t pos, uint32_t len)
char * _lv_txt_set_text_vfmt(const char * fmt, va_list ap)
{
/*Allocate space for the new text by using trick from C99 standard section 7.19.6.12 */
uint32_t len = lv_vsnprintf(NULL, 0, fmt, ap);
va_list ap_copy;
va_copy(ap_copy, ap);
uint32_t len = lv_vsnprintf(NULL, 0, fmt, ap_copy);
va_end(ap_copy);
char * text = 0;
#if LV_USE_ARABIC_PERSIAN_CHARS
/*Put together the text according to the format string*/

View File

@@ -20,6 +20,7 @@ extern "C" {
#include "lv_area.h"
#include "../lv_font/lv_font.h"
#include "lv_printf.h"
/*********************
* DEFINES
*********************/

View File

@@ -211,6 +211,12 @@ static uint32_t lv_ap_get_char_index(uint16_t c)
for(uint8_t i = 0; ap_chars_map[i].char_end_form; i++) {
if(c == (ap_chars_map[i].char_offset + LV_AP_ALPHABET_BASE_CODE))
return i;
else if(c == ap_chars_map[i].char_end_form //is it an End form
|| c == (ap_chars_map[i].char_end_form + ap_chars_map[i].char_begining_form_offset) //is it a Begining form
|| c == (ap_chars_map[i].char_end_form + ap_chars_map[i].char_middle_form_offset) //is it a middle form
|| c == (ap_chars_map[i].char_end_form + ap_chars_map[i].char_isolated_form_offset)) { //is it an isolated form
return i;
}
}
return LV_UNDEF_ARABIC_PERSIAN_CHARS;
}

View File

@@ -27,7 +27,7 @@
/*BUTTON*/
#define COLOR_BTN (IS_LIGHT ? lv_color_hex(0xffffff) : lv_color_hex(0x586273))
#define COLOR_BTN_PR (IS_LIGHT ? lv_color_mix(theme.color_primary, COLOR_BTN, LV_OPA_10) : lv_color_mix(theme.color_primary, COLOR_BTN, LV_OPA_30))
#define COLOR_BTN_PR (IS_LIGHT ? lv_color_mix(theme.color_primary, COLOR_BTN, LV_OPA_20) : lv_color_mix(theme.color_primary, COLOR_BTN, LV_OPA_30))
#define COLOR_BTN_CHK (theme.color_primary)
#define COLOR_BTN_CHK_PR (lv_color_darken(theme.color_primary, LV_OPA_30))
@@ -844,10 +844,6 @@ static void tabview_win_shared_init(void)
style_init_reset(&styles->tabview_btns_bg);
lv_style_set_bg_opa(&styles->tabview_btns_bg, LV_STATE_DEFAULT, LV_OPA_COVER);
lv_style_set_bg_color(&styles->tabview_btns_bg, LV_STATE_DEFAULT, COLOR_BG);
lv_style_set_border_color(&styles->tabview_btns_bg, LV_STATE_DEFAULT,
IS_LIGHT ? lv_color_hex(0xe4eaf0) : lv_color_hex(0x3b3e42));
lv_style_set_border_width(&styles->tabview_btns_bg, LV_STATE_DEFAULT, LV_DPX(5));
lv_style_set_border_side(&styles->tabview_btns_bg, LV_STATE_DEFAULT, LV_BORDER_SIDE_BOTTOM);
lv_style_set_text_color(&styles->tabview_btns_bg, LV_STATE_DEFAULT, COLOR_SCR_TEXT);
lv_style_set_image_recolor(&styles->tabview_btns_bg, LV_STATE_DEFAULT, lv_color_hex(0x979a9f));
lv_style_set_pad_top(&styles->tabview_btns_bg, LV_STATE_DEFAULT, LV_DPX(7));

View File

@@ -85,6 +85,7 @@ lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy)
ext->arc_angle_end = 270;
ext->type = LV_ARC_TYPE_NORMAL;
ext->cur_value = -1;
ext->min_close = 1;
ext->min_value = 0;
ext->max_value = 100;
ext->dragging = false;
@@ -272,6 +273,8 @@ void lv_arc_set_bg_start_angle(lv_obj_t * arc, uint16_t start)
}
ext->bg_angle_start = start;
value_update(arc);
}
/**
@@ -304,6 +307,8 @@ void lv_arc_set_bg_end_angle(lv_obj_t * arc, uint16_t end)
lv_obj_invalidate(arc);
}
value_update(arc);
ext->bg_angle_end = end;
}
@@ -328,6 +333,8 @@ void lv_arc_set_bg_angles(lv_obj_t * arc, uint16_t start, uint16_t end)
ext->bg_angle_end = end;
inv_arc_area(arc, ext->bg_angle_start, ext->bg_angle_end, LV_ARC_PART_BG);
value_update(arc);
}
/**
@@ -751,6 +758,9 @@ static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param)
/*It must be in "dragging" mode to turn the arc*/
if(ext->dragging == false) return res;
/*No angle can be determined if exactly the middle of the arc is being pressed*/
if(p.x == 0 && p.y == 0) return res;
/*Calculate the angle of the pressed point*/
int16_t angle;
int16_t bg_end = ext->bg_angle_end;
@@ -758,13 +768,31 @@ static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param)
bg_end = ext->bg_angle_end + 360;
}
angle = 360 - _lv_atan2(p.x, p.y) + 90; /*Some transformation is required*/
angle = _lv_atan2(p.y, p.x);
angle -= ext->rotation_angle;
if(angle < ext->bg_angle_start) angle = ext->bg_angle_start;
if(angle > bg_end) angle = bg_end;
angle -= ext->bg_angle_start; /*Make the angle relative to the start angle*/
if(angle < 0) angle += 360;
int16_t deg_range = bg_end - ext->bg_angle_start;
int16_t last_angle_rel = ext->last_angle - ext->bg_angle_start;
int16_t delta_angle = angle - last_angle_rel;
/* Do not allow big jumps.
* It's mainly to avoid jumping to the opposite end if the "dead" range between min. an max. is crossed.
* Check which and was closer on the last valid press (ext->min_close) and prefer that end */
if(LV_MATH_ABS(delta_angle) > 180) {
if(ext->min_close) angle = 0;
else angle = deg_range;
}
else {
if(angle < deg_range / 2) ext->min_close = 1;
else ext->min_close = 0;
}
/*Calculate the slew rate limited angle based on change rate (degrees/sec)*/
int16_t delta_angle = angle - ext->last_angle;
delta_angle = angle - last_angle_rel;
uint32_t delta_tick = lv_tick_elaps(ext->last_tick);
int16_t delta_angle_max = (ext->chg_rate * delta_tick) / 1000;
@@ -775,13 +803,15 @@ static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param)
delta_angle = -delta_angle_max;
}
angle = ext->last_angle + delta_angle; /*Apply the limited angle change*/
angle = last_angle_rel + delta_angle; /*Apply the limited angle change*/
/*Rounding for symmetry*/
int32_t round = ((bg_end - ext->bg_angle_start) * 8) / (ext->max_value - ext->min_value);
round = (round + 4) >> 4;
angle += round;
angle += ext->bg_angle_start; /*Make the angle absolute again*/
/*Set the new value*/
int16_t old_value = ext->cur_value;
int16_t new_value = _lv_map(angle, ext->bg_angle_start, bg_end, ext->min_value, ext->max_value);
@@ -831,6 +861,12 @@ static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param)
if(res != LV_RES_OK) return res;
}
}
else if(sign == LV_SIGNAL_GET_EDITABLE) {
#if LV_USE_GROUP
bool * editable = (bool *)param;
*editable = true;
#endif
}
else if(sign == LV_SIGNAL_CLEANUP) {
lv_obj_clean_style_list(arc, LV_ARC_PART_KNOB);
lv_obj_clean_style_list(arc, LV_ARC_PART_INDIC);

View File

@@ -51,6 +51,7 @@ typedef struct {
uint16_t dragging : 1;
uint16_t type : 2;
uint16_t adjustable : 1;
uint16_t min_close : 1; /*1: the last pressed angle was closer to minimum end*/
uint16_t chg_rate; /*Drag angle rate of change of the arc (degrees/sec)*/
uint32_t last_tick; /*Last dragging event timestamp of the arc*/
int16_t last_angle; /*Last dragging angle of the arc*/

View File

@@ -157,9 +157,11 @@ void lv_bar_set_value(lv_obj_t * bar, int16_t value, lv_anim_enable_t anim)
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
if(ext->cur_value == value) return;
int16_t new_value;
new_value = value > ext->max_value ? ext->max_value : value;
int16_t new_value = value;
new_value = value > ext->max_value ? ext->max_value : new_value;
new_value = new_value < ext->min_value ? ext->min_value : new_value;
new_value = new_value < ext->start_value ? ext->start_value : new_value;
if(ext->cur_value == new_value) return;
#if LV_USE_ANIMATION == 0
@@ -184,9 +186,10 @@ void lv_bar_set_start_value(lv_obj_t * bar, int16_t start_value, lv_anim_enable_
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
if(ext->start_value == start_value) return;
int16_t new_value;
new_value = start_value > ext->max_value ? ext->max_value : start_value;
new_value = new_value < ext->min_value ? ext->min_value : start_value;
int16_t new_value = start_value;
new_value = new_value > ext->max_value ? ext->max_value : new_value;
new_value = new_value < ext->min_value ? ext->min_value : new_value;
new_value = new_value > ext->cur_value ? ext->cur_value : new_value;
if(ext->start_value == new_value) return;
#if LV_USE_ANIMATION == 0

View File

@@ -15,6 +15,7 @@
#include "../lv_core/lv_refr.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_txt.h"
#include "../lv_misc/lv_txt_ap.h"
/*********************
* DEFINES
@@ -43,7 +44,6 @@ static bool button_get_tgl_state(lv_btnmatrix_ctrl_t ctrl_bits);
static uint16_t get_button_from_point(lv_obj_t * btnm, lv_point_t * p);
static void allocate_btn_areas_and_controls(const lv_obj_t * btnm, const char ** map);
static void invalidate_button_area(const lv_obj_t * btnm, uint16_t btn_idx);
static bool maps_are_identical(const char ** map1, const char ** map2);
static void make_one_button_toggled(lv_obj_t * btnm, uint16_t btn_idx);
/**********************
@@ -152,11 +152,9 @@ void lv_btnmatrix_set_map(lv_obj_t * btnm, const char * map[])
* set/allocation when map hasn't changed.
*/
lv_btnmatrix_ext_t * ext = lv_obj_get_ext_attr(btnm);
if(!maps_are_identical(ext->map_p, map)) {
/*Analyze the map and create the required number of buttons*/
allocate_btn_areas_and_controls(btnm, map);
}
/*Analyze the map and create the required number of buttons*/
allocate_btn_areas_and_controls(btnm, map);
ext->map_p = map;
/*Set size and positions of the buttons*/
@@ -683,6 +681,10 @@ static lv_design_res_t lv_btnmatrix_design(lv_obj_t * btnm, const lv_area_t * cl
lv_style_int_t padding_top = lv_obj_get_style_pad_top(btnm, LV_BTNMATRIX_PART_BG);
lv_style_int_t padding_bottom = lv_obj_get_style_pad_bottom(btnm, LV_BTNMATRIX_PART_BG);
#if LV_USE_ARABIC_PERSIAN_CHARS
const size_t txt_ap_size = 256 ;
char * txt_ap = _lv_mem_buf_get(txt_ap_size);
#endif
for(btn_i = 0; btn_i < ext->btn_cnt; btn_i++, txt_i++) {
/*Search the next valid text in the map*/
while(strcmp(ext->map_p[txt_i], "\n") == 0) {
@@ -798,6 +800,16 @@ static lv_design_res_t lv_btnmatrix_design(lv_obj_t * btnm, const lv_area_t * cl
lv_style_int_t letter_space = draw_label_dsc_act->letter_space;
lv_style_int_t line_space = draw_label_dsc_act->line_space;
const char * txt = ext->map_p[txt_i];
#if LV_USE_ARABIC_PERSIAN_CHARS
/*Get the size of the Arabic text and process it*/
size_t len_ap = _lv_txt_ap_calc_bytes_cnt(txt);
if(len_ap < txt_ap_size) {
_lv_txt_ap_proc(txt, txt_ap);
txt = txt_ap;
}
#endif
lv_point_t txt_size;
_lv_txt_get_size(&txt_size, txt, font, letter_space,
line_space, lv_area_get_width(&area_btnm), txt_flag);
@@ -809,6 +821,10 @@ static lv_design_res_t lv_btnmatrix_design(lv_obj_t * btnm, const lv_area_t * cl
lv_draw_label(&area_tmp, clip_area, draw_label_dsc_act, txt, NULL);
}
#if LV_USE_ARABIC_PERSIAN_CHARS
_lv_mem_buf_release(txt_ap);
#endif
}
else if(mode == LV_DESIGN_DRAW_POST) {
ancestor_design_f(btnm, clip_area, mode);
@@ -1132,6 +1148,10 @@ static void allocate_btn_areas_and_controls(const lv_obj_t * btnm, const char **
lv_btnmatrix_ext_t * ext = lv_obj_get_ext_attr(btnm);
/*Do not allocate memory for the same amount of buttons*/
if(btn_cnt == ext->btn_cnt) return;
if(ext->button_areas != NULL) {
lv_mem_free(ext->button_areas);
ext->button_areas = NULL;
@@ -1269,25 +1289,6 @@ static void invalidate_button_area(const lv_obj_t * btnm, uint16_t btn_idx)
lv_obj_invalidate_area(btnm, &btn_area);
}
/**
* Compares two button matrix maps for equality
* @param map1 map to compare
* @param map2 map to compare
* @return true if maps are identical in length and content
*/
static bool maps_are_identical(const char ** map1, const char ** map2)
{
if(map1 == map2) return true;
if(map1 == NULL || map2 == NULL) return map1 == map2;
uint16_t i = 0;
while(map1[i][0] != '\0' && map2[i][0] != '\0') {
if(strcmp(map1[i], map2[i]) != 0) return false;
i++;
}
return map1[i][0] == '\0' && map2[i][0] == '\0';
}
/**
* Enforces a single button being toggled on the button matrix.
* It simply clears the toggle flag on other buttons.

View File

@@ -18,6 +18,7 @@
#include "../lv_font/lv_symbol_def.h"
#include "../lv_misc/lv_anim.h"
#include "../lv_misc/lv_math.h"
#include "../lv_misc/lv_txt_ap.h"
#include <string.h>
/*********************
@@ -217,7 +218,12 @@ void lv_dropdown_set_options(lv_obj_t * ddlist, const char * options)
ext->sel_opt_id_orig = 0;
/*Allocate space for the new text*/
#if LV_USE_ARABIC_PERSIAN_CHARS == 0
size_t len = strlen(options) + 1;
#else
size_t len = _lv_txt_ap_calc_bytes_cnt(options) + 1;
#endif
if(ext->options != NULL && ext->static_txt == 0) {
lv_mem_free(ext->options);
ext->options = NULL;
@@ -228,7 +234,11 @@ void lv_dropdown_set_options(lv_obj_t * ddlist, const char * options)
LV_ASSERT_MEM(ext->options);
if(ext->options == NULL) return;
#if LV_USE_ARABIC_PERSIAN_CHARS == 0
strcpy(ext->options, options);
#else
_lv_txt_ap_proc(options, ext->options);
#endif
/*Now the text is dynamically allocated*/
ext->static_txt = 0;

View File

@@ -390,20 +390,20 @@ void lv_img_set_zoom(lv_obj_t * img, uint16_t zoom)
lv_coord_t h = lv_obj_get_height(img);
lv_area_t a;
_lv_img_buf_get_transformed_area(&a, w, h, transf_angle, (transf_zoom * ext->zoom) >> 8, &ext->pivot);
a.x1 += img->coords.x1;
a.y1 += img->coords.y1;
a.x2 += img->coords.x1;
a.y2 += img->coords.y1;
a.x1 += img->coords.x1 - 1;
a.y1 += img->coords.y1 - 1;
a.x2 += img->coords.x1 + 1;
a.y2 += img->coords.y1 + 1;
lv_obj_invalidate_area(img, &a);
ext->zoom = zoom;
lv_obj_refresh_ext_draw_pad(img);
_lv_img_buf_get_transformed_area(&a, w, h, transf_angle, (transf_zoom * ext->zoom) >> 8, &ext->pivot);
a.x1 += img->coords.x1;
a.y1 += img->coords.y1;
a.x2 += img->coords.x1;
a.y2 += img->coords.y1;
a.x1 += img->coords.x1 - 1;
a.y1 += img->coords.y1 - 1;
a.x2 += img->coords.x1 + 1;
a.y2 += img->coords.y1 + 1;
lv_obj_invalidate_area(img, &a);
}

View File

@@ -30,6 +30,7 @@
static lv_design_res_t lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * param);
static void refr_img(lv_obj_t * imgbtn);
static lv_btn_state_t suggest_state(lv_obj_t * imgbtn, lv_btn_state_t state);
/**********************
* STATIC VARIABLES
@@ -327,7 +328,7 @@ static lv_design_res_t lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * cli
/*Just draw an image*/
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
lv_btn_state_t state = lv_imgbtn_get_state(imgbtn);
lv_btn_state_t state = suggest_state(imgbtn, lv_imgbtn_get_state(imgbtn));
/*Simply draw the middle src if no tiled*/
if(!ext->tiled) {
@@ -440,7 +441,6 @@ static lv_design_res_t lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * cli
draw_dsc.shadow_opa = LV_OPA_TRANSP;
lv_obj_init_draw_rect_dsc(imgbtn, LV_OBJ_PART_MAIN, &draw_dsc);
lv_area_t bg_coords;
lv_area_copy(&bg_coords, &imgbtn->coords);
bg_coords.x1 -= lv_obj_get_style_pad_left(imgbtn, LV_IMGBTN_PART_MAIN);
@@ -501,7 +501,7 @@ static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * par
static void refr_img(lv_obj_t * imgbtn)
{
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
lv_btn_state_t state = lv_imgbtn_get_state(imgbtn);
lv_btn_state_t state = suggest_state(imgbtn, lv_imgbtn_get_state(imgbtn));
lv_img_header_t header;
const void * src = ext->img_src_mid[state];
@@ -531,4 +531,42 @@ static void refr_img(lv_obj_t * imgbtn)
lv_obj_invalidate(imgbtn);
}
/**
* If `src` is not defined for the current state try to get a state which is related to the curent but has `src`.
* E.g. if the PRESSED src is not set but the RELEASED does, use the RELEASED.
* @param imgbtn pointer to an image button
* @param state the state to convert
* @return the suggested state
*/
static lv_btn_state_t suggest_state(lv_obj_t * imgbtn, lv_btn_state_t state)
{
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
if(ext->img_src_mid[state] == NULL) {
switch(state) {
case LV_BTN_STATE_PRESSED:
if(ext->img_src_mid[LV_BTN_STATE_RELEASED]) return LV_BTN_STATE_RELEASED;
break;
case LV_BTN_STATE_CHECKED_RELEASED:
if(ext->img_src_mid[LV_BTN_STATE_RELEASED]) return LV_BTN_STATE_RELEASED;
break;
case LV_BTN_STATE_CHECKED_PRESSED:
if(ext->img_src_mid[LV_BTN_STATE_CHECKED_RELEASED]) return LV_BTN_STATE_CHECKED_RELEASED;
if(ext->img_src_mid[LV_BTN_STATE_PRESSED]) return LV_BTN_STATE_PRESSED;
if(ext->img_src_mid[LV_BTN_STATE_RELEASED]) return LV_BTN_STATE_RELEASED;
break;
case LV_BTN_STATE_DISABLED:
if(ext->img_src_mid[LV_BTN_STATE_RELEASED]) return LV_BTN_STATE_RELEASED;
break;
case LV_BTN_STATE_CHECKED_DISABLED:
if(ext->img_src_mid[LV_BTN_STATE_CHECKED_RELEASED]) return LV_BTN_STATE_CHECKED_RELEASED;
if(ext->img_src_mid[LV_BTN_STATE_RELEASED]) return LV_BTN_STATE_RELEASED;
break;
default:
break;
}
}
return state;
}
#endif

View File

@@ -185,11 +185,8 @@ void lv_label_set_text(lv_obj_t * label, const char * text)
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
/*If text is NULL then refresh */
if(text == NULL) {
lv_label_refr_text(label);
return;
}
/*If text is NULL then just refresh with the current text */
if(text == NULL) text = ext->text;
LV_ASSERT_STR(text);
@@ -962,7 +959,7 @@ void lv_label_ins_text(lv_obj_t * label, uint32_t pos, const char * txt)
#else
_lv_txt_ins(ext->text, pos, txt);
#endif
lv_label_refr_text(label);
lv_label_set_text(label, NULL);
}
/**
@@ -1191,7 +1188,7 @@ void lv_label_refr_text(lv_obj_t * label)
size_t txt_len = strlen(ext->text);
uint32_t byte_id = _lv_txt_encoded_get_byte_id(ext->text, letter_id);
while(byte_id + LV_LABEL_DOT_NUM > txt_len) {
byte_id -= _lv_txt_encoded_size(&ext->text[byte_id]);
_lv_txt_encoded_prev(ext->text, &byte_id);
letter_id--;
}

View File

@@ -131,83 +131,9 @@ void lv_linemeter_set_value(lv_obj_t * lmeter, int32_t value)
int16_t level_new =
(int32_t)((int32_t)(ext->cur_value - ext->min_value) * (ext->line_cnt - 1)) / (ext->max_value - ext->min_value);
if(level_new == level_old) {
return;
}
lv_style_int_t left = lv_obj_get_style_pad_left(lmeter, LV_LINEMETER_PART_MAIN);
lv_style_int_t right = lv_obj_get_style_pad_right(lmeter, LV_LINEMETER_PART_MAIN);
lv_style_int_t top = lv_obj_get_style_pad_top(lmeter, LV_LINEMETER_PART_MAIN);
lv_style_int_t bottom = lv_obj_get_style_pad_bottom(lmeter, LV_LINEMETER_PART_MAIN);
lv_coord_t r_out = (lv_obj_get_width(lmeter) - left - right) / 2 ;
lv_coord_t r_in = r_out - lv_obj_get_style_scale_width(lmeter, LV_LINEMETER_PART_MAIN);
if(r_in < 1) r_in = 1;
lv_coord_t x_ofs = lmeter->coords.x1 + r_out + left;
lv_coord_t y_ofs = lmeter->coords.y1 + r_out + top;
int16_t angle_ofs = ext->angle_ofs + 90 + (360 - ext->scale_angle) / 2;
lv_style_int_t line_width = lv_obj_get_style_scale_end_line_width(lmeter, LV_LINEMETER_PART_MAIN);
lv_style_int_t end_line_width = lv_obj_get_style_scale_end_line_width(lmeter, LV_LINEMETER_PART_MAIN);
line_width = LV_MATH_MAX(line_width, end_line_width);
int32_t angle_old = (level_old * ext->scale_angle) / (ext->line_cnt - 1);
/*Use smaller clip area only around the visible line*/
int32_t y_in_old = (int32_t)((int32_t)_lv_trigo_sin(angle_old + angle_ofs) * r_in) >> LV_TRIGO_SHIFT;
int32_t x_in_old = (int32_t)((int32_t)_lv_trigo_sin(angle_old + 90 + angle_ofs) * r_in) >> LV_TRIGO_SHIFT;
int32_t y_out_old = (int32_t)((int32_t)_lv_trigo_sin(angle_old + angle_ofs) * r_out) >> LV_TRIGO_SHIFT;
int32_t x_out_old = (int32_t)((int32_t)_lv_trigo_sin(angle_old + 90 + angle_ofs) * r_out) >> LV_TRIGO_SHIFT;
int32_t angle_new = (level_new * ext->scale_angle) / (ext->line_cnt - 1);
/*Use smaller clip area only around the visible line*/
int32_t y_in_new = (int32_t)((int32_t)_lv_trigo_sin(angle_new + angle_ofs) * r_in) >> LV_TRIGO_SHIFT;
int32_t x_in_new = (int32_t)((int32_t)_lv_trigo_sin(angle_new + 90 + angle_ofs) * r_in) >> LV_TRIGO_SHIFT;
int32_t y_out_new = (int32_t)((int32_t)_lv_trigo_sin(angle_new + angle_ofs) * r_out) >> LV_TRIGO_SHIFT;
int32_t x_out_new = (int32_t)((int32_t)_lv_trigo_sin(angle_new + 90 + angle_ofs) * r_out) >> LV_TRIGO_SHIFT;
lv_area_t a;
if(x_out_old < 0 && x_out_new < 0) {
a.x1 = lmeter->coords.x1 + left - line_width;
a.y1 = LV_MATH_MIN4(y_out_old, y_out_new, y_in_old, y_in_new) + y_ofs - line_width;
a.x2 = LV_MATH_MAX(x_in_old, x_in_new) + x_ofs + line_width;
a.y2 = LV_MATH_MAX4(y_out_old, y_out_new, y_in_old, y_in_new) + y_ofs + line_width;
}
else if(x_out_old > 0 && x_out_new > 0) {
a.x1 = LV_MATH_MIN(x_in_old, x_in_new) + x_ofs - line_width;
a.y1 = LV_MATH_MIN4(y_out_old, y_out_new, y_in_old, y_in_new) + y_ofs - line_width;
a.x2 = lmeter->coords.x2 - right + line_width;
a.y2 = LV_MATH_MAX4(y_out_old, y_out_new, y_in_old, y_in_new) + y_ofs + line_width;
}
else if(y_out_old < 0 && y_out_new < 0) {
a.x1 = LV_MATH_MIN4(x_out_old, x_out_new, x_in_old, x_in_new) + x_ofs - line_width;
a.y1 = lmeter->coords.y1 + top - line_width;
a.x2 = LV_MATH_MAX4(x_out_old, x_out_new, x_in_old, x_in_new) + x_ofs + line_width;
a.y2 = LV_MATH_MAX(y_in_old, y_in_new) + y_ofs + line_width;
}
else if(y_out_old > 0 && y_out_new > 0) {
a.x1 = LV_MATH_MIN4(x_out_old, x_out_new, x_in_old, x_in_new) + x_ofs - line_width;
a.y1 = LV_MATH_MIN(y_in_old, y_in_new) + y_ofs - line_width;
a.x2 = LV_MATH_MAX4(x_out_old, x_out_new, x_in_old, x_in_new) + x_ofs + line_width;
a.y2 = lmeter->coords.y2 - bottom + line_width;
}
else {
a.x1 = lmeter->coords.x1 + left - line_width;
a.y1 = lmeter->coords.y1 + top - line_width;
a.x2 = lmeter->coords.x2 - right + line_width;
a.y2 = lmeter->coords.y2 - bottom + line_width;
}
lv_obj_invalidate_area(lmeter, &a);
if(level_new == level_old) return;
lv_obj_invalidate(lmeter);
}
/**
@@ -521,7 +447,7 @@ void lv_linemeter_draw_scale(lv_obj_t * lmeter, const lv_area_t * clip_area, uin
p1.y = y_out_extra;
/* Set the color of the lines */
if((!ext->mirrored && i >= level) || (ext->mirrored && i <= level)) {
if((!ext->mirrored && i > level) || (ext->mirrored && i < level)) {
line_dsc.color = end_color;
line_dsc.width = end_line_width;
}

View File

@@ -250,10 +250,16 @@ bool lv_list_remove(const lv_obj_t * list, uint16_t index)
{
LV_ASSERT_OBJ(list, LV_OBJX_NAME);
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
uint16_t count = 0;
lv_obj_t * e = lv_list_get_next_btn(list, NULL);
while(e != NULL) {
if(count == index) {
#if LV_USE_GROUP
if(e == ext->last_sel_btn) ext->last_sel_btn = NULL;
#endif
if(e == ext->act_sel_btn) ext->act_sel_btn = NULL;
lv_obj_del(e);
return true;
}

View File

@@ -177,7 +177,7 @@ void lv_roller_set_options(lv_obj_t * roller, const char * options, lv_roller_mo
lv_label_set_text(label, options);
}
else {
ext->mode = LV_ROLLER_MODE_INIFINITE;
ext->mode = LV_ROLLER_MODE_INFINITE;
size_t opt_len = strlen(options) + 1; /*+1 to add '\n' after option lists*/
char * opt_extra = _lv_mem_buf_get(opt_len * LV_ROLLER_INF_PAGES);
@@ -238,7 +238,7 @@ void lv_roller_set_selected(lv_obj_t * roller, uint16_t sel_opt, lv_anim_enable_
lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
/*In infinite mode interpret the new ID relative to the currently visible "page"*/
if(ext->mode == LV_ROLLER_MODE_INIFINITE) {
if(ext->mode == LV_ROLLER_MODE_INFINITE) {
int32_t sel_opt_signed = sel_opt;
uint16_t page = ext->sel_opt_id / LV_ROLLER_INF_PAGES;
@@ -302,7 +302,7 @@ uint16_t lv_roller_get_selected(const lv_obj_t * roller)
LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
if(ext->mode == LV_ROLLER_MODE_INIFINITE) {
if(ext->mode == LV_ROLLER_MODE_INFINITE) {
uint16_t real_id_cnt = ext->option_cnt / LV_ROLLER_INF_PAGES;
return ext->sel_opt_id % real_id_cnt;
}
@@ -355,7 +355,7 @@ uint16_t lv_roller_get_option_cnt(const lv_obj_t * roller)
LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
if(ext->mode == LV_ROLLER_MODE_INIFINITE) {
if(ext->mode == LV_ROLLER_MODE_INFINITE) {
return ext->option_cnt / LV_ROLLER_INF_PAGES;
}
else {
@@ -1005,7 +1005,7 @@ static void inf_normalize(void * scrl)
lv_obj_t * roller = lv_obj_get_parent(roller_scrl);
lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
if(ext->mode == LV_ROLLER_MODE_INIFINITE) {
if(ext->mode == LV_ROLLER_MODE_INFINITE) {
uint16_t real_id_cnt = ext->option_cnt / LV_ROLLER_INF_PAGES;
ext->sel_opt_id = ext->sel_opt_id % real_id_cnt;
ext->sel_opt_id += (LV_ROLLER_INF_PAGES / 2) * real_id_cnt; /*Select the middle page*/

View File

@@ -37,7 +37,7 @@ extern "C" {
/** Roller mode. */
enum {
LV_ROLLER_MODE_NORMAL, /**< Normal mode (roller ends at the end of the options). */
LV_ROLLER_MODE_INIFINITE, /**< Infinite mode (roller can be scrolled forever). */
LV_ROLLER_MODE_INFINITE, /**< Infinite mode (roller can be scrolled forever). */
};
typedef uint8_t lv_roller_mode_t;

View File

@@ -81,6 +81,7 @@ lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy)
/*Initialize the allocated 'ext' */
ext->value_to_set = NULL;
ext->dragging = 0;
ext->left_knob_focus = 0;
lv_style_list_init(&ext->style_knob);
/*The signal and design functions are not copied so set them here*/
@@ -327,6 +328,8 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par
}
}
else if(sign == LV_SIGNAL_PRESSING && ext->value_to_set != NULL) {
if(lv_indev_get_type(param) != LV_INDEV_TYPE_POINTER) return res;
lv_indev_get_point(param, &p);
lv_bidi_dir_t base_dir = lv_obj_get_base_dir(slider);
@@ -390,11 +393,25 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par
bool editing = lv_group_get_editing(g);
lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
if(indev_type == LV_INDEV_TYPE_ENCODER) {
if(editing) lv_group_set_editing(g, false);
if(editing) {
if(lv_slider_get_type(slider) == LV_SLIDER_TYPE_RANGE) {
if(ext->left_knob_focus == 0) ext->left_knob_focus = 1;
else {
ext->left_knob_focus = 0;
lv_group_set_editing(g, false);
}
}
else {
lv_group_set_editing(g, false);
}
}
}
#endif
}
else if(sign == LV_SIGNAL_FOCUS) {
ext->left_knob_focus = 0;
}
else if(sign == LV_SIGNAL_COORD_CHG) {
/* The knob size depends on slider size.
* During the drawing method the ext. size is used by the knob so refresh the ext. size.*/
@@ -425,12 +442,16 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par
char c = *((char *)param);
if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
lv_slider_set_value(slider, lv_slider_get_value(slider) + 1, LV_ANIM_ON);
if(!ext->left_knob_focus) lv_slider_set_value(slider, lv_slider_get_value(slider) + 1, LV_ANIM_ON);
else lv_slider_set_left_value(slider, lv_slider_get_left_value(slider) + 1, LV_ANIM_ON);
res = lv_event_send(slider, LV_EVENT_VALUE_CHANGED, NULL);
if(res != LV_RES_OK) return res;
}
else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
lv_slider_set_value(slider, lv_slider_get_value(slider) - 1, LV_ANIM_ON);
if(!ext->left_knob_focus) lv_slider_set_value(slider, lv_slider_get_value(slider) - 1, LV_ANIM_ON);
else lv_slider_set_left_value(slider, lv_slider_get_left_value(slider) - 1, LV_ANIM_ON);
res = lv_event_send(slider, LV_EVENT_VALUE_CHANGED, NULL);
if(res != LV_RES_OK) return res;
}

View File

@@ -49,6 +49,7 @@ typedef struct {
lv_area_t right_knob_area;
int16_t * value_to_set; /* Which bar value to set */
uint8_t dragging : 1; /*1: the slider is being dragged*/
uint8_t left_knob_focus : 1; /*1: with encoder now the right knob can be adjusted*/
} lv_slider_ext_t;
/** Built-in styles of slider*/

View File

@@ -198,6 +198,8 @@ void lv_spinbox_set_step(lv_obj_t * spinbox, uint32_t step)
if(ext == NULL) return;
ext->step = step;
lv_spinbox_updatevalue(spinbox);
}
/**

View File

@@ -467,6 +467,8 @@ void lv_table_set_cell_type(lv_obj_t * table, uint16_t row, uint16_t col, uint8_
ext->cell_data[cell][0] = format.format_byte;
ext->cell_types |= 1 << type;
lv_obj_invalidate(table);
}
/**

View File

@@ -715,8 +715,9 @@ void lv_textarea_set_pwd_mode(lv_obj_t * ta, bool en)
lv_textarea_ext_t * ext = lv_obj_get_ext_attr(ta);
if(ext->pwd_mode == en) return;
ext->pwd_mode = en == false ? 0 : 1;
/*Pwd mode is now enabled*/
if(ext->pwd_mode == 0 && en != false) {
if(en != false) {
char * txt = lv_label_get_text(ext->label);
size_t len = strlen(txt);
ext->pwd_tmp = lv_mem_alloc(len + 1);
@@ -730,15 +731,13 @@ void lv_textarea_set_pwd_mode(lv_obj_t * ta, bool en)
lv_textarea_clear_selection(ta);
}
/*Pwd mode is now disabled*/
else if(ext->pwd_mode == 1 && en == false) {
else {
lv_textarea_clear_selection(ta);
lv_label_set_text(ext->label, ext->pwd_tmp);
lv_mem_free(ext->pwd_tmp);
ext->pwd_tmp = NULL;
}
ext->pwd_mode = en == false ? 0 : 1;
refr_cursor_area(ta);
}