From ed90f369849bbe236847a74e70240d0485dd6178 Mon Sep 17 00:00:00 2001 From: Jozef Bastek Date: Mon, 14 Sep 2020 18:01:58 +0200 Subject: [PATCH 01/61] VG-Lite: Added support for fill and BLIT VG-Lite accelerated features: - fill (+ transparency) - BLIT (+ transparency) Limitation: Image width must be aligned to 16 for VG-Lite to process the buffer. Signed-off-by: Jozef Bastek --- lv_conf_template.h | 11 +- src/lv_conf_internal.h | 16 +- src/lv_draw/lv_draw_blend.c | 78 +++++++++ src/lv_gpu/lv_gpu_nxp_vglite.c | 303 +++++++++++++++++++++++++++++++++ src/lv_gpu/lv_gpu_nxp_vglite.h | 133 +++++++++++++++ 5 files changed, 537 insertions(+), 4 deletions(-) create mode 100644 src/lv_gpu/lv_gpu_nxp_vglite.c create mode 100644 src/lv_gpu/lv_gpu_nxp_vglite.h diff --git a/lv_conf_template.h b/lv_conf_template.h index 8c9606814..f05195993 100644 --- a/lv_conf_template.h +++ b/lv_conf_template.h @@ -205,6 +205,8 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h" */ * */ #define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 +/*1: Use VG-Lite for CPU offload on NXP RTxxx platforms */ +#define LV_USE_GPU_NXP_VG_LITE 0 /* 1: Enable file system (might be required for images */ #define LV_USE_FILESYSTEM 1 @@ -260,9 +262,14 @@ typedef void * lv_img_decoder_user_data_t; /* Define a custom attribute to `lv_disp_flush_ready` function */ #define LV_ATTRIBUTE_FLUSH_READY +/* Required alignment size for buffers */ +#define LV_ATTRIBUTE_MEM_ALIGN_SIZE + /* With size optimization (-Os) the compiler might not align data to - * 4 or 8 byte boundary. This alignment will be explicitly applied where needed. - * E.g. __attribute__((aligned(4))) */ + * 4 or 8 byte boundary. Some HW may need even 32 or 64 bytes. + * This alignment will be explicitly applied where needed. + * LV_ATTRIBUTE_MEM_ALIGN_SIZE should be used to specify required align size. + * E.g. __attribute__((aligned(LV_ATTRIBUTE_MEM_ALIGN_SIZE))) */ #define LV_ATTRIBUTE_MEM_ALIGN /* Attribute to mark large constant arrays for example diff --git a/src/lv_conf_internal.h b/src/lv_conf_internal.h index ef6fc6cc0..0a23c900d 100644 --- a/src/lv_conf_internal.h +++ b/src/lv_conf_internal.h @@ -490,6 +490,11 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h" */ #define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 #endif +/*1: Use VG-Lite for CPU offload on NXP RTxxx platforms */ +#ifndef LV_USE_GPU_NXP_VG_LITE +#define LV_USE_GPU_NXP_VG_LITE 0 +#endif + /* 1: Enable file system (might be required for images */ #ifndef LV_USE_FILESYSTEM # ifdef CONFIG_LV_USE_FILESYSTEM @@ -614,9 +619,16 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h" */ # endif #endif +/* Required alignment size for buffers */ +#ifndef LV_ATTRIBUTE_MEM_ALIGN_SIZE +#define LV_ATTRIBUTE_MEM_ALIGN_SIZE +#endif + /* With size optimization (-Os) the compiler might not align data to - * 4 or 8 byte boundary. This alignment will be explicitly applied where needed. - * E.g. __attribute__((aligned(4))) */ + * 4 or 8 byte boundary. Some HW may need even 32 or 64 bytes. + * This alignment will be explicitly applied where needed. + * LV_ATTRIBUTE_MEM_ALIGN_SIZE should be used to specify required align size. + * E.g. __attribute__((aligned(LV_ATTRIBUTE_MEM_ALIGN_SIZE))) */ #ifndef LV_ATTRIBUTE_MEM_ALIGN # ifdef CONFIG_LV_ATTRIBUTE_MEM_ALIGN # define LV_ATTRIBUTE_MEM_ALIGN CONFIG_LV_ATTRIBUTE_MEM_ALIGN diff --git a/src/lv_draw/lv_draw_blend.c b/src/lv_draw/lv_draw_blend.c index 618431a3d..b3274c255 100644 --- a/src/lv_draw/lv_draw_blend.c +++ b/src/lv_draw/lv_draw_blend.c @@ -14,6 +14,8 @@ #if LV_USE_GPU_NXP_PXP #include "../lv_gpu/lv_gpu_nxp_pxp.h" +#elif LV_USE_GPU_NXP_VG_LITE + #include "../lv_gpu/lv_gpu_nxp_vglite.h" #elif LV_USE_GPU_STM32_DMA2D #include "../lv_gpu/lv_gpu_stm32_dma2d.h" #endif @@ -345,6 +347,13 @@ LV_ATTRIBUTE_FAST_MEM static void fill_normal(const lv_area_t * disp_area, lv_co lv_gpu_nxp_pxp_fill(disp_buf, disp_w, draw_area, color, opa); return; } +#elif LV_USE_GPU_NXP_VG_LITE + if(lv_area_get_size(draw_area) >= LV_GPU_NXP_VG_LITE_FILL_SIZE_LIMIT) { + if(lv_gpu_nxp_vglite_fill(disp_buf, disp_w, lv_area_get_height(disp_area), draw_area, color, opa) == LV_RES_OK) { + return; + } + /* Fall down to SW render in case of error */ + } #elif LV_USE_GPU_STM32_DMA2D if(lv_area_get_size(draw_area) >= 240) { lv_gpu_stm32_dma2d_fill(disp_buf_first, disp_w, color, draw_area_w, draw_area_h); @@ -365,6 +374,13 @@ LV_ATTRIBUTE_FAST_MEM static void fill_normal(const lv_area_t * disp_area, lv_co lv_gpu_nxp_pxp_fill(disp_buf, disp_w, draw_area, color, opa); return; } +#elif LV_USE_GPU_NXP_VG_LITE + if(lv_area_get_size(draw_area) >= LV_GPU_NXP_VG_LITE_FILL_OPA_SIZE_LIMIT) { + if(lv_gpu_nxp_vglite_fill(disp_buf, disp_w, lv_area_get_height(disp_area), draw_area, color, opa) == LV_RES_OK) { + return; + } + /* Fall down to SW render in case of error */ + } #elif LV_USE_GPU if(disp->driver.gpu_blend_cb && lv_area_get_size(draw_area) > GPU_SIZE_LIMIT) { for(x = 0; x < draw_area_w ; x++) blend_buf[x].full = color.full; @@ -745,6 +761,37 @@ LV_ATTRIBUTE_FAST_MEM static void map_normal(const lv_area_t * disp_area, lv_col lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa); return; } +#elif (LV_USE_GPU_NXP_VG_LITE) + if(lv_area_get_size(draw_area) >= LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT) { + + lv_gpu_nxp_vglite_blit_info_t blit; + + blit.src = map_buf; + blit.src_width = draw_area_w; + blit.src_height = draw_area_h; + blit.src_stride = lv_area_get_width(map_area) * sizeof(lv_color_t); + blit.src_area.x1 = (draw_area->x1 - (map_area->x1 - disp_area->x1)); + blit.src_area.y1 = (draw_area->y1 - (map_area->y1 - disp_area->y1)); + blit.src_area.x2 = blit.src_area.x1 + draw_area_w; + blit.src_area.y2 = blit.src_area.y1 + draw_area_h; + + + blit.dst = disp_buf; + blit.dst_width = lv_area_get_width(disp_area); + blit.dst_height = lv_area_get_height(disp_area); + blit.dst_stride = lv_area_get_width(disp_area) * sizeof(lv_color_t); + blit.dst_area.x1 = draw_area->x1; + blit.dst_area.y1 = draw_area->y1; + blit.dst_area.x2 = blit.dst_area.x1 + draw_area_w; + blit.dst_area.y2 = blit.dst_area.y1 + draw_area_h; + + blit.opa = opa; + + if(lv_gpu_nxp_vglite_blit(&blit) == LV_RES_OK) { + return; + } + /* Fall down to SW render in case of error */ + } #elif LV_USE_GPU_STM32_DMA2D if(lv_area_get_size(draw_area) >= 240) { lv_gpu_stm32_dma2d_copy(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h); @@ -765,6 +812,37 @@ LV_ATTRIBUTE_FAST_MEM static void map_normal(const lv_area_t * disp_area, lv_col lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa); return; } +#elif (LV_USE_GPU_NXP_VG_LITE) + if(lv_area_get_size(draw_area) >= LV_GPU_NXP_VG_LITE_BLIT_OPA_SIZE_LIMIT) { + + lv_gpu_nxp_vglite_blit_info_t blit; + + blit.src = map_buf; + blit.src_width = lv_area_get_width(map_area); + blit.src_height = lv_area_get_height(map_area); + blit.src_stride = lv_area_get_width(map_area) * sizeof(lv_color_t); + blit.src_area.x1 = (draw_area->x1 - (map_area->x1 - disp_area->x1)); + blit.src_area.y1 = (draw_area->y1 - (map_area->y1 - disp_area->y1)); + blit.src_area.x2 = blit.src_area.x1 + draw_area_w; + blit.src_area.y2 = blit.src_area.y1 + draw_area_h; + + + blit.dst = disp_buf; + blit.dst_width = lv_area_get_width(disp_area); + blit.dst_height = lv_area_get_height(disp_area); + blit.dst_stride = lv_area_get_width(disp_area) * sizeof(lv_color_t); + blit.dst_area.x1 = draw_area->x1; + blit.dst_area.y1 = draw_area->y1; + blit.dst_area.x2 = blit.dst_area.x1 + draw_area_w; + blit.dst_area.y2 = blit.dst_area.y1 + draw_area_h; + + blit.opa = opa; + + if(lv_gpu_nxp_vglite_blit(&blit) == LV_RES_OK) { + return; + } + /* Fall down to SW render in case of error */ + } #elif LV_USE_GPU_STM32_DMA2D if(lv_area_get_size(draw_area) >= 240) { lv_gpu_stm32_dma2d_blend(disp_buf_first, disp_w, map_buf_first, opa, map_w, draw_area_w, draw_area_h); diff --git a/src/lv_gpu/lv_gpu_nxp_vglite.c b/src/lv_gpu/lv_gpu_nxp_vglite.c new file mode 100644 index 000000000..c3ced9264 --- /dev/null +++ b/src/lv_gpu/lv_gpu_nxp_vglite.c @@ -0,0 +1,303 @@ +/** + * @file lv_gpu_nxp_vglite.c + * + */ + +/** + * MIT License + * + * Copyright (c) 2020 NXP + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) + * shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/********************* + * INCLUDES + *********************/ + +#include "lv_conf.h" + +#if LV_USE_GPU_NXP_VG_LITE + +#include "lvgl.h" +#include "lv_gpu_nxp_vglite.h" +#include "../lv_misc/lv_log.h" +#include "fsl_cache.h" +#include "vg_lite.h" + + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +#if LV_COLOR_DEPTH==16 + #define VGLITE_PX_FMT VG_LITE_RGB565 +#else + #error Only 16bit color depth is supported. Set LV_COLOR_DEPTH to 16. +#endif + +/********************** + * STATIC PROTOTYPES + **********************/ + +static lv_res_t init_vg_buf(vg_lite_buffer_t * dst, uint32_t width, uint32_t height, uint32_t stride, + const lv_color_t * ptr); + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +/*** + * Fills rectangular area in buffer. + * @param[in] dest_buf Destination buffer pointer (must be aligned on 32 bytes) + * @param[in] dest_width Destination buffer width in pixels (must be aligned on 16 px) + * @param[in] dest_height Destination buffer height in pixels + * @param[in] fill_area Area to be filled + * @param[in] color Fill color + * @param[in] opa Opacity (255 = full, 128 = 50% background/50% color, 0 = no fill) + * @retval LV_RES_OK Fill completed + * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS) + */ +lv_res_t lv_gpu_nxp_vglite_fill(lv_color_t * dest_buf, lv_coord_t dest_width, lv_coord_t dest_height, + const lv_area_t * fill_area, lv_color_t color, lv_opa_t opa) +{ + vg_lite_buffer_t rt; + vg_lite_rectangle_t rect; + vg_lite_error_t err = VG_LITE_SUCCESS; + lv_color32_t col32 = {.full = lv_color_to32(color)}; /* Convert color to RGBA8888 */ + lv_disp_t * disp = _lv_refr_get_disp_refreshing(); + + if(init_vg_buf(&rt, dest_width, dest_height, dest_width * sizeof(lv_color_t), dest_buf) != LV_RES_OK) { +#if LV_GPU_NXP_VG_LITE_LOG_ERRORS + LV_LOG_ERROR("init_vg_buf reported error. Fill failed."); +#endif + return LV_RES_INV; + } + + if(opa >= LV_OPA_MAX) { /* Opaque fill */ + rect.x = fill_area->x1; + rect.y = fill_area->y1; + rect.width = (fill_area->x2 - fill_area->x1) + 1; + rect.height = (fill_area->y2 - fill_area->y1) + 1; + + if(disp && disp->driver.clean_dcache_cb) { /* Clean & invalidate cache */ + disp->driver.clean_dcache_cb(&disp->driver); + } + + err |= vg_lite_clear(&rt, &rect, col32.full); + err |= vg_lite_finish(); + } + else { /* fill with transparency */ + + + vg_lite_path_t path; + lv_color32_t colMix; + int16_t path_data[] = { /* VG rectangular path */ + VLC_OP_MOVE, fill_area->x1, fill_area->y1, + VLC_OP_LINE, fill_area->x2 + 1, fill_area->y1, + VLC_OP_LINE, fill_area->x2 + 1, fill_area->y2 + 1, + VLC_OP_LINE, fill_area->x1, fill_area->y2 + 1, + VLC_OP_LINE, fill_area->x1, fill_area->y1, + VLC_OP_END + }; + + + err |= vg_lite_init_path(&path, VG_LITE_S16, VG_LITE_LOW, sizeof(path_data), path_data, + fill_area->x1, fill_area->y1, fill_area->x2 + 1, fill_area->y2 + 1); + if(err != VG_LITE_SUCCESS) { +#if LV_GPU_NXP_VG_LITE_LOG_ERRORS + LV_LOG_ERROR("vg_lite_init_path() failed."); +#endif + return LV_RES_INV; + } + + colMix.ch.red = ((uint16_t)col32.ch.red * opa) >> 8; /* Pre-multiply color */ + colMix.ch.green = ((uint16_t)col32.ch.green * opa) >> 8; + colMix.ch.blue = ((uint16_t)col32.ch.blue * opa) >> 8; + colMix.ch.alpha = opa; + + if(disp && disp->driver.clean_dcache_cb) { /* Clean & invalidate cache */ + disp->driver.clean_dcache_cb(&disp->driver); + } + + vg_lite_matrix_t matrix; + vg_lite_identity(&matrix); + + /* Draw rectangle */ + err |= vg_lite_draw(&rt, &path, VG_LITE_FILL_EVEN_ODD, &matrix, VG_LITE_BLEND_SRC_OVER, colMix.full); + if(err) { +#if LV_GPU_NXP_VG_LITE_LOG_ERRORS + LV_LOG_ERROR("vg_lite_draw() failed."); +#endif + vg_lite_clear_path(&path); + return LV_RES_INV; + } + + err |= vg_lite_finish(); + err |= vg_lite_clear_path(&path); + } + + if(err == VG_LITE_SUCCESS) { + return LV_RES_OK; + } + else { +#if LV_GPU_NXP_VG_LITE_LOG_ERRORS + LV_LOG_ERROR("VG Lite Fill failed."); +#endif + return LV_RES_INV; + } +} + + +/*** + * BLock Image Transfer. + * @param[in] blit Description of the transfer + * @retval LV_RES_OK Transfer complete + * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS) + */ +lv_res_t lv_gpu_nxp_vglite_blit(lv_gpu_nxp_vglite_blit_info_t * blit) +{ + vg_lite_buffer_t src_vgbuf, dst_vgbuf; + vg_lite_error_t err = VG_LITE_SUCCESS; + uint32_t rect[4]; + lv_disp_t * disp = _lv_refr_get_disp_refreshing(); + + if(blit->opa < LV_OPA_MIN) { + return LV_RES_OK; /* Nothing to BLIT */ + } + + if (!blit) { + /* Wrong parameter */ + return LV_RES_INV; + } + + /* Wrap src/dst buffer into VG-Lite buffer */ + if(init_vg_buf(&src_vgbuf, blit->src_width, blit->src_height, blit->src_stride, blit->src) != LV_RES_OK) { +#if LV_GPU_NXP_VG_LITE_LOG_ERRORS + LV_LOG_ERROR("init_vg_buf reported error. BLIT failed."); +#endif + return LV_RES_INV; + } + + if(init_vg_buf(&dst_vgbuf, blit->dst_width, blit->dst_height, blit->dst_stride, blit->dst) != LV_RES_OK) { +#if LV_GPU_NXP_VG_LITE_LOG_ERRORS + LV_LOG_ERROR("init_vg_buf reported error. BLIT failed."); +#endif + return LV_RES_INV; + } + + rect[0] = 0; /* Crop */ + rect[1] = 0; + rect[2] = blit->src_width; + rect[3] = blit->src_height; + + vg_lite_matrix_t matrix; + vg_lite_identity(&matrix); + vg_lite_translate(blit->dst_area.x1, blit->dst_area.y1, &matrix); + + if(disp && disp->driver.clean_dcache_cb) { /* Clean & invalidate cache */ + disp->driver.clean_dcache_cb(&disp->driver); + } + + uint32_t color; + vg_lite_blend_t blend; + if(blit->opa >= LV_OPA_MAX) { + color = 0x0; + blend = VG_LITE_BLEND_NONE; + } + else { + color = ((blit->opa) << 24) | ((blit->opa) << 16) | ((blit->opa) << 8) | (blit->opa); + blend = VG_LITE_BLEND_SRC_OVER; + src_vgbuf.image_mode = VG_LITE_MULTIPLY_IMAGE_MODE; + } + err |= vg_lite_blit_rect(&dst_vgbuf, &src_vgbuf, rect, &matrix, blend, color, VG_LITE_FILTER_POINT); + + err |= vg_lite_finish(); + + if(err == VG_LITE_SUCCESS) { + return LV_RES_OK; + } + else { +#if LV_GPU_NXP_VG_LITE_LOG_ERRORS + LV_LOG_ERROR("vg_lite_blit_rect or vg_lite_finish reported error. BLIT failed."); +#endif + return LV_RES_INV; + } +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +/*** + * Fills vg_lite_buffer_t structure according given parameters. + * @param[out] dst Buffer structure to be filled + * @param[in] width Width of buffer in pixels + * @param[in] height Height of buffer in pixels + * @param[in] stride Stride of the buffer in bytes + * @param[in] ptr Pointer to the buffer (must be aligned according VG-Lite requirements) + */ +static lv_res_t init_vg_buf(vg_lite_buffer_t * dst, uint32_t width, uint32_t height, uint32_t stride, + const lv_color_t * ptr) +{ + if((((uintptr_t)ptr) % LV_ATTRIBUTE_MEM_ALIGN_SIZE) != 0x0) { /* Test for alignment */ +#if LV_GPU_NXP_VG_LITE_LOG_ERRORS + LV_LOG_ERROR("ptr (0x%X) not aligned to %d.", (size_t) ptr, LV_ATTRIBUTE_MEM_ALIGN_SIZE); +#endif + return LV_RES_INV; + } + + if((stride % LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX) != 0x0) { /* Test for stride alignment */ +#if LV_GPU_NXP_VG_LITE_LOG_ERRORS + LV_LOG_ERROR("Buffer stride (%d px) not aligned to %d px.", stride, LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX); +#endif + return LV_RES_INV; + } + + dst->format = VGLITE_PX_FMT; + dst->tiled = VG_LITE_LINEAR; + dst->image_mode = VG_LITE_NORMAL_IMAGE_MODE; + dst->transparency_mode = VG_LITE_IMAGE_OPAQUE; + + dst->width = width; + dst->height = height; + dst->stride = stride; + + memset(&dst->yuv, 0, sizeof(dst->yuv)); + + dst->memory = (void *) ptr; + dst->address = (uint32_t) dst->memory; + dst->handle = 0x0; + + return LV_RES_OK; +} + +#endif /* LV_USE_GPU_NXP_VG_LITE */ diff --git a/src/lv_gpu/lv_gpu_nxp_vglite.h b/src/lv_gpu/lv_gpu_nxp_vglite.h new file mode 100644 index 000000000..a92259620 --- /dev/null +++ b/src/lv_gpu/lv_gpu_nxp_vglite.h @@ -0,0 +1,133 @@ +/** + * @file lv_gpu_nxp_vglite.h + * + */ + +/** + * MIT License + * + * Copyright (c) 2020 NXP + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) + * shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef LV_SRC_LV_GPU_LV_GPU_NXP_VGLITE_H_ +#define LV_SRC_LV_GPU_LV_GPU_NXP_VGLITE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ +#include "lv_misc/lv_area.h" + +/********************* + * DEFINES + *********************/ + +/** Stride in px required by VG-Lite HW. Don't change this. */ +#define LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX 16 + +#ifndef LV_GPU_NXP_VG_LITE_FILL_SIZE_LIMIT +/** Minimum area (in pixels) to be filled by VG-Lite with 100% opacity */ +#define LV_GPU_NXP_VG_LITE_FILL_SIZE_LIMIT 32 +#endif + +#ifndef LV_GPU_NXP_VG_LITE_FILL_OPA_SIZE_LIMIT +/** Minimum area (in pixels) to be filled by VG-Lite with transparency */ +#define LV_GPU_NXP_VG_LITE_FILL_OPA_SIZE_LIMIT 32 +#endif + +#ifndef LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT +/** Minimum area (in pixels) for image copy with 100% opacity to be handled by VG-Lite */ +#define LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT 32 +#endif + +#ifndef LV_GPU_NXP_VG_LITE_BLIT_OPA_SIZE_LIMIT +/** Minimum area (in pixels) for image copy with transparency to be handled by VG-Lite */ +#define LV_GPU_NXP_VG_LITE_BLIT_OPA_SIZE_LIMIT 32 +#endif + +#ifndef LV_GPU_NXP_VG_LITE_LOG_ERRORS +/** Enable logging of VG-Lite erors (\see LV_LOG_ERROR) */ +#define LV_GPU_NXP_VG_LITE_LOG_ERRORS 1 +#endif + +/********************** + * TYPEDEFS + **********************/ + +/** + * BLock Image Transfer descriptor structure + */ +typedef struct { + + const lv_color_t * src; /**< Source buffer pointer (must be aligned on 32 bytes) */ + lv_area_t src_area; /**< Area to be copied from source */ + lv_coord_t src_width; /**< Source buffer width */ + lv_coord_t src_height; /**< Source buffer height */ + uint32_t src_stride; /**< Source buffer stride in bytes (must be aligned on 16 px) */ + + const lv_color_t * dst; /**< Destination buffer pointer (must be aligned on 32 bytes) */ + lv_area_t dst_area; /**< Target area in destination buffer (must be the same as src_area) */ + lv_coord_t dst_width; /**< Destination buffer width */ + lv_coord_t dst_height; /**< Destination buffer height */ + uint32_t dst_stride; /**< Destination buffer stride in bytes (must be aligned on 16 px) */ + + lv_opa_t opa; /**< Opacity - alpha mix (0 = source not copied, 255 = 100% opaque) */ + +} lv_gpu_nxp_vglite_blit_info_t; + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +/*** + * Fills rectangular area in buffer. + * @param[in] dest_buf Destination buffer pointer (must be aligned on 32 bytes) + * @param[in] dest_width Destination buffer width in pixels ((must be aligned on 16 px) + * @param[in] dest_height Destination buffer height in pixels + * @param[in] fill_area Area to be filled + * @param[in] color Fill color + * @param[in] opa Opacity (255 = full, 128 = 50% background/50% color, 0 = no fill) + * @retval LV_RES_OK Fill completed + * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS) + */ +lv_res_t lv_gpu_nxp_vglite_fill(lv_color_t * dest_buf, lv_coord_t dest_width, lv_coord_t dest_height, + const lv_area_t * fill_area, lv_color_t color, lv_opa_t opa); + +/*** + * BLock Image Transfer. + * @param[in] blit Description of the transfer + * @retval LV_RES_OK Transfer complete + * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS) + */ +lv_res_t lv_gpu_nxp_vglite_blit(lv_gpu_nxp_vglite_blit_info_t * blit); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV_SRC_LV_GPU_LV_GPU_NXP_VGLITE_H_ */ From c2c130889d0c5b770ae56b26f65ed03fc5445adf Mon Sep 17 00:00:00 2001 From: Ali Rostami <9710249+ali-rostami@users.noreply.github.com> Date: Thu, 1 Oct 2020 14:46:00 +0330 Subject: [PATCH 02/61] use margin in the header part of calendar. (#1817) * use margin in the header part of calendar. * make calendar_init same as before based on new changes of pad and margin in calendar_header. --- src/lv_themes/lv_theme_material.c | 6 ++++-- src/lv_widgets/lv_calendar.c | 14 +++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/lv_themes/lv_theme_material.c b/src/lv_themes/lv_theme_material.c index b80b6997f..36acfd5e2 100644 --- a/src/lv_themes/lv_theme_material.c +++ b/src/lv_themes/lv_theme_material.c @@ -549,10 +549,12 @@ static void calendar_init(void) #if LV_USE_CALENDAR style_init_reset(&styles->calendar_header); - lv_style_set_pad_top(&styles->calendar_header, LV_STATE_DEFAULT, PAD_DEF); + lv_style_set_pad_top(&styles->calendar_header, LV_STATE_DEFAULT, 0); lv_style_set_pad_left(&styles->calendar_header, LV_STATE_DEFAULT, PAD_DEF); lv_style_set_pad_right(&styles->calendar_header, LV_STATE_DEFAULT, PAD_DEF); - lv_style_set_pad_bottom(&styles->calendar_header, LV_STATE_DEFAULT, PAD_DEF); + lv_style_set_pad_bottom(&styles->calendar_header, LV_STATE_DEFAULT, 0); + lv_style_set_margin_top(&styles->calendar_header, LV_STATE_DEFAULT, PAD_DEF); + lv_style_set_margin_bottom(&styles->calendar_header, LV_STATE_DEFAULT, PAD_DEF); lv_style_set_text_color(&styles->calendar_header, LV_STATE_PRESSED, IS_LIGHT ? lv_color_hex(0x888888) : LV_COLOR_WHITE); style_init_reset(&styles->calendar_daynames); diff --git a/src/lv_widgets/lv_calendar.c b/src/lv_widgets/lv_calendar.c index a95e08c2d..505cdc6ce 100644 --- a/src/lv_widgets/lv_calendar.c +++ b/src/lv_widgets/lv_calendar.c @@ -650,8 +650,10 @@ static bool calculate_touched_day(lv_obj_t * calendar, const lv_point_t * touche static lv_coord_t get_header_height(lv_obj_t * calendar) { const lv_font_t * font = lv_obj_get_style_text_font(calendar, LV_CALENDAR_PART_HEADER); - lv_style_int_t top = lv_obj_get_style_pad_top(calendar, LV_CALENDAR_PART_HEADER); - lv_style_int_t bottom = lv_obj_get_style_pad_bottom(calendar, LV_CALENDAR_PART_HEADER); + lv_style_int_t top = lv_obj_get_style_margin_top(calendar, LV_CALENDAR_PART_HEADER) + + lv_obj_get_style_pad_top(calendar, LV_CALENDAR_PART_HEADER); + lv_style_int_t bottom = lv_obj_get_style_margin_bottom(calendar, LV_CALENDAR_PART_HEADER) + + lv_obj_get_style_pad_bottom(calendar, LV_CALENDAR_PART_HEADER); return lv_font_get_line_height(font) + top + bottom; } @@ -677,7 +679,6 @@ static lv_coord_t get_day_names_height(lv_obj_t * calendar) */ static void draw_header(lv_obj_t * calendar, const lv_area_t * mask) { - lv_style_int_t header_top = lv_obj_get_style_pad_top(calendar, LV_CALENDAR_PART_HEADER); lv_style_int_t header_left = lv_obj_get_style_pad_left(calendar, LV_CALENDAR_PART_HEADER); lv_style_int_t header_right = lv_obj_get_style_pad_right(calendar, LV_CALENDAR_PART_HEADER); const lv_font_t * font = lv_obj_get_style_text_font(calendar, LV_CALENDAR_PART_HEADER); @@ -687,8 +688,9 @@ static void draw_header(lv_obj_t * calendar, const lv_area_t * mask) lv_area_t header_area; header_area.x1 = calendar->coords.x1; header_area.x2 = calendar->coords.x2; - header_area.y1 = calendar->coords.y1 + header_top; - header_area.y2 = header_area.y1 + lv_font_get_line_height(font); + header_area.y1 = calendar->coords.y1 + lv_obj_get_style_margin_top(calendar, LV_CALENDAR_PART_HEADER); + header_area.y2 = header_area.y1 + lv_obj_get_style_pad_top(calendar, LV_CALENDAR_PART_HEADER) + + lv_font_get_line_height(font) + lv_obj_get_style_pad_bottom(calendar, LV_CALENDAR_PART_HEADER); lv_draw_rect_dsc_t header_rect_dsc; lv_draw_rect_dsc_init(&header_rect_dsc); @@ -711,6 +713,8 @@ static void draw_header(lv_obj_t * calendar, const lv_area_t * mask) lv_draw_label_dsc_init(&label_dsc); lv_obj_init_draw_label_dsc(calendar, LV_CALENDAR_PART_HEADER, &label_dsc); label_dsc.flag = LV_TXT_FLAG_CENTER; + header_area.y1 += lv_obj_get_style_pad_top(calendar, LV_CALENDAR_PART_HEADER); + header_area.y2 -= lv_obj_get_style_pad_bottom(calendar, LV_CALENDAR_PART_HEADER); lv_draw_label(&header_area, mask, &label_dsc, txt_buf, NULL); calendar->state = state_ori; /*Restore the state*/ From 5770a09e73f23b967dcbb753501522b1a55c0985 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Thu, 1 Oct 2020 13:16:52 +0200 Subject: [PATCH 03/61] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 342e5e3d6..a772fa0ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ - Add PXP GPU support (for NXP MCUs) - Allow max. 16 cell types for table - Add `lv_table_set_text_fmt()` - +- Use margin on calendar header to set distances and padding to the size of the header. ### Bugfixes From f6df9b490ec85e2b334e184f93fb1a3a900666dc Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Thu, 1 Oct 2020 13:18:00 +0200 Subject: [PATCH 04/61] Update CHANGELOG.md --- CHANGELOG.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19a127c86..ed0a2035c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## v7.6.1 (06.10.2020) + +### Bugfixes +- +- Fix BIDI support in dropdown list +- Fix copying base dir in `lv_obj_create` + ## v7.6.0 (22.09.2020) ### New features @@ -8,8 +15,6 @@ ### Bugfixes - Fix selection of options with non-ASCII letters in dropdown list - Fix font loader to support LV_FONT_FMT_TXT_LARGE -- Fix BIDI support in dropdown list -- Fix copying base dir in lv_obj_craete ## v7.5.0 (15.09.2020) From 8bed30db342efe2e1c54eab5107d09b92af30ab7 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Thu, 1 Oct 2020 13:28:19 +0200 Subject: [PATCH 05/61] handle sub pixel rendering in font loader --- CHANGELOG.md | 2 +- src/lv_font/lv_font_loader.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed0a2035c..7791d551d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,9 @@ ## v7.6.1 (06.10.2020) ### Bugfixes -- - Fix BIDI support in dropdown list - Fix copying base dir in `lv_obj_create` +- Handle sub pixel rendering is font loader ## v7.6.0 (22.09.2020) diff --git a/src/lv_font/lv_font_loader.c b/src/lv_font/lv_font_loader.c index ba89955a6..7cde8370d 100644 --- a/src/lv_font/lv_font_loader.c +++ b/src/lv_font/lv_font_loader.c @@ -512,7 +512,7 @@ static bool lvgl_load_font(lv_fs_file_t * fp, lv_font_t * font) font->line_height = font_header.ascent - font_header.descent; font->get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt; font->get_glyph_bitmap = lv_font_get_bitmap_fmt_txt; - font->subpx = LV_FONT_SUBPX_NONE; + font->subpx = font_header.subpixels_mode; font_dsc->bpp = font_header.bits_per_pixel; font_dsc->kern_scale = font_header.kerning_scale; From 535c3d506f38e01156558ae80e55b19937969e4c Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 1 Oct 2020 13:51:33 +0200 Subject: [PATCH 06/61] Allow inclusion of local lv_conf_internal.h (#1822) * Allow inclusion of local lv_conf_internal.h A wrapper library cna contain an lv_conf.h file and it would be automatically picked up by the buildsystem * Guard __has_include and simplify code * Make number sign indentation consistent Co-authored-by: embeddedt <42941056+embeddedt@users.noreply.github.com> --- src/lv_conf_internal.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lv_conf_internal.h b/src/lv_conf_internal.h index ea41b0720..064917cad 100644 --- a/src/lv_conf_internal.h +++ b/src/lv_conf_internal.h @@ -10,6 +10,12 @@ #include +#if defined __has_include +# if __has_include("lv_conf.h") +# define LV_CONF_INCLUDE_SIMPLE +# endif +#endif + /*If lv_conf.h is not skipped include it*/ #if !defined(LV_CONF_SKIP) && !defined(CONFIG_LV_CONF_SKIP) # if defined(LV_CONF_PATH) /*If there is a path defined for lv_conf.h use it*/ From d14e642fc7e6c10734e67cadbab3aa1558a51b21 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Thu, 1 Oct 2020 16:23:54 +0200 Subject: [PATCH 07/61] fix style transitions with style caching related to #1825 --- CHANGELOG.md | 3 ++- src/lv_core/lv_obj.c | 20 +++++++++++++++++++- src/lv_themes/lv_theme_material.c | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7791d551d..47bc0f662 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,8 @@ ### Bugfixes - Fix BIDI support in dropdown list - Fix copying base dir in `lv_obj_create` -- Handle sub pixel rendering is font loader +- Handle sub pixel rendering in font loader +- Fix transitions with style caching ## v7.6.0 (22.09.2020) diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index 159abd96a..15af7fd23 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -1730,13 +1730,16 @@ void lv_obj_set_state(lv_obj_t * obj, lv_state_t new_state) obj->state = new_state; - if(cmp_res == STYLE_COMPARE_SAME) return; + if(cmp_res == STYLE_COMPARE_SAME) { + return; + } #if LV_USE_ANIMATION == 0 if(cmp_res == STYLE_COMPARE_DIFF) lv_obj_refresh_style(obj, part, LV_STYLE_PROP_ALL); else if(cmp_res == STYLE_COMPARE_VISUAL_DIFF) lv_obj_refresh_style(obj, LV_OBJ_PART_ALL, LV_STYLE_PROP_ALL); #else + for(part = 0; part < _LV_OBJ_PART_REAL_LAST; part++) { lv_style_list_t * style_list = lv_obj_get_style_list(obj, part); if(style_list == NULL) break; /*No more style lists*/ @@ -4294,14 +4297,18 @@ static lv_style_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, lv_style_list_t * style_list = lv_obj_get_style_list(obj, part); lv_style_t * style_trans = _lv_style_list_get_transition_style(style_list); + bool cahche_ori = style_list->ignore_cache; + /*Get the previous and current values*/ if((prop & 0xF) < LV_STYLE_ID_COLOR) { /*Int*/ style_list->skip_trans = 1; + style_list->ignore_cache = 1; obj->state = prev_state; lv_style_int_t int1 = _lv_obj_get_style_int(obj, part, prop); obj->state = new_state; lv_style_int_t int2 = _lv_obj_get_style_int(obj, part, prop); style_list->skip_trans = 0; + style_list->ignore_cache = cahche_ori; if(int1 == int2) return NULL; obj->state = prev_state; @@ -4326,11 +4333,13 @@ static lv_style_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, } else if((prop & 0xF) < LV_STYLE_ID_OPA) { /*Color*/ style_list->skip_trans = 1; + style_list->ignore_cache = 1; obj->state = prev_state; lv_color_t c1 = _lv_obj_get_style_color(obj, part, prop); obj->state = new_state; lv_color_t c2 = _lv_obj_get_style_color(obj, part, prop); style_list->skip_trans = 0; + style_list->ignore_cache = cahche_ori; if(c1.full == c2.full) return NULL; obj->state = prev_state; @@ -4346,11 +4355,13 @@ static lv_style_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, } else if((prop & 0xF) < LV_STYLE_ID_PTR) { /*Opa*/ style_list->skip_trans = 1; + style_list->ignore_cache = 1; obj->state = prev_state; lv_opa_t o1 = _lv_obj_get_style_opa(obj, part, prop); obj->state = new_state; lv_opa_t o2 = _lv_obj_get_style_opa(obj, part, prop); style_list->skip_trans = 0; + style_list->ignore_cache = cahche_ori; if(o1 == o2) return NULL; @@ -4368,10 +4379,12 @@ static lv_style_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, else { /*Ptr*/ obj->state = prev_state; style_list->skip_trans = 1; + style_list->ignore_cache = 1; const void * p1 = _lv_obj_get_style_ptr(obj, part, prop); obj->state = new_state; const void * p2 = _lv_obj_get_style_ptr(obj, part, prop); style_list->skip_trans = 0; + style_list->ignore_cache = cahche_ori; if(memcmp(&p1, &p2, sizeof(const void *)) == 0) return NULL; obj->state = prev_state; @@ -4769,6 +4782,10 @@ static void style_snapshot(lv_obj_t * obj, uint8_t part, style_snapshot_t * shot lv_draw_img_dsc_init(&shot->img); lv_draw_line_dsc_init(&shot->line); + lv_style_list_t * list = lv_obj_get_style_list(obj, part); + bool trans_ori = list->skip_trans; + list->skip_trans = 1; + lv_obj_init_draw_rect_dsc(obj, part, &shot->rect); lv_obj_init_draw_label_dsc(obj, part, &shot->label); lv_obj_init_draw_img_dsc(obj, part, &shot->img); @@ -4800,6 +4817,7 @@ static void style_snapshot(lv_obj_t * obj, uint8_t part, style_snapshot_t * shot shot->border_post = lv_obj_get_style_border_post(obj, part); _lv_obj_disable_style_caching(obj, false); + list->skip_trans = trans_ori; } static style_snapshot_res_t style_snapshot_compare(style_snapshot_t * shot1, style_snapshot_t * shot2) diff --git a/src/lv_themes/lv_theme_material.c b/src/lv_themes/lv_theme_material.c index 435cdf49f..1e6a8c8bb 100644 --- a/src/lv_themes/lv_theme_material.c +++ b/src/lv_themes/lv_theme_material.c @@ -64,7 +64,7 @@ #define COLOR_BG_SEC_TEXT (IS_LIGHT ? lv_color_hex(0x31404f) : lv_color_hex(0xa5a8ad)) #define COLOR_BG_SEC_TEXT_DIS (IS_LIGHT ? lv_color_hex(0xaaaaaa) : lv_color_hex(0xa5a8ad)) -#define TRANSITION_TIME ((theme.flags & LV_THEME_MATERIAL_FLAG_NO_TRANSITION) ? 0 : 150) +#define TRANSITION_TIME 0/*((theme.flags & LV_THEME_MATERIAL_FLAG_NO_TRANSITION) ? 0 : 150)*/ #define BORDER_WIDTH LV_DPX(2) #define OUTLINE_WIDTH ((theme.flags & LV_THEME_MATERIAL_FLAG_NO_FOCUS) ? 0 : LV_DPX(2)) #define IS_LIGHT (theme.flags & LV_THEME_MATERIAL_FLAG_LIGHT) From 79d72f9286913de75ba75e4fe81299c74550c5f0 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 2 Oct 2020 10:54:53 +0200 Subject: [PATCH 08/61] Fix click focus --- CHANGELOG.md | 1 + src/lv_core/lv_indev.c | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47bc0f662..c48a278e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Fix copying base dir in `lv_obj_create` - Handle sub pixel rendering in font loader - Fix transitions with style caching +- Fix click focus ## v7.6.0 (22.09.2020) diff --git a/src/lv_core/lv_indev.c b/src/lv_core/lv_indev.c index 6b8f2e46c..16aa34529 100644 --- a/src/lv_core/lv_indev.c +++ b/src/lv_core/lv_indev.c @@ -1162,14 +1162,14 @@ static void indev_click_focus(lv_indev_proc_t * proc) if(lv_obj_is_protected(indev_obj_act, LV_PROTECT_CLICK_FOCUS) == false && proc->types.pointer.last_pressed != obj_to_focus) { #if LV_USE_GROUP - lv_group_t * g_act = lv_obj_get_group(indev_obj_act); + lv_group_t * g_act = lv_obj_get_group(obj_to_focus); lv_group_t * g_prev = proc->types.pointer.last_pressed ? lv_obj_get_group(proc->types.pointer.last_pressed) : NULL; /*If both the last and act. obj. are in the same group (or no group but it's also the same) */ if(g_act == g_prev) { /*The objects are in a group*/ if(g_act) { - lv_group_focus_obj(indev_obj_act); + lv_group_focus_obj(obj_to_focus); if(indev_reset_check(proc)) return; } /*The object are not in group*/ @@ -1218,7 +1218,7 @@ static void indev_click_focus(lv_indev_proc_t * proc) /*Focus to the act. in its group*/ if(g_act) { - lv_group_focus_obj(indev_obj_act); + lv_group_focus_obj(obj_to_focus); if(indev_reset_check(proc)) return; } else { @@ -1236,9 +1236,9 @@ static void indev_click_focus(lv_indev_proc_t * proc) if(indev_reset_check(proc)) return; } - lv_signal_send(indev_obj_act, LV_SIGNAL_FOCUS, NULL); + lv_signal_send(obj_to_focus, LV_SIGNAL_FOCUS, NULL); if(indev_reset_check(proc)) return; - lv_event_send(indev_obj_act, LV_EVENT_FOCUSED, NULL); + lv_event_send(obj_to_focus, LV_EVENT_FOCUSED, NULL); if(indev_reset_check(proc)) return; #endif proc->types.pointer.last_pressed = obj_to_focus; From 6d1a72b522704d000ef8e5476a052cf66cd40387 Mon Sep 17 00:00:00 2001 From: ryanpowers Date: Fri, 2 Oct 2020 05:34:28 -0400 Subject: [PATCH 09/61] Text selection enhancement (#1829) * Corrected bug in styles of labels with selections Text selection color (text_selection_color) property was incorrectly being applied to the text color if there was a selection. The sel_color property in the label descriptor was initialized to blue. This property was intended to be the label background color under a selection. * Add new property for the color of selected text New property for labels: text_sel_font_color This property will change the color of the font within selected text. * Rename text selection color properties Per feedback from issue #1820, sel_color is now sel_bg_color and sel_font_color is now sel_color. This results in clearer naming. Co-authored-by: Ryan Powers --- src/lv_core/lv_obj.c | 3 ++- src/lv_core/lv_obj_style_dec.h | 1 + src/lv_core/lv_style.h | 17 +++++++++-------- src/lv_draw/lv_draw_label.c | 6 ++++-- src/lv_draw/lv_draw_label.h | 1 + 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index 9d19b35ad..7160e7dc7 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -3526,7 +3526,8 @@ void lv_obj_init_draw_label_dsc(lv_obj_t * obj, uint8_t part, lv_draw_label_dsc_ draw_dsc->font = lv_obj_get_style_text_font(obj, part); if(draw_dsc->sel_start != LV_DRAW_LABEL_NO_TXT_SEL && draw_dsc->sel_end != LV_DRAW_LABEL_NO_TXT_SEL) { - draw_dsc->color = lv_obj_get_style_text_sel_color(obj, part); + draw_dsc->sel_color = lv_obj_get_style_text_sel_color(obj, part); + draw_dsc->sel_bg_color = lv_obj_get_style_text_sel_bg_color(obj, part); } #if LV_USE_BIDI diff --git a/src/lv_core/lv_obj_style_dec.h b/src/lv_core/lv_obj_style_dec.h index 47751597e..28cbe52ce 100644 --- a/src/lv_core/lv_obj_style_dec.h +++ b/src/lv_core/lv_obj_style_dec.h @@ -163,6 +163,7 @@ _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_DECOR, text_decor, lv_text_decor_t, _int, sca _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_BLEND_MODE, text_blend_mode, lv_blend_mode_t, _int, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_COLOR, text_color, lv_color_t, _color, nonscalar) _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_SEL_COLOR, text_sel_color, lv_color_t, _color, nonscalar) +_LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_SEL_BG_COLOR, text_sel_bg_color, lv_color_t, _color, nonscalar) _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_OPA, text_opa, lv_opa_t, _opa, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_FONT, text_font, const lv_font_t *, _ptr, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(LINE_WIDTH, line_width, lv_style_int_t, _int, scalar) diff --git a/src/lv_core/lv_style.h b/src/lv_core/lv_style.h index 36876fbe4..d159b25a1 100644 --- a/src/lv_core/lv_style.h +++ b/src/lv_core/lv_style.h @@ -159,14 +159,15 @@ enum { LV_STYLE_PROP_INIT(LV_STYLE_VALUE_FONT, 0x7, LV_STYLE_ID_PTR + 0, LV_STYLE_ATTR_NONE), LV_STYLE_PROP_INIT(LV_STYLE_VALUE_STR, 0x7, LV_STYLE_ID_PTR + 1, LV_STYLE_ATTR_NONE), - LV_STYLE_PROP_INIT(LV_STYLE_TEXT_LETTER_SPACE, 0x8, LV_STYLE_ID_VALUE + 0, LV_STYLE_ATTR_INHERIT), - LV_STYLE_PROP_INIT(LV_STYLE_TEXT_LINE_SPACE, 0x8, LV_STYLE_ID_VALUE + 1, LV_STYLE_ATTR_INHERIT), - LV_STYLE_PROP_INIT(LV_STYLE_TEXT_DECOR, 0x8, LV_STYLE_ID_VALUE + 2, LV_STYLE_ATTR_INHERIT), - LV_STYLE_PROP_INIT(LV_STYLE_TEXT_BLEND_MODE, 0x8, LV_STYLE_ID_VALUE + 3, LV_STYLE_ATTR_INHERIT), - LV_STYLE_PROP_INIT(LV_STYLE_TEXT_COLOR, 0x8, LV_STYLE_ID_COLOR + 0, LV_STYLE_ATTR_INHERIT), - LV_STYLE_PROP_INIT(LV_STYLE_TEXT_SEL_COLOR, 0x8, LV_STYLE_ID_COLOR + 1, LV_STYLE_ATTR_INHERIT), - LV_STYLE_PROP_INIT(LV_STYLE_TEXT_OPA, 0x8, LV_STYLE_ID_OPA + 0, LV_STYLE_ATTR_INHERIT), - LV_STYLE_PROP_INIT(LV_STYLE_TEXT_FONT, 0x8, LV_STYLE_ID_PTR + 0, LV_STYLE_ATTR_INHERIT), + LV_STYLE_PROP_INIT(LV_STYLE_TEXT_LETTER_SPACE, 0x8, LV_STYLE_ID_VALUE + 0, LV_STYLE_ATTR_INHERIT), + LV_STYLE_PROP_INIT(LV_STYLE_TEXT_LINE_SPACE, 0x8, LV_STYLE_ID_VALUE + 1, LV_STYLE_ATTR_INHERIT), + LV_STYLE_PROP_INIT(LV_STYLE_TEXT_DECOR, 0x8, LV_STYLE_ID_VALUE + 2, LV_STYLE_ATTR_INHERIT), + LV_STYLE_PROP_INIT(LV_STYLE_TEXT_BLEND_MODE, 0x8, LV_STYLE_ID_VALUE + 3, LV_STYLE_ATTR_INHERIT), + LV_STYLE_PROP_INIT(LV_STYLE_TEXT_COLOR, 0x8, LV_STYLE_ID_COLOR + 0, LV_STYLE_ATTR_INHERIT), + LV_STYLE_PROP_INIT(LV_STYLE_TEXT_SEL_COLOR, 0x8, LV_STYLE_ID_COLOR + 1, LV_STYLE_ATTR_INHERIT), + LV_STYLE_PROP_INIT(LV_STYLE_TEXT_SEL_BG_COLOR, 0x8, LV_STYLE_ID_COLOR + 2, LV_STYLE_ATTR_INHERIT), + LV_STYLE_PROP_INIT(LV_STYLE_TEXT_OPA, 0x8, LV_STYLE_ID_OPA + 0, LV_STYLE_ATTR_INHERIT), + LV_STYLE_PROP_INIT(LV_STYLE_TEXT_FONT, 0x8, LV_STYLE_ID_PTR + 0, LV_STYLE_ATTR_INHERIT), LV_STYLE_PROP_INIT(LV_STYLE_LINE_WIDTH, 0x9, LV_STYLE_ID_VALUE + 0, LV_STYLE_ATTR_NONE), LV_STYLE_PROP_INIT(LV_STYLE_LINE_BLEND_MODE, 0x9, LV_STYLE_ID_VALUE + 1, LV_STYLE_ATTR_NONE), diff --git a/src/lv_draw/lv_draw_label.c b/src/lv_draw/lv_draw_label.c index a21059edc..abea298ff 100644 --- a/src/lv_draw/lv_draw_label.c +++ b/src/lv_draw/lv_draw_label.c @@ -98,7 +98,8 @@ LV_ATTRIBUTE_FAST_MEM void lv_draw_label_dsc_init(lv_draw_label_dsc_t * dsc) dsc->font = LV_THEME_DEFAULT_FONT_NORMAL; dsc->sel_start = LV_DRAW_LABEL_NO_TXT_SEL; dsc->sel_end = LV_DRAW_LABEL_NO_TXT_SEL; - dsc->sel_color = LV_COLOR_BLUE; + dsc->sel_color = LV_COLOR_BLACK; + dsc->sel_bg_color = LV_COLOR_BLUE; dsc->bidi_dir = LV_BIDI_DIR_LTR; } @@ -234,7 +235,7 @@ LV_ATTRIBUTE_FAST_MEM void lv_draw_label(const lv_area_t * coords, const lv_area lv_draw_rect_dsc_t draw_dsc_sel; lv_draw_rect_dsc_init(&draw_dsc_sel); - draw_dsc_sel.bg_color = dsc->sel_color; + draw_dsc_sel.bg_color = dsc->sel_bg_color; int32_t pos_x_start = pos.x; /*Write out all lines*/ @@ -320,6 +321,7 @@ LV_ATTRIBUTE_FAST_MEM void lv_draw_label(const lv_area_t * coords, const lv_area sel_coords.x2 = pos.x + letter_w + dsc->letter_space - 1; sel_coords.y2 = pos.y + line_height - 1; lv_draw_rect(&sel_coords, mask, &draw_dsc_sel); + color = dsc->sel_color; } } diff --git a/src/lv_draw/lv_draw_label.h b/src/lv_draw/lv_draw_label.h index b28381002..b6c81292f 100644 --- a/src/lv_draw/lv_draw_label.h +++ b/src/lv_draw/lv_draw_label.h @@ -29,6 +29,7 @@ extern "C" { typedef struct { lv_color_t color; lv_color_t sel_color; + lv_color_t sel_bg_color; const lv_font_t * font; lv_opa_t opa; lv_style_int_t line_space; From a12d54855f39cd565bc9a30aa522e2419448e422 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 2 Oct 2020 11:35:15 +0200 Subject: [PATCH 10/61] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 237b2c52d..9a44f640f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,8 @@ - Add PXP GPU support (for NXP MCUs) - Allow max. 16 cell types for table - Add `lv_table_set_text_fmt()` -- Use margin on calendar header to set distances and padding to the size of the header. +- Use margin on calendar header to set distances and padding to the size of the header +- Add `text_sel_bg` style proeprty ### Bugfixes From 34e0fefeb3e41deb470a7a39685d0e23eeee60a3 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 2 Oct 2020 12:26:12 +0200 Subject: [PATCH 11/61] fix imgbtn image switching with empty style --- src/lv_widgets/lv_imgbtn.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lv_widgets/lv_imgbtn.c b/src/lv_widgets/lv_imgbtn.c index 6caa98f19..13c3e1621 100644 --- a/src/lv_widgets/lv_imgbtn.c +++ b/src/lv_widgets/lv_imgbtn.c @@ -468,6 +468,9 @@ static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * par imgbtn->ext_draw_pad = LV_MATH_MAX(imgbtn->ext_draw_pad, top); imgbtn->ext_draw_pad = LV_MATH_MAX(imgbtn->ext_draw_pad, bottom); } + else if(sign == LV_SIGNAL_PRESSED || sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) { + refr_img(imgbtn); + } else if(sign == LV_SIGNAL_CLEANUP) { /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/ } From b049b7e1f6dd55459e8265b10b31f30160116cef Mon Sep 17 00:00:00 2001 From: jozba <64474383+jozba@users.noreply.github.com> Date: Fri, 2 Oct 2020 13:10:09 +0200 Subject: [PATCH 12/61] Bugfix/mgg 562 lvgl pxp symbol prefix missing include path update blit limit (#1830) * PXP: Updated area threshold, fixed symbol names, minor fixes - Area threshold of 1 left from debugging, changed to 32 for performance reasons. - Fixed naming convention of symbols (prefix LV_GPU_) - Fixed include paths (no need to add src folder into include paths) - Comments changed to doxygen Signed-off-by: Jozef Bastek * PXP: Code formatting Applied code-format.sh script. Signed-off-by: Jozef Bastek --- src/lv_core/lv_obj.c | 8 ++-- src/lv_draw/lv_draw_blend.c | 16 +++---- src/lv_draw/lv_draw_img.c | 23 ++++----- src/lv_gpu/lv_gpu_nxp_pxp.c | 84 ++++++++++++++++++--------------- src/lv_gpu/lv_gpu_nxp_pxp.h | 40 ++++++++-------- src/lv_gpu/lv_gpu_nxp_pxp_osa.c | 14 +++--- 6 files changed, 97 insertions(+), 88 deletions(-) diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index 7160e7dc7..888fe2927 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -28,8 +28,8 @@ #include #if LV_USE_GPU_NXP_PXP && LV_USE_GPU_NXP_PXP_AUTO_INIT - #include "lv_gpu/lv_gpu_nxp_pxp.h" - #include "lv_gpu/lv_gpu_nxp_pxp_osa.h" + #include "../lv_gpu/lv_gpu_nxp_pxp.h" + #include "../lv_gpu/lv_gpu_nxp_pxp_osa.h" #endif #if defined(LV_GC_INCLUDE) @@ -200,9 +200,9 @@ void lv_init(void) #endif #if LV_USE_GPU_NXP_PXP && LV_USE_GPU_NXP_PXP_AUTO_INIT - if (lv_gpu_nxp_pxp_init(&pxp_default_cfg) != LV_RES_OK) { + if(lv_gpu_nxp_pxp_init(&pxp_default_cfg) != LV_RES_OK) { LV_LOG_ERROR("PXP init error. STOP.\n"); - for ( ; ; ) ; + for(; ;) ; } #endif diff --git a/src/lv_draw/lv_draw_blend.c b/src/lv_draw/lv_draw_blend.c index 618431a3d..a64ca0246 100644 --- a/src/lv_draw/lv_draw_blend.c +++ b/src/lv_draw/lv_draw_blend.c @@ -13,7 +13,7 @@ #include "../lv_core/lv_refr.h" #if LV_USE_GPU_NXP_PXP -#include "../lv_gpu/lv_gpu_nxp_pxp.h" + #include "../lv_gpu/lv_gpu_nxp_pxp.h" #elif LV_USE_GPU_STM32_DMA2D #include "../lv_gpu/lv_gpu_stm32_dma2d.h" #endif @@ -341,7 +341,7 @@ LV_ATTRIBUTE_FAST_MEM static void fill_normal(const lv_area_t * disp_area, lv_co return; } #elif LV_USE_GPU_NXP_PXP - if(lv_area_get_size(draw_area) >= GPU_NXP_PXP_FILL_SIZE_LIMIT) { + if(lv_area_get_size(draw_area) >= LV_GPU_NXP_PXP_FILL_SIZE_LIMIT) { lv_gpu_nxp_pxp_fill(disp_buf, disp_w, draw_area, color, opa); return; } @@ -361,7 +361,7 @@ LV_ATTRIBUTE_FAST_MEM static void fill_normal(const lv_area_t * disp_area, lv_co else { #if LV_USE_GPU_NXP_PXP - if(lv_area_get_size(draw_area) >= GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT) { + if(lv_area_get_size(draw_area) >= LV_GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT) { lv_gpu_nxp_pxp_fill(disp_buf, disp_w, draw_area, color, opa); return; } @@ -741,10 +741,10 @@ LV_ATTRIBUTE_FAST_MEM static void map_normal(const lv_area_t * disp_area, lv_col if(opa > LV_OPA_MAX) { #if LV_USE_GPU_NXP_PXP - if (lv_area_get_size(draw_area) >= GPU_NXP_PXP_BLIT_SIZE_LIMIT) { - lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa); - return; - } + if(lv_area_get_size(draw_area) >= LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT) { + lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa); + return; + } #elif LV_USE_GPU_STM32_DMA2D if(lv_area_get_size(draw_area) >= 240) { lv_gpu_stm32_dma2d_copy(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h); @@ -761,7 +761,7 @@ LV_ATTRIBUTE_FAST_MEM static void map_normal(const lv_area_t * disp_area, lv_col } else { #if LV_USE_GPU_NXP_PXP - if (lv_area_get_size(draw_area) >= GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT) { + if(lv_area_get_size(draw_area) >= LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT) { lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa); return; } diff --git a/src/lv_draw/lv_draw_img.c b/src/lv_draw/lv_draw_img.c index 421cab9b8..4b736951a 100644 --- a/src/lv_draw/lv_draw_img.c +++ b/src/lv_draw/lv_draw_img.c @@ -16,7 +16,7 @@ #if LV_USE_GPU_STM32_DMA2D #include "../lv_gpu/lv_gpu_stm32_dma2d.h" #elif LV_USE_GPU_NXP_PXP -#include "../lv_gpu/lv_gpu_nxp_pxp.h" + #include "../lv_gpu/lv_gpu_nxp_pxp.h" #endif /********************* @@ -360,18 +360,19 @@ LV_ATTRIBUTE_FAST_MEM static void lv_draw_map(const lv_area_t * map_area, const } #if LV_USE_GPU_NXP_PXP /* Simple case without masking and transformations */ - else if (other_mask_cnt == 0 && draw_dsc->angle == 0 && draw_dsc->zoom == LV_IMG_ZOOM_NONE && alpha_byte == false && + else if(other_mask_cnt == 0 && draw_dsc->angle == 0 && draw_dsc->zoom == LV_IMG_ZOOM_NONE && alpha_byte == false && chroma_key == true && draw_dsc->recolor_opa == LV_OPA_TRANSP) { /* copy with color keying (+ alpha) */ - lv_gpu_nxp_pxp_enable_color_key(); - _lv_blend_map(clip_area, map_area, (lv_color_t *)map_p, NULL, LV_DRAW_MASK_RES_FULL_COVER, draw_dsc->opa, - draw_dsc->blend_mode); - lv_gpu_nxp_pxp_disable_color_key(); - } else if (other_mask_cnt == 0 && draw_dsc->angle == 0 && draw_dsc->zoom == LV_IMG_ZOOM_NONE && alpha_byte == false && + lv_gpu_nxp_pxp_enable_color_key(); + _lv_blend_map(clip_area, map_area, (lv_color_t *)map_p, NULL, LV_DRAW_MASK_RES_FULL_COVER, draw_dsc->opa, + draw_dsc->blend_mode); + lv_gpu_nxp_pxp_disable_color_key(); + } + else if(other_mask_cnt == 0 && draw_dsc->angle == 0 && draw_dsc->zoom == LV_IMG_ZOOM_NONE && alpha_byte == false && chroma_key == false && draw_dsc->recolor_opa != LV_OPA_TRANSP) { /* copy with recolor (+ alpha) */ - lv_gpu_nxp_pxp_enable_recolor(draw_dsc->recolor, draw_dsc->recolor_opa); - _lv_blend_map(clip_area, map_area, (lv_color_t *)map_p, NULL, LV_DRAW_MASK_RES_FULL_COVER, draw_dsc->opa, - draw_dsc->blend_mode); - lv_gpu_nxp_pxp_disable_recolor(); + lv_gpu_nxp_pxp_enable_recolor(draw_dsc->recolor, draw_dsc->recolor_opa); + _lv_blend_map(clip_area, map_area, (lv_color_t *)map_p, NULL, LV_DRAW_MASK_RES_FULL_COVER, draw_dsc->opa, + draw_dsc->blend_mode); + lv_gpu_nxp_pxp_disable_recolor(); } #endif /*In the other cases every pixel need to be checked one-by-one*/ diff --git a/src/lv_gpu/lv_gpu_nxp_pxp.c b/src/lv_gpu/lv_gpu_nxp_pxp.c index 7efa6341f..9efdd4713 100644 --- a/src/lv_gpu/lv_gpu_nxp_pxp.c +++ b/src/lv_gpu/lv_gpu_nxp_pxp.c @@ -48,9 +48,6 @@ * DEFINES *********************/ -/* PXP instance ID */ -#define PXP_ID PXP - #if LV_COLOR_16_SWAP #error Color swap not implemented. Disable LV_COLOR_16_SWAP feature. #endif @@ -76,7 +73,8 @@ static void lv_gpu_nxp_pxp_run(void); static void lv_gpu_nxp_pxp_blit_recolor(lv_color_t * dest, lv_coord_t dest_width, const lv_color_t * src, lv_coord_t src_width, lv_coord_t copy_width, lv_coord_t copy_height, lv_opa_t opa, lv_color_t recolor, lv_opa_t recolorOpa); -static void lv_gpu_nxp_invalidate_cache(uint32_t address, uint32_t width, uint32_t height, uint32_t stride, uint32_t pxSize); +static void lv_gpu_nxp_invalidate_cache(uint32_t address, uint32_t width, uint32_t height, uint32_t stride, + uint32_t pxSize); /********************** * STATIC VARIABLES @@ -135,7 +133,7 @@ void lv_gpu_nxp_pxp_deinit(void) { pxp_cfg.pxp_interrupt_deinit(); PXP_DisableInterrupts(PXP, kPXP_CompleteInterruptEnable); - PXP_Deinit(PXP_ID); + PXP_Deinit(LV_GPU_NXP_PXP_ID); } @@ -151,8 +149,8 @@ void lv_gpu_nxp_pxp_deinit(void) void lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, lv_coord_t dest_width, const lv_area_t * fill_area, lv_color_t color, lv_opa_t opa) { - PXP_Init(PXP_ID); - PXP_EnableCsc1(PXP_ID, false); /* Disable CSC1, it is enabled by default. */ + PXP_Init(LV_GPU_NXP_PXP_ID); + PXP_EnableCsc1(LV_GPU_NXP_PXP_ID, false); /* Disable CSC1, it is enabled by default. */ PXP_SetProcessBlockSize(PXP, kPXP_BlockSize16); /* Block size 16x16 for higher performance */ /* OUT buffer configure */ @@ -165,14 +163,15 @@ void lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, lv_coord_t dest_width, const lv_ .width = fill_area->x2 - fill_area->x1 + 1, .height = fill_area->y2 - fill_area->y1 + 1, }; - lv_gpu_nxp_invalidate_cache(outputConfig.buffer0Addr, outputConfig.width, outputConfig.height, outputConfig.pitchBytes, sizeof(lv_color_t)); - PXP_SetOutputBufferConfig(PXP_ID, &outputConfig); + lv_gpu_nxp_invalidate_cache(outputConfig.buffer0Addr, outputConfig.width, outputConfig.height, outputConfig.pitchBytes, + sizeof(lv_color_t)); + PXP_SetOutputBufferConfig(LV_GPU_NXP_PXP_ID, &outputConfig); if(opa > LV_OPA_MAX) { /* Simple color fill without opacity - AS disabled, PS as color generator */ - PXP_SetAlphaSurfacePosition(PXP_ID, 0xFFFFU, 0xFFFFU, 0U, 0U); /* Disable AS. */ - PXP_SetProcessSurfacePosition(PXP_ID, 0xFFFFU, 0xFFFFU, 0U, 0U); /* Disable PS. */ - PXP_SetProcessSurfaceBackGroundColor(PXP_ID, lv_color_to32(color)); + PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0xFFFFU, 0xFFFFU, 0U, 0U); /* Disable AS. */ + PXP_SetProcessSurfacePosition(LV_GPU_NXP_PXP_ID, 0xFFFFU, 0xFFFFU, 0U, 0U); /* Disable PS. */ + PXP_SetProcessSurfaceBackGroundColor(LV_GPU_NXP_PXP_ID, lv_color_to32(color)); } else { /* Fill with opacity - AS used as source (same as OUT), PS used as color generator, blended together */ @@ -184,12 +183,13 @@ void lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, lv_coord_t dest_width, const lv_ asBufferConfig.bufferAddr = (uint32_t)outputConfig.buffer0Addr; asBufferConfig.pitchBytes = outputConfig.pitchBytes; - PXP_SetAlphaSurfaceBufferConfig(PXP_ID, &asBufferConfig); - PXP_SetAlphaSurfacePosition(PXP_ID, 0U, 0U, fill_area->x2 - fill_area->x1 + 1, fill_area->y2 - fill_area->y1 + 1); + PXP_SetAlphaSurfaceBufferConfig(LV_GPU_NXP_PXP_ID, &asBufferConfig); + PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, fill_area->x2 - fill_area->x1 + 1, + fill_area->y2 - fill_area->y1 + 1); /* Disable PS, use as color generator */ - PXP_SetProcessSurfacePosition(PXP_ID, 0xFFFFU, 0xFFFFU, 0U, 0U); - PXP_SetProcessSurfaceBackGroundColor(PXP_ID, lv_color_to32(color)); + PXP_SetProcessSurfacePosition(LV_GPU_NXP_PXP_ID, 0xFFFFU, 0xFFFFU, 0U, 0U); + PXP_SetProcessSurfaceBackGroundColor(LV_GPU_NXP_PXP_ID, lv_color_to32(color)); /* Configure Porter-Duff blending - For RGB 565 only! */ pdConfig.enable = 1; @@ -203,7 +203,7 @@ void lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, lv_coord_t dest_width, const lv_ pdConfig.dstGlobalAlpha = 255 - opa; pdConfig.srcAlphaMode = kPXP_PorterDuffAlphaStraight; /* don't care */ pdConfig.dstAlphaMode = kPXP_PorterDuffAlphaStraight; /* don't care */ - PXP_SetPorterDuffConfig(PXP_ID, &pdConfig); + PXP_SetPorterDuffConfig(LV_GPU_NXP_PXP_ID, &pdConfig); } lv_gpu_nxp_pxp_run(); /* Start PXP task */ @@ -249,7 +249,7 @@ void lv_gpu_nxp_pxp_blit(lv_color_t * dest, lv_coord_t dest_width, const lv_colo if(opa >= LV_OPA_MAX && !colorKeyEnabled) { /* Simple blit, no effect - Disable PS buffer */ - PXP_SetProcessSurfacePosition(PXP_ID, 0xFFFFU, 0xFFFFU, 0U, 0U); + PXP_SetProcessSurfacePosition(LV_GPU_NXP_PXP_ID, 0xFFFFU, 0xFFFFU, 0U, 0U); } else { /* Alpha blending or color keying enabled - PS must be enabled to fetch background pixels @@ -263,24 +263,25 @@ void lv_gpu_nxp_pxp_blit(lv_color_t * dest, lv_coord_t dest_width, const lv_colo .pitchBytes = dest_width * sizeof(lv_color_t) }; asBlendConfig.alphaMode = kPXP_AlphaOverride; - PXP_SetProcessSurfaceBufferConfig(PXP_ID, &psBufferConfig); - PXP_SetProcessSurfacePosition(PXP_ID, 0U, 0U, copy_width - 1, copy_height - 1); + PXP_SetProcessSurfaceBufferConfig(LV_GPU_NXP_PXP_ID, &psBufferConfig); + PXP_SetProcessSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, copy_width - 1, copy_height - 1); } /* AS buffer - source image */ asBufferConfig.pixelFormat = PXP_AS_PIXEL_FORMAT; asBufferConfig.bufferAddr = (uint32_t)src; asBufferConfig.pitchBytes = src_width * sizeof(lv_color_t); - PXP_SetAlphaSurfaceBufferConfig(PXP_ID, &asBufferConfig); - PXP_SetAlphaSurfacePosition(PXP_ID, 0U, 0U, copy_width - 1U, copy_height - 1U); - PXP_SetAlphaSurfaceBlendConfig(PXP_ID, &asBlendConfig); + PXP_SetAlphaSurfaceBufferConfig(LV_GPU_NXP_PXP_ID, &asBufferConfig); + PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, copy_width - 1U, copy_height - 1U); + PXP_SetAlphaSurfaceBlendConfig(LV_GPU_NXP_PXP_ID, &asBlendConfig); - lv_gpu_nxp_invalidate_cache(asBufferConfig.bufferAddr, copy_width, copy_height, asBufferConfig.pitchBytes, sizeof(lv_color_t)); + lv_gpu_nxp_invalidate_cache(asBufferConfig.bufferAddr, copy_width, copy_height, asBufferConfig.pitchBytes, + sizeof(lv_color_t)); if(colorKeyEnabled) { - PXP_SetAlphaSurfaceOverlayColorKey(PXP_ID, colorKey, colorKey); + PXP_SetAlphaSurfaceOverlayColorKey(LV_GPU_NXP_PXP_ID, colorKey, colorKey); } - PXP_EnableAlphaSurfaceOverlayColorKey(PXP_ID, colorKeyEnabled); + PXP_EnableAlphaSurfaceOverlayColorKey(LV_GPU_NXP_PXP_ID, colorKeyEnabled); /* Output buffer. */ @@ -291,9 +292,10 @@ void lv_gpu_nxp_pxp_blit(lv_color_t * dest, lv_coord_t dest_width, const lv_colo outputBufferConfig.pitchBytes = dest_width * sizeof(lv_color_t); outputBufferConfig.width = copy_width; outputBufferConfig.height = copy_height; - PXP_SetOutputBufferConfig(PXP_ID, &outputBufferConfig); + PXP_SetOutputBufferConfig(LV_GPU_NXP_PXP_ID, &outputBufferConfig); - lv_gpu_nxp_invalidate_cache(outputBufferConfig.buffer0Addr, outputBufferConfig.width, outputBufferConfig.height, outputBufferConfig.pitchBytes, sizeof(lv_color_t)); + lv_gpu_nxp_invalidate_cache(outputBufferConfig.buffer0Addr, outputBufferConfig.width, outputBufferConfig.height, + outputBufferConfig.pitchBytes, sizeof(lv_color_t)); lv_gpu_nxp_pxp_run(); /* Start PXP task */ } @@ -395,14 +397,15 @@ static void lv_gpu_nxp_pxp_blit_recolor(lv_color_t * dest, lv_coord_t dest_width asBufferConfig.pixelFormat = PXP_AS_PIXEL_FORMAT; asBufferConfig.bufferAddr = (uint32_t)src; asBufferConfig.pitchBytes = src_width * sizeof(lv_color_t); - PXP_SetAlphaSurfaceBufferConfig(PXP_ID, &asBufferConfig); - PXP_SetAlphaSurfacePosition(PXP_ID, 0U, 0U, copy_width - 1U, copy_height - 1U); + PXP_SetAlphaSurfaceBufferConfig(LV_GPU_NXP_PXP_ID, &asBufferConfig); + PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, copy_width - 1U, copy_height - 1U); - lv_gpu_nxp_invalidate_cache(asBufferConfig.bufferAddr, copy_width, copy_height, asBufferConfig.pitchBytes, sizeof(lv_color_t)); + lv_gpu_nxp_invalidate_cache(asBufferConfig.bufferAddr, copy_width, copy_height, asBufferConfig.pitchBytes, + sizeof(lv_color_t)); /* Disable PS buffer, use as color generator */ - PXP_SetProcessSurfacePosition(PXP_ID, 0xFFFFU, 0xFFFFU, 0U, 0U); - PXP_SetProcessSurfaceBackGroundColor(PXP_ID, lv_color_to32(recolor)); + PXP_SetProcessSurfacePosition(LV_GPU_NXP_PXP_ID, 0xFFFFU, 0xFFFFU, 0U, 0U); + PXP_SetProcessSurfaceBackGroundColor(LV_GPU_NXP_PXP_ID, lv_color_to32(recolor)); /* Output buffer */ outputBufferConfig.pixelFormat = (pxp_output_pixel_format_t)PXP_OUT_PIXEL_FORMAT; @@ -412,9 +415,10 @@ static void lv_gpu_nxp_pxp_blit_recolor(lv_color_t * dest, lv_coord_t dest_width outputBufferConfig.pitchBytes = dest_width * sizeof(lv_color_t); outputBufferConfig.width = copy_width; outputBufferConfig.height = copy_height; - PXP_SetOutputBufferConfig(PXP_ID, &outputBufferConfig); + PXP_SetOutputBufferConfig(LV_GPU_NXP_PXP_ID, &outputBufferConfig); - lv_gpu_nxp_invalidate_cache(outputBufferConfig.buffer0Addr, outputBufferConfig.width, outputBufferConfig.height, outputBufferConfig.pitchBytes, sizeof(lv_color_t)); + lv_gpu_nxp_invalidate_cache(outputBufferConfig.buffer0Addr, outputBufferConfig.width, outputBufferConfig.height, + outputBufferConfig.pitchBytes, sizeof(lv_color_t)); pxp_porter_duff_config_t pdConfig; @@ -430,7 +434,7 @@ static void lv_gpu_nxp_pxp_blit_recolor(lv_color_t * dest, lv_coord_t dest_width pdConfig.dstGlobalAlpha = 255 - recolorOpa; pdConfig.srcAlphaMode = kPXP_PorterDuffAlphaStraight; /* don't care */ pdConfig.dstAlphaMode = kPXP_PorterDuffAlphaStraight; /* don't care */ - PXP_SetPorterDuffConfig(PXP_ID, &pdConfig); + PXP_SetPorterDuffConfig(LV_GPU_NXP_PXP_ID, &pdConfig); lv_gpu_nxp_pxp_run(); /* Start PXP task */ @@ -463,11 +467,13 @@ static void lv_gpu_nxp_pxp_blit_recolor(lv_color_t * dest, lv_coord_t dest_width * @param[in] stride stride in bytes * @param[in] pxSize pixel size in bytes */ -static void lv_gpu_nxp_invalidate_cache(uint32_t address, uint32_t width, uint32_t height, uint32_t stride, uint32_t pxSize) { +static void lv_gpu_nxp_invalidate_cache(uint32_t address, uint32_t width, uint32_t height, uint32_t stride, + uint32_t pxSize) +{ int y; - for (y = 0; y < height; y++) { - DCACHE_CleanInvalidateByRange(address, width*pxSize); + for(y = 0; y < height; y++) { + DCACHE_CleanInvalidateByRange(address, width * pxSize); address += stride; } } diff --git a/src/lv_gpu/lv_gpu_nxp_pxp.h b/src/lv_gpu/lv_gpu_nxp_pxp.h index 10207dd30..e3f10a445 100644 --- a/src/lv_gpu/lv_gpu_nxp_pxp.h +++ b/src/lv_gpu/lv_gpu_nxp_pxp.h @@ -45,30 +45,30 @@ extern "C" { * DEFINES *********************/ -/* PXP module instance to use */ -#define PXP_ID PXP +/** PXP module instance to use */ +#define LV_GPU_NXP_PXP_ID PXP -/* PXP interrupt line ID */ -#define PXP_IRQ_ID PXP_IRQn +/** PXP interrupt line ID */ +#define LV_GPU_NXP_PXP_IRQ_ID PXP_IRQn -/* Minimum area for image copy with 100% opacity to be handled by PXP */ -#ifndef GPU_NXP_PXP_BLIT_SIZE_LIMIT -#define GPU_NXP_PXP_BLIT_SIZE_LIMIT 1 +#ifndef LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT +/** Minimum area (in pixels) for image copy with 100% opacity to be handled by PXP */ +#define LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT 32 #endif -/* Minimum area for image copy with transparency to be handled by PXP */ -#ifndef GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT -#define GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT 16 +#ifndef LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT +/** Minimum area (in pixels) for image copy with transparency to be handled by PXP */ +#define LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT 16 #endif -/* Minimum area to be filled by PXP with 100% opacity */ -#ifndef GPU_NXP_PXP_FILL_SIZE_LIMIT -#define GPU_NXP_PXP_FILL_SIZE_LIMIT 64 +#ifndef LV_GPU_NXP_PXP_FILL_SIZE_LIMIT +/** Minimum area (in pixels) to be filled by PXP with 100% opacity */ +#define LV_GPU_NXP_PXP_FILL_SIZE_LIMIT 64 #endif -/* Minimum area to be filled by PXP with transparency */ -#ifndef GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT -#define GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT 32 +#ifndef LV_GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT +/** Minimum area (in pixels) to be filled by PXP with transparency */ +#define LV_GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT 32 #endif /********************** @@ -107,7 +107,7 @@ typedef struct { * * @return LV_RES_OK: PXP init ok; LV_RES_INV: init error. See error log for more information. */ -lv_res_t lv_gpu_nxp_pxp_init(lv_nxp_pxp_cfg_t *cfg); +lv_res_t lv_gpu_nxp_pxp_init(lv_nxp_pxp_cfg_t * cfg); /** * Disable PXP device. Should be called during display deinit sequence. @@ -123,7 +123,8 @@ void lv_gpu_nxp_pxp_deinit(void); * @param[in] color color * @param[in] opa transparency of the color */ -void lv_gpu_nxp_pxp_fill(lv_color_t *dest_buf, lv_coord_t dest_width, const lv_area_t *fill_area, lv_color_t color, lv_opa_t opa); +void lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, lv_coord_t dest_width, const lv_area_t * fill_area, lv_color_t color, + lv_opa_t opa); @@ -143,7 +144,8 @@ void lv_gpu_nxp_pxp_fill(lv_color_t *dest_buf, lv_coord_t dest_width, const lv_a * @param[in] copy_h height of area to be copied from src to dest * @param[in] opa opacity of the result */ -void lv_gpu_nxp_pxp_blit(lv_color_t * dest, lv_coord_t dest_width, const lv_color_t * src, lv_coord_t src_width, lv_coord_t copy_width, lv_coord_t copy_height, lv_opa_t opa); +void lv_gpu_nxp_pxp_blit(lv_color_t * dest, lv_coord_t dest_width, const lv_color_t * src, lv_coord_t src_width, + lv_coord_t copy_width, lv_coord_t copy_height, lv_opa_t opa); /** diff --git a/src/lv_gpu/lv_gpu_nxp_pxp_osa.c b/src/lv_gpu/lv_gpu_nxp_pxp_osa.c index eb23fbbe3..33f2b933a 100644 --- a/src/lv_gpu/lv_gpu_nxp_pxp_osa.c +++ b/src/lv_gpu/lv_gpu_nxp_pxp_osa.c @@ -86,8 +86,8 @@ void PXP_IRQHandler(void) BaseType_t taskAwake = pdFALSE; #endif - if(kPXP_CompleteFlag & PXP_GetStatusFlags(PXP_ID)) { - PXP_ClearStatusFlags(PXP_ID, kPXP_CompleteFlag); + if(kPXP_CompleteFlag & PXP_GetStatusFlags(LV_GPU_NXP_PXP_ID)) { + PXP_ClearStatusFlags(LV_GPU_NXP_PXP_ID, kPXP_CompleteFlag); #if defined(FSL_RTOS_FREE_RTOS) xSemaphoreGiveFromISR(s_pxpIdle, &taskAwake); portYIELD_FROM_ISR(taskAwake); @@ -113,12 +113,12 @@ static lv_res_t _lv_gpu_nxp_pxp_interrupt_init(void) return LV_RES_INV; } - NVIC_SetPriority(PXP_IRQ_ID, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1); + NVIC_SetPriority(LV_GPU_NXP_PXP_IRQ_ID, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1); #else s_pxpIdle = true; #endif - NVIC_EnableIRQ(PXP_IRQ_ID); + NVIC_EnableIRQ(LV_GPU_NXP_PXP_IRQ_ID); return LV_RES_OK; } @@ -128,7 +128,7 @@ static lv_res_t _lv_gpu_nxp_pxp_interrupt_init(void) */ static void _lv_gpu_nxp_pxp_interrupt_deinit(void) { - NVIC_DisableIRQ(PXP_IRQ_ID); + NVIC_DisableIRQ(LV_GPU_NXP_PXP_IRQ_ID); #if defined(FSL_RTOS_FREE_RTOS) vSemaphoreDelete(s_pxpIdle); #endif @@ -143,8 +143,8 @@ static void _lv_gpu_nxp_pxp_run(void) s_pxpIdle = false; #endif - PXP_EnableInterrupts(PXP_ID, kPXP_CompleteInterruptEnable); - PXP_Start(PXP_ID); + PXP_EnableInterrupts(LV_GPU_NXP_PXP_ID, kPXP_CompleteInterruptEnable); + PXP_Start(LV_GPU_NXP_PXP_ID); #if defined(FSL_RTOS_FREE_RTOS) if(xSemaphoreTake(s_pxpIdle, portMAX_DELAY) != pdTRUE) { From fc2206105b310dd01513dd88b50ddd0a40b90ad1 Mon Sep 17 00:00:00 2001 From: jozba <64474383+jozba@users.noreply.github.com> Date: Fri, 2 Oct 2020 13:12:41 +0200 Subject: [PATCH 13/61] Fixed include paths (#1823) Signed-off-by: Jozef Bastek --- tests/lv_test_core/lv_test_font_loader.c | 8 ++++---- tests/lv_test_fonts/font_1.c | 2 +- tests/lv_test_fonts/font_2.c | 2 +- tests/lv_test_fonts/font_3.c | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/lv_test_core/lv_test_font_loader.c b/tests/lv_test_core/lv_test_font_loader.c index 7158d0823..56a42c2d8 100644 --- a/tests/lv_test_core/lv_test_font_loader.c +++ b/tests/lv_test_core/lv_test_font_loader.c @@ -7,12 +7,12 @@ * INCLUDES *********************/ -#include "lvgl/lvgl.h" +#include "../../lvgl.h" #if LV_BUILD_TEST #include "../lv_test_assert.h" -#include "lvgl/src/lv_font/lv_font_fmt_txt.h" -#include "lvgl/src/lv_font/lv_font.h" -#include "lvgl/src/lv_font/lv_font_loader.h" +#include "../src/lv_font/lv_font_fmt_txt.h" +#include "../src/lv_font/lv_font.h" +#include "../src/lv_font/lv_font_loader.h" #include "lv_test_font_loader.h" diff --git a/tests/lv_test_fonts/font_1.c b/tests/lv_test_fonts/font_1.c index e94b63ff3..cb26d658d 100644 --- a/tests/lv_test_fonts/font_1.c +++ b/tests/lv_test_fonts/font_1.c @@ -1,4 +1,4 @@ -#include "lvgl/lvgl.h" +#include "../../lvgl.h" /******************************************************************************* * Size: 8 px diff --git a/tests/lv_test_fonts/font_2.c b/tests/lv_test_fonts/font_2.c index cf2a7b70b..cb20ac794 100644 --- a/tests/lv_test_fonts/font_2.c +++ b/tests/lv_test_fonts/font_2.c @@ -1,4 +1,4 @@ -#include "lvgl/lvgl.h" +#include "../../lvgl.h" /******************************************************************************* * Size: 8 px diff --git a/tests/lv_test_fonts/font_3.c b/tests/lv_test_fonts/font_3.c index 923affa1d..c0dd3cfbb 100644 --- a/tests/lv_test_fonts/font_3.c +++ b/tests/lv_test_fonts/font_3.c @@ -1,4 +1,4 @@ -#include "lvgl/lvgl.h" +#include "../../lvgl.h" /******************************************************************************* * Size: 20 px From 8394d92facd4e245dd04e403c087d83cc95207a7 Mon Sep 17 00:00:00 2001 From: Ali Rostami <9710249+ali-rostami@users.noreply.github.com> Date: Fri, 2 Oct 2020 15:29:05 +0330 Subject: [PATCH 14/61] Cursor (#1789) * update lv_obj_refresh_style describtion. * cursor added. * refresh chart after setting the cursor * add new direction and a bug fixed. * fixed the wrong changes for header file. * rename lv_cursor_direction_t enum members. * add lv_chart_get_x_from_index and lv_chart_get_y_from_index * lv_chart_get_x_from_index supports column chart type too. * fix the error of no lv_coord_t value return. * fix a bug based on the coord is with respect to the series area. * make get_series_area function global. * fix the name of get_series_area function. * add the description of the added functions. * chart cursor minor fixes Co-authored-by: Gabor Kiss-Vamosi --- src/lv_themes/lv_theme_material.c | 3 + src/lv_widgets/lv_chart.c | 278 ++++++++++++++++++++++++++++-- src/lv_widgets/lv_chart.h | 83 ++++++++- 3 files changed, 350 insertions(+), 14 deletions(-) diff --git a/src/lv_themes/lv_theme_material.c b/src/lv_themes/lv_theme_material.c index 811cd899c..6805707bf 100644 --- a/src/lv_themes/lv_theme_material.c +++ b/src/lv_themes/lv_theme_material.c @@ -1257,6 +1257,9 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj, lv_theme_style_t name) _lv_style_list_add_style(list, &styles->pad_small); _lv_style_list_add_style(list, &styles->chart_series_bg); + list = lv_obj_get_style_list(obj, LV_CHART_PART_CURSOR); + _lv_style_list_add_style(list, &styles->chart_series_bg); + list = lv_obj_get_style_list(obj, LV_CHART_PART_SERIES); _lv_style_list_add_style(list, &styles->chart_series); break; diff --git a/src/lv_widgets/lv_chart.c b/src/lv_widgets/lv_chart.c index d760510ea..055bccc14 100644 --- a/src/lv_widgets/lv_chart.c +++ b/src/lv_widgets/lv_chart.c @@ -51,10 +51,10 @@ static lv_style_list_t * lv_chart_get_style(lv_obj_t * chart, uint8_t part); static void draw_series_bg(lv_obj_t * chart, const lv_area_t * series_area, const lv_area_t * mask); static void draw_series_line(lv_obj_t * chart, const lv_area_t * series_area, const lv_area_t * clip_area); static void draw_series_column(lv_obj_t * chart, const lv_area_t * series_area, const lv_area_t * clip_area); +static void draw_cursors(lv_obj_t * chart, const lv_area_t * series_area, const lv_area_t * clip_area); static void draw_axes(lv_obj_t * chart, const lv_area_t * series_area, const lv_area_t * mask); static void invalidate_lines(lv_obj_t * chart, uint16_t i); static void invalidate_columns(lv_obj_t * chart, uint16_t i); -static void get_series_area(lv_obj_t * chart, lv_area_t * series_area); static void get_next_axis_label(lv_chart_label_iterator_t * iterator, char * buf); static inline bool is_tick_with_label(uint8_t tick_num, lv_chart_axis_cfg_t * axis); static lv_chart_label_iterator_t create_axis_label_iter(const char * list, uint8_t iterator_dir); @@ -98,6 +98,7 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy) } _lv_ll_init(&ext->series_ll, sizeof(lv_chart_series_t)); + _lv_ll_init(&ext->cursors_ll, sizeof(lv_chart_cursor_t)); uint8_t i; for(i = 0; i < _LV_CHART_AXIS_LAST; i++) { @@ -122,6 +123,7 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy) lv_style_list_init(&ext->style_series_bg); lv_style_list_init(&ext->style_series); + lv_style_list_init(&ext->style_cursors); if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(chart); if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(chart); @@ -140,6 +142,7 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy) lv_style_list_copy(&ext->style_series, &ext_copy->style_series); lv_style_list_copy(&ext->style_series_bg, &ext_copy->style_series_bg); + lv_style_list_copy(&ext->style_cursors, &ext_copy->style_cursors); ext->type = ext_copy->type; ext->hdiv_cnt = ext_copy->hdiv_cnt; @@ -204,6 +207,23 @@ lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color) return ser; } +lv_chart_cursor_t * lv_chart_add_cursor(lv_obj_t * chart, lv_color_t color, lv_cursor_direction_t axes) +{ + LV_ASSERT_OBJ(chart, LV_OBJX_NAME); + + lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + lv_chart_cursor_t * cursor = _lv_ll_ins_head(&ext->cursors_ll); + LV_ASSERT_MEM(cursor); + if(cursor == NULL) return NULL; + + cursor->point.x = 0U; + cursor->point.y = LV_CHART_POINT_DEF; + cursor->color = color; + cursor->axes = axes; + + return cursor; +} + /** * Clear the point of a series * @param chart pointer to a chart object @@ -629,6 +649,23 @@ void lv_chart_set_series_axis(lv_obj_t * chart, lv_chart_series_t * ser, lv_char lv_chart_refresh(chart); } +/** + * Set the coordinate of the cursor with respect + * to the origin of series area of the chart. + * @param chart pointer to a chart object. + * @param cursor pointer to the cursor. + * @param point the new coordinate of cursor relative to the series area + */ +void lv_chart_set_cursor_point(lv_obj_t * chart, lv_chart_cursor_t * cursor, lv_point_t * point) +{ + LV_ASSERT_NULL(cursor); + LV_UNUSED(chart); + + cursor->point.x = point->x; + cursor->point.y = point->y; + lv_chart_refresh(chart); +} + /*===================== * Getter functions *====================*/ @@ -702,6 +739,137 @@ lv_chart_axis_t lv_chart_get_series_axis(lv_obj_t * chart, lv_chart_series_t * s return ser->y_axis; } + +/** + * Get the coordinate of the cursor with respect + * to the origin of series area of the chart. + * @param chart pointer to a chart object + * @param cursor pointer to cursor + * @return coordinate of the cursor as lv_point_t + */ +lv_point_t lv_chart_get_cursor_point(lv_obj_t * chart, lv_chart_cursor_t * cursor) +{ + LV_ASSERT_NULL(cursor); + LV_UNUSED(chart); + + return cursor->point; +} + +/** + * Get the nearest index to an X coordinate + * @param chart pointer to a chart object + * @param coord the coordination of the point relative to the series area. + * @return the found index + */ +uint16_t lv_chart_get_nearest_index_from_coord(lv_obj_t * chart, lv_coord_t x) +{ + lv_area_t series_area; + lv_chart_get_series_area(chart, &series_area); + + lv_coord_t w = lv_area_get_width(&series_area); + lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + + if(x < 0) return 0; + if(x > w) return ext->point_cnt - 1; + if(ext->type == LV_CHART_TYPE_LINE) return (x * (ext->point_cnt - 1) + w / 2) / w; + if(ext->type == LV_CHART_TYPE_COLUMN) return (x * ext->point_cnt) / w; + + return 0; +} + +/** + * Get the x coordinate of the an index with respect + * to the origin of series area of the chart. + * @param chart pointer to a chart object + * @param ser pointer to series + * @param id the index. + * @return x coordinate of index + */ +lv_coord_t lv_chart_get_x_from_index(lv_obj_t * chart, lv_chart_series_t * ser, uint16_t id) +{ + LV_ASSERT_NULL(chart); + LV_ASSERT_NULL(ser); + + lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(id >= ext->point_cnt) { + LV_LOG_WARN("Invalid index: %d", id); + return 0; + } + + lv_area_t series_area; + lv_chart_get_series_area(chart, &series_area); + + lv_coord_t w = lv_area_get_width(&series_area); + + lv_coord_t x = 0; + + + if(ext->type & LV_CHART_TYPE_LINE) { + x = (w * id) / (ext->point_cnt - 1); + } else if(ext->type & LV_CHART_TYPE_COLUMN) { + lv_coord_t col_w = w / ((_lv_ll_get_len(&ext->series_ll) + 1) * ext->point_cnt); /* Suppose + 1 series as separator*/ + lv_chart_series_t * itr_ser = NULL; + lv_style_int_t col_space = lv_obj_get_style_pad_inner(chart, LV_CHART_PART_SERIES); + + x = (int32_t)((int32_t)w * id) / ext->point_cnt; + x += col_w / 2; /*Start offset*/ + + _LV_LL_READ_BACK(ext->series_ll, itr_ser) { + if(itr_ser == ser) break; + x += col_w; + } + + x += (col_w - col_space) / 2; + } + + return x; +} + +/** + * Get the y coordinate of the an index with respect + * to the origin of series area of the chart. + * @param chart pointer to a chart object + * @param ser pointer to series + * @param id the index. + * @return y coordinate of index + */ +lv_coord_t lv_chart_get_y_from_index(lv_obj_t * chart, lv_chart_series_t * ser, uint16_t id) +{ + LV_ASSERT_NULL(chart); + LV_ASSERT_NULL(ser); + + lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(id >= ext->point_cnt) { + LV_LOG_WARN("Invalid index: %d", id); + return 0; + } + + lv_area_t series_area; + lv_chart_get_series_area(chart, &series_area); + + lv_coord_t h = lv_area_get_height(&series_area); + + int32_t y = (int32_t)((int32_t)ser->points[id] - ext->ymin[ser->y_axis]) * h; + y = y / (ext->ymax[ser->y_axis] - ext->ymin[ser->y_axis]); + y = h - y; + + return (lv_coord_t)y; +} + +/** + * Get the series area of a chart. + * @param chart pointer to a chart object + * @param series_area pointer to an area variable that the result will be put in. + */ +void lv_chart_get_series_area(lv_obj_t * chart, lv_area_t * series_area) +{ + lv_area_copy(series_area, &chart->coords); + series_area->x1 += lv_obj_get_style_pad_left(chart, LV_CHART_PART_BG); + series_area->x2 -= lv_obj_get_style_pad_right(chart, LV_CHART_PART_BG); + series_area->y1 += lv_obj_get_style_pad_top(chart, LV_CHART_PART_BG); + series_area->y2 -= lv_obj_get_style_pad_bottom(chart, LV_CHART_PART_BG); +} + /*===================== * Other functions *====================*/ @@ -744,7 +912,7 @@ static lv_design_res_t lv_chart_design(lv_obj_t * chart, const lv_area_t * clip_ lv_draw_rect(&chart->coords, clip_area, &bg_dsc); lv_area_t series_area; - get_series_area(chart, &series_area); + lv_chart_get_series_area(chart, &series_area); draw_series_bg(chart, &series_area, clip_area); draw_axes(chart, &series_area, clip_area); @@ -753,6 +921,7 @@ static lv_design_res_t lv_chart_design(lv_obj_t * chart, const lv_area_t * clip_ lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); if(ext->type & LV_CHART_TYPE_LINE) draw_series_line(chart, &series_area, clip_area); if(ext->type & LV_CHART_TYPE_COLUMN) draw_series_column(chart, &series_area, clip_area); + draw_cursors(chart, &series_area, clip_area); } return LV_DESIGN_RES_OK; @@ -794,6 +963,7 @@ static lv_res_t lv_chart_signal(lv_obj_t * chart, lv_signal_t sign, void * param _lv_ll_clear(&ext->series_ll); lv_obj_clean_style_list(chart, LV_CHART_PART_SERIES); + lv_obj_clean_style_list(chart, LV_CHART_PART_CURSOR); lv_obj_clean_style_list(chart, LV_CHART_PART_SERIES_BG); } @@ -824,6 +994,9 @@ static lv_style_list_t * lv_chart_get_style(lv_obj_t * chart, uint8_t part) case LV_CHART_PART_SERIES: style_dsc_p = &ext->style_series; break; + case LV_CHART_PART_CURSOR: + style_dsc_p = &ext->style_cursors; + break; default: style_dsc_p = NULL; } @@ -1120,6 +1293,94 @@ static void draw_series_column(lv_obj_t * chart, const lv_area_t * series_area, } } +/** + * Draw the cursors as lines on a chart + * @param chart pointer to chart object + * @param clip_area the object will be drawn only in this area + */ +static void draw_cursors(lv_obj_t * chart, const lv_area_t * series_area, const lv_area_t * clip_area) +{ + lv_area_t series_mask; + bool mask_ret = _lv_area_intersect(&series_mask, series_area, clip_area); + if(mask_ret == false) return; + + lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(_lv_ll_is_empty(&ext->cursors_ll)) return; + + lv_point_t p1; + lv_point_t p2; + lv_chart_cursor_t * cursor; + + lv_draw_line_dsc_t line_dsc; + lv_draw_line_dsc_init(&line_dsc); + lv_obj_init_draw_line_dsc(chart, LV_CHART_PART_CURSOR, &line_dsc); + + lv_draw_rect_dsc_t point_dsc; + lv_draw_rect_dsc_init(&point_dsc); + point_dsc.bg_opa = line_dsc.opa; + point_dsc.radius = LV_RADIUS_CIRCLE; + + lv_coord_t point_radius = lv_obj_get_style_size(chart, LV_CHART_PART_CURSOR); + + /*Do not bother with line ending is the point will over it*/ + if(point_radius > line_dsc.width / 2) line_dsc.raw_end = 1; + + /*Go through all cursor lines*/ + _LV_LL_READ_BACK(ext->cursors_ll, cursor) { + line_dsc.color = cursor->color; + point_dsc.bg_color = cursor->color; + + if(cursor->axes & LV_CHART_CURSOR_RIGHT) { + p1.x = series_area->x1 + cursor->point.x; + p1.y = series_area->y1 + cursor->point.y; + p2.x = series_area->x2; + p2.y = p1.y; + lv_draw_line(&p1, &p2, &series_mask, &line_dsc); + } + + if(cursor->axes & LV_CHART_CURSOR_UP) { + + p1.x = series_area->x1 + cursor->point.x; + p1.y = series_area->y1; + p2.x = p1.x; + p2.y = series_area->y1 + cursor->point.y; + lv_draw_line(&p1, &p2, &series_mask, &line_dsc); + } + + if(cursor->axes & LV_CHART_CURSOR_LEFT) { + p1.x = series_area->x1; + p1.y = series_area->y1 + cursor->point.y; + p2.x = p1.x + cursor->point.x; + p2.y = p1.y; + lv_draw_line(&p1, &p2, &series_mask, &line_dsc); + } + + if(cursor->axes & LV_CHART_CURSOR_DOWN) { + + p1.x = series_area->x1 + cursor->point.x; + p1.y = series_area->y1 + cursor->point.y; + p2.x = p1.x; + p2.y = series_area->y2; + lv_draw_line(&p1, &p2, &series_mask, &line_dsc); + } + + if(point_radius) { + lv_area_t point_area; + + point_area.x1 = series_area->x1 + cursor->point.x - point_radius; + point_area.x2 = series_area->x1 + cursor->point.x + point_radius; + + point_area.y1 = series_area->y1 + cursor->point.y - point_radius; + point_area.y2 = series_area->y1 + cursor->point.y + point_radius; + + /*Don't limit to `series_mask` to get full circles on the ends*/ + lv_draw_rect(&point_area, clip_area, &point_dsc); + } + + } + +} + /** * Create iterator for newline-separated list * @param list pointer to newline-separated labels list @@ -1498,7 +1759,7 @@ static void invalidate_lines(lv_obj_t * chart, uint16_t i) if(i >= ext->point_cnt) return; lv_area_t series_area; - get_series_area(chart, &series_area); + lv_chart_get_series_area(chart, &series_area); lv_coord_t w = lv_area_get_width(&series_area); lv_coord_t x_ofs = series_area.x1; @@ -1535,7 +1796,7 @@ static void invalidate_columns(lv_obj_t * chart, uint16_t i) lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); lv_area_t series_area; - get_series_area(chart, &series_area); + lv_chart_get_series_area(chart, &series_area); lv_area_t col_a; lv_coord_t w = lv_area_get_width(&series_area); @@ -1553,13 +1814,4 @@ static void invalidate_columns(lv_obj_t * chart, uint16_t i) _lv_inv_area(lv_obj_get_disp(chart), &col_a); } -static void get_series_area(lv_obj_t * chart, lv_area_t * series_area) -{ - lv_area_copy(series_area, &chart->coords); - series_area->x1 += lv_obj_get_style_pad_left(chart, LV_CHART_PART_BG); - series_area->x2 -= lv_obj_get_style_pad_right(chart, LV_CHART_PART_BG); - series_area->y1 += lv_obj_get_style_pad_top(chart, LV_CHART_PART_BG); - series_area->y2 -= lv_obj_get_style_pad_bottom(chart, LV_CHART_PART_BG); -} - #endif diff --git a/src/lv_widgets/lv_chart.h b/src/lv_widgets/lv_chart.h index 6f3deed8d..16ee6bcf0 100644 --- a/src/lv_widgets/lv_chart.h +++ b/src/lv_widgets/lv_chart.h @@ -61,6 +61,15 @@ enum { }; typedef uint8_t lv_chart_axis_t; +enum { + LV_CHART_CURSOR_NONE = 0x00, + LV_CHART_CURSOR_RIGHT = 0x01, + LV_CHART_CURSOR_UP = 0x02, + LV_CHART_CURSOR_LEFT = 0x04, + LV_CHART_CURSOR_DOWN = 0x08 +}; +typedef uint8_t lv_cursor_direction_t; + typedef struct { lv_coord_t * points; lv_color_t color; @@ -69,6 +78,12 @@ typedef struct { lv_chart_axis_t y_axis : 1; } lv_chart_series_t; +typedef struct { + lv_point_t point; + lv_color_t color; + lv_cursor_direction_t axes : 4; +} lv_chart_cursor_t; + /** Data of axis */ enum { LV_CHART_AXIS_SKIP_LAST_TICK = 0x00, /**< don't draw the last tick */ @@ -90,6 +105,7 @@ typedef struct { /*No inherited ext*/ /*Ext. of ancestor*/ /*New data for this type */ lv_ll_t series_ll; /*Linked list for the data line pointers (stores lv_chart_series_t)*/ + lv_ll_t cursors_ll; /*Linked list for the cursor pointers (stores lv_chart_cursor_t)*/ lv_coord_t ymin[_LV_CHART_AXIS_LAST]; /*y min values for both axis (used to scale the data)*/ lv_coord_t ymax[_LV_CHART_AXIS_LAST]; /*y max values for both axis (used to scale the data)*/ uint8_t hdiv_cnt; /*Number of horizontal division lines*/ @@ -97,6 +113,7 @@ typedef struct { uint16_t point_cnt; /*Point number in a data line*/ lv_style_list_t style_series_bg; lv_style_list_t style_series; + lv_style_list_t style_cursors; lv_chart_type_t type; /*Line, column or point chart (from 'lv_chart_type_t')*/ lv_chart_axis_cfg_t y_axis; lv_chart_axis_cfg_t x_axis; @@ -108,7 +125,8 @@ typedef struct { enum { LV_CHART_PART_BG = LV_OBJ_PART_MAIN, LV_CHART_PART_SERIES_BG = _LV_OBJ_PART_VIRTUAL_LAST, - LV_CHART_PART_SERIES + LV_CHART_PART_SERIES, + LV_CHART_PART_CURSOR }; /********************** @@ -136,6 +154,15 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy); */ lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color); +/** + * Add a cursor with a given color + * @param chart pointer to chart object + * @param color color of the cursor + * @param dir direction of the cursor. `LV_CHART_CURSOR_RIGHT/LEFT/TOP/DOWN`. OR-ed vaéues are possible + * @return pointer to the created cursor + */ +lv_chart_cursor_t * lv_chart_add_cursor(lv_obj_t * chart, lv_color_t color, lv_cursor_direction_t dir); + /** * Clear the point of a series * @param chart pointer to a chart object @@ -307,6 +334,16 @@ void lv_chart_set_point_id(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t */ void lv_chart_set_series_axis(lv_obj_t * chart, lv_chart_series_t * ser, lv_chart_axis_t axis); +/** + * Set the coordinate of the cursor with respect + * to the origin of series area of the chart. + * @param chart pointer to a chart object. + * @param cursor pointer to the cursor. + * @param point the new coordinate of cursor relative to the series area + */ +void lv_chart_set_cursor_point(lv_obj_t * chart, lv_chart_cursor_t * cursor, lv_point_t * point); + + /*===================== * Getter functions *====================*/ @@ -349,6 +386,50 @@ lv_coord_t lv_chart_get_point_id(lv_obj_t * chart, lv_chart_series_t * ser, uint */ lv_chart_axis_t lv_chart_get_series_axis(lv_obj_t * chart, lv_chart_series_t * ser); +/** + * Get an individual point y value in the chart series directly based on index + * @param chart pointer to a chart object + * @param series_area pointer to an area variable that the result will put in. + */ +void lv_chart_get_series_area(lv_obj_t * chart, lv_area_t * series_area); + +/** + * Get the coordinate of the cursor with respect + * to the origin of series area of the chart. + * @param chart pointer to a chart object + * @param cursor pointer to cursor + * @return coordinate of the cursor as lv_point_t + */ +lv_point_t lv_chart_get_cursor_point(lv_obj_t * chart, lv_chart_cursor_t * cursor); + +/** + * Get the nearest index to an X coordinate + * @param chart pointer to a chart object + * @param coord the coordination of the point relative to the series area. + * @return the found index + */ +uint16_t lv_chart_get_nearest_index_from_coord(lv_obj_t * chart, lv_coord_t x); + +/** + * Get the x coordinate of the an index with respect + * to the origin of series area of the chart. + * @param chart pointer to a chart object + * @param ser pointer to series + * @param id the index. + * @return x coordinate of index + */ +lv_coord_t lv_chart_get_x_from_index(lv_obj_t * chart, lv_chart_series_t * ser, uint16_t id); + +/** + * Get the y coordinate of the an index with respect + * to the origin of series area of the chart. + * @param chart pointer to a chart object + * @param ser pointer to series + * @param id the index. + * @return y coordinate of index + */ +lv_coord_t lv_chart_get_y_from_index(lv_obj_t * chart, lv_chart_series_t * ser, uint16_t id); + /*===================== * Other functions *====================*/ From 86ddaf90a71a7f0cd07741c2f45aef4e92bae53c Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 2 Oct 2020 21:45:32 +0200 Subject: [PATCH 15/61] material theme: do not set the text font to allow easy global font change --- CHANGELOG.md | 2 ++ src/lv_themes/lv_theme_material.c | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c48a278e8..076242b9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ - Handle sub pixel rendering in font loader - Fix transitions with style caching - Fix click focus +- Fix imgbtn image switching with empty style +- Material theme: do not set the text font to allow easy global font change ## v7.6.0 (22.09.2020) diff --git a/src/lv_themes/lv_theme_material.c b/src/lv_themes/lv_theme_material.c index 1e6a8c8bb..52030a998 100644 --- a/src/lv_themes/lv_theme_material.c +++ b/src/lv_themes/lv_theme_material.c @@ -204,7 +204,6 @@ static void basic_init(void) lv_style_set_bg_color(&styles->scr, LV_STATE_DEFAULT, COLOR_SCR); lv_style_set_text_color(&styles->scr, LV_STATE_DEFAULT, COLOR_SCR_TEXT); lv_style_set_value_color(&styles->scr, LV_STATE_DEFAULT, COLOR_SCR_TEXT); - lv_style_set_text_font(&styles->scr, LV_STATE_DEFAULT, theme.font_normal); lv_style_set_value_font(&styles->scr, LV_STATE_DEFAULT, theme.font_normal); style_init_reset(&styles->bg); @@ -217,7 +216,6 @@ static void basic_init(void) lv_style_set_border_color(&styles->bg, LV_STATE_EDITED, theme.color_secondary); lv_style_set_border_width(&styles->bg, LV_STATE_DEFAULT, BORDER_WIDTH); lv_style_set_border_post(&styles->bg, LV_STATE_DEFAULT, true); - lv_style_set_text_font(&styles->bg, LV_STATE_DEFAULT, theme.font_normal); lv_style_set_text_color(&styles->bg, LV_STATE_DEFAULT, COLOR_BG_TEXT); lv_style_set_value_font(&styles->bg, LV_STATE_DEFAULT, theme.font_normal); lv_style_set_value_color(&styles->bg, LV_STATE_DEFAULT, COLOR_BG_TEXT); @@ -847,7 +845,6 @@ static void tabview_win_shared_init(void) 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_text_font(&styles->tabview_btns_bg, LV_STATE_DEFAULT, theme.font_normal); 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)); lv_style_set_pad_left(&styles->tabview_btns_bg, LV_STATE_DEFAULT, LV_DPX(7)); From 96478a0c3e25708797a635e0cdcd260195ac75cb Mon Sep 17 00:00:00 2001 From: C47D Date: Fri, 2 Oct 2020 22:35:38 -0500 Subject: [PATCH 16/61] lv_conf_internal: Check for LV_CONF_INCLUDE_SIMPLE before defining it. --- src/lv_conf_internal.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lv_conf_internal.h b/src/lv_conf_internal.h index 064917cad..6bc8169ef 100644 --- a/src/lv_conf_internal.h +++ b/src/lv_conf_internal.h @@ -12,7 +12,9 @@ #if defined __has_include # if __has_include("lv_conf.h") +# ifndef LV_CONF_INCLUDE_SIMPLE # define LV_CONF_INCLUDE_SIMPLE +# endif # endif #endif From 78ecdd1f1dea8f5de269d511ec0f7ab88b17aaff Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 5 Oct 2020 09:43:52 +0200 Subject: [PATCH 17/61] Update ROADMAP.md --- docs/ROADMAP.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index cbae70459..a2760a515 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -34,6 +34,7 @@ Planned to September/October 2020 - Remove the copy paramter from create functions ## Ideas +- 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) - CPP binding. See [Forum](https://forum.lvgl.io/t/is-it-possible-to-officially-support-optional-cpp-api/2736) From 3dabec4caec98a6f4d0568d7fdd01fc2d43dc830 Mon Sep 17 00:00:00 2001 From: Amir Gonnen Date: Mon, 5 Oct 2020 11:53:02 +0300 Subject: [PATCH 18/61] Run test on dev branch as well (#1835) --- .github/workflows/build_micropython.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_micropython.yml b/.github/workflows/build_micropython.yml index 2608abde4..3f8e56b43 100644 --- a/.github/workflows/build_micropython.yml +++ b/.github/workflows/build_micropython.yml @@ -2,9 +2,9 @@ name: Build Micropython with LVGL submodule on: push: - branches: [ master ] + branches: [ master, dev ] pull_request: - branches: [ master ] + branches: [ master, dev ] jobs: build: From e557b0fbac9a198149d2cdc5919adbacd0799789 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 5 Oct 2020 08:31:20 -0400 Subject: [PATCH 19/61] Only check __STDC_VERSION__ if __cplusplus is not defined --- src/lv_misc/lv_types.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lv_misc/lv_types.h b/src/lv_misc/lv_types.h index a277d57eb..92c75ee39 100644 --- a/src/lv_misc/lv_types.h +++ b/src/lv_misc/lv_types.h @@ -18,7 +18,7 @@ extern "C" { * DEFINES *********************/ -#if __STDC_VERSION__ >= 199901L // If c99 or newer, use stdint.h to determine arch size +#if defined(__cplusplus) || __STDC_VERSION__ >= 199901L // If c99 or newer, use stdint.h to determine arch size #include #endif @@ -53,7 +53,7 @@ typedef uint8_t lv_res_t; -#if __STDC_VERSION__ >= 199901L +#if defined(__cplusplus) || __STDC_VERSION__ >= 199901L // If c99 or newer, use the definition of uintptr_t directly from typedef uintptr_t lv_uintptr_t; From 6b24c949f1d904ccbcf730849e3f3aedafc5c94f Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 5 Oct 2020 20:45:58 +0200 Subject: [PATCH 20/61] fix lv_img offset usage Fixes: https://forum.lvgl.io/t/problem-with-lv-img-set-offset-y-in-ver-7/3330 --- src/lv_widgets/lv_img.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lv_widgets/lv_img.c b/src/lv_widgets/lv_img.c index 73ac21b28..1b0e7a817 100644 --- a/src/lv_widgets/lv_img.c +++ b/src/lv_widgets/lv_img.c @@ -706,10 +706,10 @@ static lv_design_res_t lv_img_design(lv_obj_t * img, const lv_area_t * clip_area coords_tmp.y1 = zommed_coords.y1; coords_tmp.y2 = zommed_coords.y1 + ext->h - 1; - for(; coords_tmp.y1 <= zommed_coords.y2; coords_tmp.y1 += zoomed_src_h, coords_tmp.y2 += zoomed_src_h) { + for(; coords_tmp.y1 <= clip_real.y2; coords_tmp.y1 += zoomed_src_h, coords_tmp.y2 += zoomed_src_h) { coords_tmp.x1 = zommed_coords.x1; coords_tmp.x2 = zommed_coords.x1 + ext->w - 1; - for(; coords_tmp.x1 <= zommed_coords.x2; coords_tmp.x1 += zoomed_src_w, coords_tmp.x2 += zoomed_src_w) { + for(; coords_tmp.x1 <= clip_real.x2; coords_tmp.x1 += zoomed_src_w, coords_tmp.x2 += zoomed_src_w) { lv_draw_img(&coords_tmp, &clip_real, ext->src, &img_dsc); } } From bc626dc9d0352f3eb6bd907d49675afb4ac73190 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 6 Oct 2020 08:59:07 +0200 Subject: [PATCH 21/61] update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0bf0769d..f8561f5a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### New features - Add PXP GPU support (for NXP MCUs) +- Add VG-Lite GPU support (for NXP MCUs) - Allow max. 16 cell types for table - Add `lv_table_set_text_fmt()` - Use margin on calendar header to set distances and padding to the size of the header From 3d8a19a0ca83dff28fa34a54473f4e2baa13ee76 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 6 Oct 2020 09:29:13 +0200 Subject: [PATCH 22/61] fix version number --- lvgl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lvgl.h b/lvgl.h index 27a5e64b4..1387620d4 100644 --- a/lvgl.h +++ b/lvgl.h @@ -16,7 +16,7 @@ extern "C" { ***************************/ #define LVGL_VERSION_MAJOR 7 #define LVGL_VERSION_MINOR 6 -#define LVGL_VERSION_PATCH 0 +#define LVGL_VERSION_PATCH 1 #define LVGL_VERSION_INFO "" /********************* From 8b6bb637956084ba2ae5a7aab44fa48bcf37b854 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 6 Oct 2020 09:30:37 +0200 Subject: [PATCH 23/61] prepare to release v7.6.1 --- library.json | 2 +- library.properties | 2 +- lv_conf_template.h | 2 +- src/lv_conf_internal.h | 10 +--------- src/lv_widgets/lv_checkbox.c | 3 ++- src/lv_widgets/lv_dropdown.c | 2 +- 6 files changed, 7 insertions(+), 14 deletions(-) diff --git a/library.json b/library.json index d324347db..d74ee907e 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "lvgl", - "version": "7.6.0", + "version": "7.6.1", "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": { diff --git a/library.properties b/library.properties index 3fd5bbc96..0f9594804 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=lvgl -version=7.6.0 +version=7.6.1 author=kisvegabor maintainer=kisvegabor,embeddedt,pete-pjb sentence=Full-featured Graphics Library for Embedded Systems diff --git a/lv_conf_template.h b/lv_conf_template.h index 7bb7d06be..8e2fe0773 100644 --- a/lv_conf_template.h +++ b/lv_conf_template.h @@ -1,6 +1,6 @@ /** * @file lv_conf.h - * Configuration file for v7.6.0-dev + * Configuration file for v7.6.1-dev */ /* diff --git a/src/lv_conf_internal.h b/src/lv_conf_internal.h index 6bc8169ef..0bc7aacbe 100644 --- a/src/lv_conf_internal.h +++ b/src/lv_conf_internal.h @@ -10,14 +10,6 @@ #include -#if defined __has_include -# if __has_include("lv_conf.h") -# ifndef LV_CONF_INCLUDE_SIMPLE -# define LV_CONF_INCLUDE_SIMPLE -# endif -# endif -#endif - /*If lv_conf.h is not skipped include it*/ #if !defined(LV_CONF_SKIP) && !defined(CONFIG_LV_CONF_SKIP) # if defined(LV_CONF_PATH) /*If there is a path defined for lv_conf.h use it*/ @@ -1259,7 +1251,7 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h" */ /* Support bidirectional texts. * Allows mixing Left-to-Right and Right-to-Left texts. - * The direction will be processed according to the Unicode Bidirectional Algorithm: + * The direction will be processed according to the Unicode Bidirectioanl Algorithm: * https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ #ifndef LV_USE_BIDI # ifdef CONFIG_LV_USE_BIDI diff --git a/src/lv_widgets/lv_checkbox.c b/src/lv_widgets/lv_checkbox.c index 276a76279..93f2b4b21 100644 --- a/src/lv_widgets/lv_checkbox.c +++ b/src/lv_widgets/lv_checkbox.c @@ -145,7 +145,8 @@ void lv_checkbox_set_checked(lv_obj_t * cb, bool checked) if(checked) { lv_obj_add_state(ext->bullet, LV_STATE_CHECKED); lv_obj_add_state(ext->label, LV_STATE_CHECKED); - } else { + } + else { lv_obj_clear_state(ext->bullet, LV_STATE_CHECKED); lv_obj_clear_state(ext->label, LV_STATE_CHECKED); } diff --git a/src/lv_widgets/lv_dropdown.c b/src/lv_widgets/lv_dropdown.c index eec0754d6..40a094412 100644 --- a/src/lv_widgets/lv_dropdown.c +++ b/src/lv_widgets/lv_dropdown.c @@ -767,7 +767,7 @@ static lv_design_res_t lv_dropdown_design(lv_obj_t * ddlist, const lv_area_t * c lv_draw_label(&txt_area, clip_area, &label_dsc, txt, NULL); } - txt =rev ? opt_txt : ext->symbol; + txt = rev ? opt_txt : ext->symbol; if(txt) { _lv_txt_get_size(&txt_size, txt, label_dsc.font, label_dsc.letter_space, label_dsc.line_space, LV_COORD_MAX, label_dsc.flag); From 3c9468a621939e53aec03cd4a8c513370ba236fe Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 6 Oct 2020 09:54:32 +0200 Subject: [PATCH 24/61] Update dev version --- lv_conf_template.h | 2 +- lvgl.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lv_conf_template.h b/lv_conf_template.h index f05195993..13e30b1aa 100644 --- a/lv_conf_template.h +++ b/lv_conf_template.h @@ -1,6 +1,6 @@ /** * @file lv_conf.h - * Configuration file for v7.7.0-dev + * Configuration file for v7.8.0-dev */ /* diff --git a/lvgl.h b/lvgl.h index d40b3fae4..c61a0e06e 100644 --- a/lvgl.h +++ b/lvgl.h @@ -15,7 +15,7 @@ extern "C" { * CURRENT VERSION OF LVGL ***************************/ #define LVGL_VERSION_MAJOR 7 -#define LVGL_VERSION_MINOR 7 +#define LVGL_VERSION_MINOR 8 #define LVGL_VERSION_PATCH 0 #define LVGL_VERSION_INFO "dev" From faf50714a12a93c981b02be7e139c3a26a0c89b2 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 6 Oct 2020 11:23:32 +0200 Subject: [PATCH 25/61] update release script --- scripts/release.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/scripts/release.py b/scripts/release.py index b5002b901..856b088a0 100755 --- a/scripts/release.py +++ b/scripts/release.py @@ -108,10 +108,6 @@ def clone_repos(): cmd("mkdir " + workdir) os.chdir(workdir) - #For debuging just copy the repos - #cmd("cp -a ../repos/. .") - #return - cmd("git clone " + upstream("lvgl") + "; cd lvgl; git checkout master; git remote update origin --prune; ") cmd("git clone " + upstream("lv_examples") + "; cd lv_examples; git checkout master; git remote update origin --prune; ") cmd("git clone " + upstream("lv_drivers") + "; cd lv_drivers; git checkout master; git remote update origin --prune; ") @@ -452,7 +448,7 @@ def cleanup(): cmd("rm -fr " + workdir) if __name__ == '__main__': - dev_prepare = 'bugfix' + dev_prepare = 'minor' if(len(sys.argv) != 2): print("Missing argument. Usage ./release.py bugfix | minor | major") print("Use minor by deafult") @@ -482,6 +478,10 @@ if __name__ == '__main__': publish_master() projs_update() + dev_ver_major = "7" + dev_ver_minor = "7" + dev_ver_patch = "0" + dev_ver_str = "v7.7.0" if dev_prepare == 'bugfix': ver_patch = str(int(ver_patch) + 1) @@ -493,15 +493,14 @@ if __name__ == '__main__': docs_update_latest_version() else: - #merge_from_dev() - - get_lvgl_version("master") + merge_from_dev() if dev_prepare == 'minor': - ver_minor = str(int(ver_minor) + 1) + ver_major = dev_ver_major + ver_minor = str(int(dev_ver_minor) + 1) ver_patch = "0" else: - ver_major = str(int(ver_major) + 1) + ver_major = str(int(dev_ver_major) + 1) ver_minor = "0" ver_patch = "0" From fff3a00de241493cb80b260bed18cd622e809644 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 6 Oct 2020 11:25:37 +0200 Subject: [PATCH 26/61] fix lv_disp_get_inactive_time if the disp==NULL Fixes #1836 --- src/lv_core/lv_disp.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/lv_core/lv_disp.c b/src/lv_core/lv_disp.c index 9d0158aa8..440232b64 100644 --- a/src/lv_core/lv_disp.c +++ b/src/lv_core/lv_disp.c @@ -316,12 +316,6 @@ void lv_scr_load_anim(lv_obj_t * new_scr, lv_scr_load_anim_t anim_type, uint32_t */ uint32_t lv_disp_get_inactive_time(const lv_disp_t * disp) { - if(!disp) disp = lv_disp_get_default(); - if(!disp) { - LV_LOG_WARN("lv_disp_get_inactive_time: no display registered"); - return 0; - } - if(disp) return lv_tick_elaps(disp->last_activity_time); lv_disp_t * d; From 1d50bc962d7b36ae10db02f138d2b5085be92839 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 7 Oct 2020 12:23:24 +0200 Subject: [PATCH 27/61] theme update to support text selection background Fixes #1820 --- CHANGELOG.md | 1 + src/lv_themes/lv_theme_material.c | 2 ++ src/lv_themes/lv_theme_mono.c | 2 ++ 3 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8561f5a1..337a81601 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - Add `text_sel_bg` style proeprty ### Bugfixes +- Theme update to support text selection background ## v7.6.1 (06.10.2020) diff --git a/src/lv_themes/lv_theme_material.c b/src/lv_themes/lv_theme_material.c index 29878ca4e..372f8a0e8 100644 --- a/src/lv_themes/lv_theme_material.c +++ b/src/lv_themes/lv_theme_material.c @@ -204,6 +204,8 @@ static void basic_init(void) lv_style_set_bg_color(&styles->scr, LV_STATE_DEFAULT, COLOR_SCR); lv_style_set_text_color(&styles->scr, LV_STATE_DEFAULT, COLOR_SCR_TEXT); lv_style_set_value_color(&styles->scr, LV_STATE_DEFAULT, COLOR_SCR_TEXT); + lv_style_set_text_sel_color(&styles->scr, LV_STATE_DEFAULT, COLOR_SCR_TEXT); + lv_style_set_text_sel_bg_color(&styles->scr, LV_STATE_DEFAULT, theme.color_primary); lv_style_set_value_font(&styles->scr, LV_STATE_DEFAULT, theme.font_normal); style_init_reset(&styles->bg); diff --git a/src/lv_themes/lv_theme_mono.c b/src/lv_themes/lv_theme_mono.c index 1710f5cf7..6c8a8bfaf 100644 --- a/src/lv_themes/lv_theme_mono.c +++ b/src/lv_themes/lv_theme_mono.c @@ -115,6 +115,8 @@ static void basic_init(void) lv_style_set_bg_opa(&styles->scr, LV_STATE_DEFAULT, LV_OPA_COVER); lv_style_set_bg_color(&styles->scr, LV_STATE_DEFAULT, BG_COLOR); lv_style_set_text_color(&styles->scr, LV_STATE_DEFAULT, FG_COLOR); + lv_style_set_text_sel_color(&styles->scr, LV_STATE_DEFAULT, BG_COLOR); + lv_style_set_text_sel_bg_color(&styles->scr, LV_STATE_DEFAULT, FG_COLOR); lv_style_set_value_color(&styles->scr, LV_STATE_DEFAULT, FG_COLOR); style_init_reset(&styles->bg); From f1a198bd93cbe3e4eef4e959bb37474212c7807e Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 7 Oct 2020 12:44:54 +0200 Subject: [PATCH 28/61] fix imgbtn state change --- CHANGELOG.md | 1 + src/lv_widgets/lv_imgbtn.c | 20 ++++++++++++++++++++ src/lv_widgets/lv_imgbtn.h | 31 +++++++++++++------------------ 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 337a81601..cfc5c48a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ ### Bugfixes - Theme update to support text selection background +- Fix imgbtn state change ## v7.6.1 (06.10.2020) diff --git a/src/lv_widgets/lv_imgbtn.c b/src/lv_widgets/lv_imgbtn.c index 13c3e1621..072e574dd 100644 --- a/src/lv_widgets/lv_imgbtn.c +++ b/src/lv_widgets/lv_imgbtn.c @@ -170,6 +170,26 @@ void lv_imgbtn_set_src_tiled(lv_obj_t * imgbtn, lv_btn_state_t state, const void #endif +/** + * Set the state of the image button + * @param imgbtn pointer to an image button object + * @param state the new state of the button (from lv_btn_state_t enum) + */ +void lv_imgbtn_set_state(lv_obj_t * imgbtn, lv_btn_state_t state) +{ + lv_btn_set_state(imgbtn, state); + refr_img(imgbtn); +} + +/** + * Toggle the state of the image button (ON->OFF, OFF->ON) + * @param imgbtn pointer to a image button object + */ +void lv_imgbtn_toggle(lv_obj_t * imgbtn) +{ + lv_imgbtn_toggle(imgbtn); + refr_img(imgbtn); +} /*===================== * Getter functions *====================*/ diff --git a/src/lv_widgets/lv_imgbtn.h b/src/lv_widgets/lv_imgbtn.h index 5f7d35a62..d205800e2 100644 --- a/src/lv_widgets/lv_imgbtn.h +++ b/src/lv_widgets/lv_imgbtn.h @@ -98,6 +98,19 @@ void lv_imgbtn_set_src_tiled(lv_obj_t * imgbtn, lv_btn_state_t state, const void #endif +/** + * Set the state of the image button + * @param imgbtn pointer to an image button object + * @param state the new state of the button (from lv_btn_state_t enum) + */ +void lv_imgbtn_set_state(lv_obj_t * imgbtn, lv_btn_state_t state); + +/** + * Toggle the state of the image button (ON->OFF, OFF->ON) + * @param imgbtn pointer to a image button object + */ +void lv_imgbtn_toggle(lv_obj_t * imgbtn); + /** * Enable the toggled states. On release the button will change from/to toggled state. * @param imgbtn pointer to an image button object @@ -108,24 +121,6 @@ static inline void lv_imgbtn_set_checkable(lv_obj_t * imgbtn, bool tgl) lv_btn_set_checkable(imgbtn, tgl); } -/** - * Set the state of the image button - * @param imgbtn pointer to an image button object - * @param state the new state of the button (from lv_btn_state_t enum) - */ -static inline void lv_imgbtn_set_state(lv_obj_t * imgbtn, lv_btn_state_t state) -{ - lv_btn_set_state(imgbtn, state); -} - -/** - * Toggle the state of the image button (ON->OFF, OFF->ON) - * @param imgbtn pointer to a image button object - */ -static inline void lv_imgbtn_toggle(lv_obj_t * imgbtn) -{ - lv_btn_toggle(imgbtn); -} /*===================== * Getter functions From 0266244c5812db8eb54873ab0c3c0ab169a514fb Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 7 Oct 2020 13:47:49 +0200 Subject: [PATCH 29/61] support RTL in table (draw columns right to left) Related to #1833 --- CHANGELOG.md | 1 + src/lv_themes/lv_theme_material.c | 2 +- src/lv_widgets/lv_table.c | 17 +++++++++++++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfc5c48a1..58dee444e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ ### Bugfixes - Theme update to support text selection background - Fix imgbtn state change +- Support RTL in table (draw columns right to left) ## v7.6.1 (06.10.2020) diff --git a/src/lv_themes/lv_theme_material.c b/src/lv_themes/lv_theme_material.c index 372f8a0e8..1e96d3a8e 100644 --- a/src/lv_themes/lv_theme_material.c +++ b/src/lv_themes/lv_theme_material.c @@ -823,7 +823,7 @@ static void table_init(void) style_init_reset(&styles->table_cell); lv_style_set_border_color(&styles->table_cell, LV_STATE_DEFAULT, COLOR_BG_BORDER); lv_style_set_border_width(&styles->table_cell, LV_STATE_DEFAULT, 1); - lv_style_set_border_side(&styles->table_cell, LV_STATE_DEFAULT, LV_BORDER_SIDE_TOP | LV_BORDER_SIDE_BOTTOM); +// lv_style_set_border_side(&styles->table_cell, LV_STATE_DEFAULT, LV_BORDER_SIDE_TOP | LV_BORDER_SIDE_BOTTOM); lv_style_set_pad_left(&styles->table_cell, LV_STATE_DEFAULT, PAD_DEF); lv_style_set_pad_right(&styles->table_cell, LV_STATE_DEFAULT, PAD_DEF); lv_style_set_pad_top(&styles->table_cell, LV_STATE_DEFAULT, PAD_DEF); diff --git a/src/lv_widgets/lv_table.c b/src/lv_widgets/lv_table.c index f2f4adeb3..ee23f7d52 100644 --- a/src/lv_widgets/lv_table.c +++ b/src/lv_widgets/lv_table.c @@ -848,6 +848,8 @@ static lv_design_res_t lv_table_design(lv_obj_t * table, const lv_area_t * clip_ uint16_t row; uint16_t cell = 0; + bool rtl = lv_obj_get_base_dir(table) == LV_BIDI_DIR_RTL ? true : false; + cell_area.y2 = table->coords.y1 + bg_top - 1; for(row = 0; row < ext->row_cnt; row++) { lv_coord_t h_row = ext->row_h[row]; @@ -857,7 +859,8 @@ static lv_design_res_t lv_table_design(lv_obj_t * table, const lv_area_t * clip_ if(cell_area.y1 > clip_area->y2) return LV_DESIGN_RES_OK; - cell_area.x2 = table->coords.x1 + bg_left - 1; + if(rtl) cell_area.x1 = table->coords.x2 - bg_right - 1; + else cell_area.x2 = table->coords.x1 + bg_left - 1; for(col = 0; col < ext->col_cnt; col++) { @@ -872,15 +875,21 @@ static lv_design_res_t lv_table_design(lv_obj_t * table, const lv_area_t * clip_ format.s.crop = 1; } - cell_area.x1 = cell_area.x2 + 1; - cell_area.x2 = cell_area.x1 + ext->col_w[col] - 1; + if(rtl) { + cell_area.x2 = cell_area.x1 - 1; + cell_area.x1 = cell_area.x2 - ext->col_w[col] + 1; + } else { + cell_area.x1 = cell_area.x2 + 1; + cell_area.x2 = cell_area.x1 + ext->col_w[col] - 1; + } uint16_t col_merge = 0; for(col_merge = 0; col_merge + col < ext->col_cnt - 1; col_merge++) { if(ext->cell_data[cell + col_merge] != NULL) { format.format_byte = ext->cell_data[cell + col_merge][0]; if(format.s.right_merge) - cell_area.x2 += ext->col_w[col + col_merge + 1]; + if(rtl) cell_area.x1 -= ext->col_w[col + col_merge + 1]; + else cell_area.x2 += ext->col_w[col + col_merge + 1]; else break; } From 1ee9c13a1de2169089bc425c17fbda32c230a242 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 7 Oct 2020 13:48:31 +0200 Subject: [PATCH 30/61] revert debug changes in material theme --- src/lv_themes/lv_theme_material.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lv_themes/lv_theme_material.c b/src/lv_themes/lv_theme_material.c index 1e96d3a8e..372f8a0e8 100644 --- a/src/lv_themes/lv_theme_material.c +++ b/src/lv_themes/lv_theme_material.c @@ -823,7 +823,7 @@ static void table_init(void) style_init_reset(&styles->table_cell); lv_style_set_border_color(&styles->table_cell, LV_STATE_DEFAULT, COLOR_BG_BORDER); lv_style_set_border_width(&styles->table_cell, LV_STATE_DEFAULT, 1); -// lv_style_set_border_side(&styles->table_cell, LV_STATE_DEFAULT, LV_BORDER_SIDE_TOP | LV_BORDER_SIDE_BOTTOM); + lv_style_set_border_side(&styles->table_cell, LV_STATE_DEFAULT, LV_BORDER_SIDE_TOP | LV_BORDER_SIDE_BOTTOM); lv_style_set_pad_left(&styles->table_cell, LV_STATE_DEFAULT, PAD_DEF); lv_style_set_pad_right(&styles->table_cell, LV_STATE_DEFAULT, PAD_DEF); lv_style_set_pad_top(&styles->table_cell, LV_STATE_DEFAULT, PAD_DEF); From c804fadf40daea641ca8fce5a45e6bf3d088a40c Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 7 Oct 2020 13:55:06 +0200 Subject: [PATCH 31/61] remove the internal usage of LV_HOR/VER_RES_MAX --- src/lv_draw/lv_draw_img.c | 6 ++++-- src/lv_draw/lv_draw_label.c | 3 ++- src/lv_draw/lv_draw_line.c | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/lv_draw/lv_draw_img.c b/src/lv_draw/lv_draw_img.c index 4b736951a..1a12fe4ce 100644 --- a/src/lv_draw/lv_draw_img.c +++ b/src/lv_draw/lv_draw_img.c @@ -419,7 +419,8 @@ LV_ATTRIBUTE_FAST_MEM static void lv_draw_map(const lv_area_t * map_area, const return; } #endif - uint32_t mask_buf_size = lv_area_get_size(&draw_area) > LV_HOR_RES_MAX ? LV_HOR_RES_MAX : lv_area_get_size(&draw_area); + lv_coord_t hor_res_max = lv_disp_get_hor_res(disp); + uint32_t mask_buf_size = lv_area_get_size(&draw_area) > hor_res_max ? hor_res_max : lv_area_get_size(&draw_area); lv_color_t * map2 = _lv_mem_buf_get(mask_buf_size * sizeof(lv_color_t)); lv_opa_t * mask_buf = _lv_mem_buf_get(mask_buf_size); @@ -469,7 +470,8 @@ LV_ATTRIBUTE_FAST_MEM static void lv_draw_map(const lv_area_t * map_area, const /*Most complicated case: transform or other mask or chroma keyed*/ else { /*Build the image and a mask line-by-line*/ - uint32_t mask_buf_size = lv_area_get_size(&draw_area) > LV_HOR_RES_MAX ? LV_HOR_RES_MAX : lv_area_get_size(&draw_area); + lv_coord_t hor_res_max = lv_disp_get_hor_res(disp); + uint32_t mask_buf_size = lv_area_get_size(&draw_area) > hor_res_max ? hor_res_max : lv_area_get_size(&draw_area); lv_color_t * map2 = _lv_mem_buf_get(mask_buf_size * sizeof(lv_color_t)); lv_opa_t * mask_buf = _lv_mem_buf_get(mask_buf_size); diff --git a/src/lv_draw/lv_draw_label.c b/src/lv_draw/lv_draw_label.c index abea298ff..c57848ebd 100644 --- a/src/lv_draw/lv_draw_label.c +++ b/src/lv_draw/lv_draw_label.c @@ -524,7 +524,8 @@ LV_ATTRIBUTE_FAST_MEM static void draw_letter_normal(lv_coord_t pos_x, lv_coord_ uint32_t col_bit; col_bit = bit_ofs & 0x7; /* "& 0x7" equals to "% 8" just faster */ - uint32_t mask_buf_size = box_w * box_h > LV_HOR_RES_MAX ? LV_HOR_RES_MAX : box_w * box_h; + lv_coord_t hor_res = lv_disp_get_hor_res(_lv_refr_get_disp_refreshing()); + uint32_t mask_buf_size = box_w * box_h > hor_res ? hor_res : box_w * box_h; lv_opa_t * mask_buf = _lv_mem_buf_get(mask_buf_size); int32_t mask_p = 0; diff --git a/src/lv_draw/lv_draw_line.c b/src/lv_draw/lv_draw_line.c index 38e29cdfb..b3c385d2f 100644 --- a/src/lv_draw/lv_draw_line.c +++ b/src/lv_draw/lv_draw_line.c @@ -424,7 +424,8 @@ LV_ATTRIBUTE_FAST_MEM static void draw_line_skew(const lv_point_t * point1, cons /*Draw the background line by line*/ int32_t h; - size_t mask_buf_size = LV_MATH_MIN(lv_area_get_size(&draw_area), LV_HOR_RES_MAX); + lv_coord_t hor_res = lv_disp_get_hor_res(disp); + size_t mask_buf_size = LV_MATH_MIN(lv_area_get_size(&draw_area), hor_res); lv_opa_t * mask_buf = _lv_mem_buf_get(mask_buf_size); lv_area_t fill_area; From 6c426aa855fddf547bae3187b3dc4f641a218113 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 7 Oct 2020 14:03:06 +0200 Subject: [PATCH 32/61] fix warnings --- src/lv_draw/lv_draw_img.c | 8 ++++---- src/lv_draw/lv_draw_line.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lv_draw/lv_draw_img.c b/src/lv_draw/lv_draw_img.c index 1a12fe4ce..4165e094f 100644 --- a/src/lv_draw/lv_draw_img.c +++ b/src/lv_draw/lv_draw_img.c @@ -419,8 +419,8 @@ LV_ATTRIBUTE_FAST_MEM static void lv_draw_map(const lv_area_t * map_area, const return; } #endif - lv_coord_t hor_res_max = lv_disp_get_hor_res(disp); - uint32_t mask_buf_size = lv_area_get_size(&draw_area) > hor_res_max ? hor_res_max : lv_area_get_size(&draw_area); + uint32_t hor_res = (uint32_t) lv_disp_get_hor_res(disp); + uint32_t mask_buf_size = lv_area_get_size(&draw_area) > (uint32_t) hor_res ? hor_res : lv_area_get_size(&draw_area); lv_color_t * map2 = _lv_mem_buf_get(mask_buf_size * sizeof(lv_color_t)); lv_opa_t * mask_buf = _lv_mem_buf_get(mask_buf_size); @@ -470,8 +470,8 @@ LV_ATTRIBUTE_FAST_MEM static void lv_draw_map(const lv_area_t * map_area, const /*Most complicated case: transform or other mask or chroma keyed*/ else { /*Build the image and a mask line-by-line*/ - lv_coord_t hor_res_max = lv_disp_get_hor_res(disp); - uint32_t mask_buf_size = lv_area_get_size(&draw_area) > hor_res_max ? hor_res_max : lv_area_get_size(&draw_area); + uint32_t hor_res = (uint32_t) lv_disp_get_hor_res(disp); + uint32_t mask_buf_size = lv_area_get_size(&draw_area) > hor_res ? hor_res : lv_area_get_size(&draw_area); lv_color_t * map2 = _lv_mem_buf_get(mask_buf_size * sizeof(lv_color_t)); lv_opa_t * mask_buf = _lv_mem_buf_get(mask_buf_size); diff --git a/src/lv_draw/lv_draw_line.c b/src/lv_draw/lv_draw_line.c index b3c385d2f..1ae458f3f 100644 --- a/src/lv_draw/lv_draw_line.c +++ b/src/lv_draw/lv_draw_line.c @@ -424,7 +424,7 @@ LV_ATTRIBUTE_FAST_MEM static void draw_line_skew(const lv_point_t * point1, cons /*Draw the background line by line*/ int32_t h; - lv_coord_t hor_res = lv_disp_get_hor_res(disp); + uint32_t hor_res = (uint32_t)lv_disp_get_hor_res(disp); size_t mask_buf_size = LV_MATH_MIN(lv_area_get_size(&draw_area), hor_res); lv_opa_t * mask_buf = _lv_mem_buf_get(mask_buf_size); From 9ec4b61417c819798ba476d58186cb66f2aa7276 Mon Sep 17 00:00:00 2001 From: robekras Date: Wed, 7 Oct 2020 20:17:38 +0200 Subject: [PATCH 33/61] Fix #1798: Use AHB3 enable register for STM32H7 (#1840) --- src/lv_gpu/lv_gpu_stm32_dma2d.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lv_gpu/lv_gpu_stm32_dma2d.c b/src/lv_gpu/lv_gpu_stm32_dma2d.c index 4fca9c322..90e788114 100644 --- a/src/lv_gpu/lv_gpu_stm32_dma2d.c +++ b/src/lv_gpu/lv_gpu_stm32_dma2d.c @@ -63,7 +63,13 @@ static void dma2d_wait(void); void lv_gpu_stm32_dma2d_init(void) { /* Enable DMA2D clock */ +#if defined(STM32F4) || defined(STM32F7) RCC->AHB1ENR |= RCC_AHB1ENR_DMA2DEN; +#elif defined(STM32H7) + RCC->AHB3ENR |= RCC_AHB3ENR_DMA2DEN; +#else +# warning "LVGL can't enable the clock of DMA2D" +#endif /* Delay after setting peripheral clock */ volatile uint32_t temp = RCC->AHB1ENR; From 6e48cde2f1a7bbc52d2119619870b8135d3d07b1 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 8 Oct 2020 08:30:29 -0400 Subject: [PATCH 34/61] Fix #1837: remove last designated initializer in `lv_color.h` --- src/lv_misc/lv_color.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lv_misc/lv_color.h b/src/lv_misc/lv_color.h index 3b2014f38..32d8304d6 100644 --- a/src/lv_misc/lv_color.h +++ b/src/lv_misc/lv_color.h @@ -626,7 +626,7 @@ static inline uint8_t lv_color_brightness(lv_color_t color) /* The most simple macro to create a color from R,G and B values */ #if LV_COLOR_DEPTH == 1 -#define LV_COLOR_MAKE(r8, g8, b8) (_LV_COLOR_MAKE_TYPE_HELPER{.full = (uint8_t)((b8 >> 7) | (g8 >> 7) | (r8 >> 7))}) +#define LV_COLOR_MAKE(r8, g8, b8) (_LV_COLOR_MAKE_TYPE_HELPER {{(b8 >> 7) | (g8 >> 7) | (r8 >> 7)}}) #elif LV_COLOR_DEPTH == 8 #define LV_COLOR_MAKE(r8, g8, b8) (_LV_COLOR_MAKE_TYPE_HELPER{{(uint8_t)((b8 >> 6) & 0x3U), (uint8_t)((g8 >> 5) & 0x7U), (uint8_t)((r8 >> 5) & 0x7U)}}) #elif LV_COLOR_DEPTH == 16 From 5d91c24723ae3a1a7646395c4d28e73a41360385 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Thu, 8 Oct 2020 15:18:08 +0200 Subject: [PATCH 35/61] support RTL in pretty layout (draw columns right to left) Related to #1833 --- CHANGELOG.md | 1 + src/lv_widgets/lv_cont.c | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58dee444e..e225b33ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ - Theme update to support text selection background - Fix imgbtn state change - Support RTL in table (draw columns right to left) +- Support RTL in pretty layout (draw columns right to left) ## v7.6.1 (06.10.2020) diff --git a/src/lv_widgets/lv_cont.c b/src/lv_widgets/lv_cont.c index 04a81343e..c004d7215 100644 --- a/src/lv_widgets/lv_cont.c +++ b/src/lv_widgets/lv_cont.c @@ -566,25 +566,34 @@ static void lv_cont_layout_pretty(lv_obj_t * cont) lv_coord_t new_pinner = (w_obj - w_row) / (obj_num - 1); lv_coord_t act_x = pleft; /*x init*/ child_tmp = child_rs; + lv_align_t align; + int32_t inv; + if(lv_obj_get_base_dir(cont) == LV_BIDI_DIR_RTL) { + align = LV_ALIGN_IN_TOP_RIGHT; + inv = -1; + } else { + align = LV_ALIGN_IN_TOP_LEFT; + inv = 1; + } while(child_tmp != NULL) { if(lv_obj_get_hidden(child_tmp) == false && lv_obj_is_protected(child_tmp, LV_PROTECT_POS) == false) { lv_coord_t mleft = lv_obj_get_style_margin_left(child_tmp, LV_OBJ_PART_MAIN); lv_coord_t mright = lv_obj_get_style_margin_right(child_tmp, LV_OBJ_PART_MAIN); switch(type) { case LV_LAYOUT_PRETTY_TOP: - lv_obj_align(child_tmp, cont, LV_ALIGN_IN_TOP_LEFT, - act_x + mleft, + lv_obj_align(child_tmp, cont, align, + inv * (act_x + mleft), act_y + lv_obj_get_style_margin_top(child_tmp, LV_OBJ_PART_MAIN)); break; case LV_LAYOUT_PRETTY_MID: - lv_obj_align(child_tmp, cont, LV_ALIGN_IN_TOP_LEFT, - act_x + mleft, + lv_obj_align(child_tmp, cont, align, + inv * (act_x + mleft), act_y + (h_row - lv_obj_get_height(child_tmp)) / 2); break; case LV_LAYOUT_PRETTY_BOTTOM: - lv_obj_align(child_tmp, cont, LV_ALIGN_IN_TOP_LEFT, - act_x + mleft, + lv_obj_align(child_tmp, cont, align, + inv * (act_x + mleft), act_y + h_row - lv_obj_get_height(child_tmp) - lv_obj_get_style_margin_bottom(child_tmp, LV_OBJ_PART_MAIN)); break; default: From 56c4cab22834274bc05acb0ae428b118eb1a026a Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 9 Oct 2020 10:34:02 +0200 Subject: [PATCH 36/61] skip objects in groups if they are in disabled state --- CHANGELOG.md | 1 + src/lv_core/lv_group.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e225b33ee..c8af440c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ - Fix imgbtn state change - Support RTL in table (draw columns right to left) - Support RTL in pretty layout (draw columns right to left) +- Skip objects in groups if they are in disabled state ## v7.6.1 (06.10.2020) diff --git a/src/lv_core/lv_group.c b/src/lv_core/lv_group.c index 329e1fc69..dd664c3c1 100644 --- a/src/lv_core/lv_group.c +++ b/src/lv_core/lv_group.c @@ -488,8 +488,9 @@ static void focus_next_core(lv_group_t * group, void * (*begin)(const lv_ll_t *) can_move = true; if(obj_next == NULL) continue; + if(lv_obj_get_state(*obj_next, LV_OBJ_PART_MAIN) & LV_STATE_DISABLED) continue; - /*Hidden objects don't receive focus*/ + /*Hidden and disabled objects don't receive focus*/ if(!lv_obj_get_hidden(*obj_next)) break; } From e1f222d04fdb14847853a976f5792516a26f0778 Mon Sep 17 00:00:00 2001 From: Sergei Kolotovchenkov Date: Fri, 9 Oct 2020 16:11:34 +0300 Subject: [PATCH 37/61] Improve compatibility with C++14 (#1843) --- src/lv_misc/lv_color.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/lv_misc/lv_color.h b/src/lv_misc/lv_color.h index 32d8304d6..cf4d135a0 100644 --- a/src/lv_misc/lv_color.h +++ b/src/lv_misc/lv_color.h @@ -213,12 +213,12 @@ enum { **********************/ typedef union { + uint8_t full; /*must be declared first to set all bits of byte via initializer list */ union { uint8_t blue : 1; uint8_t green : 1; uint8_t red : 1; } ch; - uint8_t full; } lv_color1_t; typedef union { @@ -259,15 +259,19 @@ typedef union { #if LV_COLOR_DEPTH == 1 typedef uint8_t lv_color_int_t; typedef lv_color1_t lv_color_t; +#define _LV_COLOR_ZERO_INITIALIZER {0x00} #elif LV_COLOR_DEPTH == 8 typedef uint8_t lv_color_int_t; typedef lv_color8_t lv_color_t; +#define _LV_COLOR_ZERO_INITIALIZER {{0x00, 0x00, 0x00}} #elif LV_COLOR_DEPTH == 16 typedef uint16_t lv_color_int_t; typedef lv_color16_t lv_color_t; +#define _LV_COLOR_ZERO_INITIALIZER {{0x00, 0x00, 0x00}} #elif LV_COLOR_DEPTH == 32 typedef uint32_t lv_color_int_t; typedef lv_color32_t lv_color_t; +#define _LV_COLOR_ZERO_INITIALIZER {{0x00, 0x00, 0x00, 0x00}} #else #error "Invalid LV_COLOR_DEPTH in lv_conf.h! Set it to 1, 8, 16 or 32!" #endif @@ -553,9 +557,9 @@ LV_ATTRIBUTE_FAST_MEM static inline void lv_color_mix_with_alpha(lv_color_t bg_c /*Save the parameters and the result. If they will be asked again don't compute again*/ static lv_opa_t fg_opa_save = 0; static lv_opa_t bg_opa_save = 0; - static lv_color_t fg_color_save = {.full = 0}; - static lv_color_t bg_color_save = {.full = 0}; - static lv_color_t res_color_saved = {.full = 0}; + static lv_color_t fg_color_save = _LV_COLOR_ZERO_INITIALIZER; + static lv_color_t bg_color_save = _LV_COLOR_ZERO_INITIALIZER; + static lv_color_t res_color_saved = _LV_COLOR_ZERO_INITIALIZER; static lv_opa_t res_opa_saved = 0; if(fg_opa != fg_opa_save || bg_opa != bg_opa_save || fg_color.full != fg_color_save.full || @@ -600,7 +604,7 @@ static inline uint8_t lv_color_brightness(lv_color_t color) /** * MSVC compiler's definition of the __cplusplus indicating 199711L regardless to C++ standard version * see https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-cplusplus -* so we use _MSC_VER macro unstead of __cplusplus +* so we use _MSC_VER macro instead of __cplusplus */ #ifdef _MSC_VER #if _MSC_VER >= 1900 /* Visual Studio 2015 */ @@ -626,7 +630,7 @@ static inline uint8_t lv_color_brightness(lv_color_t color) /* The most simple macro to create a color from R,G and B values */ #if LV_COLOR_DEPTH == 1 -#define LV_COLOR_MAKE(r8, g8, b8) (_LV_COLOR_MAKE_TYPE_HELPER {{(b8 >> 7) | (g8 >> 7) | (r8 >> 7)}}) +#define LV_COLOR_MAKE(r8, g8, b8) (_LV_COLOR_MAKE_TYPE_HELPER{(uint8_t)((b8 >> 7) | (g8 >> 7) | (r8 >> 7))}) #elif LV_COLOR_DEPTH == 8 #define LV_COLOR_MAKE(r8, g8, b8) (_LV_COLOR_MAKE_TYPE_HELPER{{(uint8_t)((b8 >> 6) & 0x3U), (uint8_t)((g8 >> 5) & 0x7U), (uint8_t)((r8 >> 5) & 0x7U)}}) #elif LV_COLOR_DEPTH == 16 From 4d614e60ef0e73f148192f92f118a2b0c29f79a3 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 9 Oct 2020 10:34:02 +0200 Subject: [PATCH 38/61] skip objects in groups if they are in disabled state --- CHANGELOG.md | 1 + src/lv_core/lv_group.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e225b33ee..c8af440c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ - Fix imgbtn state change - Support RTL in table (draw columns right to left) - Support RTL in pretty layout (draw columns right to left) +- Skip objects in groups if they are in disabled state ## v7.6.1 (06.10.2020) diff --git a/src/lv_core/lv_group.c b/src/lv_core/lv_group.c index 329e1fc69..dd664c3c1 100644 --- a/src/lv_core/lv_group.c +++ b/src/lv_core/lv_group.c @@ -488,8 +488,9 @@ static void focus_next_core(lv_group_t * group, void * (*begin)(const lv_ll_t *) can_move = true; if(obj_next == NULL) continue; + if(lv_obj_get_state(*obj_next, LV_OBJ_PART_MAIN) & LV_STATE_DISABLED) continue; - /*Hidden objects don't receive focus*/ + /*Hidden and disabled objects don't receive focus*/ if(!lv_obj_get_hidden(*obj_next)) break; } From cb5ad1e9d308de285c3304497817049cd6d79648 Mon Sep 17 00:00:00 2001 From: Sergei Kolotovchenkov Date: Fri, 9 Oct 2020 16:11:34 +0300 Subject: [PATCH 39/61] Improve compatibility with C++14 (#1843) --- src/lv_misc/lv_color.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/lv_misc/lv_color.h b/src/lv_misc/lv_color.h index 32d8304d6..cf4d135a0 100644 --- a/src/lv_misc/lv_color.h +++ b/src/lv_misc/lv_color.h @@ -213,12 +213,12 @@ enum { **********************/ typedef union { + uint8_t full; /*must be declared first to set all bits of byte via initializer list */ union { uint8_t blue : 1; uint8_t green : 1; uint8_t red : 1; } ch; - uint8_t full; } lv_color1_t; typedef union { @@ -259,15 +259,19 @@ typedef union { #if LV_COLOR_DEPTH == 1 typedef uint8_t lv_color_int_t; typedef lv_color1_t lv_color_t; +#define _LV_COLOR_ZERO_INITIALIZER {0x00} #elif LV_COLOR_DEPTH == 8 typedef uint8_t lv_color_int_t; typedef lv_color8_t lv_color_t; +#define _LV_COLOR_ZERO_INITIALIZER {{0x00, 0x00, 0x00}} #elif LV_COLOR_DEPTH == 16 typedef uint16_t lv_color_int_t; typedef lv_color16_t lv_color_t; +#define _LV_COLOR_ZERO_INITIALIZER {{0x00, 0x00, 0x00}} #elif LV_COLOR_DEPTH == 32 typedef uint32_t lv_color_int_t; typedef lv_color32_t lv_color_t; +#define _LV_COLOR_ZERO_INITIALIZER {{0x00, 0x00, 0x00, 0x00}} #else #error "Invalid LV_COLOR_DEPTH in lv_conf.h! Set it to 1, 8, 16 or 32!" #endif @@ -553,9 +557,9 @@ LV_ATTRIBUTE_FAST_MEM static inline void lv_color_mix_with_alpha(lv_color_t bg_c /*Save the parameters and the result. If they will be asked again don't compute again*/ static lv_opa_t fg_opa_save = 0; static lv_opa_t bg_opa_save = 0; - static lv_color_t fg_color_save = {.full = 0}; - static lv_color_t bg_color_save = {.full = 0}; - static lv_color_t res_color_saved = {.full = 0}; + static lv_color_t fg_color_save = _LV_COLOR_ZERO_INITIALIZER; + static lv_color_t bg_color_save = _LV_COLOR_ZERO_INITIALIZER; + static lv_color_t res_color_saved = _LV_COLOR_ZERO_INITIALIZER; static lv_opa_t res_opa_saved = 0; if(fg_opa != fg_opa_save || bg_opa != bg_opa_save || fg_color.full != fg_color_save.full || @@ -600,7 +604,7 @@ static inline uint8_t lv_color_brightness(lv_color_t color) /** * MSVC compiler's definition of the __cplusplus indicating 199711L regardless to C++ standard version * see https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-cplusplus -* so we use _MSC_VER macro unstead of __cplusplus +* so we use _MSC_VER macro instead of __cplusplus */ #ifdef _MSC_VER #if _MSC_VER >= 1900 /* Visual Studio 2015 */ @@ -626,7 +630,7 @@ static inline uint8_t lv_color_brightness(lv_color_t color) /* The most simple macro to create a color from R,G and B values */ #if LV_COLOR_DEPTH == 1 -#define LV_COLOR_MAKE(r8, g8, b8) (_LV_COLOR_MAKE_TYPE_HELPER {{(b8 >> 7) | (g8 >> 7) | (r8 >> 7)}}) +#define LV_COLOR_MAKE(r8, g8, b8) (_LV_COLOR_MAKE_TYPE_HELPER{(uint8_t)((b8 >> 7) | (g8 >> 7) | (r8 >> 7))}) #elif LV_COLOR_DEPTH == 8 #define LV_COLOR_MAKE(r8, g8, b8) (_LV_COLOR_MAKE_TYPE_HELPER{{(uint8_t)((b8 >> 6) & 0x3U), (uint8_t)((g8 >> 5) & 0x7U), (uint8_t)((r8 >> 5) & 0x7U)}}) #elif LV_COLOR_DEPTH == 16 From 9a029a178417c8e7d999e9f761b29990359969bf Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 12 Oct 2020 11:51:29 +0200 Subject: [PATCH 40/61] make DMA2S non blovking --- src/lv_draw/lv_draw_blend.c | 7 +------ src/lv_gpu/lv_gpu_stm32_dma2d.c | 25 +++++++++++++++++++------ src/lv_gpu/lv_gpu_stm32_dma2d.h | 9 +++++++++ 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/lv_draw/lv_draw_blend.c b/src/lv_draw/lv_draw_blend.c index 90e14cd13..02d90dac2 100644 --- a/src/lv_draw/lv_draw_blend.c +++ b/src/lv_draw/lv_draw_blend.c @@ -401,6 +401,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; } @@ -757,7 +758,6 @@ LV_ATTRIBUTE_FAST_MEM static void map_normal(const lv_area_t * disp_area, lv_col if(opa > LV_OPA_MAX) { #if LV_USE_GPU_NXP_PXP -<<<<<<< HEAD if (lv_area_get_size(draw_area) >= GPU_NXP_PXP_BLIT_SIZE_LIMIT) { lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa); return; @@ -792,11 +792,6 @@ LV_ATTRIBUTE_FAST_MEM static void map_normal(const lv_area_t * disp_area, lv_col return; } /* Fall down to SW render in case of error */ -======= - if(lv_area_get_size(draw_area) >= LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT) { - lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa); - return; ->>>>>>> 4c7a2ae0b7d8f564b22e7774039f6cbe5385926c } #elif LV_USE_GPU_STM32_DMA2D if(lv_area_get_size(draw_area) >= 240) { diff --git a/src/lv_gpu/lv_gpu_stm32_dma2d.c b/src/lv_gpu/lv_gpu_stm32_dma2d.c index 90e788114..72913b534 100644 --- a/src/lv_gpu/lv_gpu_stm32_dma2d.c +++ b/src/lv_gpu/lv_gpu_stm32_dma2d.c @@ -43,7 +43,7 @@ * STATIC PROTOTYPES **********************/ static void invalidate_cache(void); -static void dma2d_wait(void); +static void wait_finish(void); /********************** * STATIC VARIABLES @@ -101,7 +101,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(); } /** @@ -146,7 +146,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 } @@ -176,7 +176,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(); } /** @@ -214,7 +214,18 @@ 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); + } } /********************** @@ -232,9 +243,11 @@ static void invalidate_cache(void) } } -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); } diff --git a/src/lv_gpu/lv_gpu_stm32_dma2d.h b/src/lv_gpu/lv_gpu_stm32_dma2d.h index 9f244a603..f3d468049 100644 --- a/src/lv_gpu/lv_gpu_stm32_dma2d.h +++ b/src/lv_gpu/lv_gpu_stm32_dma2d.h @@ -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 **********************/ From 5d0c00a201a2716f5cfadb28d33d6f09129993e5 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 12 Oct 2020 11:54:54 +0200 Subject: [PATCH 41/61] update CHANGELOG --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c8af440c1..d46e9600c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## v7.8.0 (20.10.2020) + +### New features +- make DMA2D non blocking ## v7.7.0 (06.10.2020) From 4d620d3771792c05a698648fb65f4b0f65992495 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 12 Oct 2020 12:08:49 +0200 Subject: [PATCH 42/61] fix dropdown selection with RTL basedirection Related to: #1842 --- CHANGELOG.md | 1 + src/lv_widgets/lv_dropdown.c | 23 ++++++----------------- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c8af440c1..2fa175fb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ - Support RTL in table (draw columns right to left) - Support RTL in pretty layout (draw columns right to left) - Skip objects in groups if they are in disabled state +- Fix dropdown selection with RTL basedirection ## v7.6.1 (06.10.2020) diff --git a/src/lv_widgets/lv_dropdown.c b/src/lv_widgets/lv_dropdown.c index 40a094412..53f7c6c8d 100644 --- a/src/lv_widgets/lv_dropdown.c +++ b/src/lv_widgets/lv_dropdown.c @@ -1283,27 +1283,16 @@ static uint16_t get_id_on_point(lv_obj_t * ddlist, lv_coord_t x, lv_coord_t y) { lv_obj_t * label = get_label(ddlist); if(label == NULL) return 0; - x -= label->coords.x1; y -= label->coords.y1; - uint32_t letter_i; - const char * txt = lv_label_get_text(label); + const lv_font_t * font = lv_obj_get_style_text_font(label, LV_LABEL_PART_MAIN); + lv_coord_t font_h = lv_font_get_line_height(font); + lv_style_int_t line_space = lv_obj_get_style_text_line_space(label, LV_LABEL_PART_MAIN); - lv_point_t p = {x, y}; - letter_i = lv_label_get_letter_on(label, &p); - uint32_t letter_i_byte_pos = _lv_txt_encoded_get_byte_id(txt, letter_i); - uint16_t opt = 0; - uint32_t i = 0; - uint32_t i_prev = 0; + y += line_space / 2; + lv_coord_t h = font_h + line_space; - uint32_t letter_cnt = 0; - for(letter_cnt = 0; letter_cnt < letter_i; letter_cnt++) { - uint32_t letter = _lv_txt_encoded_next(txt, &i); - /*Count the lines to reach the clicked letter. But ignore the last '\n' because it - * still belongs to the clicked line*/ - if(letter == '\n' && i_prev != letter_i_byte_pos) opt++; - i_prev = i; - } + uint16_t opt = y / h; return opt; } From 68629c725abb2e5c9423990571c8d5f3830163be Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 12 Oct 2020 12:43:51 +0200 Subject: [PATCH 43/61] add missing fonts fixes: #1845 --- src/lv_font/lv_font_montserrat_10.c | 1627 +++++++++++++++++++++++++++ src/lv_font/lv_font_montserrat_8.c | 1419 +++++++++++++++++++++++ 2 files changed, 3046 insertions(+) create mode 100644 src/lv_font/lv_font_montserrat_10.c create mode 100644 src/lv_font/lv_font_montserrat_8.c diff --git a/src/lv_font/lv_font_montserrat_10.c b/src/lv_font/lv_font_montserrat_10.c new file mode 100644 index 000000000..517908433 --- /dev/null +++ b/src/lv_font/lv_font_montserrat_10.c @@ -0,0 +1,1627 @@ +#include "../../lvgl.h" + +/******************************************************************************* + * Size: 10 px + * Bpp: 4 + * Opts: --no-compress --no-prefilter --bpp 4 --size 10 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_10.c --force-fast-kern-format + ******************************************************************************/ + +#ifndef LV_FONT_MONTSERRAT_10 +#define LV_FONT_MONTSERRAT_10 1 +#endif + +#if LV_FONT_MONTSERRAT_10 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { + /* U+20 " " */ + + /* U+21 "!" */ + 0x3e, 0x2d, 0x2c, 0x1c, 0x5, 0x1, 0x2d, + + /* U+22 "\"" */ + 0x57, 0x84, 0x56, 0x83, 0x23, 0x41, + + /* U+23 "#" */ + 0x0, 0xb0, 0x28, 0x0, 0xb, 0x4, 0x60, 0x4a, + 0xea, 0xdc, 0x80, 0x28, 0x8, 0x20, 0x8c, 0xdb, + 0xeb, 0x40, 0x64, 0xb, 0x0, 0x8, 0x30, 0xb0, + 0x0, + + /* U+24 "$" */ + 0x0, 0x13, 0x0, 0x8, 0xde, 0xc3, 0x5b, 0x27, + 0x11, 0x4d, 0x57, 0x0, 0x6, 0xce, 0x80, 0x0, + 0x29, 0x9a, 0x32, 0x27, 0x5b, 0x3c, 0xde, 0xb2, + 0x0, 0x27, 0x0, + + /* U+25 "%" */ + 0x29, 0x92, 0x2, 0x90, 0x9, 0x11, 0x90, 0xa1, + 0x0, 0x82, 0x28, 0x74, 0x0, 0x1, 0x88, 0x49, + 0x68, 0x40, 0x0, 0xb, 0x29, 0xa, 0x0, 0x8, + 0x32, 0x80, 0xa0, 0x3, 0x80, 0x8, 0x87, 0x0, + + /* U+26 "&" */ + 0x3, 0xcb, 0x70, 0x0, 0xa4, 0xd, 0x0, 0x5, + 0xba, 0x60, 0x0, 0x7c, 0xc0, 0x10, 0x5a, 0x7, + 0xbb, 0x37, 0x80, 0xa, 0xe0, 0xa, 0xcc, 0x97, + 0x70, 0x0, 0x0, 0x0, + + /* U+27 "'" */ + 0x57, 0x56, 0x23, + + /* U+28 "(" */ + 0x2, 0xc0, 0x9, 0x60, 0xd, 0x10, 0xe, 0x0, + 0xe, 0x0, 0xe, 0x0, 0xd, 0x10, 0x9, 0x60, + 0x2, 0xc0, + + /* U+29 ")" */ + 0x68, 0x0, 0xe0, 0xb, 0x30, 0x95, 0x8, 0x60, + 0x95, 0xb, 0x30, 0xe0, 0x68, 0x0, + + /* U+2A "*" */ + 0x24, 0x42, 0x4d, 0xd4, 0x79, 0x97, 0x2, 0x20, + + /* U+2B "+" */ + 0x0, 0x0, 0x0, 0x0, 0x85, 0x0, 0x3b, 0xdc, + 0xb1, 0x0, 0x85, 0x0, 0x0, 0x85, 0x0, + + /* U+2C "," */ + 0x35, 0x4a, 0x55, + + /* U+2D "-" */ + 0x5c, 0xc3, + + /* U+2E "." */ + 0x2, 0x6a, + + /* U+2F "/" */ + 0x0, 0x2, 0xb0, 0x0, 0x85, 0x0, 0xd, 0x0, + 0x4, 0x90, 0x0, 0xa3, 0x0, 0xd, 0x0, 0x5, + 0x80, 0x0, 0xb2, 0x0, 0x1c, 0x0, 0x0, + + /* U+30 "0" */ + 0x4, 0xdd, 0xb1, 0x1, 0xe2, 0x6, 0xb0, 0x69, + 0x0, 0xe, 0x17, 0x80, 0x0, 0xd2, 0x69, 0x0, + 0xe, 0x11, 0xe2, 0x6, 0xb0, 0x4, 0xdd, 0xb1, + 0x0, + + /* U+31 "1" */ + 0xbe, 0xa0, 0x5a, 0x5, 0xa0, 0x5a, 0x5, 0xa0, + 0x5a, 0x5, 0xa0, + + /* U+32 "2" */ + 0x4c, 0xdd, 0x50, 0x42, 0x1, 0xf0, 0x0, 0x0, + 0xf0, 0x0, 0xa, 0x80, 0x0, 0xa9, 0x0, 0xb, + 0x80, 0x0, 0x8f, 0xdd, 0xd5, + + /* U+33 "3" */ + 0x8d, 0xde, 0xe0, 0x0, 0xc, 0x40, 0x0, 0x98, + 0x0, 0x0, 0xbd, 0x90, 0x0, 0x0, 0xd3, 0x51, + 0x1, 0xe2, 0x6d, 0xdd, 0x60, + + /* U+34 "4" */ + 0x0, 0x7, 0xa0, 0x0, 0x5, 0xc0, 0x0, 0x3, + 0xd1, 0x31, 0x1, 0xd2, 0xb, 0x30, 0x8d, 0xcc, + 0xfd, 0x70, 0x0, 0xb, 0x30, 0x0, 0x0, 0xb3, + 0x0, + + /* U+35 "5" */ + 0xf, 0xdd, 0xd0, 0x1d, 0x0, 0x0, 0x2c, 0x0, + 0x0, 0x3e, 0xdc, 0x60, 0x0, 0x1, 0xd4, 0x31, + 0x0, 0xc4, 0x5c, 0xdd, 0x80, + + /* U+36 "6" */ + 0x2, 0xbd, 0xd4, 0x1e, 0x40, 0x0, 0x6a, 0x0, + 0x0, 0x7a, 0xab, 0xa1, 0x6e, 0x10, 0x5c, 0x1d, + 0x0, 0x3c, 0x4, 0xcc, 0xb2, + + /* U+37 "7" */ + 0xbd, 0xdd, 0xe8, 0xb4, 0x0, 0xd3, 0x0, 0x4, + 0xc0, 0x0, 0xc, 0x40, 0x0, 0x3d, 0x0, 0x0, + 0xa6, 0x0, 0x1, 0xe0, 0x0, + + /* U+38 "8" */ + 0x7, 0xcc, 0xb2, 0x3d, 0x0, 0x6a, 0x2d, 0x0, + 0x79, 0xb, 0xec, 0xf2, 0x6a, 0x0, 0x4d, 0x79, + 0x0, 0x3e, 0x9, 0xcb, 0xc4, + + /* U+39 "9" */ + 0x1a, 0xcc, 0x60, 0x96, 0x0, 0xb3, 0x97, 0x0, + 0xc9, 0x9, 0xbb, 0x8a, 0x0, 0x0, 0x88, 0x0, + 0x2, 0xe2, 0x2d, 0xdc, 0x40, + + /* U+3A ":" */ + 0x6a, 0x1, 0x0, 0x2, 0x6a, + + /* U+3B ";" */ + 0x6a, 0x1, 0x0, 0x0, 0x6a, 0x38, 0x32, + + /* U+3C "<" */ + 0x0, 0x0, 0x10, 0x0, 0x5a, 0xa1, 0x3e, 0x61, + 0x0, 0x6, 0xb9, 0x30, 0x0, 0x2, 0x81, + + /* U+3D "=" */ + 0x3b, 0xbb, 0xb1, 0x0, 0x0, 0x0, 0x3b, 0xbb, + 0xb1, + + /* U+3E ">" */ + 0x10, 0x0, 0x0, 0x2b, 0xa4, 0x0, 0x0, 0x18, + 0xe1, 0x4, 0xab, 0x50, 0x37, 0x10, 0x0, + + /* U+3F "?" */ + 0x3c, 0xdd, 0x50, 0x52, 0x1, 0xf0, 0x0, 0x3, + 0xd0, 0x0, 0x3d, 0x20, 0x0, 0x85, 0x0, 0x0, + 0x10, 0x0, 0x0, 0xb4, 0x0, + + /* U+40 "@" */ + 0x0, 0x4a, 0x99, 0xa7, 0x0, 0x6, 0x90, 0x0, + 0x3, 0xa0, 0x1b, 0x7, 0xcb, 0x9b, 0x47, 0x65, + 0x4b, 0x0, 0x8b, 0xa, 0x73, 0x77, 0x0, 0x3b, + 0xa, 0x65, 0x3b, 0x0, 0x8b, 0xa, 0x1b, 0x6, + 0xcb, 0x6c, 0xb3, 0x6, 0x90, 0x0, 0x0, 0x0, + 0x0, 0x4a, 0x9a, 0xa2, 0x0, + + /* U+41 "A" */ + 0x0, 0x1, 0xf6, 0x0, 0x0, 0x0, 0x88, 0xc0, + 0x0, 0x0, 0xd, 0x9, 0x40, 0x0, 0x6, 0x70, + 0x2b, 0x0, 0x0, 0xdc, 0xcc, 0xe3, 0x0, 0x59, + 0x0, 0x4, 0xa0, 0xc, 0x30, 0x0, 0xd, 0x10, + + /* U+42 "B" */ + 0xfc, 0xcc, 0xb2, 0xf, 0x0, 0x7, 0xa0, 0xf0, + 0x0, 0x88, 0xf, 0xcc, 0xdf, 0x30, 0xf0, 0x0, + 0x2e, 0xf, 0x0, 0x1, 0xf0, 0xfc, 0xcc, 0xc5, + 0x0, + + /* U+43 "C" */ + 0x1, 0x9d, 0xdc, 0x30, 0xd6, 0x0, 0x35, 0x5b, + 0x0, 0x0, 0x7, 0x80, 0x0, 0x0, 0x5b, 0x0, + 0x0, 0x0, 0xd6, 0x0, 0x35, 0x1, 0x9d, 0xdc, + 0x30, + + /* U+44 "D" */ + 0xfd, 0xdd, 0xb3, 0xf, 0x0, 0x3, 0xe2, 0xf0, + 0x0, 0x6, 0x9f, 0x0, 0x0, 0x4b, 0xf0, 0x0, + 0x6, 0x9f, 0x0, 0x3, 0xe2, 0xfd, 0xdd, 0xb3, + 0x0, + + /* U+45 "E" */ + 0xfd, 0xdd, 0xc0, 0xf0, 0x0, 0x0, 0xf0, 0x0, + 0x0, 0xfc, 0xcc, 0x70, 0xf0, 0x0, 0x0, 0xf0, + 0x0, 0x0, 0xfd, 0xdd, 0xd1, + + /* U+46 "F" */ + 0xfd, 0xdd, 0xcf, 0x0, 0x0, 0xf0, 0x0, 0xf, + 0xdd, 0xd7, 0xf0, 0x0, 0xf, 0x0, 0x0, 0xf0, + 0x0, 0x0, + + /* U+47 "G" */ + 0x1, 0x9d, 0xdc, 0x40, 0xd7, 0x0, 0x25, 0x5b, + 0x0, 0x0, 0x7, 0x80, 0x0, 0x7, 0x5b, 0x0, + 0x1, 0xd0, 0xd6, 0x0, 0x3d, 0x1, 0x9d, 0xdc, + 0x50, + + /* U+48 "H" */ + 0xf0, 0x0, 0xf, 0x1f, 0x0, 0x0, 0xf1, 0xf0, + 0x0, 0xf, 0x1f, 0xdd, 0xdd, 0xf1, 0xf0, 0x0, + 0xf, 0x1f, 0x0, 0x0, 0xf1, 0xf0, 0x0, 0xf, + 0x10, + + /* U+49 "I" */ + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + + /* U+4A "J" */ + 0x4, 0xdd, 0xf2, 0x0, 0x0, 0xd2, 0x0, 0x0, + 0xd2, 0x0, 0x0, 0xd2, 0x0, 0x0, 0xd2, 0x6, + 0x1, 0xe0, 0x8, 0xdd, 0x60, + + /* U+4B "K" */ + 0xf0, 0x0, 0xa8, 0xf, 0x0, 0x99, 0x0, 0xf0, + 0x99, 0x0, 0xf, 0x9f, 0x40, 0x0, 0xfb, 0x4e, + 0x20, 0xf, 0x10, 0x5d, 0x10, 0xf0, 0x0, 0x6b, + 0x0, + + /* U+4C "L" */ + 0xf0, 0x0, 0xf, 0x0, 0x0, 0xf0, 0x0, 0xf, + 0x0, 0x0, 0xf0, 0x0, 0xf, 0x0, 0x0, 0xfd, + 0xdd, 0xa0, + + /* U+4D "M" */ + 0xf2, 0x0, 0x0, 0x97, 0xfc, 0x0, 0x3, 0xf7, + 0xfa, 0x50, 0xc, 0xa7, 0xf1, 0xd0, 0x69, 0x77, + 0xf0, 0x79, 0xd1, 0x77, 0xf0, 0xd, 0x60, 0x77, + 0xf0, 0x1, 0x0, 0x77, + + /* U+4E "N" */ + 0xf4, 0x0, 0xf, 0x1f, 0xe2, 0x0, 0xf1, 0xf6, + 0xd0, 0xf, 0x1f, 0x9, 0xa0, 0xf1, 0xf0, 0xb, + 0x7f, 0x1f, 0x0, 0x1d, 0xf1, 0xf0, 0x0, 0x3f, + 0x10, + + /* U+4F "O" */ + 0x1, 0x9d, 0xdc, 0x40, 0xd, 0x60, 0x2, 0xd4, + 0x5b, 0x0, 0x0, 0x4b, 0x78, 0x0, 0x0, 0x1e, + 0x5b, 0x0, 0x0, 0x4b, 0xd, 0x60, 0x2, 0xd4, + 0x1, 0x9d, 0xdc, 0x40, + + /* U+50 "P" */ + 0xfd, 0xdd, 0x90, 0xf0, 0x0, 0xa7, 0xf0, 0x0, + 0x5a, 0xf0, 0x0, 0xb6, 0xfd, 0xdc, 0x70, 0xf0, + 0x0, 0x0, 0xf0, 0x0, 0x0, + + /* U+51 "Q" */ + 0x1, 0x9d, 0xdc, 0x40, 0x0, 0xc7, 0x0, 0x3d, + 0x40, 0x5b, 0x0, 0x0, 0x4b, 0x7, 0x80, 0x0, + 0x1, 0xe0, 0x5a, 0x0, 0x0, 0x4c, 0x0, 0xd6, + 0x0, 0x2d, 0x40, 0x1, 0xad, 0xdd, 0x40, 0x0, + 0x0, 0x4, 0xab, 0xa0, + + /* U+52 "R" */ + 0xfd, 0xdd, 0x90, 0xf0, 0x0, 0xa7, 0xf0, 0x0, + 0x5a, 0xf0, 0x0, 0xb7, 0xfc, 0xcf, 0x90, 0xf0, + 0x5, 0xb0, 0xf0, 0x0, 0x97, + + /* U+53 "S" */ + 0x8, 0xdc, 0xc3, 0x5b, 0x0, 0x11, 0x4d, 0x20, + 0x0, 0x6, 0xde, 0x90, 0x0, 0x1, 0x9a, 0x33, + 0x0, 0x5b, 0x3b, 0xcc, 0xb2, + + /* U+54 "T" */ + 0xcd, 0xee, 0xda, 0x0, 0x97, 0x0, 0x0, 0x97, + 0x0, 0x0, 0x97, 0x0, 0x0, 0x97, 0x0, 0x0, + 0x97, 0x0, 0x0, 0x97, 0x0, + + /* U+55 "U" */ + 0xf, 0x0, 0x1, 0xe0, 0xf0, 0x0, 0x1e, 0xf, + 0x0, 0x1, 0xe0, 0xf0, 0x0, 0x1e, 0xe, 0x0, + 0x2, 0xd0, 0xa7, 0x0, 0x98, 0x1, 0xad, 0xd9, + 0x0, + + /* U+56 "V" */ + 0xc, 0x40, 0x0, 0x1d, 0x0, 0x5b, 0x0, 0x8, + 0x70, 0x0, 0xe2, 0x0, 0xe1, 0x0, 0x7, 0x90, + 0x69, 0x0, 0x0, 0x1e, 0x1d, 0x20, 0x0, 0x0, + 0x9c, 0xb0, 0x0, 0x0, 0x2, 0xf4, 0x0, 0x0, + + /* U+57 "W" */ + 0x88, 0x0, 0xf, 0x40, 0x2, 0xc3, 0xd0, 0x5, + 0xea, 0x0, 0x86, 0xd, 0x20, 0xa4, 0xe0, 0xd, + 0x10, 0x88, 0xd, 0xa, 0x43, 0xc0, 0x2, 0xd5, + 0x90, 0x4a, 0x86, 0x0, 0xd, 0xd3, 0x0, 0xed, + 0x10, 0x0, 0x8e, 0x0, 0xa, 0xc0, 0x0, + + /* U+58 "X" */ + 0x5c, 0x0, 0x1d, 0x10, 0x98, 0xb, 0x50, 0x0, + 0xda, 0x90, 0x0, 0x6, 0xf2, 0x0, 0x1, 0xd7, + 0xc0, 0x0, 0xc5, 0xa, 0x80, 0x8a, 0x0, 0xd, + 0x30, + + /* U+59 "Y" */ + 0xb, 0x50, 0x0, 0xc3, 0x2, 0xd0, 0x6, 0x90, + 0x0, 0x88, 0x1d, 0x10, 0x0, 0xd, 0xb6, 0x0, + 0x0, 0x5, 0xd0, 0x0, 0x0, 0x4, 0xb0, 0x0, + 0x0, 0x4, 0xb0, 0x0, + + /* U+5A "Z" */ + 0x6d, 0xdd, 0xdf, 0x10, 0x0, 0xb, 0x70, 0x0, + 0x8, 0xa0, 0x0, 0x4, 0xd0, 0x0, 0x2, 0xe2, + 0x0, 0x0, 0xd4, 0x0, 0x0, 0x8f, 0xdd, 0xdd, + 0x30, + + /* U+5B "[" */ + 0xfb, 0x1f, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, + 0x0, 0xf0, 0xf, 0x0, 0xfb, 0x10, + + /* U+5C "\\" */ + 0x3a, 0x0, 0x0, 0xc1, 0x0, 0x7, 0x60, 0x0, + 0x1c, 0x0, 0x0, 0xb2, 0x0, 0x5, 0x80, 0x0, + 0xd, 0x0, 0x0, 0xa3, 0x0, 0x4, 0x90, + + /* U+5D "]" */ + 0x9e, 0x40, 0xb4, 0xb, 0x40, 0xb4, 0xb, 0x40, + 0xb4, 0xb, 0x40, 0xb4, 0x9e, 0x40, + + /* U+5E "^" */ + 0x0, 0xa8, 0x0, 0x2, 0x9b, 0x0, 0x9, 0x25, + 0x60, 0x1b, 0x0, 0xb0, + + /* U+5F "_" */ + 0x99, 0x99, 0x90, + + /* U+60 "`" */ + 0x3a, 0x30, + + /* U+61 "a" */ + 0x1b, 0xcd, 0x60, 0x1, 0x0, 0xe0, 0x1a, 0xaa, + 0xf1, 0x78, 0x0, 0xe1, 0x2c, 0xaa, 0xe1, + + /* U+62 "b" */ + 0x1e, 0x0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x1e, + 0xac, 0xd6, 0x1, 0xf3, 0x1, 0xe2, 0x1e, 0x0, + 0xa, 0x51, 0xf4, 0x1, 0xe2, 0x1d, 0x9c, 0xd5, + 0x0, + + /* U+63 "c" */ + 0x7, 0xdd, 0xa0, 0x5c, 0x0, 0x40, 0x87, 0x0, + 0x0, 0x5c, 0x0, 0x41, 0x7, 0xdd, 0xa0, + + /* U+64 "d" */ + 0x0, 0x0, 0xe, 0x0, 0x0, 0xe, 0x8, 0xdc, + 0x9e, 0x5c, 0x0, 0x7e, 0x87, 0x0, 0x1e, 0x5b, + 0x0, 0x6e, 0x8, 0xdb, 0x8e, + + /* U+65 "e" */ + 0x8, 0xcc, 0x90, 0x5a, 0x0, 0x87, 0x8c, 0xaa, + 0xa8, 0x5b, 0x0, 0x20, 0x7, 0xdc, 0xb1, + + /* U+66 "f" */ + 0x7, 0xc9, 0xe, 0x0, 0x9f, 0xb6, 0xf, 0x0, + 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, + + /* U+67 "g" */ + 0x8, 0xdc, 0x9e, 0x5b, 0x0, 0x5f, 0x87, 0x0, + 0xf, 0x5c, 0x0, 0x6f, 0x7, 0xdc, 0x9f, 0x3, + 0x0, 0x4c, 0x1a, 0xcc, 0xb2, + + /* U+68 "h" */ + 0x1e, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x1e, 0xac, + 0xd4, 0x1f, 0x30, 0x3d, 0x1e, 0x0, 0xe, 0x1e, + 0x0, 0xf, 0x1e, 0x0, 0xf, + + /* U+69 "i" */ + 0x2d, 0x0, 0x10, 0x1e, 0x1, 0xe0, 0x1e, 0x1, + 0xe0, 0x1e, 0x0, + + /* U+6A "j" */ + 0x1, 0xe0, 0x0, 0x10, 0x0, 0xe0, 0x0, 0xe0, + 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x1, 0xe0, + 0xad, 0x60, + + /* U+6B "k" */ + 0x1e, 0x0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x1e, + 0x1, 0xb6, 0x1, 0xe2, 0xd5, 0x0, 0x1f, 0xde, + 0x20, 0x1, 0xf2, 0x5d, 0x0, 0x1e, 0x0, 0x7b, + 0x0, + + /* U+6C "l" */ + 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + + /* U+6D "m" */ + 0x1e, 0xab, 0xc5, 0xbb, 0xc2, 0x1f, 0x20, 0x5f, + 0x10, 0x69, 0x1e, 0x0, 0x2c, 0x0, 0x4b, 0x1e, + 0x0, 0x2c, 0x0, 0x4b, 0x1e, 0x0, 0x2c, 0x0, + 0x4b, + + /* U+6E "n" */ + 0x1e, 0xab, 0xc4, 0x1f, 0x20, 0x3d, 0x1e, 0x0, + 0xe, 0x1e, 0x0, 0xf, 0x1e, 0x0, 0xf, + + /* U+6F "o" */ + 0x7, 0xdd, 0xb1, 0x5c, 0x0, 0x7b, 0x87, 0x0, + 0x1e, 0x5c, 0x0, 0x7b, 0x7, 0xdd, 0xb1, + + /* U+70 "p" */ + 0x1e, 0xab, 0xd6, 0x1, 0xf3, 0x1, 0xd2, 0x1e, + 0x0, 0xa, 0x51, 0xf4, 0x1, 0xe2, 0x1e, 0xac, + 0xd5, 0x1, 0xe0, 0x0, 0x0, 0x1e, 0x0, 0x0, + 0x0, + + /* U+71 "q" */ + 0x8, 0xdc, 0x8e, 0x5c, 0x0, 0x7e, 0x87, 0x0, + 0x1e, 0x5c, 0x0, 0x7e, 0x8, 0xdc, 0x8e, 0x0, + 0x0, 0xe, 0x0, 0x0, 0xe, + + /* U+72 "r" */ + 0x1d, 0xaa, 0x1f, 0x30, 0x1e, 0x0, 0x1e, 0x0, + 0x1e, 0x0, + + /* U+73 "s" */ + 0x2c, 0xcc, 0x48, 0x80, 0x0, 0x2a, 0xca, 0x21, + 0x0, 0x6a, 0x6c, 0xcc, 0x30, + + /* U+74 "t" */ + 0xf, 0x0, 0x9f, 0xb6, 0xf, 0x0, 0xf, 0x0, + 0xe, 0x10, 0x7, 0xd9, + + /* U+75 "u" */ + 0x2d, 0x0, 0x1d, 0x2d, 0x0, 0x1d, 0x2d, 0x0, + 0x1d, 0xe, 0x10, 0x6d, 0x6, 0xdb, 0x9d, + + /* U+76 "v" */ + 0xc, 0x30, 0x9, 0x50, 0x5a, 0x1, 0xd0, 0x0, + 0xd2, 0x86, 0x0, 0x6, 0x9d, 0x0, 0x0, 0xe, + 0x80, 0x0, + + /* U+77 "w" */ + 0xb2, 0x1, 0xf1, 0x2, 0xb5, 0x80, 0x7b, 0x80, + 0x85, 0xd, 0xd, 0x1d, 0xd, 0x0, 0x89, 0x90, + 0x99, 0x80, 0x2, 0xf2, 0x2, 0xf2, 0x0, + + /* U+78 "x" */ + 0x5b, 0x3, 0xc0, 0x8, 0x9c, 0x10, 0x0, 0xe7, + 0x0, 0xa, 0x7c, 0x20, 0x79, 0x2, 0xd1, + + /* U+79 "y" */ + 0xc, 0x30, 0x9, 0x50, 0x5a, 0x1, 0xd0, 0x0, + 0xd2, 0x77, 0x0, 0x6, 0x9d, 0x0, 0x0, 0xe, + 0x80, 0x0, 0x0, 0xd1, 0x0, 0xc, 0xd6, 0x0, + 0x0, + + /* U+7A "z" */ + 0x6b, 0xbe, 0xb0, 0x2, 0xd1, 0x1, 0xd2, 0x0, + 0xc4, 0x0, 0x8e, 0xbb, 0x90, + + /* U+7B "{" */ + 0x4, 0xd3, 0x9, 0x50, 0xa, 0x50, 0xa, 0x40, + 0x5f, 0x10, 0xa, 0x40, 0xa, 0x50, 0x9, 0x50, + 0x4, 0xd3, + + /* U+7C "|" */ + 0xee, 0xee, 0xee, 0xee, 0xe0, + + /* U+7D "}" */ + 0xab, 0x0, 0xd2, 0xd, 0x20, 0xc2, 0x9, 0xc0, + 0xc2, 0xd, 0x20, 0xd2, 0xab, 0x0, + + /* U+7E "~" */ + 0x1a, 0x91, 0x62, 0x44, 0x29, 0x90, + + /* U+B0 "°" */ + 0x7, 0x81, 0x62, 0x8, 0x62, 0x8, 0x7, 0x81, + + /* U+2022 "•" */ + 0x19, 0x23, 0xe4, + + /* U+F001 "" */ + 0x0, 0x0, 0x0, 0x4, 0x9c, 0x10, 0x0, 0x16, + 0xbf, 0xff, 0xf2, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0x20, 0x5, 0xff, 0xd9, 0x41, 0xf2, 0x0, 0x5f, + 0x20, 0x0, 0x1f, 0x20, 0x5, 0xe0, 0x0, 0x1, + 0xf2, 0x0, 0x5e, 0x0, 0x7, 0x9f, 0x20, 0x48, + 0xe0, 0x7, 0xff, 0xf2, 0xaf, 0xfe, 0x0, 0x2b, + 0xd8, 0x7, 0xff, 0x90, 0x0, 0x0, 0x0, 0x1, + 0x10, 0x0, 0x0, 0x0, 0x0, + + /* U+F008 "" */ + 0x41, 0x88, 0x88, 0x88, 0x14, 0xeb, 0xe7, 0x77, + 0x7e, 0xbe, 0xa2, 0xd0, 0x0, 0xd, 0x2a, 0xeb, + 0xe3, 0x33, 0x3e, 0xbe, 0xb4, 0xfb, 0xbb, 0xbf, + 0x4b, 0xd9, 0xd0, 0x0, 0xd, 0x9d, 0xb5, 0xd0, + 0x0, 0xd, 0x5b, 0xb7, 0xff, 0xff, 0xff, 0x7b, + + /* U+F00B "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xd6, 0xff, + 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0x67, + 0x52, 0x77, 0x77, 0x76, 0xef, 0xc6, 0xff, 0xff, + 0xfe, 0xff, 0xe7, 0xff, 0xff, 0xff, 0x67, 0x52, + 0x77, 0x77, 0x76, 0xef, 0xc6, 0xff, 0xff, 0xfe, + 0xff, 0xe7, 0xff, 0xff, 0xff, 0x78, 0x63, 0x88, + 0x88, 0x87, + + /* U+F00C "" */ + 0x0, 0x0, 0x0, 0x0, 0x41, 0x0, 0x0, 0x0, + 0x6, 0xfd, 0x0, 0x0, 0x0, 0x6f, 0xf7, 0x7c, + 0x10, 0x6, 0xff, 0x70, 0xdf, 0xd1, 0x6f, 0xf7, + 0x0, 0x1d, 0xfe, 0xff, 0x70, 0x0, 0x1, 0xdf, + 0xf7, 0x0, 0x0, 0x0, 0x1c, 0x60, 0x0, 0x0, + + /* U+F00D "" */ + 0x0, 0x0, 0x0, 0xc, 0xd1, 0x2, 0xea, 0xaf, + 0xd4, 0xef, 0x80, 0xaf, 0xff, 0x80, 0x2, 0xff, + 0xf1, 0x2, 0xef, 0xdf, 0xd1, 0xdf, 0x80, 0xaf, + 0xb6, 0x70, 0x0, 0x85, + + /* U+F011 "" */ + 0x0, 0x0, 0xa6, 0x0, 0x0, 0x2, 0xa0, 0xea, + 0x29, 0x0, 0xe, 0xe1, 0xea, 0x5f, 0xa0, 0x7f, + 0x40, 0xea, 0x8, 0xf3, 0xbd, 0x0, 0xea, 0x1, + 0xf7, 0xcc, 0x0, 0xb7, 0x0, 0xf8, 0xaf, 0x0, + 0x0, 0x4, 0xf6, 0x4f, 0xa0, 0x0, 0x1d, 0xf1, + 0x9, 0xfd, 0x89, 0xef, 0x50, 0x0, 0x6d, 0xff, + 0xc4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+F013 "" */ + 0x0, 0x1, 0x88, 0x10, 0x0, 0x0, 0x5, 0xff, + 0x40, 0x0, 0x1e, 0xcf, 0xff, 0xfc, 0xd0, 0x7f, + 0xff, 0xdd, 0xff, 0xf7, 0x2d, 0xfa, 0x0, 0xbf, + 0xd1, 0xb, 0xf7, 0x0, 0x8f, 0xa0, 0x6f, 0xfe, + 0x55, 0xef, 0xf6, 0x4f, 0xff, 0xff, 0xff, 0xf3, + 0x6, 0x3a, 0xff, 0xa3, 0x60, 0x0, 0x3, 0xff, + 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+F015 "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6f, 0x90, 0xf8, 0x0, 0x0, 0x9, 0xf8, 0xec, + 0xf8, 0x0, 0x1, 0xbe, 0x5a, 0x5c, 0xf8, 0x0, + 0x2d, 0xd5, 0xef, 0xf6, 0xaf, 0x50, 0xda, 0x6f, + 0xff, 0xff, 0x87, 0xf1, 0x11, 0xff, 0xff, 0xff, + 0xf5, 0x10, 0x2, 0xff, 0xc3, 0x9f, 0xf6, 0x0, + 0x2, 0xff, 0xb0, 0x7f, 0xf6, 0x0, 0x1, 0xbb, + 0x70, 0x4b, 0xb3, 0x0, + + /* U+F019 "" */ + 0x0, 0x0, 0x88, 0x20, 0x0, 0x0, 0x1, 0xff, + 0x60, 0x0, 0x0, 0x1, 0xff, 0x60, 0x0, 0x0, + 0x1, 0xff, 0x60, 0x0, 0x1, 0xff, 0xff, 0xff, + 0x60, 0x0, 0x5f, 0xff, 0xfa, 0x0, 0x0, 0x5, + 0xff, 0xb0, 0x0, 0x8b, 0xb9, 0x8b, 0x8b, 0xb9, + 0xdf, 0xff, 0xff, 0xfe, 0xdf, 0xcf, 0xff, 0xff, + 0xfc, 0xbe, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+F01C "" */ + 0x0, 0x24, 0x44, 0x44, 0x30, 0x0, 0x1, 0xef, + 0xff, 0xff, 0xf4, 0x0, 0xb, 0xc0, 0x0, 0x0, + 0x8e, 0x10, 0x6e, 0x10, 0x0, 0x0, 0xc, 0xa0, + 0xee, 0xcb, 0x10, 0xa, 0xcd, 0xf2, 0xff, 0xff, + 0xb8, 0x9f, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf4, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xe1, + + /* U+F021 "" */ + 0x0, 0x4, 0x87, 0x30, 0x5f, 0x2, 0xdf, 0xfe, + 0xfc, 0x7f, 0x1e, 0xd3, 0x0, 0x3c, 0xff, 0x9f, + 0x10, 0x5, 0xfe, 0xff, 0x44, 0x0, 0x2, 0x66, + 0x66, 0x12, 0x22, 0x0, 0x0, 0x11, 0xff, 0xff, + 0x50, 0x0, 0xda, 0xff, 0xa3, 0x10, 0x8, 0xf4, + 0xfc, 0xfb, 0x66, 0xbf, 0x80, 0xf5, 0x5c, 0xff, + 0xd5, 0x0, 0x31, 0x0, 0x0, 0x0, 0x0, + + /* U+F026 "" */ + 0x0, 0x0, 0x70, 0x0, 0xbf, 0xab, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, + 0x3e, 0xf0, 0x0, 0x2c, + + /* U+F027 "" */ + 0x0, 0x0, 0x70, 0x0, 0x0, 0xb, 0xf0, 0x0, + 0xab, 0xdf, 0xf0, 0x20, 0xff, 0xff, 0xf0, 0xa6, + 0xff, 0xff, 0xf0, 0x59, 0xff, 0xff, 0xf0, 0x92, + 0x0, 0x3e, 0xf0, 0x0, 0x0, 0x2, 0xc0, 0x0, + + /* U+F028 "" */ + 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, + 0x70, 0x0, 0xaa, 0x0, 0x0, 0xb, 0xf0, 0xa, + 0x4a, 0x70, 0xab, 0xdf, 0xf0, 0x23, 0xe2, 0xe0, + 0xff, 0xff, 0xf0, 0xa6, 0x95, 0xc2, 0xff, 0xff, + 0xf0, 0x59, 0x76, 0xc3, 0xff, 0xff, 0xf0, 0x92, + 0xc3, 0xe1, 0x0, 0x3e, 0xf0, 0x9, 0xa6, 0xb0, + 0x0, 0x2, 0xc0, 0x3, 0x3e, 0x20, 0x0, 0x0, + 0x0, 0x0, 0xc3, 0x0, + + /* U+F03E "" */ + 0x24, 0x44, 0x44, 0x44, 0x42, 0xff, 0xef, 0xff, + 0xff, 0xff, 0xf3, 0xd, 0xff, 0xef, 0xff, 0xf8, + 0x4e, 0xfe, 0x25, 0xff, 0xff, 0x9d, 0xe2, 0x0, + 0x6f, 0xf9, 0x1, 0x20, 0x0, 0x4f, 0xf7, 0x44, + 0x44, 0x44, 0x7f, 0xcf, 0xff, 0xff, 0xff, 0xfc, + + /* U+F048 "" */ + 0x0, 0x0, 0x0, 0xe, 0x70, 0x3, 0xe4, 0xe7, + 0x4, 0xff, 0x5e, 0x75, 0xff, 0xf5, 0xec, 0xff, + 0xff, 0x5e, 0xff, 0xff, 0xf5, 0xea, 0xef, 0xff, + 0x5e, 0x71, 0xdf, 0xf5, 0xe7, 0x1, 0xcf, 0x59, + 0x50, 0x0, 0x92, + + /* U+F04B "" */ + 0x88, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x50, 0x0, + 0x0, 0xff, 0xff, 0xc3, 0x0, 0xf, 0xff, 0xff, + 0xf9, 0x10, 0xff, 0xff, 0xff, 0xfe, 0x5f, 0xff, + 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xf8, 0xf, + 0xff, 0xff, 0xb2, 0x0, 0xff, 0xfd, 0x40, 0x0, + 0xe, 0xf7, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, + 0x0, 0x0, + + /* U+F04C "" */ + 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0x90, 0xdf, + 0xf9, 0xff, 0xfc, 0xf, 0xff, 0xcf, 0xff, 0xc0, + 0xff, 0xfc, 0xff, 0xfc, 0xf, 0xff, 0xcf, 0xff, + 0xc0, 0xff, 0xfc, 0xff, 0xfc, 0xf, 0xff, 0xcf, + 0xff, 0xc0, 0xff, 0xfc, 0xff, 0xfb, 0xf, 0xff, + 0xb8, 0xbb, 0x50, 0x8b, 0xb5, + + /* U+F04D "" */ + 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, + 0xf9, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, + 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, + 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xcf, + 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, + 0xb8, 0xbb, 0xbb, 0xbb, 0xb5, + + /* U+F051 "" */ + 0x0, 0x0, 0x0, 0xb, 0xa0, 0x0, 0xe7, 0xcf, + 0xb0, 0xe, 0x7c, 0xff, 0xc1, 0xe7, 0xcf, 0xff, + 0xdf, 0x7c, 0xff, 0xff, 0xf7, 0xcf, 0xff, 0x9e, + 0x7c, 0xff, 0x70, 0xe7, 0xcf, 0x60, 0xe, 0x77, + 0x50, 0x0, 0x95, + + /* U+F052 "" */ + 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0xaf, + 0x60, 0x0, 0x0, 0x9, 0xff, 0xf5, 0x0, 0x0, + 0x8f, 0xff, 0xff, 0x40, 0x6, 0xff, 0xff, 0xff, + 0xf3, 0xe, 0xff, 0xff, 0xff, 0xfa, 0x3, 0x66, + 0x66, 0x66, 0x62, 0xd, 0xff, 0xff, 0xff, 0xf9, + 0xf, 0xff, 0xff, 0xff, 0xfb, 0x6, 0x88, 0x88, + 0x88, 0x84, + + /* U+F053 "" */ + 0x0, 0x0, 0x0, 0x0, 0x1, 0xc7, 0x0, 0x1d, + 0xf5, 0x1, 0xdf, 0x50, 0x1d, 0xf5, 0x0, 0x4f, + 0xd0, 0x0, 0x6, 0xfc, 0x0, 0x0, 0x6f, 0xc0, + 0x0, 0x6, 0xf9, 0x0, 0x0, 0x51, + + /* U+F054 "" */ + 0x0, 0x0, 0x0, 0x3e, 0x30, 0x0, 0x2e, 0xf3, + 0x0, 0x2, 0xef, 0x30, 0x0, 0x2e, 0xe3, 0x0, + 0x9, 0xf8, 0x0, 0x8f, 0xa0, 0x8, 0xfa, 0x0, + 0x5f, 0xa0, 0x0, 0x6, 0x0, 0x0, + + /* U+F067 "" */ + 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x8f, 0x40, + 0x0, 0x0, 0x9, 0xf5, 0x0, 0x0, 0x0, 0x9f, + 0x50, 0x0, 0x9b, 0xbd, 0xfc, 0xbb, 0x6f, 0xff, + 0xff, 0xff, 0xfb, 0x13, 0x3a, 0xf7, 0x33, 0x10, + 0x0, 0x9f, 0x50, 0x0, 0x0, 0x9, 0xf5, 0x0, + 0x0, 0x0, 0x39, 0x10, 0x0, + + /* U+F068 "" */ + 0xbd, 0xdd, 0xdd, 0xdd, 0x8e, 0xff, 0xff, 0xff, + 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+F06E "" */ + 0x0, 0x4, 0x8a, 0x95, 0x0, 0x0, 0x1, 0xcf, + 0x84, 0x6e, 0xe3, 0x0, 0x1e, 0xf5, 0x8, 0x72, + 0xff, 0x40, 0xbf, 0xe0, 0x2d, 0xf5, 0xbf, 0xe0, + 0xdf, 0xe3, 0xff, 0xf6, 0xaf, 0xf1, 0x4f, 0xf3, + 0xaf, 0xd1, 0xef, 0x70, 0x5, 0xfd, 0x31, 0x2b, + 0xf7, 0x0, 0x0, 0x19, 0xdf, 0xea, 0x30, 0x0, + + /* U+F070 "" */ + 0xb6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xfa, + 0x16, 0xaa, 0x83, 0x0, 0x0, 0x3, 0xef, 0xe6, + 0x49, 0xfb, 0x0, 0x0, 0x1, 0xbe, 0x49, 0x28, + 0xfd, 0x0, 0x1d, 0x40, 0x8f, 0xfe, 0x1f, 0xf9, + 0x4, 0xff, 0x50, 0x5f, 0xf1, 0xff, 0xb0, 0xa, + 0xfc, 0x0, 0x2d, 0xdf, 0xf2, 0x0, 0xa, 0xfa, + 0x10, 0x1b, 0xf7, 0x0, 0x0, 0x4, 0xbe, 0xe4, + 0x8, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, + 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, + + /* U+F071 "" */ + 0x0, 0x0, 0x2, 0xe6, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xbf, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x4f, + 0xff, 0x90, 0x0, 0x0, 0x0, 0xd, 0xe7, 0xcf, + 0x20, 0x0, 0x0, 0x7, 0xfc, 0x8, 0xfb, 0x0, + 0x0, 0x1, 0xef, 0xd0, 0x9f, 0xf4, 0x0, 0x0, + 0x9f, 0xff, 0x5c, 0xff, 0xd0, 0x0, 0x2f, 0xff, + 0xe1, 0xaf, 0xff, 0x60, 0xb, 0xff, 0xfe, 0x2b, + 0xff, 0xfe, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, + 0xf2, 0x1, 0x33, 0x33, 0x33, 0x33, 0x32, 0x0, + + /* U+F074 "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xc1, 0xef, 0xd1, 0x3, 0xef, 0xfc, 0x99, + 0xfb, 0x2e, 0xec, 0xf8, 0x0, 0x54, 0xde, 0x25, + 0x70, 0x0, 0xc, 0xf4, 0x1, 0x10, 0x0, 0xbf, + 0x5c, 0x78, 0xd1, 0xff, 0xf6, 0xa, 0xff, 0xfd, + 0x78, 0x60, 0x0, 0x7c, 0xf6, 0x0, 0x0, 0x0, + 0x5, 0x60, + + /* U+F077 "" */ + 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0xaf, 0x60, + 0x0, 0x0, 0xaf, 0xef, 0x60, 0x0, 0xaf, 0x90, + 0xcf, 0x60, 0x9f, 0x80, 0x0, 0xcf, 0x57, 0x80, + 0x0, 0x0, 0xa4, + + /* U+F078 "" */ + 0x11, 0x0, 0x0, 0x2, 0xc, 0xe2, 0x0, 0x5, + 0xf8, 0x3f, 0xe2, 0x5, 0xfd, 0x10, 0x3f, 0xe7, + 0xfd, 0x10, 0x0, 0x3f, 0xfd, 0x10, 0x0, 0x0, + 0x3b, 0x10, 0x0, + + /* U+F079 "" */ + 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, + 0xc3, 0xff, 0xff, 0xf5, 0x0, 0xbe, 0xfe, 0xb3, + 0x44, 0x4e, 0x60, 0x4, 0x3f, 0x34, 0x0, 0x0, + 0xd6, 0x0, 0x2, 0xf2, 0x0, 0x0, 0xd, 0x60, + 0x0, 0x2f, 0x20, 0x0, 0x8c, 0xea, 0xf1, 0x1, + 0xff, 0xff, 0xf7, 0xdf, 0xf7, 0x0, 0x4, 0x44, + 0x44, 0x11, 0xc7, 0x0, + + /* U+F07B "" */ + 0x58, 0x88, 0x20, 0x0, 0x0, 0xff, 0xff, 0xe4, + 0x44, 0x41, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xfc, + + /* U+F093 "" */ + 0x0, 0x0, 0x33, 0x0, 0x0, 0x0, 0x3, 0xff, + 0x40, 0x0, 0x0, 0x3f, 0xff, 0xf4, 0x0, 0x2, + 0xff, 0xff, 0xff, 0x20, 0x0, 0x36, 0xff, 0x63, + 0x0, 0x0, 0x4, 0xff, 0x40, 0x0, 0x0, 0x4, + 0xff, 0x40, 0x0, 0x9a, 0xa5, 0xff, 0x5a, 0xa9, + 0xff, 0xff, 0xdd, 0xfe, 0xdf, 0xff, 0xff, 0xff, + 0xfc, 0xbe, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+F095 "" */ + 0x0, 0x0, 0x0, 0x0, 0xa8, 0x40, 0x0, 0x0, + 0x0, 0x5f, 0xff, 0x0, 0x0, 0x0, 0xc, 0xff, + 0xe0, 0x0, 0x0, 0x0, 0x6f, 0xfa, 0x0, 0x0, + 0x0, 0x0, 0xcf, 0x50, 0x0, 0x0, 0x0, 0x5f, + 0xd0, 0x0, 0x39, 0x10, 0x4f, 0xf4, 0x0, 0xbf, + 0xfc, 0x9f, 0xf6, 0x0, 0xd, 0xff, 0xff, 0xe4, + 0x0, 0x0, 0x9f, 0xfd, 0x81, 0x0, 0x0, 0x1, + 0x31, 0x0, 0x0, 0x0, 0x0, + + /* U+F0C4 "" */ + 0x0, 0x0, 0x0, 0x0, 0x6, 0xfe, 0x30, 0x5, + 0xc6, 0xe7, 0xbb, 0x5, 0xff, 0x4d, 0xbd, 0xb4, + 0xff, 0x40, 0x3c, 0xff, 0xff, 0x40, 0x0, 0x8, + 0xff, 0xb0, 0x0, 0x6f, 0xff, 0xdf, 0x80, 0xe, + 0x7b, 0xb2, 0xef, 0x80, 0xdb, 0xd9, 0x2, 0xef, + 0x73, 0xca, 0x10, 0x2, 0x72, + + /* U+F0C5 "" */ + 0x0, 0x5d, 0xdd, 0x48, 0x0, 0x8, 0xff, 0xf6, + 0xf8, 0xcc, 0x8f, 0xff, 0x84, 0x3f, 0xe8, 0xff, + 0xff, 0xfc, 0xfe, 0x8f, 0xff, 0xff, 0xcf, 0xe8, + 0xff, 0xff, 0xfc, 0xfe, 0x8f, 0xff, 0xff, 0xcf, + 0xe7, 0xff, 0xff, 0xfc, 0xff, 0x46, 0x66, 0x66, + 0x3f, 0xff, 0xff, 0xf4, 0x0, 0x34, 0x44, 0x43, + 0x0, 0x0, + + /* U+F0C7 "" */ + 0x2, 0x22, 0x22, 0x0, 0xe, 0xff, 0xff, 0xfe, + 0x20, 0xf5, 0x22, 0x22, 0xfe, 0x1f, 0x40, 0x0, + 0xe, 0xf8, 0xf7, 0x44, 0x44, 0xff, 0x9f, 0xff, + 0xff, 0xff, 0xf9, 0xff, 0xf6, 0xc, 0xff, 0x9f, + 0xff, 0x20, 0x9f, 0xf9, 0xff, 0xfc, 0x7f, 0xff, + 0x9a, 0xdd, 0xdd, 0xdd, 0xd4, + + /* U+F0E7 "" */ + 0x3, 0xaa, 0xa2, 0x0, 0x7, 0xff, 0xf2, 0x0, + 0x9, 0xff, 0xd0, 0x0, 0xb, 0xff, 0xd8, 0x81, + 0xe, 0xff, 0xff, 0xe1, 0xe, 0xff, 0xff, 0x60, + 0x0, 0x5, 0xfd, 0x0, 0x0, 0x9, 0xf4, 0x0, + 0x0, 0xd, 0xa0, 0x0, 0x0, 0xf, 0x20, 0x0, + 0x0, 0x2, 0x0, 0x0, + + /* U+F0EA "" */ + 0x1, 0x79, 0x11, 0x0, 0xf, 0xfc, 0x9f, 0xf4, + 0x0, 0xff, 0xfd, 0xcc, 0x30, 0xf, 0xfa, 0x79, + 0x93, 0x40, 0xff, 0x8e, 0xff, 0x6f, 0x5f, 0xf8, + 0xef, 0xf7, 0x64, 0xff, 0x8e, 0xff, 0xff, 0xcf, + 0xf8, 0xef, 0xff, 0xfc, 0x46, 0x3e, 0xff, 0xff, + 0xc0, 0x0, 0xdf, 0xff, 0xfc, 0x0, 0x2, 0x44, + 0x44, 0x20, + + /* U+F0F3 "" */ + 0x0, 0x1, 0x90, 0x0, 0x0, 0x2, 0xaf, 0x81, + 0x0, 0x2, 0xff, 0xff, 0xd0, 0x0, 0x9f, 0xff, + 0xff, 0x50, 0xc, 0xff, 0xff, 0xf8, 0x0, 0xef, + 0xff, 0xff, 0xa0, 0x3f, 0xff, 0xff, 0xfe, 0xd, + 0xff, 0xff, 0xff, 0xf9, 0x46, 0x66, 0x66, 0x66, + 0x20, 0x0, 0xbf, 0x70, 0x0, 0x0, 0x0, 0x30, + 0x0, 0x0, + + /* U+F11C "" */ + 0x24, 0x44, 0x44, 0x44, 0x44, 0x30, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf3, 0xf4, 0xa0, 0xa0, 0xb0, + 0xb0, 0xf4, 0xff, 0xbe, 0xae, 0xae, 0xaf, 0xf4, + 0xff, 0x3a, 0xa, 0xa, 0xf, 0xf4, 0xfb, 0xea, + 0xaa, 0xaa, 0xea, 0xf4, 0xf7, 0xb4, 0x44, 0x44, + 0xc4, 0xf4, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xe1, + + /* U+F124 "" */ + 0x0, 0x0, 0x0, 0x0, 0x29, 0x70, 0x0, 0x0, + 0x0, 0x3a, 0xff, 0xe0, 0x0, 0x0, 0x4b, 0xff, + 0xff, 0x70, 0x0, 0x5d, 0xff, 0xff, 0xff, 0x10, + 0xc, 0xff, 0xff, 0xff, 0xf9, 0x0, 0xa, 0xee, + 0xef, 0xff, 0xf2, 0x0, 0x0, 0x0, 0xa, 0xff, + 0xa0, 0x0, 0x0, 0x0, 0xa, 0xff, 0x30, 0x0, + 0x0, 0x0, 0xa, 0xfb, 0x0, 0x0, 0x0, 0x0, + 0x8, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, + 0x0, 0x0, + + /* U+F15B "" */ + 0xef, 0xff, 0x5b, 0x0, 0xff, 0xff, 0x6f, 0xb0, + 0xff, 0xff, 0x68, 0x83, 0xff, 0xff, 0xfd, 0xd6, + 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf7, + 0x0, 0x0, 0x0, 0x0, + + /* U+F1EB "" */ + 0x0, 0x0, 0x1, 0x10, 0x0, 0x0, 0x0, 0x5, + 0xbf, 0xff, 0xfd, 0x81, 0x0, 0x2c, 0xfe, 0xa8, + 0x78, 0xcf, 0xf7, 0xd, 0xf7, 0x0, 0x0, 0x0, + 0x3c, 0xf5, 0x22, 0x5, 0xbe, 0xfd, 0x81, 0x5, + 0x0, 0x9, 0xfe, 0xa9, 0xcf, 0xe2, 0x0, 0x0, + 0x37, 0x0, 0x0, 0x38, 0x0, 0x0, 0x0, 0x0, + 0x8c, 0x20, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf7, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x10, 0x0, + 0x0, + + /* U+F240 "" */ + 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf, 0x75, + 0x55, 0x55, 0x55, 0x5a, 0xf2, 0xf6, 0xff, 0xff, + 0xff, 0xfd, 0x4f, 0x5f, 0x6f, 0xff, 0xff, 0xff, + 0xd1, 0xf5, 0xf5, 0x77, 0x77, 0x77, 0x76, 0x8f, + 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x24, + 0x44, 0x44, 0x44, 0x44, 0x41, 0x0, + + /* U+F241 "" */ + 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf, 0x75, + 0x55, 0x55, 0x54, 0x4a, 0xf2, 0xf6, 0xff, 0xff, + 0xff, 0x0, 0x4f, 0x5f, 0x6f, 0xff, 0xff, 0xf0, + 0x1, 0xf5, 0xf5, 0x77, 0x77, 0x77, 0x0, 0x8f, + 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x24, + 0x44, 0x44, 0x44, 0x44, 0x41, 0x0, + + /* U+F242 "" */ + 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf, 0x75, + 0x55, 0x54, 0x44, 0x4a, 0xf2, 0xf6, 0xff, 0xff, + 0x20, 0x0, 0x4f, 0x5f, 0x6f, 0xff, 0xf2, 0x0, + 0x1, 0xf5, 0xf5, 0x77, 0x77, 0x10, 0x0, 0x8f, + 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x24, + 0x44, 0x44, 0x44, 0x44, 0x41, 0x0, + + /* U+F243 "" */ + 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf, 0x75, + 0x54, 0x44, 0x44, 0x4a, 0xf2, 0xf6, 0xff, 0x50, + 0x0, 0x0, 0x4f, 0x5f, 0x6f, 0xf5, 0x0, 0x0, + 0x1, 0xf5, 0xf5, 0x77, 0x20, 0x0, 0x0, 0x8f, + 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x24, + 0x44, 0x44, 0x44, 0x44, 0x41, 0x0, + + /* U+F244 "" */ + 0xcf, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xf, 0x74, + 0x44, 0x44, 0x44, 0x4a, 0xf2, 0xf4, 0x0, 0x0, + 0x0, 0x0, 0x4f, 0x5f, 0x40, 0x0, 0x0, 0x0, + 0x1, 0xf5, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x8f, + 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x24, + 0x44, 0x44, 0x44, 0x44, 0x41, 0x0, + + /* U+F287 "" */ + 0x0, 0x0, 0x0, 0x5b, 0x10, 0x0, 0x0, 0x0, + 0x3, 0xbd, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xa1, + 0x3, 0x0, 0x0, 0xa, 0xf7, 0x39, 0x0, 0x0, + 0x7, 0x60, 0xff, 0xea, 0xbf, 0xaa, 0xaa, 0xdf, + 0x45, 0xa3, 0x0, 0x93, 0x0, 0x4, 0x10, 0x0, + 0x0, 0x1, 0xb8, 0xfb, 0x0, 0x0, 0x0, 0x0, + 0x2, 0x9f, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x10, 0x0, 0x0, + + /* U+F293 "" */ + 0x0, 0x6b, 0xca, 0x40, 0x0, 0x9f, 0xf6, 0xff, + 0x40, 0x1f, 0xff, 0x26, 0xfb, 0x4, 0xf6, 0xb4, + 0x6b, 0xf0, 0x6f, 0xf4, 0x6, 0xff, 0x6, 0xff, + 0x90, 0xbf, 0xf0, 0x5f, 0x95, 0x34, 0xcf, 0x2, + 0xfb, 0xf3, 0x4d, 0xc0, 0xc, 0xff, 0x3d, 0xf7, + 0x0, 0x1b, 0xfe, 0xf9, 0x0, 0x0, 0x0, 0x10, + 0x0, 0x0, + + /* U+F2ED "" */ + 0x12, 0x3b, 0xca, 0x22, 0x1f, 0xff, 0xff, 0xff, + 0xfb, 0x36, 0x66, 0x66, 0x66, 0x16, 0xff, 0xff, + 0xff, 0xf2, 0x6f, 0x6f, 0x6f, 0x7f, 0x26, 0xf6, + 0xf6, 0xf7, 0xf2, 0x6f, 0x6f, 0x6f, 0x7f, 0x26, + 0xf6, 0xf6, 0xf7, 0xf2, 0x6f, 0x6f, 0x6f, 0x7f, + 0x24, 0xff, 0xff, 0xff, 0xf1, 0x3, 0x44, 0x44, + 0x42, 0x0, + + /* U+F304 "" */ + 0x0, 0x0, 0x0, 0x0, 0x97, 0x0, 0x0, 0x0, + 0x0, 0x9f, 0xf8, 0x0, 0x0, 0x0, 0xa5, 0xef, + 0xe0, 0x0, 0x0, 0xbf, 0xe5, 0xd4, 0x0, 0x0, + 0xbf, 0xff, 0xe0, 0x0, 0x0, 0xbf, 0xff, 0xf4, + 0x0, 0x0, 0xbf, 0xff, 0xf4, 0x0, 0x0, 0xaf, + 0xff, 0xf4, 0x0, 0x0, 0xd, 0xff, 0xf4, 0x0, + 0x0, 0x0, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x2, + 0x20, 0x0, 0x0, 0x0, 0x0, + + /* U+F55A "" */ + 0x0, 0x5, 0x88, 0x88, 0x88, 0x86, 0x0, 0x8, + 0xff, 0xff, 0xff, 0xff, 0xf6, 0x8, 0xff, 0xf9, + 0x6f, 0x69, 0xff, 0x88, 0xff, 0xff, 0xc1, 0x21, + 0xcf, 0xf8, 0xdf, 0xff, 0xff, 0x50, 0x5f, 0xff, + 0x82, 0xef, 0xff, 0x71, 0x91, 0x7f, 0xf8, 0x2, + 0xef, 0xfe, 0xdf, 0xde, 0xff, 0x70, 0x2, 0xdf, + 0xff, 0xff, 0xff, 0xe3, + + /* U+F7C2 "" */ + 0x1, 0xdf, 0xff, 0xe5, 0x1d, 0x6c, 0x5a, 0xab, + 0xdf, 0x3b, 0x18, 0x8b, 0xff, 0xdf, 0xde, 0xeb, + 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, + 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, + 0xff, 0xff, 0xff, 0xfb, 0xbf, 0xff, 0xff, 0xf6, + 0x0, 0x0, 0x0, 0x0, + + /* U+F8A2 "" */ + 0x0, 0x0, 0x0, 0x0, 0xa, 0x0, 0x8, 0x10, + 0x0, 0x7, 0xf0, 0xb, 0xf2, 0x0, 0x0, 0x8f, + 0xb, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x7f, 0xfa, + 0x99, 0x99, 0x99, 0x0, 0x6f, 0x20, 0x0, 0x0, + 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0 +}; + + +/*--------------------- + * 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 = 43, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 0, .adv_w = 43, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 7, .adv_w = 63, .box_w = 4, .box_h = 3, .ofs_x = 0, .ofs_y = 4}, + {.bitmap_index = 13, .adv_w = 112, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 38, .adv_w = 99, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 65, .adv_w = 135, .box_w = 9, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 97, .adv_w = 110, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 125, .adv_w = 34, .box_w = 2, .box_h = 3, .ofs_x = 0, .ofs_y = 4}, + {.bitmap_index = 128, .adv_w = 54, .box_w = 4, .box_h = 9, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 146, .adv_w = 54, .box_w = 3, .box_h = 9, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 160, .adv_w = 64, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 168, .adv_w = 93, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 183, .adv_w = 36, .box_w = 2, .box_h = 3, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 186, .adv_w = 61, .box_w = 4, .box_h = 1, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 188, .adv_w = 36, .box_w = 2, .box_h = 2, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 190, .adv_w = 56, .box_w = 5, .box_h = 9, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 213, .adv_w = 107, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 238, .adv_w = 59, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 249, .adv_w = 92, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 270, .adv_w = 92, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 291, .adv_w = 107, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 316, .adv_w = 92, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 337, .adv_w = 99, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 358, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 379, .adv_w = 103, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 400, .adv_w = 99, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 421, .adv_w = 36, .box_w = 2, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 426, .adv_w = 36, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 433, .adv_w = 93, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 448, .adv_w = 93, .box_w = 6, .box_h = 3, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 457, .adv_w = 93, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 472, .adv_w = 92, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 493, .adv_w = 165, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 538, .adv_w = 117, .box_w = 9, .box_h = 7, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 570, .adv_w = 121, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 595, .adv_w = 116, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 620, .adv_w = 132, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 645, .adv_w = 107, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 666, .adv_w = 102, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 684, .adv_w = 124, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 709, .adv_w = 130, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 734, .adv_w = 50, .box_w = 2, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 741, .adv_w = 82, .box_w = 6, .box_h = 7, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 762, .adv_w = 115, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 787, .adv_w = 95, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 805, .adv_w = 153, .box_w = 8, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 833, .adv_w = 130, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 858, .adv_w = 134, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 886, .adv_w = 116, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 907, .adv_w = 134, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 943, .adv_w = 116, .box_w = 6, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 964, .adv_w = 99, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 985, .adv_w = 94, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1006, .adv_w = 127, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1031, .adv_w = 114, .box_w = 9, .box_h = 7, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 1063, .adv_w = 180, .box_w = 11, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1102, .adv_w = 108, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1127, .adv_w = 104, .box_w = 8, .box_h = 7, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 1155, .adv_w = 105, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1180, .adv_w = 53, .box_w = 3, .box_h = 9, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 1194, .adv_w = 56, .box_w = 5, .box_h = 9, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1217, .adv_w = 53, .box_w = 3, .box_h = 9, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1231, .adv_w = 93, .box_w = 6, .box_h = 4, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 1243, .adv_w = 80, .box_w = 5, .box_h = 1, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1246, .adv_w = 96, .box_w = 3, .box_h = 1, .ofs_x = 1, .ofs_y = 6}, + {.bitmap_index = 1248, .adv_w = 96, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1263, .adv_w = 109, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1288, .adv_w = 91, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1303, .adv_w = 109, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1324, .adv_w = 98, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1339, .adv_w = 56, .box_w = 4, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1353, .adv_w = 110, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1374, .adv_w = 109, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1395, .adv_w = 45, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1406, .adv_w = 45, .box_w = 4, .box_h = 9, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 1424, .adv_w = 99, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1449, .adv_w = 45, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1456, .adv_w = 169, .box_w = 10, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1481, .adv_w = 109, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1496, .adv_w = 102, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1511, .adv_w = 109, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1536, .adv_w = 109, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1557, .adv_w = 66, .box_w = 4, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1567, .adv_w = 80, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1580, .adv_w = 66, .box_w = 4, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1592, .adv_w = 108, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1607, .adv_w = 89, .box_w = 7, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 1625, .adv_w = 144, .box_w = 9, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1648, .adv_w = 88, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1663, .adv_w = 89, .box_w = 7, .box_h = 7, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 1688, .adv_w = 83, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1701, .adv_w = 56, .box_w = 4, .box_h = 9, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1719, .adv_w = 48, .box_w = 1, .box_h = 9, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 1724, .adv_w = 56, .box_w = 3, .box_h = 9, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1738, .adv_w = 93, .box_w = 6, .box_h = 2, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1744, .adv_w = 67, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 1752, .adv_w = 50, .box_w = 3, .box_h = 2, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1755, .adv_w = 160, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1816, .adv_w = 160, .box_w = 10, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1856, .adv_w = 160, .box_w = 10, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1906, .adv_w = 160, .box_w = 10, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1946, .adv_w = 110, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1974, .adv_w = 160, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 2029, .adv_w = 160, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 2084, .adv_w = 180, .box_w = 12, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2144, .adv_w = 160, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 2199, .adv_w = 180, .box_w = 12, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2247, .adv_w = 160, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 2302, .adv_w = 80, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2322, .adv_w = 120, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2354, .adv_w = 180, .box_w = 12, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2414, .adv_w = 160, .box_w = 10, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2454, .adv_w = 140, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 2489, .adv_w = 140, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 2539, .adv_w = 140, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2584, .adv_w = 140, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2629, .adv_w = 140, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 2664, .adv_w = 140, .box_w = 10, .box_h = 10, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 2714, .adv_w = 100, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2744, .adv_w = 100, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2774, .adv_w = 140, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2819, .adv_w = 140, .box_w = 9, .box_h = 3, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 2833, .adv_w = 180, .box_w = 12, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2881, .adv_w = 200, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 2953, .adv_w = 180, .box_w = 13, .box_h = 11, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 3025, .adv_w = 160, .box_w = 10, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3075, .adv_w = 140, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 3102, .adv_w = 140, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 3129, .adv_w = 200, .box_w = 13, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3181, .adv_w = 160, .box_w = 10, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3221, .adv_w = 160, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3276, .adv_w = 160, .box_w = 11, .box_h = 11, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 3337, .adv_w = 140, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3382, .adv_w = 140, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3432, .adv_w = 140, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3477, .adv_w = 100, .box_w = 8, .box_h = 11, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 3521, .adv_w = 140, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3571, .adv_w = 140, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3621, .adv_w = 180, .box_w = 12, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3669, .adv_w = 160, .box_w = 12, .box_h = 11, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 3735, .adv_w = 120, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3779, .adv_w = 200, .box_w = 13, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3844, .adv_w = 200, .box_w = 13, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3890, .adv_w = 200, .box_w = 13, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3936, .adv_w = 200, .box_w = 13, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3982, .adv_w = 200, .box_w = 13, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4028, .adv_w = 200, .box_w = 13, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4074, .adv_w = 200, .box_w = 13, .box_h = 9, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4133, .adv_w = 140, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 4183, .adv_w = 140, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 4233, .adv_w = 160, .box_w = 11, .box_h = 11, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 4294, .adv_w = 200, .box_w = 13, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4346, .adv_w = 120, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 4390, .adv_w = 161, .box_w = 11, .box_h = 7, .ofs_x = 0, .ofs_y = 0} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_1[] = { + 0x0, 0x1f72, 0xef51, 0xef58, 0xef5b, 0xef5c, 0xef5d, 0xef61, + 0xef63, 0xef65, 0xef69, 0xef6c, 0xef71, 0xef76, 0xef77, 0xef78, + 0xef8e, 0xef98, 0xef9b, 0xef9c, 0xef9d, 0xefa1, 0xefa2, 0xefa3, + 0xefa4, 0xefb7, 0xefb8, 0xefbe, 0xefc0, 0xefc1, 0xefc4, 0xefc7, + 0xefc8, 0xefc9, 0xefcb, 0xefe3, 0xefe5, 0xf014, 0xf015, 0xf017, + 0xf037, 0xf03a, 0xf043, 0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, + 0xf191, 0xf192, 0xf193, 0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, + 0xf4aa, 0xf712, 0xf7f2 +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 95, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + }, + { + .range_start = 176, .range_length = 63475, .glyph_id_start = 96, + .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 59, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + } +}; + +/*----------------- + * KERNING + *----------------*/ + + +/*Map glyph_ids to kern left classes*/ +static const uint8_t kern_left_class_mapping[] = +{ + 0, 0, 1, 2, 0, 3, 4, 5, + 2, 6, 7, 8, 9, 10, 9, 10, + 11, 12, 0, 13, 14, 15, 16, 17, + 18, 19, 12, 20, 20, 0, 0, 0, + 21, 22, 23, 24, 25, 22, 26, 27, + 28, 29, 29, 30, 31, 32, 29, 29, + 22, 33, 34, 35, 3, 36, 30, 37, + 37, 38, 39, 40, 41, 42, 43, 0, + 44, 0, 45, 46, 47, 48, 49, 50, + 51, 45, 52, 52, 53, 48, 45, 45, + 46, 46, 54, 55, 56, 57, 51, 58, + 58, 59, 58, 60, 41, 0, 0, 9, + 61, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 +}; + +/*Map glyph_ids to kern right classes*/ +static const uint8_t kern_right_class_mapping[] = +{ + 0, 0, 1, 2, 0, 3, 4, 5, + 2, 6, 7, 8, 9, 10, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 12, + 18, 19, 20, 21, 21, 0, 0, 0, + 22, 23, 24, 25, 23, 25, 25, 25, + 23, 25, 25, 26, 25, 25, 25, 25, + 23, 25, 23, 25, 3, 27, 28, 29, + 29, 30, 31, 32, 33, 34, 35, 0, + 36, 0, 37, 38, 39, 39, 39, 0, + 39, 38, 40, 41, 38, 38, 42, 42, + 39, 42, 39, 42, 43, 44, 45, 46, + 46, 47, 46, 48, 0, 0, 35, 9, + 49, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 +}; + +/*Kern values between classes*/ +static const int8_t kern_class_values[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 4, -4, 0, 0, + 0, 0, -9, -10, 1, 8, 4, 3, + -6, 1, 8, 0, 7, 2, 5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 10, 1, -1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 0, -5, 0, 0, 0, 0, + 0, -3, 3, 3, 0, 0, -2, 0, + -1, 2, 0, -2, 0, -2, -1, -3, + 0, 0, 0, 0, -2, 0, 0, -2, + -2, 0, 0, -2, 0, -3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -2, + -2, 0, -2, 0, -4, 0, -19, 0, + 0, -3, 0, 3, 5, 0, 0, -3, + 2, 2, 5, 3, -3, 3, 0, 0, + -9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -4, -2, -8, 0, -6, + -1, 0, 0, 0, 0, 0, 6, 0, + -5, -1, 0, 0, 0, -3, 0, 0, + -1, -12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -13, -1, 6, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5, + 0, 2, 0, 0, -3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, + 3, 2, 5, -2, 0, 0, 3, -2, + -5, -22, 1, 4, 3, 0, -2, 0, + 6, 0, 5, 0, 5, 0, -15, 0, + -2, 5, 0, 5, -2, 3, 2, 0, + 0, 0, -2, 0, 0, -3, 13, 0, + 13, 0, 5, 0, 7, 2, 3, 5, + 0, 0, 0, -6, 0, 0, 0, 0, + 0, -1, 0, 1, -3, -2, -3, 1, + 0, -2, 0, 0, 0, -6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -10, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -9, 0, -10, 0, 0, 0, + 0, -1, 0, 16, -2, -2, 2, 2, + -1, 0, -2, 2, 0, 0, -8, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -16, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -10, 0, 10, 0, 0, -6, 0, + 5, 0, -11, -16, -11, -3, 5, 0, + 0, -11, 0, 2, -4, 0, -2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4, 5, -20, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 1, 0, 0, 0, + 0, 0, 1, 1, -2, -3, 0, 0, + 0, -2, 0, 0, -1, 0, 0, 0, + -3, 0, -1, 0, -4, -3, 0, -4, + -5, -5, -3, 0, -3, 0, -3, 0, + 0, 0, 0, -1, 0, 0, 2, 0, + 1, -2, 0, 0, 0, 0, 0, 2, + -1, 0, 0, 0, -1, 2, 2, 0, + 0, 0, 0, -3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, -1, 0, + -2, 0, -3, 0, 0, -1, 0, 5, + 0, 0, -2, 0, 0, 0, 0, 0, + 0, 0, -1, -1, 0, 0, -2, 0, + -2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -1, -1, 0, -2, -2, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + 0, -2, -2, -2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -1, 0, 0, + 0, 0, -1, -2, 0, -2, 0, -5, + -1, -5, 3, 0, 0, -3, 2, 3, + 4, 0, -4, 0, -2, 0, 0, -8, + 2, -1, 1, -8, 2, 0, 0, 0, + -8, 0, -8, -1, -14, -1, 0, -8, + 0, 3, 4, 0, 2, 0, 0, 0, + 0, 0, 0, -3, -2, 0, -5, 0, + 0, 0, -2, 0, 0, 0, -2, 0, + 0, 0, 0, 0, -1, -1, 0, -1, + -2, 0, 0, 0, 0, 0, 0, 0, + -2, -2, 0, -1, -2, -1, 0, 0, + -2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, -1, 0, -2, + 0, -1, 0, -3, 2, 0, 0, -2, + 1, 2, 2, 0, 0, 0, 0, 0, + 0, -1, 0, 0, 0, 0, 0, 1, + 0, 0, -2, 0, -2, -1, -2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, + -1, 0, 0, 0, 0, -2, -2, 0, + -3, 0, 5, -1, 0, -5, 0, 0, + 4, -8, -8, -7, -3, 2, 0, -1, + -10, -3, 0, -3, 0, -3, 2, -3, + -10, 0, -4, 0, 0, 1, 0, 1, + -1, 0, 2, 0, -5, -6, 0, -8, + -4, -3, -4, -5, -2, -4, 0, -3, + -4, 1, 0, 0, 0, -2, 0, 0, + 0, 1, 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -2, + 0, -1, 0, 0, -2, 0, -3, -4, + -4, 0, 0, -5, 0, 0, 0, 0, + 0, 0, -1, 0, 0, 0, 0, 1, + -1, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 8, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + -2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -3, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + -3, 0, 0, 0, 0, -8, -5, 0, + 0, 0, -2, -8, 0, 0, -2, 2, + 0, -4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -3, 0, 0, -3, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, -3, 0, + 0, 0, 0, 2, 0, 1, -3, -3, + 0, -2, -2, -2, 0, 0, 0, 0, + 0, 0, -5, 0, -2, 0, -2, -2, + 0, -4, -4, -5, -1, 0, -3, 0, + -5, 0, 0, 0, 0, 13, 0, 0, + 1, 0, 0, -2, 0, 2, 0, -7, + 0, 0, 0, 0, 0, -15, -3, 5, + 5, -1, -7, 0, 2, -2, 0, -8, + -1, -2, 2, -11, -2, 2, 0, 2, + -6, -2, -6, -5, -7, 0, 0, -10, + 0, 9, 0, 0, -1, 0, 0, 0, + -1, -1, -2, -4, -5, 0, -15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -2, 0, -1, -2, -2, 0, 0, + -3, 0, -2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -3, 0, 0, 3, + 0, 2, 0, -4, 2, -1, 0, -4, + -2, 0, -2, -2, -1, 0, -2, -3, + 0, 0, -1, 0, -1, -3, -2, 0, + 0, -2, 0, 2, -1, 0, -4, 0, + 0, 0, -3, 0, -3, 0, -3, -3, + 2, 0, 0, 0, 0, 0, 0, 0, + 0, -3, 2, 0, -2, 0, -1, -2, + -5, -1, -1, -1, 0, -1, -2, 0, + 0, 0, 0, 0, 0, -2, -1, -1, + 0, 0, 0, 0, 2, -1, 0, -1, + 0, 0, 0, -1, -2, -1, -1, -2, + -1, 0, 1, 6, 0, 0, -4, 0, + -1, 3, 0, -2, -7, -2, 2, 0, + 0, -8, -3, 2, -3, 1, 0, -1, + -1, -5, 0, -2, 1, 0, 0, -3, + 0, 0, 0, 2, 2, -3, -3, 0, + -3, -2, -2, -2, -2, 0, -3, 1, + -3, -3, 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, -2, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, -2, + 0, 0, -2, -2, 0, 0, 0, 0, + -2, 0, 0, 0, 0, -1, 0, 0, + 0, 0, 0, -1, 0, 0, 0, 0, + -2, 0, -3, 0, 0, 0, -5, 0, + 1, -4, 3, 0, -1, -8, 0, 0, + -4, -2, 0, -6, -4, -4, 0, 0, + -7, -2, -6, -6, -8, 0, -4, 0, + 1, 11, -2, 0, -4, -2, 0, -2, + -3, -4, -3, -6, -7, -4, -2, 0, + 0, -1, 0, 0, 0, 0, -11, -1, + 5, 4, -4, -6, 0, 0, -5, 0, + -8, -1, -2, 3, -15, -2, 0, 0, + 0, -10, -2, -8, -2, -12, 0, 0, + -11, 0, 9, 0, 0, -1, 0, 0, + 0, 0, -1, -1, -6, -1, 0, -10, + 0, 0, 0, 0, -5, 0, -1, 0, + 0, -4, -8, 0, 0, -1, -2, -5, + -2, 0, -1, 0, 0, 0, 0, -7, + -2, -5, -5, -1, -3, -4, -2, -3, + 0, -3, -1, -5, -2, 0, -2, -3, + -2, -3, 0, 1, 0, -1, -5, 0, + 3, 0, -3, 0, 0, 0, 0, 2, + 0, 1, -3, 7, 0, -2, -2, -2, + 0, 0, 0, 0, 0, 0, -5, 0, + -2, 0, -2, -2, 0, -4, -4, -5, + -1, 0, -3, 1, 6, 0, 0, 0, + 0, 13, 0, 0, 1, 0, 0, -2, + 0, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, -3, 0, 0, 0, 0, 0, -1, + 0, 0, 0, -2, -2, 0, 0, -3, + -2, 0, 0, -3, 0, 3, -1, 0, + 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 2, 3, 1, -1, 0, -5, + -3, 0, 5, -5, -5, -3, -3, 6, + 3, 2, -14, -1, 3, -2, 0, -2, + 2, -2, -6, 0, -2, 2, -2, -1, + -5, -1, 0, 0, 5, 3, 0, -4, + 0, -9, -2, 5, -2, -6, 0, -2, + -5, -5, -2, 6, 2, 0, -2, 0, + -4, 0, 1, 5, -4, -6, -6, -4, + 5, 0, 0, -12, -1, 2, -3, -1, + -4, 0, -4, -6, -2, -2, -1, 0, + 0, -4, -3, -2, 0, 5, 4, -2, + -9, 0, -9, -2, 0, -6, -9, 0, + -5, -3, -5, -4, 4, 0, 0, -2, + 0, -3, -1, 0, -2, -3, 0, 3, + -5, 2, 0, 0, -8, 0, -2, -4, + -3, -1, -5, -4, -5, -4, 0, -5, + -2, -4, -3, -5, -2, 0, 0, 0, + 8, -3, 0, -5, -2, 0, -2, -3, + -4, -4, -4, -6, -2, -3, 3, 0, + -2, 0, -8, -2, 1, 3, -5, -6, + -3, -5, 5, -2, 1, -15, -3, 3, + -4, -3, -6, 0, -5, -7, -2, -2, + -1, -2, -3, -5, 0, 0, 0, 5, + 4, -1, -10, 0, -10, -4, 4, -6, + -11, -3, -6, -7, -8, -5, 3, 0, + 0, 0, 0, -2, 0, 0, 2, -2, + 3, 1, -3, 3, 0, 0, -5, 0, + 0, 0, 0, 0, 0, -1, 0, 0, + 0, 0, 0, 0, -2, 0, 0, 0, + 0, 1, 5, 0, 0, -2, 0, 0, + 0, 0, -1, -1, -2, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 1, 0, + -1, 0, 6, 0, 3, 0, 0, -2, + 0, 3, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 0, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -10, 0, -2, 3, 0, 5, + 0, 0, 16, 2, -3, -3, 2, 2, + -1, 0, -8, 0, 0, 8, -10, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -11, 6, 22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -10, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -3, 0, 0, -3, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, -4, 0, + 0, 0, 0, 0, 2, 21, -3, -1, + 5, 4, -4, 2, 0, 0, 2, 2, + -2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -21, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -4, + 0, 0, 0, -4, 0, 0, 0, 0, + -4, -1, 0, 0, 0, -4, 0, -2, + 0, -8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -11, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -2, 0, 0, -3, 0, -2, 0, + -4, 0, 0, 0, -3, 2, -2, 0, + 0, -4, -2, -4, 0, 0, -4, 0, + -2, 0, -8, 0, -2, 0, 0, -13, + -3, -6, -2, -6, 0, 0, -11, 0, + -4, -1, 0, 0, 0, 0, 0, 0, + 0, 0, -2, -3, -1, -3, 0, 0, + 0, 0, -4, 0, -4, 2, -2, 3, + 0, -1, -4, -1, -3, -3, 0, -2, + -1, -1, 1, -4, 0, 0, 0, 0, + -14, -1, -2, 0, -4, 0, -1, -8, + -1, 0, 0, -1, -1, 0, 0, 0, + 0, 1, 0, -1, -3, -1, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, + 0, -4, 0, -1, 0, 0, 0, -3, + 2, 0, 0, 0, -4, -2, -3, 0, + 0, -4, 0, -2, 0, -8, 0, 0, + 0, 0, -16, 0, -3, -6, -8, 0, + 0, -11, 0, -1, -2, 0, 0, 0, + 0, 0, 0, 0, 0, -2, -2, -1, + -2, 0, 0, 0, 3, -2, 0, 5, + 8, -2, -2, -5, 2, 8, 3, 4, + -4, 2, 7, 2, 5, 4, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 10, 8, -3, -2, 0, -1, + 13, 7, 13, 0, 0, 0, 2, 0, + 0, 6, 0, 0, -3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 2, + 0, 0, 0, 0, -13, -2, -1, -7, + -8, 0, 0, -11, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, -13, -2, -1, + -7, -8, 0, 0, -6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, 0, 0, 0, -4, 2, 0, -2, + 1, 3, 2, -5, 0, 0, -1, 2, + 0, 1, 0, 0, 0, 0, -4, 0, + -1, -1, -3, 0, -1, -6, 0, 10, + -2, 0, -4, -1, 0, -1, -3, 0, + -2, -4, -3, -2, 0, 0, 0, -3, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, -13, + -2, -1, -7, -8, 0, 0, -11, 0, + 0, 0, 0, 0, 0, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -3, 0, -5, -2, -1, 5, -1, -2, + -6, 0, -1, 0, -1, -4, 0, 4, + 0, 1, 0, 1, -4, -6, -2, 0, + -6, -3, -4, -7, -6, 0, -3, -3, + -2, -2, -1, -1, -2, -1, 0, -1, + 0, 2, 0, 2, -1, 0, 5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, -2, -2, 0, 0, + -4, 0, -1, 0, -3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, -2, 0, -2, + 0, 0, 0, 0, -1, 0, 0, -3, + -2, 2, 0, -3, -3, -1, 0, -5, + -1, -4, -1, -2, 0, -3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -11, 0, 5, 0, 0, -3, 0, + 0, 0, 0, -2, 0, -2, 0, 0, + -1, 0, 0, -1, 0, -4, 0, 0, + 7, -2, -5, -5, 1, 2, 2, 0, + -4, 1, 2, 1, 5, 1, 5, -1, + -4, 0, 0, -6, 0, 0, -5, -4, + 0, 0, -3, 0, -2, -3, 0, -2, + 0, -2, 0, -1, 2, 0, -1, -5, + -2, 6, 0, 0, -1, 0, -3, 0, + 0, 2, -4, 0, 2, -2, 1, 0, + 0, -5, 0, -1, 0, 0, -2, 2, + -1, 0, 0, 0, -7, -2, -4, 0, + -5, 0, 0, -8, 0, 6, -2, 0, + -3, 0, 1, 0, -2, 0, -2, -5, + 0, -2, 2, 0, 0, 0, 0, -1, + 0, 0, 2, -2, 0, 0, 0, -2, + -1, 0, -2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -10, 0, 4, 0, + 0, -1, 0, 0, 0, 0, 0, 0, + -2, -2, 0, 0, 0, 3, 0, 4, + 0, 0, 0, 0, 0, -10, -9, 0, + 7, 5, 3, -6, 1, 7, 0, 6, + 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 +}; + + +/*Collect the kern class' data in one place*/ +static const lv_font_fmt_txt_kern_classes_t kern_classes = +{ + .class_pair_values = kern_class_values, + .left_class_mapping = kern_left_class_mapping, + .right_class_mapping = kern_right_class_mapping, + .left_class_cnt = 61, + .right_class_cnt = 49, +}; + +/*-------------------- + * 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 = &kern_classes, + .kern_scale = 16, + .cmap_num = 2, + .bpp = 4, + .kern_classes = 1, + .bitmap_format = 0 +}; + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +lv_font_t lv_font_montserrat_10 = { + .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 = 11, /*The maximum line height required by the font*/ + .base_line = 2, /*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 = -1, + .underline_thickness = 1, +#endif + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + + + +#endif /*#if LV_FONT_MONTSERRAT_10*/ + diff --git a/src/lv_font/lv_font_montserrat_8.c b/src/lv_font/lv_font_montserrat_8.c new file mode 100644 index 000000000..635ae50a3 --- /dev/null +++ b/src/lv_font/lv_font_montserrat_8.c @@ -0,0 +1,1419 @@ +#include "../../lvgl.h" + +/******************************************************************************* + * Size: 8 px + * Bpp: 4 + * Opts: --no-compress --no-prefilter --bpp 4 --size 8 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_8.c --force-fast-kern-format + ******************************************************************************/ + +#ifndef LV_FONT_MONTSERRAT_8 +#define LV_FONT_MONTSERRAT_8 1 +#endif + +#if LV_FONT_MONTSERRAT_8 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { + /* U+20 " " */ + + /* U+21 "!" */ + 0x58, 0x57, 0x46, 0x23, 0x46, + + /* U+22 "\"" */ + 0x73, 0x97, 0x29, 0x0, 0x0, + + /* U+23 "#" */ + 0x4, 0x52, 0x60, 0x4b, 0x9b, 0xa3, 0x8, 0x7, + 0x20, 0x6c, 0x8c, 0x81, 0x9, 0x9, 0x0, + + /* U+24 "$" */ + 0x0, 0x80, 0x2, 0xbd, 0xa2, 0x76, 0x80, 0x0, + 0x8d, 0x81, 0x0, 0x84, 0x95, 0xad, 0xb3, 0x0, + 0x80, 0x0, + + /* U+25 "%" */ + 0x58, 0x70, 0x63, 0x8, 0x8, 0x36, 0x0, 0x27, + 0x58, 0x67, 0x10, 0x8, 0x27, 0x26, 0x6, 0x20, + 0x88, 0x20, + + /* U+26 "&" */ + 0x9, 0x99, 0x0, 0xb, 0x3a, 0x0, 0x19, 0xc2, + 0x20, 0x83, 0x1a, 0xa0, 0x3a, 0x99, 0x92, 0x0, + 0x0, 0x0, + + /* U+27 "'" */ + 0x72, 0x72, 0x0, + + /* U+28 "(" */ + 0x8, 0x20, 0xb0, 0x1a, 0x3, 0x80, 0x1a, 0x0, + 0xb0, 0x8, 0x20, + + /* U+29 ")" */ + 0x73, 0x19, 0xb, 0xc, 0xb, 0x19, 0x73, + + /* U+2A "*" */ + 0x48, 0x40, 0x6e, 0x80, 0x15, 0x10, + + /* U+2B "+" */ + 0x0, 0x20, 0x0, 0xa, 0x0, 0x49, 0xd9, 0x10, + 0xa, 0x0, + + /* U+2C "," */ + 0x0, 0x75, 0x71, + + /* U+2D "-" */ + 0x5a, 0x60, + + /* U+2E "." */ + 0x0, 0x74, + + /* U+2F "/" */ + 0x0, 0xa, 0x0, 0x2, 0x80, 0x0, 0x82, 0x0, + 0xa, 0x0, 0x4, 0x60, 0x0, 0x91, 0x0, 0x19, + 0x0, 0x0, + + /* U+30 "0" */ + 0xa, 0xbb, 0x26, 0x60, 0x1b, 0x93, 0x0, 0xc6, + 0x60, 0x1b, 0xa, 0xbb, 0x20, + + /* U+31 "1" */ + 0x9e, 0x20, 0xa2, 0xa, 0x20, 0xa2, 0xa, 0x20, + + /* U+32 "2" */ + 0x6a, 0xb9, 0x0, 0x0, 0xc0, 0x0, 0x58, 0x0, + 0x87, 0x0, 0x9e, 0xaa, 0x30, + + /* U+33 "3" */ + 0x7a, 0xbe, 0x0, 0xa, 0x20, 0x4, 0xa9, 0x0, + 0x0, 0xa2, 0x8a, 0xa9, 0x0, + + /* U+34 "4" */ + 0x0, 0x49, 0x0, 0x3, 0xa0, 0x0, 0x1b, 0x8, + 0x20, 0x8b, 0xad, 0xb2, 0x0, 0x9, 0x30, + + /* U+35 "5" */ + 0x3d, 0xaa, 0x5, 0x60, 0x0, 0x5b, 0xa8, 0x0, + 0x0, 0x93, 0x7a, 0xaa, 0x0, + + /* U+36 "6" */ + 0x9, 0xaa, 0x36, 0x70, 0x0, 0x98, 0x9a, 0x26, + 0x80, 0x2a, 0x9, 0x9a, 0x40, + + /* U+37 "7" */ + 0xca, 0xad, 0x67, 0x0, 0xc0, 0x0, 0x67, 0x0, + 0xc, 0x0, 0x6, 0x70, 0x0, + + /* U+38 "8" */ + 0x1a, 0xab, 0x25, 0x60, 0x48, 0x1d, 0xad, 0x38, + 0x40, 0x1b, 0x3a, 0x9a, 0x40, + + /* U+39 "9" */ + 0x4a, 0x99, 0xb, 0x10, 0x95, 0x3a, 0x99, 0x80, + 0x0, 0x95, 0x3a, 0xb8, 0x0, + + /* U+3A ":" */ + 0x74, 0x0, 0x0, 0x74, + + /* U+3B ";" */ + 0x74, 0x0, 0x0, 0x75, 0x62, 0x0, + + /* U+3C "<" */ + 0x0, 0x1, 0x0, 0x49, 0x80, 0x5c, 0x30, 0x0, + 0x16, 0x91, 0x0, 0x0, 0x0, + + /* U+3D "=" */ + 0x49, 0x99, 0x10, 0x0, 0x0, 0x49, 0x99, 0x10, + + /* U+3E ">" */ + 0x10, 0x0, 0x3, 0x98, 0x20, 0x0, 0x6d, 0x14, + 0x94, 0x0, 0x0, 0x0, 0x0, + + /* U+3F "?" */ + 0x6a, 0xb9, 0x0, 0x0, 0xc0, 0x0, 0xa4, 0x0, + 0x3, 0x0, 0x2, 0x80, 0x0, + + /* U+40 "@" */ + 0x3, 0x87, 0x78, 0x50, 0x28, 0x4a, 0x9c, 0x75, + 0x80, 0xb0, 0xa, 0x28, 0x80, 0xb0, 0xa, 0x28, + 0x28, 0x49, 0x99, 0xa6, 0x3, 0x88, 0x75, 0x0, + + /* U+41 "A" */ + 0x0, 0xb, 0x90, 0x0, 0x3, 0x8a, 0x10, 0x0, + 0xb1, 0x39, 0x0, 0x4d, 0x99, 0xd1, 0xb, 0x10, + 0x3, 0x90, + + /* U+42 "B" */ + 0x2d, 0x99, 0xb1, 0x2a, 0x0, 0x84, 0x2d, 0x9a, + 0xd1, 0x2a, 0x0, 0x39, 0x2d, 0x99, 0xb4, + + /* U+43 "C" */ + 0x7, 0xba, 0xa2, 0x59, 0x0, 0x0, 0x93, 0x0, + 0x0, 0x59, 0x0, 0x0, 0x7, 0xba, 0xa2, + + /* U+44 "D" */ + 0x2e, 0xab, 0xb3, 0x2, 0xa0, 0x1, 0xc0, 0x2a, + 0x0, 0x9, 0x22, 0xa0, 0x1, 0xc0, 0x2e, 0xab, + 0xb3, 0x0, + + /* U+45 "E" */ + 0x2e, 0xaa, 0x82, 0xa0, 0x0, 0x2d, 0xaa, 0x42, + 0xa0, 0x0, 0x2e, 0xaa, 0x90, + + /* U+46 "F" */ + 0x2e, 0xaa, 0x82, 0xa0, 0x0, 0x2e, 0xaa, 0x42, + 0xa0, 0x0, 0x2a, 0x0, 0x0, + + /* U+47 "G" */ + 0x7, 0xba, 0xa2, 0x59, 0x0, 0x0, 0x93, 0x0, + 0x23, 0x59, 0x0, 0x47, 0x7, 0xba, 0xa3, + + /* U+48 "H" */ + 0x2a, 0x0, 0x2a, 0x2a, 0x0, 0x2a, 0x2e, 0xaa, + 0xba, 0x2a, 0x0, 0x2a, 0x2a, 0x0, 0x2a, + + /* U+49 "I" */ + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + + /* U+4A "J" */ + 0x5, 0xad, 0x50, 0x0, 0x75, 0x0, 0x7, 0x50, + 0x0, 0x84, 0x9, 0xab, 0x0, + + /* U+4B "K" */ + 0x2a, 0x1, 0xa2, 0x2a, 0x1b, 0x20, 0x2c, 0xc7, + 0x0, 0x2d, 0x19, 0x50, 0x2a, 0x0, 0xa4, + + /* U+4C "L" */ + 0x2a, 0x0, 0x2, 0xa0, 0x0, 0x2a, 0x0, 0x2, + 0xa0, 0x0, 0x2e, 0xaa, 0x70, + + /* U+4D "M" */ + 0x2c, 0x0, 0x3, 0xc2, 0xd7, 0x0, 0xbc, 0x29, + 0x92, 0x84, 0xc2, 0x91, 0xb9, 0xc, 0x29, 0x3, + 0x0, 0xc0, + + /* U+4E "N" */ + 0x2d, 0x10, 0x2a, 0x2c, 0xb0, 0x2a, 0x2a, 0x4b, + 0x2a, 0x2a, 0x5, 0xca, 0x2a, 0x0, 0x7a, + + /* U+4F "O" */ + 0x7, 0xbb, 0xb3, 0x5, 0x90, 0x1, 0xc1, 0x93, + 0x0, 0x8, 0x45, 0x90, 0x1, 0xc1, 0x7, 0xbb, + 0xb3, 0x0, + + /* U+50 "P" */ + 0x2e, 0xaa, 0x90, 0x2a, 0x0, 0x84, 0x2a, 0x0, + 0xa3, 0x2e, 0xaa, 0x60, 0x2a, 0x0, 0x0, + + /* U+51 "Q" */ + 0x7, 0xbb, 0xb3, 0x5, 0x90, 0x1, 0xc1, 0x93, + 0x0, 0x8, 0x45, 0x90, 0x0, 0xc1, 0x7, 0xbb, + 0xb3, 0x0, 0x0, 0x39, 0x93, + + /* U+52 "R" */ + 0x2e, 0xaa, 0x90, 0x2a, 0x0, 0x84, 0x2a, 0x0, + 0xa3, 0x2d, 0xac, 0x80, 0x2a, 0x1, 0xa1, + + /* U+53 "S" */ + 0x2a, 0xaa, 0x27, 0x60, 0x0, 0x8, 0x98, 0x10, + 0x0, 0x49, 0x5a, 0xaa, 0x30, + + /* U+54 "T" */ + 0xaa, 0xea, 0x60, 0xc, 0x0, 0x0, 0xc0, 0x0, + 0xc, 0x0, 0x0, 0xc0, 0x0, + + /* U+55 "U" */ + 0x39, 0x0, 0x48, 0x39, 0x0, 0x48, 0x39, 0x0, + 0x48, 0x1c, 0x0, 0x66, 0x6, 0xba, 0xa0, + + /* U+56 "V" */ + 0xb, 0x10, 0x5, 0x70, 0x49, 0x0, 0xb0, 0x0, + 0xc1, 0x57, 0x0, 0x4, 0x9c, 0x0, 0x0, 0xc, + 0x70, 0x0, + + /* U+57 "W" */ + 0x94, 0x0, 0xf1, 0x3, 0x93, 0xa0, 0x69, 0x70, + 0x93, 0xc, 0xb, 0xb, 0xb, 0x0, 0x79, 0x80, + 0x89, 0x70, 0x1, 0xf2, 0x2, 0xf1, 0x0, + + /* U+58 "X" */ + 0x58, 0x2, 0xa0, 0x8, 0x7b, 0x10, 0x0, 0xf5, + 0x0, 0xa, 0x4b, 0x10, 0x76, 0x2, 0xb0, + + /* U+59 "Y" */ + 0xa, 0x20, 0xb, 0x0, 0x1b, 0x9, 0x30, 0x0, + 0x5b, 0x80, 0x0, 0x0, 0xd0, 0x0, 0x0, 0xc, + 0x0, 0x0, + + /* U+5A "Z" */ + 0x6a, 0xac, 0xd0, 0x0, 0x1b, 0x10, 0x0, 0xb2, + 0x0, 0xb, 0x30, 0x0, 0x8d, 0xaa, 0xa0, + + /* U+5B "[" */ + 0x2d, 0x42, 0x90, 0x29, 0x2, 0x90, 0x29, 0x2, + 0x90, 0x2d, 0x40, + + /* U+5C "\\" */ + 0x19, 0x0, 0x0, 0xa0, 0x0, 0x5, 0x50, 0x0, + 0xa, 0x0, 0x0, 0x91, 0x0, 0x3, 0x70, 0x0, + 0xa, 0x0, + + /* U+5D "]" */ + 0x8c, 0xc, 0xc, 0xc, 0xc, 0xc, 0x8c, + + /* U+5E "^" */ + 0x3, 0xc0, 0x0, 0x94, 0x50, 0x27, 0x9, 0x0, + + /* U+5F "_" */ + 0x77, 0x77, + + /* U+60 "`" */ + 0x6, 0x60, + + /* U+61 "a" */ + 0x29, 0x98, 0x2, 0x98, 0xd0, 0x84, 0xc, 0x13, + 0xb9, 0xd1, + + /* U+62 "b" */ + 0x48, 0x0, 0x0, 0x48, 0x0, 0x0, 0x4c, 0xab, + 0x50, 0x4a, 0x0, 0xc0, 0x4a, 0x0, 0xc0, 0x4c, + 0xaa, 0x50, + + /* U+63 "c" */ + 0x1a, 0xaa, 0x18, 0x40, 0x0, 0x84, 0x0, 0x1, + 0xaa, 0xa1, + + /* U+64 "d" */ + 0x0, 0x0, 0xb0, 0x0, 0xb, 0x1a, 0xaa, 0xb9, + 0x40, 0x3b, 0x94, 0x2, 0xb1, 0xa9, 0x9b, + + /* U+65 "e" */ + 0x19, 0x99, 0x19, 0x98, 0x86, 0x85, 0x1, 0x1, + 0xaa, 0xb1, + + /* U+66 "f" */ + 0xa, 0xa0, 0x2a, 0x0, 0x9d, 0x70, 0x29, 0x0, + 0x29, 0x0, 0x29, 0x0, + + /* U+67 "g" */ + 0x1a, 0x99, 0xb9, 0x40, 0x1c, 0x94, 0x2, 0xc1, + 0xaa, 0xab, 0x18, 0x9a, 0x30, + + /* U+68 "h" */ + 0x48, 0x0, 0x4, 0x80, 0x0, 0x4c, 0x9b, 0x44, + 0x90, 0x1b, 0x48, 0x0, 0xc4, 0x80, 0xc, + + /* U+69 "i" */ + 0x37, 0x0, 0x48, 0x48, 0x48, 0x48, + + /* U+6A "j" */ + 0x3, 0x70, 0x0, 0x3, 0x80, 0x38, 0x3, 0x80, + 0x38, 0x6b, 0x40, + + /* U+6B "k" */ + 0x48, 0x0, 0x4, 0x80, 0x0, 0x48, 0xa, 0x44, + 0x9c, 0x30, 0x4d, 0x6a, 0x4, 0x80, 0x77, + + /* U+6C "l" */ + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + + /* U+6D "m" */ + 0x4c, 0x9b, 0x89, 0xb4, 0x49, 0x3, 0xb0, 0xb, + 0x48, 0x2, 0xa0, 0xc, 0x48, 0x2, 0xa0, 0xc, + + /* U+6E "n" */ + 0x4c, 0x9b, 0x44, 0x90, 0x1b, 0x48, 0x0, 0xc4, + 0x80, 0xc, + + /* U+6F "o" */ + 0x1a, 0xaa, 0x18, 0x40, 0x3a, 0x84, 0x3, 0xa1, + 0xaa, 0xa1, + + /* U+70 "p" */ + 0x4c, 0xab, 0x50, 0x4a, 0x0, 0xc0, 0x4a, 0x0, + 0xc0, 0x4c, 0xaa, 0x50, 0x48, 0x0, 0x0, + + /* U+71 "q" */ + 0x1a, 0xa9, 0xb9, 0x40, 0x3b, 0x94, 0x3, 0xb1, + 0xaa, 0x9b, 0x0, 0x0, 0xb0, + + /* U+72 "r" */ + 0x4b, 0xa0, 0x4a, 0x0, 0x48, 0x0, 0x48, 0x0, + + /* U+73 "s" */ + 0x5b, 0x95, 0x87, 0x30, 0x3, 0x79, 0x7a, 0xa6, + + /* U+74 "t" */ + 0x29, 0x0, 0x9d, 0x70, 0x29, 0x0, 0x29, 0x0, + 0xb, 0x90, + + /* U+75 "u" */ + 0x57, 0x1, 0xb5, 0x70, 0x1b, 0x48, 0x3, 0xb0, + 0xa9, 0x9b, + + /* U+76 "v" */ + 0xb, 0x0, 0x84, 0x5, 0x70, 0xb0, 0x0, 0xb7, + 0x50, 0x0, 0x6d, 0x0, + + /* U+77 "w" */ + 0xb0, 0xe, 0x20, 0xa0, 0x55, 0x59, 0x82, 0x80, + 0xa, 0xa0, 0xa8, 0x20, 0x9, 0x80, 0x6b, 0x0, + + /* U+78 "x" */ + 0x67, 0x1b, 0x0, 0x9b, 0x10, 0xa, 0xb2, 0x7, + 0x51, 0xb0, + + /* U+79 "y" */ + 0xb, 0x10, 0x83, 0x3, 0x81, 0xa0, 0x0, 0xaa, + 0x30, 0x0, 0x4a, 0x0, 0xa, 0xb2, 0x0, + + /* U+7A "z" */ + 0x59, 0xbb, 0x1, 0xb1, 0xb, 0x20, 0x9c, 0x98, + + /* U+7B "{" */ + 0xa, 0x60, 0xc0, 0xc, 0x5, 0xb0, 0xc, 0x0, + 0xc0, 0xa, 0x60, + + /* U+7C "|" */ + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + + /* U+7D "}" */ + 0x97, 0x0, 0xb0, 0xb, 0x0, 0xd3, 0xb, 0x0, + 0xb0, 0x97, 0x0, + + /* U+7E "~" */ + 0x29, 0x35, 0x15, 0x6, 0x80, + + /* U+B0 "°" */ + 0x26, 0x47, 0x7, 0x27, 0x50, + + /* U+2022 "•" */ + 0x0, 0x5d, 0x2, + + /* U+F001 "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xbe, + 0x0, 0x8d, 0xff, 0xff, 0x0, 0xff, 0xe9, 0x5f, + 0x0, 0xf3, 0x0, 0xf, 0x0, 0xf0, 0x0, 0xf, + 0x0, 0xf0, 0xa, 0xff, 0xaf, 0xf0, 0xa, 0xfa, + 0xaf, 0xa0, 0x0, 0x0, + + /* U+F008 "" */ + 0xbd, 0xcc, 0xce, 0xab, 0x8b, 0x0, 0x7, 0x58, + 0xcd, 0x66, 0x6a, 0xac, 0xcd, 0x66, 0x6a, 0xac, + 0x8b, 0x0, 0x7, 0x58, 0xbd, 0xcc, 0xce, 0xab, + + /* U+F00B "" */ + 0x34, 0x14, 0x44, 0x43, 0xff, 0x7f, 0xff, 0xff, + 0xab, 0x4b, 0xbb, 0xba, 0xbc, 0x5c, 0xcc, 0xcb, + 0xff, 0x7f, 0xff, 0xff, 0x67, 0x17, 0x88, 0x86, + 0xff, 0x7f, 0xff, 0xff, 0xab, 0x4b, 0xbb, 0xba, + + /* U+F00C "" */ + 0x0, 0x0, 0x0, 0x9a, 0x0, 0x0, 0x9, 0xfa, + 0xa9, 0x0, 0x9f, 0xa0, 0xaf, 0x99, 0xfa, 0x0, + 0xa, 0xff, 0xa0, 0x0, 0x0, 0x99, 0x0, 0x0, + + /* U+F00D "" */ + 0x63, 0x0, 0x82, 0xcf, 0x4a, 0xf4, 0x1d, 0xff, + 0x60, 0xa, 0xff, 0x30, 0xaf, 0x7d, 0xf3, 0xa6, + 0x1, 0xb3, + + /* U+F011 "" */ + 0x0, 0xc, 0x51, 0x0, 0x1d, 0x7d, 0x6e, 0x70, + 0x8d, 0xd, 0x65, 0xf1, 0xc7, 0xd, 0x60, 0xe6, + 0xd7, 0x6, 0x20, 0xe6, 0x9d, 0x0, 0x4, 0xf2, + 0x1e, 0xc7, 0x8f, 0x80, 0x1, 0x9d, 0xc6, 0x0, + + /* U+F013 "" */ + 0x0, 0xc, 0xc0, 0x0, 0x18, 0x8f, 0xf8, 0x81, + 0x8f, 0xfe, 0xef, 0xf8, 0x2f, 0xe0, 0xe, 0xf2, + 0x2f, 0xe0, 0xe, 0xf2, 0x8f, 0xfe, 0xef, 0xf8, + 0x18, 0x8f, 0xf8, 0x81, 0x0, 0xc, 0xc0, 0x0, + + /* U+F015 "" */ + 0x0, 0x0, 0x30, 0x22, 0x0, 0x0, 0xaf, 0xaa, + 0xa0, 0x1, 0xda, 0x6a, 0xfa, 0x3, 0xe8, 0xbf, + 0xb8, 0xe3, 0xb6, 0xdf, 0xff, 0xd6, 0xb0, 0x8f, + 0xfb, 0xff, 0x80, 0x8, 0xfc, 0xc, 0xf8, 0x0, + 0x5b, 0x80, 0x8b, 0x50, + + /* U+F019 "" */ + 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x7, 0xff, 0xff, 0x70, + 0x0, 0x9f, 0xf9, 0x0, 0x78, 0x7a, 0xa7, 0x87, + 0xff, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xfb, 0xbf, + + /* U+F01C "" */ + 0x5, 0xff, 0xff, 0xf5, 0x1, 0xe3, 0x0, 0x3, + 0xe1, 0xa8, 0x0, 0x0, 0x8, 0xaf, 0xff, 0x60, + 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, + 0xff, 0xff, 0xfd, + + /* U+F021 "" */ + 0x0, 0x0, 0x0, 0x3, 0x2, 0xbf, 0xfb, 0x3f, + 0x2e, 0x91, 0x18, 0xff, 0x9a, 0x0, 0x6c, 0xff, + 0x31, 0x0, 0x24, 0x44, 0x44, 0x42, 0x0, 0x13, + 0xff, 0xc6, 0x0, 0xb9, 0xfe, 0xa5, 0x5b, 0xd1, + 0xf2, 0x8c, 0xc8, 0x10, 0x30, 0x0, 0x0, 0x0, + + /* U+F026 "" */ + 0x0, 0x9, 0x34, 0xcf, 0xff, 0xff, 0xff, 0xff, + 0xab, 0xff, 0x0, 0x4f, 0x0, 0x1, + + /* U+F027 "" */ + 0x0, 0x9, 0x0, 0x34, 0xcf, 0x1, 0xff, 0xff, + 0x1b, 0xff, 0xff, 0x1b, 0xbb, 0xff, 0x1, 0x0, + 0x4f, 0x0, 0x0, 0x1, 0x0, + + /* U+F028 "" */ + 0x0, 0x0, 0x0, 0x54, 0x0, 0x0, 0x90, 0x23, + 0xb3, 0x34, 0xcf, 0x2, 0xc3, 0xbf, 0xff, 0xf1, + 0xb5, 0x6c, 0xff, 0xff, 0x1b, 0x56, 0xca, 0xbf, + 0xf0, 0x2c, 0x3a, 0x0, 0x4f, 0x2, 0x3b, 0x30, + 0x0, 0x10, 0x5, 0x40, + + /* U+F03E "" */ + 0xdf, 0xff, 0xff, 0xfd, 0xf0, 0x7f, 0xff, 0xff, + 0xf8, 0xcf, 0xb1, 0xbf, 0xfb, 0x5b, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0xf, 0xdf, 0xff, 0xff, 0xfd, + + /* U+F048 "" */ + 0x40, 0x0, 0x2f, 0x20, 0x8f, 0xf2, 0x9f, 0xff, + 0xcf, 0xff, 0xff, 0xff, 0xff, 0x5e, 0xff, 0xf2, + 0x2e, 0xfb, 0x10, 0x19, + + /* U+F04B "" */ + 0x0, 0x0, 0x0, 0xd, 0xa1, 0x0, 0x0, 0xff, + 0xf7, 0x0, 0xf, 0xff, 0xfd, 0x40, 0xff, 0xff, + 0xff, 0xaf, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xd4, + 0xf, 0xff, 0x70, 0x0, 0xda, 0x10, 0x0, 0x0, + 0x0, 0x0, 0x0, + + /* U+F04C "" */ + 0x9b, 0x90, 0x9b, 0x9f, 0xff, 0xf, 0xff, 0xff, + 0xf0, 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0xf0, 0xff, + 0xf2, 0x42, 0x2, 0x42, + + /* U+F04D "" */ + 0x24, 0x44, 0x44, 0x2f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf8, 0xbb, 0xbb, 0xb8, + + /* U+F051 "" */ + 0x20, 0x0, 0x4f, 0x80, 0x2f, 0xff, 0x92, 0xff, + 0xff, 0xcf, 0xff, 0xff, 0xff, 0xfe, 0x5f, 0xfd, + 0x22, 0xf9, 0x10, 0x1b, + + /* U+F052 "" */ + 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x8f, 0x80, + 0x0, 0x0, 0x7f, 0xff, 0x70, 0x0, 0x5f, 0xff, + 0xff, 0x50, 0xe, 0xff, 0xff, 0xfe, 0x0, 0x58, + 0x88, 0x88, 0x50, 0xf, 0xff, 0xff, 0xff, 0x0, + 0xab, 0xbb, 0xbb, 0xa0, + + /* U+F053 "" */ + 0x0, 0x6, 0x20, 0x7, 0xf4, 0x7, 0xf5, 0x5, + 0xf6, 0x0, 0x1e, 0xb0, 0x0, 0x2e, 0xb0, 0x0, + 0x2e, 0x60, 0x0, 0x10, + + /* U+F054 "" */ + 0x26, 0x0, 0x4, 0xf7, 0x0, 0x5, 0xf7, 0x0, + 0x6, 0xf5, 0x0, 0xbe, 0x10, 0xbe, 0x20, 0x6e, + 0x20, 0x0, 0x10, 0x0, + + /* U+F067 "" */ + 0x0, 0x4, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, + 0x4f, 0x40, 0x7, 0x8a, 0xfa, 0x87, 0xef, 0xff, + 0xff, 0xe0, 0x4, 0xf4, 0x0, 0x0, 0x4f, 0x40, + 0x0, 0x1, 0xb1, 0x0, + + /* U+F068 "" */ + 0x78, 0x88, 0x88, 0x7e, 0xff, 0xff, 0xfe, + + /* U+F06E "" */ + 0x0, 0x8c, 0xcc, 0x80, 0x1, 0xdd, 0x16, 0x3d, + 0xd1, 0xcf, 0x55, 0xed, 0x5f, 0xcb, 0xf5, 0xdf, + 0xd5, 0xfc, 0x1d, 0xd3, 0x73, 0xdd, 0x10, 0x8, + 0xdc, 0xc8, 0x10, + + /* U+F070 "" */ + 0x1d, 0x30, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x8c, + 0xcc, 0xa2, 0x0, 0x0, 0x2d, 0xb4, 0x49, 0xf4, + 0x0, 0x7a, 0x1a, 0xff, 0x3f, 0xe1, 0x7, 0xfa, + 0x6, 0xf7, 0xff, 0x10, 0xa, 0xf3, 0x3, 0xef, + 0x40, 0x0, 0x6, 0xcc, 0x71, 0xbb, 0x10, 0x0, + 0x0, 0x0, 0x0, 0x89, + + /* U+F071 "" */ + 0x0, 0x0, 0x3e, 0x30, 0x0, 0x0, 0x0, 0xc, + 0xfc, 0x0, 0x0, 0x0, 0x6, 0xfc, 0xf6, 0x0, + 0x0, 0x0, 0xed, 0xd, 0xe0, 0x0, 0x0, 0x8f, + 0xe0, 0xef, 0x80, 0x0, 0x2f, 0xff, 0x6f, 0xff, + 0x20, 0xb, 0xff, 0xe2, 0xef, 0xfa, 0x0, 0xdf, + 0xff, 0xff, 0xff, 0xd0, + + /* U+F074 "" */ + 0x0, 0x0, 0x0, 0x20, 0x44, 0x0, 0x4, 0xf5, + 0xef, 0xb1, 0xcf, 0xfd, 0x1, 0x8c, 0xd1, 0xc1, + 0x1, 0xdc, 0x81, 0xc1, 0xef, 0xc1, 0xbf, 0xfd, + 0x44, 0x0, 0x4, 0xf5, 0x0, 0x0, 0x0, 0x20, + + /* U+F077 "" */ + 0x0, 0x0, 0x0, 0x0, 0x4, 0xe4, 0x0, 0x4, + 0xfc, 0xf4, 0x4, 0xf8, 0x8, 0xf4, 0xb8, 0x0, + 0x8, 0xb0, 0x0, 0x0, 0x0, + + /* U+F078 "" */ + 0x0, 0x0, 0x0, 0xb, 0x80, 0x0, 0x8b, 0x4f, + 0x80, 0x8f, 0x40, 0x4f, 0xcf, 0x40, 0x0, 0x4e, + 0x40, 0x0, 0x0, 0x0, 0x0, + + /* U+F079 "" */ + 0x0, 0x94, 0x14, 0x44, 0x40, 0x0, 0xbf, 0xf8, + 0xbb, 0xbf, 0x10, 0x8, 0xb7, 0x60, 0x0, 0xe1, + 0x0, 0xb, 0x40, 0x0, 0x1e, 0x20, 0x0, 0xb7, + 0x44, 0x5e, 0xfd, 0x50, 0x7, 0xbb, 0xb8, 0x5f, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, + + /* U+F07B "" */ + 0xdf, 0xfb, 0x0, 0x0, 0xff, 0xff, 0xff, 0xfd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfd, + + /* U+F093 "" */ + 0x0, 0x9, 0x90, 0x0, 0x0, 0x9f, 0xf9, 0x0, + 0x7, 0xff, 0xff, 0x70, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x78, 0x4f, 0xf4, 0x87, + 0xff, 0xe8, 0x8e, 0xff, 0xff, 0xff, 0xfb, 0xbf, + + /* U+F095 "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xea, 0x0, 0x0, 0x0, 0xef, 0xe0, 0x0, 0x0, + 0xc, 0xfc, 0x0, 0x0, 0x0, 0x4f, 0x70, 0x0, + 0x0, 0x1d, 0xe0, 0x7, 0xdc, 0x4d, 0xf3, 0x0, + 0xef, 0xff, 0xe3, 0x0, 0xa, 0xec, 0x70, 0x0, + 0x0, + + /* U+F0C4 "" */ + 0x3, 0x0, 0x0, 0x0, 0xcd, 0xc0, 0x2d, 0xc0, + 0xe7, 0xf2, 0xee, 0x20, 0x4b, 0xff, 0xe2, 0x0, + 0x4, 0xff, 0xa0, 0x0, 0xcd, 0xf9, 0xf9, 0x0, + 0xe7, 0xe0, 0x7f, 0x90, 0x4a, 0x40, 0x4, 0x50, + + /* U+F0C5 "" */ + 0x0, 0xff, 0xf7, 0x47, 0x4f, 0xff, 0x47, 0xf8, + 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xf8, 0xff, + 0xff, 0xff, 0x8f, 0xff, 0xff, 0xfb, 0x78, 0x88, + 0x7f, 0xff, 0xff, 0x0, + + /* U+F0C7 "" */ + 0x24, 0x44, 0x41, 0xf, 0xbb, 0xbb, 0xe2, 0xf0, + 0x0, 0xf, 0xdf, 0x44, 0x44, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xf9, 0x9, 0xff, 0xff, 0xd5, 0xdf, + 0xf8, 0xbb, 0xbb, 0xb8, + + /* U+F0E7 "" */ + 0x7, 0xff, 0x60, 0x0, 0xaf, 0xf2, 0x0, 0xc, + 0xff, 0x87, 0x0, 0xef, 0xff, 0xb0, 0x7, 0x8e, + 0xf2, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x3e, 0x0, + 0x0, 0x6, 0x50, 0x0, + + /* U+F0EA "" */ + 0x79, 0xb9, 0x70, 0xf, 0xfc, 0xff, 0x0, 0xff, + 0x68, 0x83, 0xf, 0xf8, 0xff, 0x8b, 0xff, 0x8f, + 0xf8, 0x8f, 0xf8, 0xff, 0xff, 0x78, 0x8f, 0xff, + 0xf0, 0x7, 0xff, 0xff, + + /* U+F0F3 "" */ + 0x0, 0xd, 0x0, 0x0, 0x4e, 0xfe, 0x30, 0xd, + 0xff, 0xfd, 0x0, 0xff, 0xff, 0xf0, 0x3f, 0xff, + 0xff, 0x3b, 0xff, 0xff, 0xfb, 0x78, 0x88, 0x88, + 0x60, 0x4, 0xf4, 0x0, + + /* U+F11C "" */ + 0xdf, 0xff, 0xff, 0xff, 0xdf, 0x18, 0x81, 0x88, + 0x1f, 0xfe, 0xaa, 0xca, 0xae, 0xff, 0xea, 0xac, + 0xaa, 0xef, 0xf1, 0x80, 0x0, 0x81, 0xfd, 0xff, + 0xff, 0xff, 0xfd, + + /* U+F124 "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x4b, 0xc0, 0x0, 0x0, 0x5c, 0xff, 0xb0, 0x0, + 0x6e, 0xff, 0xff, 0x40, 0xd, 0xff, 0xff, 0xfc, + 0x0, 0x6, 0x88, 0xcf, 0xf5, 0x0, 0x0, 0x0, + 0x8f, 0xe0, 0x0, 0x0, 0x0, 0x8f, 0x60, 0x0, + 0x0, 0x0, 0x5d, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + + /* U+F15B "" */ + 0xff, 0xf8, 0xb0, 0xff, 0xf8, 0xfb, 0xff, 0xfc, + 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* U+F1EB "" */ + 0x0, 0x4, 0x77, 0x40, 0x0, 0x9, 0xff, 0xcc, + 0xff, 0x90, 0xcd, 0x40, 0x0, 0x4, 0xdc, 0x20, + 0x4b, 0xff, 0xb4, 0x2, 0x1, 0xfa, 0x55, 0xaf, + 0x10, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0, + 0xee, 0x0, 0x0, 0x0, 0x0, 0x87, 0x0, 0x0, + + /* U+F240 "" */ + 0x24, 0x44, 0x44, 0x44, 0x40, 0xfb, 0xbb, 0xbb, + 0xbb, 0xda, 0xf7, 0xee, 0xee, 0xee, 0x5f, 0xf8, + 0xff, 0xff, 0xff, 0x2f, 0xf5, 0x66, 0x66, 0x66, + 0xab, 0x8b, 0xbb, 0xbb, 0xbb, 0xb3, + + /* U+F241 "" */ + 0x24, 0x44, 0x44, 0x44, 0x40, 0xfb, 0xbb, 0xbb, + 0xbb, 0xda, 0xf7, 0xee, 0xee, 0x70, 0x5f, 0xf8, + 0xff, 0xff, 0x80, 0x2f, 0xf5, 0x66, 0x66, 0x54, + 0xab, 0x8b, 0xbb, 0xbb, 0xbb, 0xb3, + + /* U+F242 "" */ + 0x24, 0x44, 0x44, 0x44, 0x40, 0xfb, 0xbb, 0xbb, + 0xbb, 0xda, 0xf7, 0xee, 0xe0, 0x0, 0x5f, 0xf8, + 0xff, 0xf0, 0x0, 0x2f, 0xf5, 0x66, 0x64, 0x44, + 0xab, 0x8b, 0xbb, 0xbb, 0xbb, 0xb3, + + /* U+F243 "" */ + 0x24, 0x44, 0x44, 0x44, 0x40, 0xfb, 0xbb, 0xbb, + 0xbb, 0xda, 0xf7, 0xe7, 0x0, 0x0, 0x5f, 0xf8, + 0xf8, 0x0, 0x0, 0x2f, 0xf5, 0x65, 0x44, 0x44, + 0xab, 0x8b, 0xbb, 0xbb, 0xbb, 0xb3, + + /* U+F244 "" */ + 0x24, 0x44, 0x44, 0x44, 0x40, 0xfb, 0xbb, 0xbb, + 0xbb, 0xd8, 0xf0, 0x0, 0x0, 0x0, 0x5f, 0xf0, + 0x0, 0x0, 0x0, 0x2f, 0xf4, 0x44, 0x44, 0x44, + 0xad, 0x8b, 0xbb, 0xbb, 0xbb, 0xb3, + + /* U+F287 "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xd8, 0x0, 0x0, 0x0, 0x7, 0x36, 0x40, 0x0, + 0x9, 0xb1, 0x91, 0x11, 0x17, 0x20, 0xef, 0x88, + 0xd8, 0x88, 0xd9, 0x2, 0x20, 0x6, 0x48, 0x70, + 0x0, 0x0, 0x0, 0x6, 0xec, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + + /* U+F293 "" */ + 0x6, 0xdd, 0xc3, 0x4, 0xff, 0x3e, 0xd0, 0x9c, + 0xb5, 0x5f, 0x2b, 0xf7, 0x1a, 0xf4, 0xbf, 0x81, + 0xbf, 0x39, 0xc9, 0x64, 0xf2, 0x4f, 0xf3, 0xde, + 0x0, 0x6d, 0xed, 0x30, + + /* U+F2ED "" */ + 0x78, 0xdf, 0xd8, 0x77, 0x88, 0x88, 0x87, 0x8f, + 0xff, 0xff, 0x88, 0xcc, 0x8c, 0xc8, 0x8c, 0xc8, + 0xcc, 0x88, 0xcc, 0x8c, 0xc8, 0x8c, 0xc8, 0xcc, + 0x85, 0xff, 0xff, 0xf5, + + /* U+F304 "" */ + 0x0, 0x0, 0x0, 0x7e, 0x30, 0x0, 0x0, 0x4b, + 0xfe, 0x0, 0x0, 0x8f, 0x9b, 0x70, 0x0, 0x8f, + 0xff, 0x40, 0x0, 0x8f, 0xff, 0x80, 0x0, 0x7f, + 0xff, 0x80, 0x0, 0xe, 0xff, 0x80, 0x0, 0x0, + 0xee, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, + + /* U+F55A "" */ + 0x0, 0xaf, 0xff, 0xff, 0xfc, 0xb, 0xff, 0x9c, + 0xc9, 0xff, 0xaf, 0xff, 0xc1, 0x1c, 0xff, 0xaf, + 0xff, 0xc1, 0x1c, 0xff, 0xb, 0xff, 0x9c, 0xc9, + 0xff, 0x0, 0xaf, 0xff, 0xff, 0xfc, + + /* U+F7C2 "" */ + 0x7, 0xff, 0xfe, 0x17, 0xb6, 0x27, 0xc3, 0xfe, + 0xb9, 0xbe, 0x3f, 0xff, 0xff, 0xf3, 0xff, 0xff, + 0xff, 0x3f, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, + 0x3c, 0xff, 0xff, 0xe1, + + /* U+F8A2 "" */ + 0x0, 0x0, 0x0, 0x3, 0x0, 0x23, 0x0, 0x2, + 0xf0, 0x2e, 0x92, 0x22, 0x5f, 0xd, 0xff, 0xff, + 0xff, 0xf0, 0x2e, 0x92, 0x22, 0x21, 0x0, 0x23, + 0x0, 0x0, 0x0 +}; + + +/*--------------------- + * 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 = 34, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 0, .adv_w = 34, .box_w = 2, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 5, .adv_w = 50, .box_w = 3, .box_h = 3, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 10, .adv_w = 90, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 25, .adv_w = 79, .box_w = 5, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 43, .adv_w = 108, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 61, .adv_w = 88, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 79, .adv_w = 27, .box_w = 2, .box_h = 3, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 82, .adv_w = 43, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 93, .adv_w = 43, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 100, .adv_w = 51, .box_w = 4, .box_h = 3, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 106, .adv_w = 74, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 116, .adv_w = 29, .box_w = 2, .box_h = 3, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 119, .adv_w = 49, .box_w = 3, .box_h = 1, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 121, .adv_w = 29, .box_w = 2, .box_h = 2, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 123, .adv_w = 45, .box_w = 5, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 141, .adv_w = 85, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 154, .adv_w = 47, .box_w = 3, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 162, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 175, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 188, .adv_w = 86, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 203, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 216, .adv_w = 79, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 229, .adv_w = 77, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 242, .adv_w = 82, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 255, .adv_w = 79, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 268, .adv_w = 29, .box_w = 2, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 272, .adv_w = 29, .box_w = 2, .box_h = 6, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 278, .adv_w = 74, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 291, .adv_w = 74, .box_w = 5, .box_h = 3, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 299, .adv_w = 74, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 312, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 325, .adv_w = 132, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 349, .adv_w = 94, .box_w = 7, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 367, .adv_w = 97, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 382, .adv_w = 93, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 397, .adv_w = 106, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 415, .adv_w = 86, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 428, .adv_w = 81, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 441, .adv_w = 99, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 456, .adv_w = 104, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 471, .adv_w = 40, .box_w = 2, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 476, .adv_w = 66, .box_w = 5, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 489, .adv_w = 92, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 504, .adv_w = 76, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 517, .adv_w = 122, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 535, .adv_w = 104, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 550, .adv_w = 108, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 568, .adv_w = 92, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 583, .adv_w = 108, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 604, .adv_w = 93, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 619, .adv_w = 79, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 632, .adv_w = 75, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 645, .adv_w = 101, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 660, .adv_w = 91, .box_w = 7, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 678, .adv_w = 144, .box_w = 9, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 701, .adv_w = 86, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 716, .adv_w = 83, .box_w = 7, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 734, .adv_w = 84, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 749, .adv_w = 43, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 760, .adv_w = 45, .box_w = 5, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 778, .adv_w = 43, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 785, .adv_w = 75, .box_w = 5, .box_h = 3, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 793, .adv_w = 64, .box_w = 4, .box_h = 1, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 795, .adv_w = 77, .box_w = 3, .box_h = 1, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 797, .adv_w = 77, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 807, .adv_w = 87, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 825, .adv_w = 73, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 835, .adv_w = 87, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 850, .adv_w = 78, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 860, .adv_w = 45, .box_w = 4, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 872, .adv_w = 88, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 885, .adv_w = 87, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 900, .adv_w = 36, .box_w = 2, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 906, .adv_w = 36, .box_w = 3, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 917, .adv_w = 79, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 932, .adv_w = 36, .box_w = 2, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 938, .adv_w = 135, .box_w = 8, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 954, .adv_w = 87, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 964, .adv_w = 81, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 974, .adv_w = 87, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 989, .adv_w = 87, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1002, .adv_w = 52, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1010, .adv_w = 64, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1018, .adv_w = 53, .box_w = 4, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1028, .adv_w = 87, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1038, .adv_w = 72, .box_w = 6, .box_h = 4, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 1050, .adv_w = 115, .box_w = 8, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1066, .adv_w = 71, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1076, .adv_w = 72, .box_w = 6, .box_h = 5, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1091, .adv_w = 67, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1099, .adv_w = 45, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1110, .adv_w = 38, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1117, .adv_w = 45, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1128, .adv_w = 74, .box_w = 5, .box_h = 2, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1133, .adv_w = 54, .box_w = 3, .box_h = 3, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 1138, .adv_w = 40, .box_w = 2, .box_h = 3, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 1141, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1177, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1201, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1233, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1257, .adv_w = 88, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1275, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1307, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1339, .adv_w = 144, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1375, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1407, .adv_w = 144, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1434, .adv_w = 128, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1474, .adv_w = 64, .box_w = 4, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1488, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1509, .adv_w = 144, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1545, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1569, .adv_w = 112, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 1589, .adv_w = 112, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1624, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1652, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1680, .adv_w = 112, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 1700, .adv_w = 112, .box_w = 9, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1736, .adv_w = 80, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1756, .adv_w = 80, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1776, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1804, .adv_w = 112, .box_w = 7, .box_h = 2, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1811, .adv_w = 144, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1838, .adv_w = 160, .box_w = 11, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1882, .adv_w = 144, .box_w = 11, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1926, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1958, .adv_w = 112, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1979, .adv_w = 112, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2000, .adv_w = 160, .box_w = 11, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 2039, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2063, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2095, .adv_w = 128, .box_w = 9, .box_h = 9, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 2136, .adv_w = 112, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2168, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2196, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2224, .adv_w = 80, .box_w = 7, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 2252, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2280, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2308, .adv_w = 144, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2335, .adv_w = 128, .box_w = 10, .box_h = 10, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 2385, .adv_w = 96, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2409, .adv_w = 160, .box_w = 10, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2449, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2479, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2509, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2539, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2569, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2599, .adv_w = 160, .box_w = 11, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2643, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2671, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2699, .adv_w = 128, .box_w = 9, .box_h = 9, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 2740, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2770, .adv_w = 96, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2798, .adv_w = 129, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_1[] = { + 0x0, 0x1f72, 0xef51, 0xef58, 0xef5b, 0xef5c, 0xef5d, 0xef61, + 0xef63, 0xef65, 0xef69, 0xef6c, 0xef71, 0xef76, 0xef77, 0xef78, + 0xef8e, 0xef98, 0xef9b, 0xef9c, 0xef9d, 0xefa1, 0xefa2, 0xefa3, + 0xefa4, 0xefb7, 0xefb8, 0xefbe, 0xefc0, 0xefc1, 0xefc4, 0xefc7, + 0xefc8, 0xefc9, 0xefcb, 0xefe3, 0xefe5, 0xf014, 0xf015, 0xf017, + 0xf037, 0xf03a, 0xf043, 0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, + 0xf191, 0xf192, 0xf193, 0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, + 0xf4aa, 0xf712, 0xf7f2 +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 95, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + }, + { + .range_start = 176, .range_length = 63475, .glyph_id_start = 96, + .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 59, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + } +}; + +/*----------------- + * KERNING + *----------------*/ + + +/*Map glyph_ids to kern left classes*/ +static const uint8_t kern_left_class_mapping[] = +{ + 0, 0, 1, 2, 0, 3, 4, 5, + 2, 6, 7, 8, 9, 10, 9, 10, + 11, 12, 0, 13, 14, 15, 16, 17, + 18, 19, 12, 20, 20, 0, 0, 0, + 21, 22, 23, 24, 25, 22, 26, 27, + 28, 29, 29, 30, 31, 32, 29, 29, + 22, 33, 34, 35, 3, 36, 30, 37, + 37, 38, 39, 40, 41, 42, 43, 0, + 44, 0, 45, 46, 47, 48, 49, 50, + 51, 45, 52, 52, 53, 48, 45, 45, + 46, 46, 54, 55, 56, 57, 51, 58, + 58, 59, 58, 60, 41, 0, 0, 9, + 61, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 +}; + +/*Map glyph_ids to kern right classes*/ +static const uint8_t kern_right_class_mapping[] = +{ + 0, 0, 1, 2, 0, 3, 4, 5, + 2, 6, 7, 8, 9, 10, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 12, + 18, 19, 20, 21, 21, 0, 0, 0, + 22, 23, 24, 25, 23, 25, 25, 25, + 23, 25, 25, 26, 25, 25, 25, 25, + 23, 25, 23, 25, 3, 27, 28, 29, + 29, 30, 31, 32, 33, 34, 35, 0, + 36, 0, 37, 38, 39, 39, 39, 0, + 39, 38, 40, 41, 38, 38, 42, 42, + 39, 42, 39, 42, 43, 44, 45, 46, + 46, 47, 46, 48, 0, 0, 35, 9, + 49, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 +}; + +/*Kern values between classes*/ +static const int8_t kern_class_values[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 3, -3, 0, 0, + 0, 0, -7, -8, 1, 6, 3, 2, + -5, 1, 6, 0, 5, 1, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8, 1, -1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 0, -4, 0, 0, 0, 0, + 0, -3, 2, 3, 0, 0, -1, 0, + -1, 1, 0, -1, 0, -1, -1, -3, + 0, 0, 0, 0, -1, 0, 0, -2, + -2, 0, 0, -1, 0, -3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + -1, 0, -2, 0, -3, 0, -15, 0, + 0, -3, 0, 3, 4, 0, 0, -3, + 1, 1, 4, 3, -2, 3, 0, 0, + -7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -3, -2, -6, 0, -5, + -1, 0, 0, 0, 0, 0, 5, 0, + -4, -1, 0, 0, 0, -2, 0, 0, + -1, -9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -10, -1, 5, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4, + 0, 1, 0, 0, -3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, + 3, 1, 4, -1, 0, 0, 3, -1, + -4, -18, 1, 3, 3, 0, -2, 0, + 5, 0, 4, 0, 4, 0, -12, 0, + -2, 4, 0, 4, -1, 3, 1, 0, + 0, 0, -1, 0, 0, -2, 10, 0, + 10, 0, 4, 0, 5, 2, 2, 4, + 0, 0, 0, -5, 0, 0, 0, 0, + 0, -1, 0, 1, -2, -2, -3, 1, + 0, -1, 0, 0, 0, -5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -7, 0, -8, 0, 0, 0, + 0, -1, 0, 13, -2, -2, 1, 1, + -1, 0, -2, 1, 0, 0, -7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -12, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, 8, 0, 0, -5, 0, + 4, 0, -9, -12, -9, -3, 4, 0, + 0, -9, 0, 2, -3, 0, -2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 4, -16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 1, 0, 0, 0, + 0, 0, 1, 1, -2, -3, 0, 0, + 0, -1, 0, 0, -1, 0, 0, 0, + -3, 0, -1, 0, -3, -3, 0, -3, + -4, -4, -2, 0, -3, 0, -3, 0, + 0, 0, 0, -1, 0, 0, 1, 0, + 1, -1, 0, 0, 0, 0, 0, 1, + -1, 0, 0, 0, -1, 1, 1, 0, + 0, 0, 0, -2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, -1, 0, + -2, 0, -2, 0, 0, -1, 0, 4, + 0, 0, -1, 0, 0, 0, 0, 0, + 0, 0, -1, -1, 0, 0, -1, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -1, -1, 0, -1, -2, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + 0, -1, -1, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -1, 0, 0, + 0, 0, -1, -2, 0, -2, 0, -4, + -1, -4, 3, 0, 0, -3, 1, 3, + 3, 0, -3, 0, -2, 0, 0, -6, + 1, -1, 1, -7, 1, 0, 0, 0, + -7, 0, -7, -1, -11, -1, 0, -6, + 0, 3, 4, 0, 2, 0, 0, 0, + 0, 0, 0, -2, -2, 0, -4, 0, + 0, 0, -1, 0, 0, 0, -1, 0, + 0, 0, 0, 0, -1, -1, 0, -1, + -2, 0, 0, 0, 0, 0, 0, 0, + -1, -1, 0, -1, -2, -1, 0, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, -1, 0, -2, + 0, -1, 0, -3, 1, 0, 0, -2, + 1, 1, 1, 0, 0, 0, 0, 0, + 0, -1, 0, 0, 0, 0, 0, 1, + 0, 0, -1, 0, -1, -1, -2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, + -1, 0, 0, 0, 0, -1, -2, 0, + -2, 0, 4, -1, 0, -4, 0, 0, + 3, -6, -7, -5, -3, 1, 0, -1, + -8, -2, 0, -2, 0, -3, 2, -2, + -8, 0, -3, 0, 0, 1, 0, 1, + -1, 0, 1, 0, -4, -5, 0, -6, + -3, -3, -3, -4, -2, -3, 0, -2, + -3, 1, 0, 0, 0, -1, 0, 0, + 0, 1, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + 0, -1, 0, 0, -1, 0, -2, -3, + -3, 0, 0, -4, 0, 0, 0, 0, + 0, 0, -1, 0, 0, 0, 0, 1, + -1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + -2, 0, 0, 0, 0, -6, -4, 0, + 0, 0, -2, -6, 0, 0, -1, 1, + 0, -3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, -2, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, -2, 0, + 0, 0, 0, 2, 0, 1, -3, -3, + 0, -1, -1, -2, 0, 0, 0, 0, + 0, 0, -4, 0, -1, 0, -2, -1, + 0, -3, -3, -4, -1, 0, -3, 0, + -4, 0, 0, 0, 0, 10, 0, 0, + 1, 0, 0, -2, 0, 1, 0, -6, + 0, 0, 0, 0, 0, -12, -2, 4, + 4, -1, -5, 0, 1, -2, 0, -6, + -1, -2, 1, -9, -1, 2, 0, 2, + -4, -2, -5, -4, -5, 0, 0, -8, + 0, 7, 0, 0, -1, 0, 0, 0, + -1, -1, -1, -3, -4, 0, -12, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, -1, -2, 0, 0, + -3, 0, -1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -3, 0, 0, 3, + 0, 2, 0, -3, 1, -1, 0, -3, + -1, 0, -2, -1, -1, 0, -2, -2, + 0, 0, -1, 0, -1, -2, -2, 0, + 0, -1, 0, 1, -1, 0, -3, 0, + 0, 0, -3, 0, -2, 0, -2, -2, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, -3, 1, 0, -2, 0, -1, -2, + -4, -1, -1, -1, 0, -1, -2, 0, + 0, 0, 0, 0, 0, -1, -1, -1, + 0, 0, 0, 0, 2, -1, 0, -1, + 0, 0, 0, -1, -2, -1, -1, -2, + -1, 0, 1, 5, 0, 0, -3, 0, + -1, 3, 0, -1, -5, -2, 2, 0, + 0, -6, -2, 1, -2, 1, 0, -1, + -1, -4, 0, -2, 1, 0, 0, -2, + 0, 0, 0, 1, 1, -3, -2, 0, + -2, -1, -2, -1, -1, 0, -2, 1, + -2, -2, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, -2, + 0, 0, -1, -1, 0, 0, 0, 0, + -1, 0, 0, 0, 0, -1, 0, 0, + 0, 0, 0, -1, 0, 0, 0, 0, + -2, 0, -3, 0, 0, 0, -4, 0, + 1, -3, 3, 0, -1, -6, 0, 0, + -3, -1, 0, -5, -3, -4, 0, 0, + -6, -1, -5, -5, -6, 0, -3, 0, + 1, 9, -2, 0, -3, -1, 0, -1, + -2, -3, -2, -5, -5, -3, -1, 0, + 0, -1, 0, 0, 0, 0, -9, -1, + 4, 3, -3, -5, 0, 0, -4, 0, + -6, -1, -1, 3, -12, -2, 0, 0, + 0, -8, -2, -7, -1, -9, 0, 0, + -9, 0, 8, 0, 0, -1, 0, 0, + 0, 0, -1, -1, -5, -1, 0, -8, + 0, 0, 0, 0, -4, 0, -1, 0, + 0, -4, -6, 0, 0, -1, -2, -4, + -1, 0, -1, 0, 0, 0, 0, -6, + -1, -4, -4, -1, -2, -3, -1, -2, + 0, -3, -1, -4, -2, 0, -2, -2, + -1, -2, 0, 1, 0, -1, -4, 0, + 3, 0, -2, 0, 0, 0, 0, 2, + 0, 1, -3, 5, 0, -1, -1, -2, + 0, 0, 0, 0, 0, 0, -4, 0, + -1, 0, -2, -1, 0, -3, -3, -4, + -1, 0, -3, 1, 5, 0, 0, 0, + 0, 10, 0, 0, 1, 0, 0, -2, + 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, -3, 0, 0, 0, 0, 0, -1, + 0, 0, 0, -1, -1, 0, 0, -3, + -1, 0, 0, -3, 0, 2, -1, 0, + 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 2, 3, 1, -1, 0, -4, + -2, 0, 4, -4, -4, -3, -3, 5, + 2, 1, -11, -1, 3, -1, 0, -1, + 1, -1, -4, 0, -1, 1, -2, -1, + -4, -1, 0, 0, 4, 3, 0, -4, + 0, -7, -2, 4, -2, -5, 0, -2, + -4, -4, -1, 5, 1, 0, -2, 0, + -3, 0, 1, 4, -3, -5, -5, -3, + 4, 0, 0, -9, -1, 1, -2, -1, + -3, 0, -3, -5, -2, -2, -1, 0, + 0, -3, -3, -1, 0, 4, 3, -1, + -7, 0, -7, -2, 0, -4, -7, 0, + -4, -2, -4, -4, 3, 0, 0, -2, + 0, -3, -1, 0, -1, -2, 0, 2, + -4, 1, 0, 0, -7, 0, -1, -3, + -2, -1, -4, -3, -4, -3, 0, -4, + -1, -3, -2, -4, -1, 0, 0, 0, + 6, -2, 0, -4, -1, 0, -1, -3, + -3, -3, -4, -5, -2, -3, 3, 0, + -2, 0, -6, -2, 1, 3, -4, -5, + -3, -4, 4, -1, 1, -12, -2, 3, + -3, -2, -5, 0, -4, -5, -2, -1, + -1, -1, -3, -4, 0, 0, 0, 4, + 4, -1, -8, 0, -8, -3, 3, -5, + -9, -3, -4, -5, -6, -4, 3, 0, + 0, 0, 0, -2, 0, 0, 1, -2, + 3, 1, -2, 3, 0, 0, -4, 0, + 0, 0, 0, 0, 0, -1, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 1, 4, 0, 0, -2, 0, 0, + 0, 0, -1, -1, -2, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 1, 0, + -1, 0, 5, 0, 2, 0, 0, -2, + 0, 3, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 0, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -8, 0, -1, 2, 0, 4, + 0, 0, 13, 2, -3, -3, 1, 1, + -1, 0, -6, 0, 0, 6, -8, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -9, 5, 18, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, -2, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, -3, 0, + 0, 0, 0, 0, 1, 17, -3, -1, + 4, 3, -3, 1, 0, 0, 1, 1, + -2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -17, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -4, + 0, 0, 0, -3, 0, 0, 0, 0, + -3, -1, 0, 0, 0, -3, 0, -2, + 0, -6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, 0, -2, 0, -2, 0, + -3, 0, 0, 0, -2, 1, -2, 0, + 0, -3, -1, -3, 0, 0, -3, 0, + -1, 0, -6, 0, -1, 0, 0, -10, + -2, -5, -1, -5, 0, 0, -9, 0, + -3, -1, 0, 0, 0, 0, 0, 0, + 0, 0, -2, -2, -1, -2, 0, 0, + 0, 0, -3, 0, -3, 2, -1, 3, + 0, -1, -3, -1, -2, -2, 0, -2, + -1, -1, 1, -3, 0, 0, 0, 0, + -11, -1, -2, 0, -3, 0, -1, -6, + -1, 0, 0, -1, -1, 0, 0, 0, + 0, 1, 0, -1, -2, -1, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, + 0, -3, 0, -1, 0, 0, 0, -3, + 1, 0, 0, 0, -3, -1, -3, 0, + 0, -4, 0, -1, 0, -6, 0, 0, + 0, 0, -12, 0, -3, -5, -6, 0, + 0, -9, 0, -1, -2, 0, 0, 0, + 0, 0, 0, 0, 0, -1, -2, -1, + -2, 0, 0, 0, 2, -2, 0, 4, + 6, -1, -1, -4, 2, 6, 2, 3, + -3, 2, 5, 2, 4, 3, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8, 6, -2, -1, 0, -1, + 10, 6, 10, 0, 0, 0, 1, 0, + 0, 5, 0, 0, -2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 2, + 0, 0, 0, 0, -11, -2, -1, -5, + -6, 0, 0, -9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, -11, -2, -1, + -5, -6, 0, 0, -5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, 0, 0, 0, -3, 1, 0, -1, + 1, 2, 1, -4, 0, 0, -1, 1, + 0, 1, 0, 0, 0, 0, -3, 0, + -1, -1, -3, 0, -1, -5, 0, 8, + -1, 0, -3, -1, 0, -1, -2, 0, + -1, -4, -3, -2, 0, 0, 0, -2, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, -11, + -2, -1, -5, -6, 0, 0, -9, 0, + 0, 0, 0, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -2, 0, -4, -2, -1, 4, -1, -1, + -5, 0, -1, 0, -1, -3, 0, 3, + 0, 1, 0, 1, -3, -5, -2, 0, + -5, -2, -3, -5, -5, 0, -2, -3, + -2, -2, -1, -1, -2, -1, 0, -1, + 0, 2, 0, 2, -1, 0, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, -1, -1, 0, 0, + -3, 0, -1, 0, -2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, -1, 0, -2, + 0, 0, 0, 0, -1, 0, 0, -2, + -1, 1, 0, -2, -2, -1, 0, -4, + -1, -3, -1, -2, 0, -2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -9, 0, 4, 0, 0, -2, 0, + 0, 0, 0, -2, 0, -1, 0, 0, + -1, 0, 0, -1, 0, -3, 0, 0, + 5, -2, -4, -4, 1, 1, 1, 0, + -4, 1, 2, 1, 4, 1, 4, -1, + -3, 0, 0, -5, 0, 0, -4, -3, + 0, 0, -3, 0, -2, -2, 0, -2, + 0, -2, 0, -1, 2, 0, -1, -4, + -1, 5, 0, 0, -1, 0, -3, 0, + 0, 2, -3, 0, 1, -1, 1, 0, + 0, -4, 0, -1, 0, 0, -1, 1, + -1, 0, 0, 0, -5, -2, -3, 0, + -4, 0, 0, -6, 0, 5, -1, 0, + -2, 0, 1, 0, -1, 0, -1, -4, + 0, -1, 1, 0, 0, 0, 0, -1, + 0, 0, 1, -2, 0, 0, 0, -2, + -1, 0, -2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -8, 0, 3, 0, + 0, -1, 0, 0, 0, 0, 0, 0, + -1, -1, 0, 0, 0, 3, 0, 3, + 0, 0, 0, 0, 0, -8, -7, 0, + 6, 4, 2, -5, 1, 5, 0, 5, + 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 +}; + + +/*Collect the kern class' data in one place*/ +static const lv_font_fmt_txt_kern_classes_t kern_classes = +{ + .class_pair_values = kern_class_values, + .left_class_mapping = kern_left_class_mapping, + .right_class_mapping = kern_right_class_mapping, + .left_class_cnt = 61, + .right_class_cnt = 49, +}; + +/*-------------------- + * 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 = &kern_classes, + .kern_scale = 16, + .cmap_num = 2, + .bpp = 4, + .kern_classes = 1, + .bitmap_format = 0 +}; + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +lv_font_t lv_font_montserrat_8 = { + .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 = 10, /*The maximum line height required by the font*/ + .base_line = 2, /*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 = -1, + .underline_thickness = 0, +#endif + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + + + +#endif /*#if LV_FONT_MONTSERRAT_8*/ + From c4f8959e6506c932a6a32b4929569c05e09adafb Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 12 Oct 2020 12:58:04 +0200 Subject: [PATCH 44/61] remove version control text Fixes #1846 --- src/lv_draw/lv_draw_blend.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/lv_draw/lv_draw_blend.c b/src/lv_draw/lv_draw_blend.c index 90e14cd13..4262fde30 100644 --- a/src/lv_draw/lv_draw_blend.c +++ b/src/lv_draw/lv_draw_blend.c @@ -757,11 +757,10 @@ LV_ATTRIBUTE_FAST_MEM static void map_normal(const lv_area_t * disp_area, lv_col if(opa > LV_OPA_MAX) { #if LV_USE_GPU_NXP_PXP -<<<<<<< HEAD - if (lv_area_get_size(draw_area) >= GPU_NXP_PXP_BLIT_SIZE_LIMIT) { - lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa); - return; - } + if (lv_area_get_size(draw_area) >= GPU_NXP_PXP_BLIT_SIZE_LIMIT) { + lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa); + return; + } #elif (LV_USE_GPU_NXP_VG_LITE) if(lv_area_get_size(draw_area) >= LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT) { @@ -792,17 +791,12 @@ LV_ATTRIBUTE_FAST_MEM static void map_normal(const lv_area_t * disp_area, lv_col return; } /* Fall down to SW render in case of error */ -======= - if(lv_area_get_size(draw_area) >= LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT) { - lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa); - return; ->>>>>>> 4c7a2ae0b7d8f564b22e7774039f6cbe5385926c } #elif LV_USE_GPU_STM32_DMA2D - if(lv_area_get_size(draw_area) >= 240) { - lv_gpu_stm32_dma2d_copy(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h); - return; - } + if(lv_area_get_size(draw_area) >= 240) { + lv_gpu_stm32_dma2d_copy(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h); + return; + } #endif /*Software rendering*/ From b1b233d249aabb1a0437b3ca4cc6a89e464e8e14 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 12 Oct 2020 13:15:48 +0200 Subject: [PATCH 45/61] fix warning --- src/lv_widgets/lv_dropdown.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lv_widgets/lv_dropdown.c b/src/lv_widgets/lv_dropdown.c index 53f7c6c8d..660c7a7f8 100644 --- a/src/lv_widgets/lv_dropdown.c +++ b/src/lv_widgets/lv_dropdown.c @@ -53,7 +53,7 @@ static void draw_box(lv_obj_t * ddlist, const lv_area_t * clip_area, uint16_t id static void draw_box_label(lv_obj_t * ddlist, const lv_area_t * clip_area, uint16_t id, lv_state_t state); static lv_res_t page_release_handler(lv_obj_t * page); static void page_press_handler(lv_obj_t * page); -static uint16_t get_id_on_point(lv_obj_t * ddlist, lv_coord_t x, lv_coord_t y); +static uint16_t get_id_on_point(lv_obj_t * ddlist, lv_coord_t y); static void position_to_selected(lv_obj_t * ddlist); static lv_obj_t * get_label(const lv_obj_t * ddlist); @@ -1246,7 +1246,7 @@ static lv_res_t page_release_handler(lv_obj_t * page) if(lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER || lv_indev_get_type(indev) == LV_INDEV_TYPE_BUTTON) { lv_point_t p; lv_indev_get_point(indev, &p); - ext->sel_opt_id = get_id_on_point(ddlist, p.x, p.y); + ext->sel_opt_id = get_id_on_point(ddlist, p.y); ext->sel_opt_id_orig = ext->sel_opt_id; } @@ -1274,12 +1274,12 @@ static void page_press_handler(lv_obj_t * page) if(indev && (lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER || lv_indev_get_type(indev) == LV_INDEV_TYPE_BUTTON)) { lv_point_t p; lv_indev_get_point(indev, &p); - ext->pr_opt_id = get_id_on_point(ddlist, p.x, p.y); + ext->pr_opt_id = get_id_on_point(ddlist, p.y); lv_obj_invalidate(page); } } -static uint16_t get_id_on_point(lv_obj_t * ddlist, lv_coord_t x, lv_coord_t y) +static uint16_t get_id_on_point(lv_obj_t * ddlist, lv_coord_t y) { lv_obj_t * label = get_label(ddlist); if(label == NULL) return 0; From 489f426b27e0f1500a27e4d453346b261833bded Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 12 Oct 2020 15:48:43 +0200 Subject: [PATCH 46/61] fix rectangle border drawing with large width --- CHANGELOG.md | 3 ++- src/lv_draw/lv_draw_rect.c | 37 ++++++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fa175fb2..7018ebc6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Changelog -## v7.7.0 (06.10.2020) +## v7.7.0 (20.10.2020) ### New features - Add PXP GPU support (for NXP MCUs) @@ -18,6 +18,7 @@ - Support RTL in pretty layout (draw columns right to left) - Skip objects in groups if they are in disabled state - Fix dropdown selection with RTL basedirection +- Fix rectangle border drawing with large width ## v7.6.1 (06.10.2020) diff --git a/src/lv_draw/lv_draw_rect.c b/src/lv_draw/lv_draw_rect.c index b2d517757..77d685806 100644 --- a/src/lv_draw/lv_draw_rect.c +++ b/src/lv_draw/lv_draw_rect.c @@ -51,7 +51,7 @@ LV_ATTRIBUTE_FAST_MEM static void shadow_blur_corner(lv_coord_t size, lv_coord_t static void draw_value_str(const lv_area_t * coords, const lv_area_t * clip, const lv_draw_rect_dsc_t * dsc); #endif static void draw_full_border(const lv_area_t * area_inner, const lv_area_t * area_outer, const lv_area_t * clip, - lv_coord_t radius, lv_color_t color, lv_opa_t opa, lv_blend_mode_t blend_mode); + lv_coord_t radius, bool radius_is_in, lv_color_t color, lv_opa_t opa, lv_blend_mode_t blend_mode); LV_ATTRIBUTE_FAST_MEM static inline lv_color_t grad_get(const lv_draw_rect_dsc_t * dsc, lv_coord_t s, lv_coord_t i); /********************** @@ -410,7 +410,7 @@ LV_ATTRIBUTE_FAST_MEM static void draw_border(const lv_area_t * coords, const lv area_inner.y2 -= ((dsc->border_side & LV_BORDER_SIDE_BOTTOM) ? dsc->border_width : - (dsc->border_width + rout)); if(dsc->border_side == LV_BORDER_SIDE_FULL) { - draw_full_border(&area_inner, coords, clip, dsc->radius, dsc->border_color, dsc->border_opa, dsc->border_blend_mode); + draw_full_border(&area_inner, coords, clip, dsc->radius, false, dsc->border_color, dsc->border_opa, dsc->border_blend_mode); } else { lv_opa_t opa = dsc->border_opa; @@ -1176,7 +1176,7 @@ static void draw_outline(const lv_area_t * coords, const lv_area_t * clip, const area_outer.y1 -= dsc->outline_width; area_outer.y2 += dsc->outline_width; - draw_full_border(&area_inner, &area_outer, clip, dsc->radius, dsc->outline_color, dsc->outline_opa, + draw_full_border(&area_inner, &area_outer, clip, dsc->radius, true, dsc->outline_color, dsc->outline_opa, dsc->outline_blend_mode); } #endif @@ -1325,7 +1325,7 @@ static void draw_value_str(const lv_area_t * coords, const lv_area_t * clip, con #endif static void draw_full_border(const lv_area_t * area_inner, const lv_area_t * area_outer, const lv_area_t * clip, - lv_coord_t radius, lv_color_t color, lv_opa_t opa, lv_blend_mode_t blend_mode) + lv_coord_t radius, bool radius_is_in, lv_color_t color, lv_opa_t opa, lv_blend_mode_t blend_mode) { uint8_t other_mask_cnt = lv_draw_mask_get_cnt(); bool simple_mode = true; @@ -1334,18 +1334,29 @@ static void draw_full_border(const lv_area_t * area_inner, const lv_area_t * are int32_t inner_w = lv_area_get_width(area_inner); int32_t inner_h = lv_area_get_height(area_inner); lv_coord_t border_width = area_outer->x2 - area_inner->x2; - int32_t rin = radius; - - int32_t short_side = LV_MATH_MIN(inner_w, inner_h); - if(rin > short_side >> 1) rin = short_side >> 1; - - /*Get the outer area*/ - int32_t rout = rin + border_width; int32_t coords_out_w = lv_area_get_width(area_outer); int32_t coords_out_h = lv_area_get_height(area_outer); - short_side = LV_MATH_MIN(coords_out_w, coords_out_h); - if(rout > short_side >> 1) rout = short_side >> 1; + + int32_t rin; + int32_t rout; + if(radius_is_in) { + rin = radius; + int32_t short_side = LV_MATH_MIN(inner_w, inner_h); + if(rin > short_side >> 1) rin = short_side >> 1; + + /*Get the outer area*/ + rout = rin + border_width; + } else { + rout = radius; + int32_t short_side = LV_MATH_MIN(coords_out_w, coords_out_h); + if(rout > short_side >> 1) rout = short_side >> 1; + + /*Get the outer area*/ + rin = rout - border_width; + if(rin < 0) rin = 0; + + } lv_disp_t * disp = _lv_refr_get_disp_refreshing(); lv_disp_buf_t * vdb = lv_disp_get_buf(disp); From ddb4ae8685c4bb6b0132d861e2f29f37b53c3330 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 13 Oct 2020 11:53:03 +0200 Subject: [PATCH 47/61] fix lv_win_clean() --- CHANGELOG.md | 1 + src/lv_widgets/lv_win.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7018ebc6e..f7eb5629f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ - Skip objects in groups if they are in disabled state - Fix dropdown selection with RTL basedirection - Fix rectangle border drawing with large width +- Fix `lv_win_clean()` ## v7.6.1 (06.10.2020) diff --git a/src/lv_widgets/lv_win.c b/src/lv_widgets/lv_win.c index 0e122976d..88203b319 100644 --- a/src/lv_widgets/lv_win.c +++ b/src/lv_widgets/lv_win.c @@ -172,8 +172,9 @@ lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy) void lv_win_clean(lv_obj_t * win) { LV_ASSERT_OBJ(win, LV_OBJX_NAME); + lv_win_ext_t * ext = lv_obj_get_ext_attr(win); - lv_obj_t * scrl = lv_page_get_scrollable(win); + lv_obj_t * scrl = lv_page_get_scrollable(ext->page); lv_obj_clean(scrl); } From 79433deeb8680fe9e72c9992e81d25c58a11a91d Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 13 Oct 2020 12:55:43 +0200 Subject: [PATCH 48/61] Update ROADMAP.md --- docs/ROADMAP.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index a2760a515..5a53021e7 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -34,6 +34,7 @@ Planned to September/October 2020 - Remove the copy paramter from create functions ## 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) From 8c0ab944af8d86d7f8273d4ea57064094c5b0edd Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Thu, 15 Oct 2020 15:21:55 +0200 Subject: [PATCH 49/61] Update ROADMAP.md --- docs/ROADMAP.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 5a53021e7..8ac190a61 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -37,7 +37,8 @@ Planned to September/October 2020 - 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) +- 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 From 8d9c0bd9b2e526b7d8bce35b868c2d37612fb3f0 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 16 Oct 2020 11:27:24 +0200 Subject: [PATCH 50/61] fix define_set to check define name end too --- scripts/release.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/release.py b/scripts/release.py index 856b088a0..624573b8e 100755 --- a/scripts/release.py +++ b/scripts/release.py @@ -87,7 +87,7 @@ def define_set(fn, name, value): print("In " + fn + " set " + name + " to " + value) new_content = "" - s = r'^ *# *define +' + str(name).rstrip() + s = r'^ *# *define +' + str(name).rstrip() + ' +' f = open(fn, "r") for i in f.read().splitlines(): From 55d78e1f927afc7337d9afe71da880f7dedb20ec Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 16 Oct 2020 13:06:21 +0200 Subject: [PATCH 51/61] Update ROADMAP.md --- docs/ROADMAP.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 8ac190a61..4c0b8377c 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -18,10 +18,12 @@ Planned to September/October 2020 - New layouts: - See [#1615](https://github.com/lvgl/lvgl/issues/1615) issue - [CSS Grid](https://css-tricks.com/snippets/css/a-guide-to-grid/)-like layout support - - Work in progress + - [CSS Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/)-like layout support + - Remove `lv_cont` and support layouts on `lv_obj` - 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 ## v8.1 - Add radio button widget @@ -32,6 +34,11 @@ Planned to September/October 2020 - Benchmarking (gem5?). See [#1660](https://github.com/lvgl/lvgl/issues/1660) - 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) + +## v10 +- Remove property level states + ## Ideas - 9-patch support for `lv_imgbtn`. From 4ca5d4e86dc397d6c86ff1ddcf61f4fef85f812e Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 16 Oct 2020 13:12:46 +0200 Subject: [PATCH 52/61] Update ROADMAP.md --- docs/ROADMAP.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 4c0b8377c..3a5ccedd5 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -6,6 +6,10 @@ This list indicates only the current intention and can be changed. ## v8 Planned to September/October 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 + - Good place for contribution - New scrolling: - See [feat/new-scroll](https://github.com/lvgl/lvgl/tree/feat/new-scroll) branch and [#1614](https://github.com/lvgl/lvgl/issues/1614)) issue. - Remove `lv_page` and support scrolling on `lv_obj` @@ -23,7 +27,7 @@ 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 +- Make the `copy` parameter of `create` functions deprecated ## v8.1 - Add radio button widget From 3d4284b02cacc23129d7258bd074ce61a91670d5 Mon Sep 17 00:00:00 2001 From: Themba Dube Date: Sun, 18 Oct 2020 12:32:22 -0400 Subject: [PATCH 53/61] stm32: use DSB to ensure GPU clock gets enabled --- src/lv_gpu/lv_gpu_stm32_dma2d.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lv_gpu/lv_gpu_stm32_dma2d.c b/src/lv_gpu/lv_gpu_stm32_dma2d.c index 90e788114..c47ab94cb 100644 --- a/src/lv_gpu/lv_gpu_stm32_dma2d.c +++ b/src/lv_gpu/lv_gpu_stm32_dma2d.c @@ -69,7 +69,10 @@ void lv_gpu_stm32_dma2d_init(void) RCC->AHB3ENR |= RCC_AHB3ENR_DMA2DEN; #else # warning "LVGL can't enable the clock of DMA2D" -#endif +#endif + + /* Wait for hardware access to complete */ + __asm volatile("DSB\n"); /* Delay after setting peripheral clock */ volatile uint32_t temp = RCC->AHB1ENR; From df49f8656db86e5acd8ca040ad01fa1e5b36a021 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 19 Oct 2020 12:33:34 +0200 Subject: [PATCH 54/61] fix image transformation Fixes: #1854 --- src/lv_widgets/lv_img.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lv_widgets/lv_img.c b/src/lv_widgets/lv_img.c index 1b0e7a817..d7fb1a85d 100644 --- a/src/lv_widgets/lv_img.c +++ b/src/lv_widgets/lv_img.c @@ -706,10 +706,10 @@ static lv_design_res_t lv_img_design(lv_obj_t * img, const lv_area_t * clip_area coords_tmp.y1 = zommed_coords.y1; coords_tmp.y2 = zommed_coords.y1 + ext->h - 1; - for(; coords_tmp.y1 <= clip_real.y2; coords_tmp.y1 += zoomed_src_h, coords_tmp.y2 += zoomed_src_h) { + for(; coords_tmp.y1 < zommed_coords.y2; coords_tmp.y1 += zoomed_src_h, coords_tmp.y2 += zoomed_src_h) { coords_tmp.x1 = zommed_coords.x1; coords_tmp.x2 = zommed_coords.x1 + ext->w - 1; - for(; coords_tmp.x1 <= clip_real.x2; coords_tmp.x1 += zoomed_src_w, coords_tmp.x2 += zoomed_src_w) { + for(; coords_tmp.x1 < zommed_coords.x2; coords_tmp.x1 += zoomed_src_w, coords_tmp.x2 += zoomed_src_w) { lv_draw_img(&coords_tmp, &clip_real, ext->src, &img_dsc); } } From 64c68ec25b4e369b563ec8b9599121dfa0009a1b Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 20 Oct 2020 13:27:14 +0200 Subject: [PATCH 55/61] release.py: add lv_sim_emscripten --- scripts/release.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/release.py b/scripts/release.py index 624573b8e..67e90f0ce 100755 --- a/scripts/release.py +++ b/scripts/release.py @@ -54,7 +54,7 @@ import sys upstream_org_url = "https://github.com/lvgl/" workdir = "./release_tmp" -proj_list = [ "lv_sim_eclipse_sdl"] +proj_list = [ "lv_sim_eclipse_sdl", "lv_sim_emscripten"] ver_major = -1 ver_minor = -1 From 6fb4235c667750295716cb40cc061a29b03e11a8 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 20 Oct 2020 13:32:57 +0200 Subject: [PATCH 56/61] prepare to release v7.7.0 --- library.json | 2 +- library.properties | 2 +- lvgl.h | 2 +- src/lv_conf_internal.h | 32 ++++- src/lv_core/lv_obj.c | 6 +- src/lv_draw/lv_draw_blend.c | 2 +- src/lv_draw/lv_draw_img.c | 2 +- src/lv_draw/lv_draw_rect.c | 8 +- src/lv_font/lv_font_montserrat_10.c | 17 +-- src/lv_font/lv_font_montserrat_8.c | 17 +-- src/lv_gpu/lv_gpu_nxp_vglite.c | 12 +- src/lv_themes/lv_theme_material.c | 23 ++-- src/lv_themes/lv_theme_mono.c | 23 ++-- src/lv_themes/lv_theme_template.c | 21 ++-- src/lv_widgets/lv_calendar.c | 6 +- src/lv_widgets/lv_chart.c | 173 ++++++++++++++-------------- src/lv_widgets/lv_chart.h | 2 +- src/lv_widgets/lv_cont.c | 5 +- src/lv_widgets/lv_table.c | 28 ++--- src/lv_widgets/lv_table.h | 9 +- 20 files changed, 206 insertions(+), 186 deletions(-) diff --git a/library.json b/library.json index d74ee907e..7bb94041d 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "lvgl", - "version": "7.6.1", + "version": "7.7.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": { diff --git a/library.properties b/library.properties index 0f9594804..f62ca30ab 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=lvgl -version=7.6.1 +version=7.7.0 author=kisvegabor maintainer=kisvegabor,embeddedt,pete-pjb sentence=Full-featured Graphics Library for Embedded Systems diff --git a/lvgl.h b/lvgl.h index d40b3fae4..58f3d5ce3 100644 --- a/lvgl.h +++ b/lvgl.h @@ -17,7 +17,7 @@ extern "C" { #define LVGL_VERSION_MAJOR 7 #define LVGL_VERSION_MINOR 7 #define LVGL_VERSION_PATCH 0 -#define LVGL_VERSION_INFO "dev" +#define LVGL_VERSION_INFO "" /********************* * INCLUDES diff --git a/src/lv_conf_internal.h b/src/lv_conf_internal.h index 3146c44b1..72993190c 100644 --- a/src/lv_conf_internal.h +++ b/src/lv_conf_internal.h @@ -478,7 +478,11 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h" */ /*1: Use PXP for CPU off-load on NXP RTxxx platforms */ #ifndef LV_USE_GPU_NXP_PXP -#define LV_USE_GPU_NXP_PXP 0 +# ifdef CONFIG_LV_USE_GPU_NXP_PXP +# define LV_USE_GPU_NXP_PXP CONFIG_LV_USE_GPU_NXP_PXP +# else +# define LV_USE_GPU_NXP_PXP 0 +# endif #endif /*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c) @@ -487,12 +491,20 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h" */ *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init() * */ #ifndef LV_USE_GPU_NXP_PXP_AUTO_INIT -#define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 +# ifdef CONFIG_LV_USE_GPU_NXP_PXP_AUTO_INIT +# define LV_USE_GPU_NXP_PXP_AUTO_INIT CONFIG_LV_USE_GPU_NXP_PXP_AUTO_INIT +# else +# define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 +# endif #endif /*1: Use VG-Lite for CPU offload on NXP RTxxx platforms */ #ifndef LV_USE_GPU_NXP_VG_LITE -#define LV_USE_GPU_NXP_VG_LITE 0 +# ifdef CONFIG_LV_USE_GPU_NXP_VG_LITE +# define LV_USE_GPU_NXP_VG_LITE CONFIG_LV_USE_GPU_NXP_VG_LITE +# else +# define LV_USE_GPU_NXP_VG_LITE 0 +# endif #endif /* 1: Enable file system (might be required for images */ @@ -621,7 +633,11 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h" */ /* Required alignment size for buffers */ #ifndef LV_ATTRIBUTE_MEM_ALIGN_SIZE -#define LV_ATTRIBUTE_MEM_ALIGN_SIZE +# ifdef CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE +# define LV_ATTRIBUTE_MEM_ALIGN_SIZE CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE +# else +# define LV_ATTRIBUTE_MEM_ALIGN_SIZE +# endif #endif /* With size optimization (-Os) the compiler might not align data to @@ -1874,7 +1890,15 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h" */ # define LV_TABLE_COL_MAX 12 # endif #endif +#ifndef LV_TABLE_CELL_STYLE_CNT +# ifdef CONFIG_LV_TABLE_CELL_STYLE_CNT +# define LV_TABLE_CELL_STYLE_CNT CONFIG_LV_TABLE_CELL_STYLE_CNT +# else +# define LV_TABLE_CELL_STYLE_CNT 4 +# endif #endif +#endif + /*Tab (dependencies: lv_page, lv_btnm)*/ #ifndef LV_USE_TABVIEW diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index 888fe2927..88e44b023 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -3526,8 +3526,8 @@ void lv_obj_init_draw_label_dsc(lv_obj_t * obj, uint8_t part, lv_draw_label_dsc_ draw_dsc->font = lv_obj_get_style_text_font(obj, part); if(draw_dsc->sel_start != LV_DRAW_LABEL_NO_TXT_SEL && draw_dsc->sel_end != LV_DRAW_LABEL_NO_TXT_SEL) { - draw_dsc->sel_color = lv_obj_get_style_text_sel_color(obj, part); - draw_dsc->sel_bg_color = lv_obj_get_style_text_sel_bg_color(obj, part); + draw_dsc->sel_color = lv_obj_get_style_text_sel_color(obj, part); + draw_dsc->sel_bg_color = lv_obj_get_style_text_sel_bg_color(obj, part); } #if LV_USE_BIDI @@ -4091,7 +4091,7 @@ static void report_style_mod_core(void * style, lv_obj_t * obj) for(ci = 0; ci < list->style_cnt; ci++) { /* changed class to _class to allow compilation as c++ */ lv_style_t * _class = lv_style_list_get_style(list, ci); - if(_class == style || style == NULL) { + if(_class == style || style == NULL) { lv_obj_refresh_style(obj, part, LV_STYLE_PROP_ALL); break; } diff --git a/src/lv_draw/lv_draw_blend.c b/src/lv_draw/lv_draw_blend.c index 4262fde30..326a2d078 100644 --- a/src/lv_draw/lv_draw_blend.c +++ b/src/lv_draw/lv_draw_blend.c @@ -757,7 +757,7 @@ LV_ATTRIBUTE_FAST_MEM static void map_normal(const lv_area_t * disp_area, lv_col if(opa > LV_OPA_MAX) { #if LV_USE_GPU_NXP_PXP - if (lv_area_get_size(draw_area) >= GPU_NXP_PXP_BLIT_SIZE_LIMIT) { + if(lv_area_get_size(draw_area) >= GPU_NXP_PXP_BLIT_SIZE_LIMIT) { lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa); return; } diff --git a/src/lv_draw/lv_draw_img.c b/src/lv_draw/lv_draw_img.c index 4165e094f..1e6de095f 100644 --- a/src/lv_draw/lv_draw_img.c +++ b/src/lv_draw/lv_draw_img.c @@ -14,7 +14,7 @@ #include "../lv_misc/lv_mem.h" #include "../lv_misc/lv_math.h" #if LV_USE_GPU_STM32_DMA2D -#include "../lv_gpu/lv_gpu_stm32_dma2d.h" + #include "../lv_gpu/lv_gpu_stm32_dma2d.h" #elif LV_USE_GPU_NXP_PXP #include "../lv_gpu/lv_gpu_nxp_pxp.h" #endif diff --git a/src/lv_draw/lv_draw_rect.c b/src/lv_draw/lv_draw_rect.c index 77d685806..4d41d4405 100644 --- a/src/lv_draw/lv_draw_rect.c +++ b/src/lv_draw/lv_draw_rect.c @@ -51,7 +51,7 @@ LV_ATTRIBUTE_FAST_MEM static void shadow_blur_corner(lv_coord_t size, lv_coord_t static void draw_value_str(const lv_area_t * coords, const lv_area_t * clip, const lv_draw_rect_dsc_t * dsc); #endif static void draw_full_border(const lv_area_t * area_inner, const lv_area_t * area_outer, const lv_area_t * clip, - lv_coord_t radius, bool radius_is_in, lv_color_t color, lv_opa_t opa, lv_blend_mode_t blend_mode); + lv_coord_t radius, bool radius_is_in, lv_color_t color, lv_opa_t opa, lv_blend_mode_t blend_mode); LV_ATTRIBUTE_FAST_MEM static inline lv_color_t grad_get(const lv_draw_rect_dsc_t * dsc, lv_coord_t s, lv_coord_t i); /********************** @@ -410,7 +410,8 @@ LV_ATTRIBUTE_FAST_MEM static void draw_border(const lv_area_t * coords, const lv area_inner.y2 -= ((dsc->border_side & LV_BORDER_SIDE_BOTTOM) ? dsc->border_width : - (dsc->border_width + rout)); if(dsc->border_side == LV_BORDER_SIDE_FULL) { - draw_full_border(&area_inner, coords, clip, dsc->radius, false, dsc->border_color, dsc->border_opa, dsc->border_blend_mode); + draw_full_border(&area_inner, coords, clip, dsc->radius, false, dsc->border_color, dsc->border_opa, + dsc->border_blend_mode); } else { lv_opa_t opa = dsc->border_opa; @@ -1347,7 +1348,8 @@ static void draw_full_border(const lv_area_t * area_inner, const lv_area_t * are /*Get the outer area*/ rout = rin + border_width; - } else { + } + else { rout = radius; int32_t short_side = LV_MATH_MIN(coords_out_w, coords_out_h); if(rout > short_side >> 1) rout = short_side >> 1; diff --git a/src/lv_font/lv_font_montserrat_10.c b/src/lv_font/lv_font_montserrat_10.c index 517908433..3f42da8b1 100644 --- a/src/lv_font/lv_font_montserrat_10.c +++ b/src/lv_font/lv_font_montserrat_10.c @@ -7,7 +7,7 @@ ******************************************************************************/ #ifndef LV_FONT_MONTSERRAT_10 -#define LV_FONT_MONTSERRAT_10 1 + #define LV_FONT_MONTSERRAT_10 1 #endif #if LV_FONT_MONTSERRAT_10 @@ -1126,8 +1126,7 @@ static const uint16_t unicode_list_1[] = { }; /*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ +static const lv_font_fmt_txt_cmap_t cmaps[] = { { .range_start = 32, .range_length = 95, .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY @@ -1144,8 +1143,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] = /*Map glyph_ids to kern left classes*/ -static const uint8_t kern_left_class_mapping[] = -{ +static const uint8_t kern_left_class_mapping[] = { 0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 0, 13, 14, 15, 16, 17, @@ -1169,8 +1167,7 @@ static const uint8_t kern_left_class_mapping[] = }; /*Map glyph_ids to kern right classes*/ -static const uint8_t kern_right_class_mapping[] = -{ +static const uint8_t kern_right_class_mapping[] = { 0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 13, 14, 15, 16, 17, 12, @@ -1194,8 +1191,7 @@ static const uint8_t kern_right_class_mapping[] = }; /*Kern values between classes*/ -static const int8_t kern_class_values[] = -{ +static const int8_t kern_class_values[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, @@ -1574,8 +1570,7 @@ static const int8_t kern_class_values[] = /*Collect the kern class' data in one place*/ -static const lv_font_fmt_txt_kern_classes_t kern_classes = -{ +static const lv_font_fmt_txt_kern_classes_t kern_classes = { .class_pair_values = kern_class_values, .left_class_mapping = kern_left_class_mapping, .right_class_mapping = kern_right_class_mapping, diff --git a/src/lv_font/lv_font_montserrat_8.c b/src/lv_font/lv_font_montserrat_8.c index 635ae50a3..ae766a7d2 100644 --- a/src/lv_font/lv_font_montserrat_8.c +++ b/src/lv_font/lv_font_montserrat_8.c @@ -7,7 +7,7 @@ ******************************************************************************/ #ifndef LV_FONT_MONTSERRAT_8 -#define LV_FONT_MONTSERRAT_8 1 + #define LV_FONT_MONTSERRAT_8 1 #endif #if LV_FONT_MONTSERRAT_8 @@ -918,8 +918,7 @@ static const uint16_t unicode_list_1[] = { }; /*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ +static const lv_font_fmt_txt_cmap_t cmaps[] = { { .range_start = 32, .range_length = 95, .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY @@ -936,8 +935,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] = /*Map glyph_ids to kern left classes*/ -static const uint8_t kern_left_class_mapping[] = -{ +static const uint8_t kern_left_class_mapping[] = { 0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 0, 13, 14, 15, 16, 17, @@ -961,8 +959,7 @@ static const uint8_t kern_left_class_mapping[] = }; /*Map glyph_ids to kern right classes*/ -static const uint8_t kern_right_class_mapping[] = -{ +static const uint8_t kern_right_class_mapping[] = { 0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 13, 14, 15, 16, 17, 12, @@ -986,8 +983,7 @@ static const uint8_t kern_right_class_mapping[] = }; /*Kern values between classes*/ -static const int8_t kern_class_values[] = -{ +static const int8_t kern_class_values[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, @@ -1366,8 +1362,7 @@ static const int8_t kern_class_values[] = /*Collect the kern class' data in one place*/ -static const lv_font_fmt_txt_kern_classes_t kern_classes = -{ +static const lv_font_fmt_txt_kern_classes_t kern_classes = { .class_pair_values = kern_class_values, .left_class_mapping = kern_left_class_mapping, .right_class_mapping = kern_right_class_mapping, diff --git a/src/lv_gpu/lv_gpu_nxp_vglite.c b/src/lv_gpu/lv_gpu_nxp_vglite.c index c3ced9264..ba4d708ab 100644 --- a/src/lv_gpu/lv_gpu_nxp_vglite.c +++ b/src/lv_gpu/lv_gpu_nxp_vglite.c @@ -131,7 +131,7 @@ lv_res_t lv_gpu_nxp_vglite_fill(lv_color_t * dest_buf, lv_coord_t dest_width, lv err |= vg_lite_init_path(&path, VG_LITE_S16, VG_LITE_LOW, sizeof(path_data), path_data, - fill_area->x1, fill_area->y1, fill_area->x2 + 1, fill_area->y2 + 1); + fill_area->x1, fill_area->y1, fill_area->x2 + 1, fill_area->y2 + 1); if(err != VG_LITE_SUCCESS) { #if LV_GPU_NXP_VG_LITE_LOG_ERRORS LV_LOG_ERROR("vg_lite_init_path() failed."); @@ -194,9 +194,9 @@ lv_res_t lv_gpu_nxp_vglite_blit(lv_gpu_nxp_vglite_blit_info_t * blit) return LV_RES_OK; /* Nothing to BLIT */ } - if (!blit) { - /* Wrong parameter */ - return LV_RES_INV; + if(!blit) { + /* Wrong parameter */ + return LV_RES_INV; } /* Wrap src/dst buffer into VG-Lite buffer */ @@ -230,8 +230,8 @@ lv_res_t lv_gpu_nxp_vglite_blit(lv_gpu_nxp_vglite_blit_info_t * blit) uint32_t color; vg_lite_blend_t blend; if(blit->opa >= LV_OPA_MAX) { - color = 0x0; - blend = VG_LITE_BLEND_NONE; + color = 0x0; + blend = VG_LITE_BLEND_NONE; } else { color = ((blit->opa) << 24) | ((blit->opa) << 16) | ((blit->opa) << 8) | (blit->opa); diff --git a/src/lv_themes/lv_theme_material.c b/src/lv_themes/lv_theme_material.c index 372f8a0e8..2dfe8e4a4 100644 --- a/src/lv_themes/lv_theme_material.c +++ b/src/lv_themes/lv_theme_material.c @@ -1264,21 +1264,20 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj, lv_theme_style_t name) break; #endif #if LV_USE_TABLE - case LV_THEME_TABLE: - { - list = lv_obj_get_style_list(obj, LV_TABLE_PART_BG); - _lv_style_list_add_style(list, &styles->bg); + case LV_THEME_TABLE: { + list = lv_obj_get_style_list(obj, LV_TABLE_PART_BG); + _lv_style_list_add_style(list, &styles->bg); - int idx = 1; /* start value should be 1, not zero, since cell styles + int idx = 1; /* start value should be 1, not zero, since cell styles start at 1 due to presence of LV_TABLE_PART_BG=0 - in the enum (lv_table.h) */ - /* declaring idx outside loop to work with older compilers */ - for (;idx <= LV_TABLE_CELL_STYLE_CNT; idx ++ ) { - list = lv_obj_get_style_list(obj, idx); - _lv_style_list_add_style(list, &styles->table_cell); + in the enum (lv_table.h) */ + /* declaring idx outside loop to work with older compilers */ + for(; idx <= LV_TABLE_CELL_STYLE_CNT; idx ++) { + list = lv_obj_get_style_list(obj, idx); + _lv_style_list_add_style(list, &styles->table_cell); + } + break; } - break; - } #endif #if LV_USE_WIN diff --git a/src/lv_themes/lv_theme_mono.c b/src/lv_themes/lv_theme_mono.c index 6c8a8bfaf..bfd12652b 100644 --- a/src/lv_themes/lv_theme_mono.c +++ b/src/lv_themes/lv_theme_mono.c @@ -888,22 +888,21 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj, lv_theme_style_t name) break; #endif #if LV_USE_TABLE - case LV_THEME_TABLE: - { - list = lv_obj_get_style_list(obj, LV_TABLE_PART_BG); - _lv_style_list_add_style(list, &styles->bg); + case LV_THEME_TABLE: { + list = lv_obj_get_style_list(obj, LV_TABLE_PART_BG); + _lv_style_list_add_style(list, &styles->bg); - int idx = 1; /* start value should be 1, not zero, since cell styles + int idx = 1; /* start value should be 1, not zero, since cell styles start at 1 due to presence of LV_TABLE_PART_BG=0 in the enum (lv_table.h) */ - /* declaring idx outside loop to work with older compilers */ - for (; idx <= LV_TABLE_CELL_STYLE_CNT; idx ++ ) { - list = lv_obj_get_style_list(obj, idx); - _lv_style_list_add_style(list, &styles->bg); - _lv_style_list_add_style(list, &styles->no_radius); + /* declaring idx outside loop to work with older compilers */ + for(; idx <= LV_TABLE_CELL_STYLE_CNT; idx ++) { + list = lv_obj_get_style_list(obj, idx); + _lv_style_list_add_style(list, &styles->bg); + _lv_style_list_add_style(list, &styles->no_radius); + } + break; } - break; - } #endif #if LV_USE_WIN diff --git a/src/lv_themes/lv_theme_template.c b/src/lv_themes/lv_theme_template.c index 1ee89979c..f9154d844 100644 --- a/src/lv_themes/lv_theme_template.c +++ b/src/lv_themes/lv_theme_template.c @@ -727,21 +727,20 @@ void theme_apply(lv_theme_t * th, lv_obj_t * obj, lv_theme_style_t name) break; #endif #if LV_USE_TABLE - case LV_THEME_TABLE: - { - list = lv_obj_get_style_list(obj, LV_TABLE_PART_BG); - _lv_style_list_add_style(list, &styles->bg); + case LV_THEME_TABLE: { + list = lv_obj_get_style_list(obj, LV_TABLE_PART_BG); + _lv_style_list_add_style(list, &styles->bg); - int idx = 1; /* start value should be 1, not zero, since cell styles + int idx = 1; /* start value should be 1, not zero, since cell styles start at 1 due to presence of LV_TABLE_PART_BG=0 in the enum (lv_table.h) */ - /* declaring idx outside loop to work with older compilers */ - for (; idx <= LV_TABLE_CELL_STYLE_CNT; idx ++ ) { - list = lv_obj_get_style_list(obj, idx); - _lv_style_list_add_style(list, &styles->bg); + /* declaring idx outside loop to work with older compilers */ + for(; idx <= LV_TABLE_CELL_STYLE_CNT; idx ++) { + list = lv_obj_get_style_list(obj, idx); + _lv_style_list_add_style(list, &styles->bg); + } + break; } - break; - } #endif #if LV_USE_WIN diff --git a/src/lv_widgets/lv_calendar.c b/src/lv_widgets/lv_calendar.c index 505cdc6ce..9aa6f3381 100644 --- a/src/lv_widgets/lv_calendar.c +++ b/src/lv_widgets/lv_calendar.c @@ -651,9 +651,9 @@ static lv_coord_t get_header_height(lv_obj_t * calendar) { const lv_font_t * font = lv_obj_get_style_text_font(calendar, LV_CALENDAR_PART_HEADER); lv_style_int_t top = lv_obj_get_style_margin_top(calendar, LV_CALENDAR_PART_HEADER) + - lv_obj_get_style_pad_top(calendar, LV_CALENDAR_PART_HEADER); + lv_obj_get_style_pad_top(calendar, LV_CALENDAR_PART_HEADER); lv_style_int_t bottom = lv_obj_get_style_margin_bottom(calendar, LV_CALENDAR_PART_HEADER) + - lv_obj_get_style_pad_bottom(calendar, LV_CALENDAR_PART_HEADER); + lv_obj_get_style_pad_bottom(calendar, LV_CALENDAR_PART_HEADER); return lv_font_get_line_height(font) + top + bottom; } @@ -690,7 +690,7 @@ static void draw_header(lv_obj_t * calendar, const lv_area_t * mask) header_area.x2 = calendar->coords.x2; header_area.y1 = calendar->coords.y1 + lv_obj_get_style_margin_top(calendar, LV_CALENDAR_PART_HEADER); header_area.y2 = header_area.y1 + lv_obj_get_style_pad_top(calendar, LV_CALENDAR_PART_HEADER) + - lv_font_get_line_height(font) + lv_obj_get_style_pad_bottom(calendar, LV_CALENDAR_PART_HEADER); + lv_font_get_line_height(font) + lv_obj_get_style_pad_bottom(calendar, LV_CALENDAR_PART_HEADER); lv_draw_rect_dsc_t header_rect_dsc; lv_draw_rect_dsc_init(&header_rect_dsc); diff --git a/src/lv_widgets/lv_chart.c b/src/lv_widgets/lv_chart.c index 055bccc14..481f15b93 100644 --- a/src/lv_widgets/lv_chart.c +++ b/src/lv_widgets/lv_chart.c @@ -658,12 +658,12 @@ void lv_chart_set_series_axis(lv_obj_t * chart, lv_chart_series_t * ser, lv_char */ void lv_chart_set_cursor_point(lv_obj_t * chart, lv_chart_cursor_t * cursor, lv_point_t * point) { - LV_ASSERT_NULL(cursor); - LV_UNUSED(chart); + LV_ASSERT_NULL(cursor); + LV_UNUSED(chart); - cursor->point.x = point->x; - cursor->point.y = point->y; - lv_chart_refresh(chart); + cursor->point.x = point->x; + cursor->point.y = point->y; + lv_chart_refresh(chart); } /*===================== @@ -787,42 +787,43 @@ uint16_t lv_chart_get_nearest_index_from_coord(lv_obj_t * chart, lv_coord_t x) */ lv_coord_t lv_chart_get_x_from_index(lv_obj_t * chart, lv_chart_series_t * ser, uint16_t id) { - LV_ASSERT_NULL(chart); - LV_ASSERT_NULL(ser); + LV_ASSERT_NULL(chart); + LV_ASSERT_NULL(ser); - lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); - if(id >= ext->point_cnt) { - LV_LOG_WARN("Invalid index: %d", id); - return 0; - } + lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(id >= ext->point_cnt) { + LV_LOG_WARN("Invalid index: %d", id); + return 0; + } - lv_area_t series_area; - lv_chart_get_series_area(chart, &series_area); + lv_area_t series_area; + lv_chart_get_series_area(chart, &series_area); - lv_coord_t w = lv_area_get_width(&series_area); + lv_coord_t w = lv_area_get_width(&series_area); - lv_coord_t x = 0; + lv_coord_t x = 0; - if(ext->type & LV_CHART_TYPE_LINE) { - x = (w * id) / (ext->point_cnt - 1); - } else if(ext->type & LV_CHART_TYPE_COLUMN) { - lv_coord_t col_w = w / ((_lv_ll_get_len(&ext->series_ll) + 1) * ext->point_cnt); /* Suppose + 1 series as separator*/ - lv_chart_series_t * itr_ser = NULL; - lv_style_int_t col_space = lv_obj_get_style_pad_inner(chart, LV_CHART_PART_SERIES); + if(ext->type & LV_CHART_TYPE_LINE) { + x = (w * id) / (ext->point_cnt - 1); + } + else if(ext->type & LV_CHART_TYPE_COLUMN) { + lv_coord_t col_w = w / ((_lv_ll_get_len(&ext->series_ll) + 1) * ext->point_cnt); /* Suppose + 1 series as separator*/ + lv_chart_series_t * itr_ser = NULL; + lv_style_int_t col_space = lv_obj_get_style_pad_inner(chart, LV_CHART_PART_SERIES); - x = (int32_t)((int32_t)w * id) / ext->point_cnt; - x += col_w / 2; /*Start offset*/ + x = (int32_t)((int32_t)w * id) / ext->point_cnt; + x += col_w / 2; /*Start offset*/ - _LV_LL_READ_BACK(ext->series_ll, itr_ser) { - if(itr_ser == ser) break; - x += col_w; - } + _LV_LL_READ_BACK(ext->series_ll, itr_ser) { + if(itr_ser == ser) break; + x += col_w; + } - x += (col_w - col_space) / 2; - } + x += (col_w - col_space) / 2; + } - return x; + return x; } /** @@ -835,25 +836,25 @@ lv_coord_t lv_chart_get_x_from_index(lv_obj_t * chart, lv_chart_series_t * ser, */ lv_coord_t lv_chart_get_y_from_index(lv_obj_t * chart, lv_chart_series_t * ser, uint16_t id) { - LV_ASSERT_NULL(chart); - LV_ASSERT_NULL(ser); + LV_ASSERT_NULL(chart); + LV_ASSERT_NULL(ser); - lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); - if(id >= ext->point_cnt) { - LV_LOG_WARN("Invalid index: %d", id); - return 0; - } + lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(id >= ext->point_cnt) { + LV_LOG_WARN("Invalid index: %d", id); + return 0; + } - lv_area_t series_area; - lv_chart_get_series_area(chart, &series_area); + lv_area_t series_area; + lv_chart_get_series_area(chart, &series_area); - lv_coord_t h = lv_area_get_height(&series_area); + lv_coord_t h = lv_area_get_height(&series_area); - int32_t y = (int32_t)((int32_t)ser->points[id] - ext->ymin[ser->y_axis]) * h; - y = y / (ext->ymax[ser->y_axis] - ext->ymin[ser->y_axis]); - y = h - y; + int32_t y = (int32_t)((int32_t)ser->points[id] - ext->ymin[ser->y_axis]) * h; + y = y / (ext->ymax[ser->y_axis] - ext->ymin[ser->y_axis]); + y = h - y; - return (lv_coord_t)y; + return (lv_coord_t)y; } /** @@ -1327,55 +1328,55 @@ static void draw_cursors(lv_obj_t * chart, const lv_area_t * series_area, const /*Go through all cursor lines*/ _LV_LL_READ_BACK(ext->cursors_ll, cursor) { - line_dsc.color = cursor->color; - point_dsc.bg_color = cursor->color; + line_dsc.color = cursor->color; + point_dsc.bg_color = cursor->color; - if(cursor->axes & LV_CHART_CURSOR_RIGHT) { - p1.x = series_area->x1 + cursor->point.x; - p1.y = series_area->y1 + cursor->point.y; - p2.x = series_area->x2; - p2.y = p1.y; - lv_draw_line(&p1, &p2, &series_mask, &line_dsc); - } + if(cursor->axes & LV_CHART_CURSOR_RIGHT) { + p1.x = series_area->x1 + cursor->point.x; + p1.y = series_area->y1 + cursor->point.y; + p2.x = series_area->x2; + p2.y = p1.y; + lv_draw_line(&p1, &p2, &series_mask, &line_dsc); + } - if(cursor->axes & LV_CHART_CURSOR_UP) { + if(cursor->axes & LV_CHART_CURSOR_UP) { - p1.x = series_area->x1 + cursor->point.x; - p1.y = series_area->y1; - p2.x = p1.x; - p2.y = series_area->y1 + cursor->point.y; - lv_draw_line(&p1, &p2, &series_mask, &line_dsc); - } + p1.x = series_area->x1 + cursor->point.x; + p1.y = series_area->y1; + p2.x = p1.x; + p2.y = series_area->y1 + cursor->point.y; + lv_draw_line(&p1, &p2, &series_mask, &line_dsc); + } - if(cursor->axes & LV_CHART_CURSOR_LEFT) { - p1.x = series_area->x1; - p1.y = series_area->y1 + cursor->point.y; - p2.x = p1.x + cursor->point.x; - p2.y = p1.y; - lv_draw_line(&p1, &p2, &series_mask, &line_dsc); - } + if(cursor->axes & LV_CHART_CURSOR_LEFT) { + p1.x = series_area->x1; + p1.y = series_area->y1 + cursor->point.y; + p2.x = p1.x + cursor->point.x; + p2.y = p1.y; + lv_draw_line(&p1, &p2, &series_mask, &line_dsc); + } - if(cursor->axes & LV_CHART_CURSOR_DOWN) { + if(cursor->axes & LV_CHART_CURSOR_DOWN) { - p1.x = series_area->x1 + cursor->point.x; - p1.y = series_area->y1 + cursor->point.y; - p2.x = p1.x; - p2.y = series_area->y2; - lv_draw_line(&p1, &p2, &series_mask, &line_dsc); - } + p1.x = series_area->x1 + cursor->point.x; + p1.y = series_area->y1 + cursor->point.y; + p2.x = p1.x; + p2.y = series_area->y2; + lv_draw_line(&p1, &p2, &series_mask, &line_dsc); + } - if(point_radius) { - lv_area_t point_area; + if(point_radius) { + lv_area_t point_area; - point_area.x1 = series_area->x1 + cursor->point.x - point_radius; - point_area.x2 = series_area->x1 + cursor->point.x + point_radius; + point_area.x1 = series_area->x1 + cursor->point.x - point_radius; + point_area.x2 = series_area->x1 + cursor->point.x + point_radius; - point_area.y1 = series_area->y1 + cursor->point.y - point_radius; - point_area.y2 = series_area->y1 + cursor->point.y + point_radius; + point_area.y1 = series_area->y1 + cursor->point.y - point_radius; + point_area.y2 = series_area->y1 + cursor->point.y + point_radius; - /*Don't limit to `series_mask` to get full circles on the ends*/ - lv_draw_rect(&point_area, clip_area, &point_dsc); - } + /*Don't limit to `series_mask` to get full circles on the ends*/ + lv_draw_rect(&point_area, clip_area, &point_dsc); + } } @@ -1620,7 +1621,9 @@ static void draw_y_ticks(lv_obj_t * chart, const lv_area_t * series_area, const /* set the area at some distance of the major tick len left of the tick */ /* changed to explicit member initialization to allow compilation as c++ */ - lv_area_t a; a.y1 = p2.y - size.y / 2; a.y2 = p2.y + size.y / 2; + lv_area_t a; + a.y1 = p2.y - size.y / 2; + a.y2 = p2.y + size.y / 2; if(which_axis == LV_CHART_AXIS_PRIMARY_Y) { a.x1 = p2.x - size.x - label_dist; diff --git a/src/lv_widgets/lv_chart.h b/src/lv_widgets/lv_chart.h index 16ee6bcf0..797edc378 100644 --- a/src/lv_widgets/lv_chart.h +++ b/src/lv_widgets/lv_chart.h @@ -63,7 +63,7 @@ typedef uint8_t lv_chart_axis_t; enum { LV_CHART_CURSOR_NONE = 0x00, - LV_CHART_CURSOR_RIGHT = 0x01, + LV_CHART_CURSOR_RIGHT = 0x01, LV_CHART_CURSOR_UP = 0x02, LV_CHART_CURSOR_LEFT = 0x04, LV_CHART_CURSOR_DOWN = 0x08 diff --git a/src/lv_widgets/lv_cont.c b/src/lv_widgets/lv_cont.c index c004d7215..08a0e4e6f 100644 --- a/src/lv_widgets/lv_cont.c +++ b/src/lv_widgets/lv_cont.c @@ -571,7 +571,8 @@ static void lv_cont_layout_pretty(lv_obj_t * cont) if(lv_obj_get_base_dir(cont) == LV_BIDI_DIR_RTL) { align = LV_ALIGN_IN_TOP_RIGHT; inv = -1; - } else { + } + else { align = LV_ALIGN_IN_TOP_LEFT; inv = 1; } @@ -582,7 +583,7 @@ static void lv_cont_layout_pretty(lv_obj_t * cont) switch(type) { case LV_LAYOUT_PRETTY_TOP: lv_obj_align(child_tmp, cont, align, - inv * (act_x + mleft), + inv * (act_x + mleft), act_y + lv_obj_get_style_margin_top(child_tmp, LV_OBJ_PART_MAIN)); break; case LV_LAYOUT_PRETTY_MID: diff --git a/src/lv_widgets/lv_table.c b/src/lv_widgets/lv_table.c index ee23f7d52..31f71aa35 100644 --- a/src/lv_widgets/lv_table.c +++ b/src/lv_widgets/lv_table.c @@ -180,10 +180,10 @@ void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t col, const _lv_txt_ap_proc(txt, &ext->cell_data[cell][1]); #else ext->cell_data[cell] = lv_mem_realloc(ext->cell_data[cell], strlen(txt) + 2); /*+1: trailing '\0; +1: format byte*/ - LV_ASSERT_MEM(ext->cell_data[cell]); - if(ext->cell_data[cell] == NULL) return; + LV_ASSERT_MEM(ext->cell_data[cell]); + if(ext->cell_data[cell] == NULL) return; - strcpy(ext->cell_data[cell] + 1, txt); /*+1 to skip the format byte*/ + strcpy(ext->cell_data[cell] + 1, txt); /*+1 to skip the format byte*/ #endif ext->cell_data[cell][0] = format.format_byte; @@ -238,12 +238,12 @@ void lv_table_set_cell_value_fmt(lv_obj_t * table, uint16_t row, uint16_t col, c } va_list ap, ap2; - va_start(ap, fmt); - va_copy(ap2, ap); + va_start(ap, fmt); + va_copy(ap2, 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_end(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_end(ap); #if LV_USE_ARABIC_PERSIAN_CHARS /*Put together the text according to the format string*/ @@ -878,7 +878,8 @@ static lv_design_res_t lv_table_design(lv_obj_t * table, const lv_area_t * clip_ if(rtl) { cell_area.x2 = cell_area.x1 - 1; cell_area.x1 = cell_area.x2 - ext->col_w[col] + 1; - } else { + } + else { cell_area.x1 = cell_area.x2 + 1; cell_area.x2 = cell_area.x1 + ext->col_w[col] - 1; } @@ -1066,10 +1067,11 @@ static lv_style_list_t * lv_table_get_style(lv_obj_t * table, uint8_t part) /* Because of the presence of LV_TABLE_PART_BG, LV_TABLE_PART_CELL has an integer value of . This comes in useful to extend above code with more cell types as follows */ - if ( part == LV_TABLE_PART_BG ) { - return &table->style_list; - } else if (part >= 1 && part <= LV_TABLE_CELL_STYLE_CNT ) { - return &ext->cell_style[part-1]; + if(part == LV_TABLE_PART_BG) { + return &table->style_list; + } + else if(part >= 1 && part <= LV_TABLE_CELL_STYLE_CNT) { + return &ext->cell_style[part - 1]; } return NULL; diff --git a/src/lv_widgets/lv_table.h b/src/lv_widgets/lv_table.h index 82bdf4b06..ea00c45ed 100644 --- a/src/lv_widgets/lv_table.h +++ b/src/lv_widgets/lv_table.h @@ -32,12 +32,12 @@ extern "C" { #define LV_TABLE_COL_MAX 12 #endif -/* - Maximum allowable value of LV_TABLE_CELL_STYLE_CNT is 16 +/* + Maximum allowable value of LV_TABLE_CELL_STYLE_CNT is 16 because of restriction of lv_table_cell_format_t.type to no more than 4 bits so that lv_table_cell_format_t.s will not exceed 8 bits */ -#ifndef LV_TABLE_CELL_STYLE_CNT +#ifndef LV_TABLE_CELL_STYLE_CNT # define LV_TABLE_CELL_STYLE_CNT 4 #endif #if (LV_TABLE_CELL_STYLE_CNT > 16) @@ -71,7 +71,8 @@ typedef struct { lv_coord_t * row_h; lv_style_list_t cell_style[LV_TABLE_CELL_STYLE_CNT]; lv_coord_t col_w[LV_TABLE_COL_MAX]; - uint16_t cell_types : LV_TABLE_CELL_STYLE_CNT; /*Keep track which cell types exists to avoid dealing with unused ones*/ +uint16_t cell_types : + LV_TABLE_CELL_STYLE_CNT; /*Keep track which cell types exists to avoid dealing with unused ones*/ } lv_table_ext_t; /*Parts of the table*/ From 16a4023abfebd1c7f03ecca71734b847d666fa76 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 21 Oct 2020 14:06:48 +0200 Subject: [PATCH 57/61] reorganize release script --- .gitignore | 1 + scripts/release.py | 517 ------------------ .../release/__pycache__/com.cpython-36.pyc | Bin 0 -> 3276 bytes .../release/__pycache__/dev.cpython-36.pyc | Bin 0 -> 2087 bytes .../release/__pycache__/proj.cpython-36.pyc | Bin 0 -> 1826 bytes .../__pycache__/release.cpython-36.pyc | Bin 0 -> 4276 bytes scripts/release/com.py | 109 ++++ scripts/release/dev.py | 74 +++ scripts/release/main.py | 64 +++ scripts/release/proj.py | 64 +++ scripts/release/release.py | 173 ++++++ 11 files changed, 485 insertions(+), 517 deletions(-) delete mode 100755 scripts/release.py create mode 100644 scripts/release/__pycache__/com.cpython-36.pyc create mode 100644 scripts/release/__pycache__/dev.cpython-36.pyc create mode 100644 scripts/release/__pycache__/proj.cpython-36.pyc create mode 100644 scripts/release/__pycache__/release.cpython-36.pyc create mode 100755 scripts/release/com.py create mode 100755 scripts/release/dev.py create mode 100755 scripts/release/main.py create mode 100755 scripts/release/proj.py create mode 100755 scripts/release/release.py diff --git a/.gitignore b/.gitignore index f0da6a113..07070a949 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +scripts/release/__pycache__ **/*.o **/*bin **/*.swp diff --git a/scripts/release.py b/scripts/release.py deleted file mode 100755 index 67e90f0ce..000000000 --- a/scripts/release.py +++ /dev/null @@ -1,517 +0,0 @@ -#!/usr/bin/env python - -# Release lvgl, lv_examples, lv_drivers. docs, blog and prepare the development of the next major, minoror bugfix release -# Usage: ./release,py bugfix | minor | major -# The option means what type of versin to prepare for development after release -# -# STEPS: -# - clone all 5 repos -# - get the version numnber from lvgl.h -# - set release branch (e.g. "release/v7") -# - prepare lvgl -# - run lv_conf_internal.py -# - run code formatter -# - clear LVGL_VERSION_INFO (set to "") -# - run Doxygen -# - update the version in lvgl's library.json, library.properties, lv_conf_template.h -# - update CHANGELOG.md -# - commit changes -# - prepare lv_examples -# - upadte the required LVGL version in lv_examples.h (LV_VERSION_CHECK) -# - update the version in lv_ex_conf_template.h -# - prepare lv_drivers -# - update the version in library.json, lv_drv_conf_template.h -# - prepare docs -# - update API XML -# - clear the versiopn info (should be plain vx.y.z) -# - tag all repos with the new version -# - merge to release branches -# - blog: add release post -# - push tags and commits -# - docs: run ./updade.py release/vX -# -# If --patch -# - merge master to dev branches -# - increment patch version by 1 and append "-dev". E.g. "vX.Y.(Z+1)-dev" -# - update version numbers in lvgl and docs -# - commit and push -# - docs: run ./updade.py latest dev -# -# Else (not --patch) -# - merge master to dev -# - merge the dev to master -# - increment version number like "vX.(Y+1).0-dev" -# - apply the new version in dev branches of lvgl, lv_examples, lv_drivers, docs -# - commit and push to dev branches -# - docs: run ./updade.py latest dev - -import re -import os, fnmatch -import os.path -from os import path -from datetime import date -import sys - -upstream_org_url = "https://github.com/lvgl/" -workdir = "./release_tmp" -proj_list = [ "lv_sim_eclipse_sdl", "lv_sim_emscripten"] - -ver_major = -1 -ver_minor = -1 -ver_patch = -1 - -dev_ver_major = -1 -dev_ver_minor = -1 -dev_ver_patch = -1 - -ver_str = "" -dev_ver_str = "" -release_br = "" -release_note = "" - -prepare_type = ['major', 'minor', 'bugfix'] - -dev_prepare = 'minor' - -def upstream(repo): - return upstream_org_url + repo + ".git" - -def cmd(c, exit_on_err = True): - print("\n" + c) - r = os.system(c) - if r: - print("### Error: " + str(r)) - if exit_on_err: exit(int(r)) - -def define_set(fn, name, value): - print("In " + fn + " set " + name + " to " + value) - - new_content = "" - s = r'^ *# *define +' + str(name).rstrip() + ' +' - - f = open(fn, "r") - for i in f.read().splitlines(): - r = re.search(s, i) - if r: - d = i.split("define") - i = d[0] + "define " + name + " " + value - new_content += i + '\n' - - f.close() - - f = open(fn, "w") - f.write(new_content) - f.close() - -def clone_repos(): - cmd("rm -fr " + workdir) - cmd("mkdir " + workdir) - os.chdir(workdir) - - cmd("git clone " + upstream("lvgl") + "; cd lvgl; git checkout master; git remote update origin --prune; ") - cmd("git clone " + upstream("lv_examples") + "; cd lv_examples; git checkout master; git remote update origin --prune; ") - cmd("git clone " + upstream("lv_drivers") + "; cd lv_drivers; git checkout master; git remote update origin --prune; ") - cmd("git clone --recurse-submodules " + upstream("docs") + "; cd docs; git checkout master; git remote update origin --prune; ") - cmd("git clone " + upstream("blog") + "; cd blog; git checkout master; git remote update origin --prune; ") - - for p in proj_list: - cmd("git clone " + upstream(p) + " --recurse-submodules ; cd " + p + "; git checkout master; git remote update origin --prune; ") - - -def get_lvgl_version(br): - print("Get LVGL's version") - - global ver_str, ver_major, ver_minor, ver_patch, release_br - - os.chdir("./lvgl") - - cmd("git checkout " + br) - - f = open("./lvgl.h", "r") - - lastNum = re.compile(r'(?:[^\d]*(\d+)[^\d]*)+') - for i in f.read().splitlines(): - r = re.search(r'^#define LVGL_VERSION_MAJOR ', i) - if r: - m = lastNum.search(i) - if m: ver_major = m.group(1) - - r = re.search(r'^#define LVGL_VERSION_MINOR ', i) - if r: - m = lastNum.search(i) - if m: ver_minor = m.group(1) - - r = re.search(r'^#define LVGL_VERSION_PATCH ', i) - if r: - m = lastNum.search(i) - if m: ver_patch = m.group(1) - - f.close() - - cmd("git checkout master") - - ver_str = "v" + str(ver_major) + "." + str(ver_minor) + "." + str(ver_patch) - print("New version:" + ver_str) - - release_br = "release/v" + ver_major - - os.chdir("../") - -def update_version(): - templ = fnmatch.filter(os.listdir('.'), '*templ*') - - if templ[0]: - print("Updating version in " + templ[0]) - cmd("sed -i -r 's/v[0-9]+\.[0-9]+\.[0-9]+/"+ ver_str +"/' " + templ[0]) - - if os.path.exists("library.json"): - print("Updating version in library.json") - cmd("sed -i -r 's/[0-9]+\.[0-9]+\.[0-9]+/"+ ver_str[1:] +"/' library.json") - - if path.exists("library.properties"): - print("Updating version in library.properties") - cmd("sed -i -r 's/version=[0-9]+\.[0-9]+\.[0-9]+/"+ "version=" + ver_str[1:] + "/' library.properties") - -def lvgl_prepare(): - print("Prepare lvgl") - - global ver_str, ver_major, ver_minor, ver_patch - - os.chdir("./lvgl") - define_set("./lvgl.h", "LVGL_VERSION_INFO", '\"\"') - - # Run some scripts - os.chdir("./scripts") - cmd("./code-format.sh") - cmd("./lv_conf_checker.py") - cmd("doxygen") - os.chdir("../") - - update_version() - - #update CHANGLELOG - new_content = "" - f = open("./CHANGELOG.md", "r") - - global release_note - release_note = "" - note_state = 0 - for i in f.read().splitlines(): - if note_state == 0: - r = re.search(r'^## ' + ver_str, i) - if r: - i = i.replace("planned on ", "") - note_state+=1 - - elif note_state == 1: - r = re.search(r'^## ', i) - if r: - note_state+=1 - else: - release_note += i + '\n' - - new_content += i + '\n' - - f.close() - - f = open("./CHANGELOG.md", "w") - f.write(new_content) - f.close() - - cmd('git commit -am "prepare to release ' + ver_str + '"') - - os.chdir("../") - - -def lv_examples_prepare(): - print("Prepare lv_examples") - global ver_str, ver_major, ver_minor, ver_patch - - os.chdir("./lv_examples") - - update_version() - - cmd("sed -i -r 's/LV_VERSION_CHECK\([0-9]+, *[0-9]+, *[0-9]+\)/"+ "LV_VERSION_CHECK(" + ver_major + ", " + ver_minor + ", " + ver_patch + ")/' lv_examples.h") - - cmd('git commit -am "prepare to release ' + ver_str + '"') - - os.chdir("../") - -def lv_drivers_prepare(): - print("Prepare lv_drivers") - global ver_str, ver_major, ver_minor, ver_patch - - os.chdir("./lv_drivers") - - update_version() - - cmd('git commit -am "prepare to release ' + ver_str + '"') - - os.chdir("../") - -def docs_prepare(): - print("Prepare docs") - global ver_str, ver_major, ver_minor, ver_patch - - os.chdir("./docs") - - cmd("git co latest --") - cmd("rm -rf xml"); - cmd("cp -r ../lvgl/docs/api_doc/xml ."); - cmd("git add xml"); - - cmd("sed -i -r \"s/'v[0-9]+\.[0-9]+\.[0-9]+.*'/\'" + ver_str + "'/\" conf.py") - - cmd('git commit -am "prepare to release ' + ver_str + '"') - - os.chdir("../") - -def blog_add_post(): - global ver_str, release_note - - os.chdir("./blog/_posts") - - post = "---\nlayout: post\ntitle: " + ver_str + " is released\nauthor: \"kisvegabor\"\ncover: /assets/release_cover.png\n---\n\n" - post += release_note - - today = date.today() - d = today.strftime("%Y-%m-%d") - - f = open(d + "-release_" + ver_str + ".md", "w") - f.write(post) - f.close() - - cmd("git add .") - cmd("git commit -am 'Add " + ver_str + " release post'") - - os.chdir("../../") - -def add_tags(): - global ver_str - tag_cmd = " git tag -a " + ver_str + " -m 'Release " + ver_str + "' " - cmd("cd lvgl; " + tag_cmd) - cmd("cd lv_examples; " + tag_cmd) - cmd("cd lv_drivers; " + tag_cmd) - cmd("cd docs; " + tag_cmd) - -def update_release_branches(): - global release_br - merge_cmd = " git checkout " + release_br + "; git pull origin " + release_br + "; git merge master -X ours; git push origin " + release_br + "; git checkout master" - cmd("cd lvgl; " + merge_cmd) - cmd("cd lv_examples; " + merge_cmd) - cmd("cd lv_drivers; " + merge_cmd) - - merge_cmd = " git checkout " + release_br + "; git pull origin " + release_br + "; git merge latest -X ours; git push origin " + release_br + "; git checkout latest" - cmd("cd docs; " + merge_cmd) - -def publish_master(): - - #Merge LVGL master to dev first to avoid "merge-to-dev.yml" running asynchronous - os.chdir("./lvgl") - cmd("git checkout dev") - cmd("git merge master -X ours") - cmd("git add .") - cmd("git commit -am 'Merge master'", False) - cmd("git push origin dev") - cmd("git checkout master") - os.chdir("../") - - pub_cmd = "git push origin master; git push origin " + ver_str - cmd("cd lvgl; " + pub_cmd) - cmd("cd lv_examples; " + pub_cmd) - cmd("cd lv_drivers; " + pub_cmd) - - pub_cmd = "git push origin master" - cmd("cd blog; " + pub_cmd) - -def merge_from_dev(): - merge_cmd = "git checkout master; git merge dev;" - cmd("cd lvgl; " + merge_cmd) - - merge_cmd = "git checkout latest -- ; git merge dev -X theirs --no-edit;" - cmd("cd docs; " + merge_cmd) - - -def lvgl_update_master_version(): - global ver_major, ver_minor, ver_patch, ver_str - - os.chdir("./lvgl") - - cmd("git checkout master") - define_set("./lvgl.h", "LVGL_VERSION_MAJOR", ver_major) - define_set("./lvgl.h", "LVGL_VERSION_MINOR", ver_minor) - define_set("./lvgl.h", "LVGL_VERSION_PATCH", ver_patch) - define_set("./lvgl.h", "LVGL_VERSION_INFO", "dev") - - templ = fnmatch.filter(os.listdir('.'), '*templ*') - if templ[0]: - print("Updating version in " + templ[0]) - cmd("sed -i -r 's/v[0-9]+\.[0-9]+\.[0-9]+.*/"+ ver_str +"/' " + templ[0]) - - - cmd("git commit -am 'Update version'") - - os.chdir("../") - -def docs_update_latest_version(): - global ver_str - - os.chdir("./docs") - cmd("git checkout latest --") - cmd("sed -i -r \"s/'v[0-9]+\.[0-9]+\.[0-9]+.*'/\'" + ver_str + "'/\" conf.py") - cmd("git commit -am 'Update version'") - cmd("git checkout master --") - - os.chdir("../") - - -def lvgl_update_dev_version(): - global ver_major, ver_minor, ver_patch, dev_ver_str - - os.chdir("./lvgl") - - cmd("git checkout dev") - define_set("./lvgl.h", "LVGL_VERSION_MAJOR", str(ver_major)) - define_set("./lvgl.h", "LVGL_VERSION_MINOR", str(ver_minor)) - define_set("./lvgl.h", "LVGL_VERSION_PATCH", str(ver_patch)) - define_set("./lvgl.h", "LVGL_VERSION_INFO", "\"dev\"") - - templ = fnmatch.filter(os.listdir('.'), '*templ*') - if templ[0]: - print("Updating version in " + templ[0]) - cmd("sed -i -r 's/v[0-9]+\.[0-9]+\.[0-9]+.*/"+ dev_ver_str +"/' " + templ[0]) - - - cmd("git commit -am 'Update dev version'") - cmd("git checkout master") - - os.chdir("../") - -def docs_update_dev_version(): - global dev_ver_str - - os.chdir("./docs") - cmd("git checkout dev --") - cmd("sed -i -r \"s/'v[0-9]+\.[0-9]+\.[0-9]+.*'/\'" + dev_ver_str + "'/\" conf.py") - cmd("git commit -am 'Update dev version'") - cmd("git checkout master --") - - os.chdir("../") - - -def publish_dev_and_master(): - pub_cmd = "git checkout dev; git push origin dev" - cmd("cd lvgl; " + pub_cmd) - pub_cmd = "git checkout master; git push origin master" - cmd("cd lvgl; " + pub_cmd) - -def projs_update(): - global proj_list, release_br, ver_str - for p in proj_list: - os.chdir("./" + p) - cmd('git checkout master') - print(p + ": upadte lvgl"); - cmd("cd lvgl; git co " + release_br + "; git pull origin " + release_br) - cmd("cp -f lvgl/lv_conf_template.h lv_conf.h") - cmd("sed -i -r 's/#if 0/#if 1/' lv_conf.h") # Enable lv_conf.h - d = {} - with open("confdef.txt") as f: - for line in f: - (key, val) = line.rstrip().split('\t') - d[key] = val - - for k,v in d.items(): - define_set("lv_conf.h", str(k), str(v)) - - if os.path.exists("lv_examples"): - print(p + ": upadte lv_examples"); - cmd("cd lv_examples; git co " + release_br + "; git pull origin " + release_br) - - if os.path.exists("lv_drivers"): - print(p + ": upadte lv_drivers"); - cmd("cd lv_drivers " + release_br + "; git pull origin " + release_br) - - msg = 'Update to ' + ver_str - cmd("git add .") - cmd('git commit -am "' + msg + '"') - cmd('git push origin master') - cmd("git tag -a " + ver_str + " -m '" + msg + "' " ) - cmd('git push origin ' + ver_str) - - os.chdir("../") - -def docs_update_all(): - cmd("cd docs; git checkout master; python 2.7 ./update.py master dev " + release_br) - -def cleanup(): - os.chdir("../") - cmd("rm -fr " + workdir) - -if __name__ == '__main__': - dev_prepare = 'minor' - if(len(sys.argv) != 2): - print("Missing argument. Usage ./release.py bugfix | minor | major") - print("Use minor by deafult") - else: - dev_prepare = sys.argv[1] - - if not (dev_prepare in prepare_type): - print("Invalid argument. Usage ./release.py bugfix | minor | major") - exit(1) - - clone_repos() - get_lvgl_version("dev") - dev_ver_major = ver_major - dev_ver_minor = ver_minor - dev_ver_patch = ver_patch - dev_ver_str = ver_str - - get_lvgl_version("master") - - lvgl_prepare() - lv_examples_prepare() - lv_drivers_prepare() - docs_prepare() - blog_add_post() - add_tags() - update_release_branches() - publish_master() - - projs_update() - dev_ver_major = "7" - dev_ver_minor = "7" - dev_ver_patch = "0" - dev_ver_str = "v7.7.0" - - if dev_prepare == 'bugfix': - ver_patch = str(int(ver_patch) + 1) - ver_str = "v" + ver_major + "." + ver_minor + "." + ver_patch + "-dev" - - print("Prepare bugfix version " + ver_str) - - lvgl_update_master_version() - docs_update_latest_version() - - else: - merge_from_dev() - - if dev_prepare == 'minor': - ver_major = dev_ver_major - ver_minor = str(int(dev_ver_minor) + 1) - ver_patch = "0" - else: - ver_major = str(int(dev_ver_major) + 1) - ver_minor = "0" - ver_patch = "0" - - dev_ver_str = "v" + str(ver_major) + "." + str(ver_minor) + "." + str(ver_patch) + "-dev" - - print("Prepare minor version " + dev_ver_str) - - lvgl_update_dev_version() - docs_update_dev_version() - publish_dev_and_master() - - docs_update_all(); - cleanup() - diff --git a/scripts/release/__pycache__/com.cpython-36.pyc b/scripts/release/__pycache__/com.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a8d36f0557b4589eb6f632133c786192fedf4f34 GIT binary patch literal 3276 zcmaJ@OLH5?5uVvM7XU?5lqe>Qy+zuhL7IS*xRSC;apE|B$fZCoS#hdhNhk=jBo|y@ z;h7~QZ7p&LeaO+rRQ^Gnb1o_W4j=ZKll}rv{(2UK046k0JCE+3?wNjkGrz3W{C{nI z)A@IWvH!BUpNaAB@Tm-qV1mc2UG}_fU~a_5z-*hmq#2sVW2+C z8IL1Mj7Cr)!#M1!u-QunjnVVM>$P}4oyvluU@fB_{ zxr}*_{6)Vdd^5lO2a|KZ31gk*@Q^UkW2`-6O-x~@Jcpn9#woljoOL#_;7umnQ)6O3 zyPw;A>y-8FQ}ze;==T#Rb^2~@9+{(;5!yvN*6{bOE1!)o#EL(mY>~06U zB0PwOVX&7O!JZ_~AQ?4Da!fLJ%0J_QBz`ch#WVBxSk0BPKfPr`O(7(VUvl3^Mm ztGFuoLBS)vw}K0uGi6hw4fy2-J2=}a=4ulS-A+%(_vSW7Nj0#G?G1KPDKRgG3Ix=}mByhlcUDd6lhj zxr_1aNEDXYkP3c)`U~(3yY|!*$3jxAi*ZwK{6SXpgJMVXMfL)zK7&R zx*>W0hQxOIzF5kwGU?=BaubOMZAelFGpAn>{waN-JCa7)gKki;wT_r~p1xQ8Lug(7w-{ zhDM95b{M5W?ZFCRY?k9OaDDE8{*u)ddVKHi>|2N~#m z@!|c?@7!y3{`mf<_wEPs4fy_2kvlDjT*m$E{Rba>5=aVkc6DKACBkK9qtUF_$}+Se zg_=4Nkp#LW0}W*IDyZ^0v0TtbQ5?!OB3+|qo#^(VOio5}1LL||7*C|E6Yn)NZ8rvz zwoV2zAQGWM!3P&pa^)~gJA}2JsbBXXr`|!sxMx%i-&n@?vIZ@-Y?ReFKU$@_gp~X_ z*3FWb>V(Qf-&>T;8p$|rIDI^HK8P20WQ|VLQ40)3OBgC&{sR3>D^VSMTI(&?pxQ>- zQWbMlF=0E9eS;9Z9HZ`0$p)2+E)?8_!baMgxEF!6f*)IQoSU>-j#EbfrD;69UtRGk z-4S95dgtk8-|H_?iO7FoO+_cJE2>(yHeE{+NNM>UBy>Wju6RvLtj~xA)(D zwD+*F*f-@i^k!yrC&;RC^h9>$^G07K!z}oJN*5$vUofz!_uNi1y8_h<%T~{4czujQ znMR??ZvL3DIk~qMOis(;Hq+B>a}?w#>1xkC}U`ErLp63ub;&Z1li z#Fu&K+&}fIzS;`+V2FDUF9_!#it)me8uQ#ZQmID0I2@K(NN+evxKTKGYpPV~+rGS9 zEsbw&7s@+$vy_A3$)IiPguRF*%O{k);W@V5hf+m=3~b|pv1+X0)p!GV=HX@GPumsD z*Ysb$3&}cvP+!JV__-?FL^bGTu6M3?Cv>q+ZNrV0 zXbA|32nfje1N@jyiS{oL@l}sK>pgA4jHar(ySm){eO2Yp$K%0ApZu28J;(XSIeI+U zFY&2AAh^R>;VfFs7R-*_g=@8E$8Nz&f8jIo@rs}f7ooLT(OdMm&x2o_MZ`nigYNT) z_n`-Tz=zO7G2)}OD}NVbadLfn%lLTh$zR18Ke=VhfyNwjsuMA!b$<5Tp)qIQIg=-M zIG=MhVaDI2dPSP2T4XLw;~`CV`5K>EKxpThaYp;Kd+l-ehCQ>md8Ds=YF>q z@ZiYP!+%jy!MM=sxHNRovWQ#rmt%`-^lt}WLnLOT=zQni=;i2z3NKN-=#(15ncNz2I>Gc26 zcJT;p6r^QN`nZh@NQ5L%Z;p&e^dTm$#YYZlg1BnM7?wGu;{ixY7y|NrOdfy)h#iop zn9uNa52e0MdkN!RAiDza_Lk3mYf(xEoz=6eK|au z(zZrQA(tXX&NSnF{vRbgm6Ijs=>u%x4PfKuA>sw_Q7Erz^C@|Ef#d1-v0jN>Dy&uY zRPbDX+5K9(YZ5%l4^eYOhb6{xa&Dt1I7p)FeKo{zRu>RR@WbnN7L#XK$r!EUA#Nxm zEI)t4IPmi`n$r#A?xk~sMvA8R5+nb)!;#ozU7~G4hqo>o7@8D#fmKQE-#U!;MA);_ zfkyK4J~c|(c}p?-mku952YZcJ@E^ke&%J-}!2ifk_ppz3ziBPY@#xBUK;h2A6-@Yg zyL^-XbVrxFqnnzrCDVj0%qA$)>sm^?#y-O^uWC7oY)P22rO=7(8v91JIP{Q1>PyOT z3#9RsMhnav#P$3zKO z&8sAlPcdx1_%>H6ua_FFBad#_D0Yx6wUcJv*ql_i|%VH zc=E)!QrN6By*E{v>TG3twVKhtm?Q*EMAz0iQjO4U+Xi*Zdlb5}R%t1c#CV0MfXrKE vd>nLVf{i4E?iq~D7N|#f*^_52yf&@L%gTaMT8z5p-cY)j+y?AYvX za;@b^NP$PheGT6D1bmQv;Dx7tg+4Lsw4qm>t(}>j{q5{;XC}_QM#E{{e&Ij25&9Qh zdknC@g28_QK@h<)>aR5JYcSVhEz$crUipl^QDV%#S!%0qks2|G`77>Ms7pfzGIF-D-PN>AIgqSlGCi%MPDMN19h<0q(7KL-}*aR*By3&iL!)YKfF zI*bO4uVL`NF+u{3F~J4eK`N-w#yZhT%OHBG)w*$GO`*)vXO1mmkqWVgx-iET7&fW? zt}nDg8&{X;M{S`mj6zp5mv~$wHMmZF7cI=fBn^Uo)4;Y03syERS1fX?uy(*(a@kZi z+1f!$ulY3Bd|GR3yR_=$wI%-J{-SdFX;FEAe)@P}7xuWZL~ufTiGfdb;XvdKvLkL4 zkVufgYzc+=`JZR#8I6)^Dq^8d{R=Qna_17$B>SbM>hYek2!cYt|2WsYUfvo; z!VO0>oTM}1CIJ_e<+bB1AcDH_d>H4J*DG~fA+uQ=yD5u?(bVmBMKI)22fx(8%v;?q zPnr0l8!{S*l#xKtjwUTG2m~)RWh^&mV$l6eVuwK&p>ri9_VOyDF%3BF&GW`fr1IwH z?#;7-yO$q?ncE$dEPGDSTKBvU(MsAn62fTMD8n|~$`AP5K z8mguO5IXS0skp$^yt)n`YhcpT076rqH`m$u-?tMI73m7IA{?f!bihkkG^dQ`TeGXQ zu3a0eeU}I~caAfaHCLo=UR9S42ywl9vrI^uB;e@=iMw}!_YU*MONCfZFN>&qUa!-V zTFRvvj!49$9;OM1gh(@E(Nsu>&rULyhLi*5D9z|p8b{w8J(Sjyrw_h8ekvg)Niv&8 zA#jowpG}7_?FE0s8jDljkDBO zAC`VKmcyO+19LbANvp@N!tek(bV_PRsQmOk0Q>a>Cg?>aF)=i@Z4h_45{mt_v8Mo zY!~3t;Wil!?>+a)!+XB-opV2I zHf{agKe_+eRFr=!D}OrVpW}&NqF@SBLuH_%)mHBy2&=#7U~w?VB5!<_?)-S z6zs2lqI533f+osgN6jiTFBwtIyo6`Q#ETOye2s?jM>T1G2T%M<6p1ocnL1Z?l`~b% zTiS(|K38`YRw>6dR=qH8&^o3-2lFs(4uiz;N8CS-P7)_=Q*(9_hE61cVK8-4n|dZ( z47rn9PWLxXbRy!^Tn=wvSfA_O(KFqTCMYHhUw0CZI$CB69&#_{?o%9jI$FL;efT3~ zD|nejkGPci@as5pBh4R^KVa^Sv19$&Q z8sjEw6E5Z^R#HqG1mk+LwRJ(95Et764+_7~-h#=JT=+4io2`PI2z z%K9Jv@@oa}-ynob-F8Sf^t9(X>0FMfW0PHy7`+Uf?w-N>66(8Be51*(meM<=^lmwG zlf75=UMr+c_MKAtu9UXsnykyyn^%E&=P+$N&VlFfP7oEkj|oz%+f-YDCA z_~iaW_sQMIpM3P_(EaG}-lJ68+e>S`CA`vhukS~UcaI`5@seIVN_S|r>qpZgSNawg zz#Ir9dj4X_r>WlS^)n@H_4;=n+&;X2_u-@aJ-CW0(#r3zUw6{_EcB*R&YWoKydt$S z)y~vs=@sd0(PRRb?0OStZ}}--s(bfx-z{C4@zZ>M?z_2Ll>S?zojk^zUV3e9)BRsb zXU`Yxr*`4#wBOe`d)h1}64EVJVocp=36IMW1JGv=P~N0})&&d%r9 zG>l?Y&qM$=HL;&`O-x!H6bqV&{^OC^XQ~N<#WOgjGUf(gm0<38_*Ll1juQsfwt{$O#3K z$u?K#F>_auZ7W|_wrfS(E&>d#tj{&Lasv?oDPPkJF~~oU*y@o(D0!q8m6};q1r#hfhksyz}7hosU1g`MV!1L5bm(abgQA?v-f&TJTFhPe1!dtR9vNkyhlR5ql-O~3FP8B6>GTNUisQ3d>><8Oq&((CFp4f zIT$tZKKd_!uZ)HXM!p63suDs5AcUAxKq!xnm9bSs$J)G%wM<4y38ngBy0ro&CIVuN zv>}nSY^?+7ja2$S8@6NrU$)5U=WPbrfX{-_HiHt@MKv+!RaQmPNbFv?=E9g8 zW2;E%jB!n-d)nA8z(LYFB(yQENAmr2b&-&e=5OKp(d$1Aqha5jMR5|RSGwJ<9eOWt z7dddK%T5sG`GJ!@aDvz=!ZNeHlVlW$18492!mwxi5&ZtZ>3cC!h%)I%Tt|0rHXYiu zxt&@!e%rk<>E2*zt-Fl#u;zpb3f$>RX0)@O8Qn(0l(v>?NCo#_ivb33i2qJwg{994 znkmZ{1Br)O`*RF*UcZJV~L)Hk`xyl$_jEyC~BEa zfFh7ffS}>#(z@EApxDqc^VF|B 0 and templ[0]: + print("Updating version in " + templ[0]) + cmd("sed -i -r 's/v[0-9]+\.[0-9]+\.[0-9]+/"+ "v" + ver_num + "/' " + templ[0]) + + if os.path.exists("library.json"): + print("Updating version in library.json") + cmd("sed -i -r 's/[0-9]+\.[0-9]+\.[0-9]+/"+ ver_num +"/' library.json") + + if path.exists("library.properties"): + print("Updating version in library.properties") + cmd("sed -i -r 's/version=[0-9]+\.[0-9]+\.[0-9]+/"+ "version=" + ver_num + "/' library.properties") + + if path.exists("conf.py"): + cmd("sed -i -r \"s/'v[0-9]+\.[0-9]+\.[0-9]+.*'/\'" + ver_str + "'/\" conf.py") + + if path.exists("lvgl.h"): + define_set("./lvgl.h", "LVGL_VERSION_MAJOR", str(ver[0])) + define_set("./lvgl.h", "LVGL_VERSION_MINOR", str(ver[1])) + define_set("./lvgl.h", "LVGL_VERSION_PATCH", str(ver[2])) + define_set("./lvgl.h", "LVGL_VERSION_INFO", "\"" + ver[3] + "\"") + diff --git a/scripts/release/dev.py b/scripts/release/dev.py new file mode 100755 index 000000000..42cfd6a5e --- /dev/null +++ b/scripts/release/dev.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +import re +import os, fnmatch +import os.path +from os import path +from datetime import date +import com + +def lvgl_upadte_ver(ver, br): + os.chdir("./lvgl") + + com.cmd("git checkout " + br) + com.update_version(ver) + com.cmd("git commit -am 'Update " + br + " version'") + com.push("origin " + br) + com.cmd("git checkout master") + + os.chdir("../") + +def docs_update_ver(ver, br): + os.chdir("./docs") + com.cmd("git checkout " + br + " --") + com.update_version(ver) + com.cmd("git commit -am 'Update " + br + " version'") + com.push("origin " + br) + com.cmd("git checkout master --") + + os.chdir("../") + + +def merge_dev_to_master(): + os.chdir("./lvgl") + com.cmd("git checkout master") + com.cmd("git merge dev") + com.push("origin master") + os.chdir("../") + + os.chdir("./docs") + com.cmd("git checkout dev -- ") #'dev' sometimes is not recognized so switch to it first + com.cmd("git checkout latest --") + com.cmd("git merge dev -X theirs --no-edit;") + com.push("origin latest") + os.chdir("../") + + +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") + 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' + + lvgl_upadte_ver(ver, "dev") + docs_update_ver(ver, "dev") + + + +if __name__ == '__main__': + if(len(sys.argv) != 2): + print("Missing argument. Usage ./dev.py major | minor | bugfix") + print("E.g. ./dev.py minor") + else: + make(sys.argv[1]) diff --git a/scripts/release/main.py b/scripts/release/main.py new file mode 100755 index 000000000..8d329d471 --- /dev/null +++ b/scripts/release/main.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python + +import os.path +from os import path +from datetime import date +import sys +import com +import release +import dev +import proj + +upstream_org_url = "https://github.com/lvgl/" +workdir = "./release_tmp" +proj_list = [ "lv_sim_eclipse_sdl", "lv_sim_emscripten"] + +def upstream(repo): + return upstream_org_url + repo + ".git" + +def clone(repo): + com.cmd("git clone --recurse-submodules " + upstream(repo)) + os.chdir("./" + repo) + com.cmd("git checkout master") + com.cmd("git remote update origin --prune") + com.cmd("git pull origin --tags") + os.chdir("..") + +def clone_repos(): + com.cmd("rm -fr " + workdir) + com.cmd("mkdir " + workdir) + os.chdir(workdir) + clone("lvgl") + clone("lv_examples") + clone("lv_drivers") + clone("docs") + clone("blog") + + for p in proj_list: + clone(p) + +def cleanup(): + os.chdir("../") + com.cmd("rm -fr " + workdir) + +if __name__ == '__main__': + prepare_type = ['major', 'minor', 'bugfix'] + dev_prepare = 'minor' + +# if(len(sys.argv) != 2): +# print("Missing argument. Usage ./release.py bugfix | minor | major") +# print("Use minor by deafult") +# else: +# dev_prepare = sys.argv[1] + + if not (dev_prepare in prepare_type): + print("Invalid argument. Usage ./release.py bugfix | minor | major") + exit(1) + + clone_repos() + release.make() + for p in proj_list: + proj.make(p, True) + + dev.make(dev_prepare) + #cleanup() diff --git a/scripts/release/proj.py b/scripts/release/proj.py new file mode 100755 index 000000000..db02cd537 --- /dev/null +++ b/scripts/release/proj.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python + +import sys +import os.path +from os import path +import re +import subprocess +import com + + +def make(repo_path, auto_push = False): + os.chdir("./" + repo_path) + com.cmd('git checkout master') + print("Upadte lvgl"); + os.chdir("./lvgl") + com.cmd("git checkout master") + com.cmd("git pull origin --tags") + + out = subprocess.Popen(['git', 'tag', '--sort=-creatordate'], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + stdout,stderr = out.communicate() + + ver_str = stdout.decode("utf-8").split('\n')[0] + release_br = ver_str[1:] #trim "v" + release_br = release_br.split('.')[0] # get the first number + release_br = "release/v" + release_br + + com.cmd("git checkout " + release_br + "; git pull origin " + release_br) + + os.chdir("..") + + com.cmd("cp -f lvgl/lv_conf_template.h lv_conf.h") + com.cmd("sed -i -r 's/#if 0/#if 1/' lv_conf.h") # Enable lv_conf.h + with open("confdef.txt") as f: + for line in f: + (key, val) = line.rstrip().split('\t') + com.define_set("lv_conf.h", str(key), str(val)) + + + if os.path.exists("lv_examples"): + print("Upadte lv_examples"); + com.cmd("cd lv_examples; git co " + release_br + "; git pull origin " + release_br) + + if os.path.exists("lv_drivers"): + print("upadte lv_drivers"); + com.cmd("cd lv_drivers " + release_br + "; git pull origin " + release_br) + + msg = 'Update to ' + ver_str + com.cmd("git add .") + com.cmd('git commit -am "' + msg + '"') + com.cmd("git tag -a " + ver_str + " -m '" + msg + "' " ) + if auto_push: + com.push("origin --tags") + com.push("origin master") + + os.chdir("../") + +if __name__ == '__main__': + if(len(sys.argv) != 2): + print("Missing argument. Usage ./projs_update.py repo_path") + print("E.g. ./projs_update.py ./lv_sim_eclipse_sdl") + else: + make(sys.argv[1], sys.argv[2]) diff --git a/scripts/release/release.py b/scripts/release/release.py new file mode 100755 index 000000000..edcdf79e4 --- /dev/null +++ b/scripts/release/release.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python + +import os.path +from os import path +from datetime import date +import sys +import com +import re + +def update_release_branch(release_br, master_br = "master"): + com.cmd("git checkout " + release_br) + com.cmd("git pull origin " + release_br) + com.cmd("git merge "+ master_br +" -X ours"); + com.push("origin " + release_br); + com.cmd("git checkout master"); + +def lvgl_release(ver): + print("Release lvgl") + + ver_str = com.ver_format(ver) + release_br = "release/v" + str(ver[0]) + + os.chdir("./lvgl") + com.define_set("./lvgl.h", "LVGL_VERSION_INFO", '\"\"') + + # Run some scripts + os.chdir("./scripts") + com.cmd("./code-format.sh") + com.cmd("./lv_conf_checker.py") + com.cmd("doxygen") + os.chdir("../") + + com.update_version(ver) + + #update CHANGLELOG + new_content = "" + f = open("./CHANGELOG.md", "r") + + release_note = "" + note_state = 0 + for i in f.read().splitlines(): + if note_state == 0: + r = re.search(r'^## ' + ver_str, i) + if r: + i = i.replace("planned on ", "") + note_state+=1 + + elif note_state == 1: + r = re.search(r'^## ', i) + if r: + note_state+=1 + else: + release_note += i + '\n' + + new_content += i + '\n' + + f.close() + + f = open("./CHANGELOG.md", "w") + f.write(new_content) + f.close() + + com.cmd('git commit -am "Release ' + ver_str + '"') + + com.cmd('git checkout dev') + com.cmd("git merge master -X ours") + com.cmd("git add .") + com.cmd("git commit -am 'Merge master'", False) + com.push('origin dev') + com.cmd('git checkout master') + com.cmd("git tag -a " + ver_str + " -m 'Release " + ver_str + "' ") + com.push('origin master') + com.push('origin --tags') + + update_release_branch(release_br) + + os.chdir("../") + + return release_note + + +def lv_examples_release(ver): + print("Release lv_examples") + + os.chdir("./lv_examples") + release_br = "release/v" + str(ver[0]) + ver_str = com.ver_format(ver) + + com.update_version(ver) + + com.cmd("sed -i -r 's/LV_VERSION_CHECK\([0-9]+, *[0-9]+, *[0-9]+\)/"+ "LV_VERSION_CHECK(" + str(ver[0]) + ", " + str(ver[1]) + ", " + str(ver[2]) + ")/' lv_examples.h") + + com.cmd('git commit -am "Release ' + ver_str + '"') + com.cmd("git tag -a " + ver_str + " -m 'Release " + ver_str + "' ") + com.push('origin master') + com.push('origin --tags') + + os.chdir("../") + +def lv_drivers_release(ver): + print("Release lv_drivers") + + os.chdir("./lv_drivers") + release_br = "release/v" + str(ver[0]) + ver_str = com.ver_format(ver) + + com.update_version(ver) + + com.cmd('git commit -am "Release ' + ver_str + '"') + com.cmd("git tag -a " + ver_str + " -m 'Release " + ver_str + "' ") + com.push('origin master') + com.push('origin --tags') + + update_release_branch(release_br) + + os.chdir("../") + +def docs_release(ver): + print("Release docs") + + os.chdir("./docs") + release_br = "release/v" + str(ver[0]) + ver_str = com.ver_format(ver) + + com.cmd("git co latest --") + com.cmd("rm -rf xml"); + com.cmd("cp -r ../lvgl/docs/api_doc/xml ."); + com.cmd("git add xml"); + + com.update_version(ver) + + com.cmd('git commit -am "Release ' + ver_str + '"') + com.cmd("git tag -a " + ver_str + " -m 'Release " + ver_str + "' ") + com.push('origin master') + com.push('origin --tags') + + update_release_branch(release_br, "latest") + + os.chdir("../") + +def blog_release(ver, release_note): + + os.chdir("./blog/_posts") + + ver_str = com.ver_format(ver) + + post = "---\nlayout: post\ntitle: " + ver_str + " is released\nauthor: \"kisvegabor\"\ncover: /assets/release_cover.png\n---\n\n" + post += release_note + + today = date.today() + d = today.strftime("%Y-%m-%d") + + f = open(d + "-release_" + ver_str + ".md", "w") + f.write(post) + f.close() + + com.cmd("git add .") + com.cmd("git commit -am 'Add " + ver_str + " release post'") + com.push('origin master') + + os.chdir("../../") + + +def make(): + ver = com.get_lvgl_version("master") + release_note = lvgl_release(ver) + lv_examples_release(ver) + lv_drivers_release(ver) + docs_release(ver) + blog_release(ver, release_note) + +if __name__ == '__main__': + make() From d3cafedb652a50e7655ae6a3f359325f93fbd197 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 21 Oct 2020 14:08:16 +0200 Subject: [PATCH 58/61] remove pycache files --- scripts/release/__pycache__/com.cpython-36.pyc | Bin 3276 -> 0 bytes scripts/release/__pycache__/dev.cpython-36.pyc | Bin 2087 -> 0 bytes scripts/release/__pycache__/proj.cpython-36.pyc | Bin 1826 -> 0 bytes .../release/__pycache__/release.cpython-36.pyc | Bin 4276 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 scripts/release/__pycache__/com.cpython-36.pyc delete mode 100644 scripts/release/__pycache__/dev.cpython-36.pyc delete mode 100644 scripts/release/__pycache__/proj.cpython-36.pyc delete mode 100644 scripts/release/__pycache__/release.cpython-36.pyc diff --git a/scripts/release/__pycache__/com.cpython-36.pyc b/scripts/release/__pycache__/com.cpython-36.pyc deleted file mode 100644 index a8d36f0557b4589eb6f632133c786192fedf4f34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3276 zcmaJ@OLH5?5uVvM7XU?5lqe>Qy+zuhL7IS*xRSC;apE|B$fZCoS#hdhNhk=jBo|y@ z;h7~QZ7p&LeaO+rRQ^Gnb1o_W4j=ZKll}rv{(2UK046k0JCE+3?wNjkGrz3W{C{nI z)A@IWvH!BUpNaAB@Tm-qV1mc2UG}_fU~a_5z-*hmq#2sVW2+C z8IL1Mj7Cr)!#M1!u-QunjnVVM>$P}4oyvluU@fB_{ zxr}*_{6)Vdd^5lO2a|KZ31gk*@Q^UkW2`-6O-x~@Jcpn9#woljoOL#_;7umnQ)6O3 zyPw;A>y-8FQ}ze;==T#Rb^2~@9+{(;5!yvN*6{bOE1!)o#EL(mY>~06U zB0PwOVX&7O!JZ_~AQ?4Da!fLJ%0J_QBz`ch#WVBxSk0BPKfPr`O(7(VUvl3^Mm ztGFuoLBS)vw}K0uGi6hw4fy2-J2=}a=4ulS-A+%(_vSW7Nj0#G?G1KPDKRgG3Ix=}mByhlcUDd6lhj zxr_1aNEDXYkP3c)`U~(3yY|!*$3jxAi*ZwK{6SXpgJMVXMfL)zK7&R zx*>W0hQxOIzF5kwGU?=BaubOMZAelFGpAn>{waN-JCa7)gKki;wT_r~p1xQ8Lug(7w-{ zhDM95b{M5W?ZFCRY?k9OaDDE8{*u)ddVKHi>|2N~#m z@!|c?@7!y3{`mf<_wEPs4fy_2kvlDjT*m$E{Rba>5=aVkc6DKACBkK9qtUF_$}+Se zg_=4Nkp#LW0}W*IDyZ^0v0TtbQ5?!OB3+|qo#^(VOio5}1LL||7*C|E6Yn)NZ8rvz zwoV2zAQGWM!3P&pa^)~gJA}2JsbBXXr`|!sxMx%i-&n@?vIZ@-Y?ReFKU$@_gp~X_ z*3FWb>V(Qf-&>T;8p$|rIDI^HK8P20WQ|VLQ40)3OBgC&{sR3>D^VSMTI(&?pxQ>- zQWbMlF=0E9eS;9Z9HZ`0$p)2+E)?8_!baMgxEF!6f*)IQoSU>-j#EbfrD;69UtRGk z-4S95dgtk8-|H_?iO7FoO+_cJE2>(yHeE{+NNM>UBy>Wju6RvLtj~xA)(D zwD+*F*f-@i^k!yrC&;RC^h9>$^G07K!z}oJN*5$vUofz!_uNi1y8_h<%T~{4czujQ znMR??ZvL3DIk~qMOis(;Hq+B>a}?w#>1xkC}U`ErLp63ub;&Z1li z#Fu&K+&}fIzS;`+V2FDUF9_!#it)me8uQ#ZQmID0I2@K(NN+evxKTKGYpPV~+rGS9 zEsbw&7s@+$vy_A3$)IiPguRF*%O{k);W@V5hf+m=3~b|pv1+X0)p!GV=HX@GPumsD z*Ysb$3&}cvP+!JV__-?FL^bGTu6M3?Cv>q+ZNrV0 zXbA|32nfje1N@jyiS{oL@l}sK>pgA4jHar(ySm){eO2Yp$K%0ApZu28J;(XSIeI+U zFY&2AAh^R>;VfFs7R-*_g=@8E$8Nz&f8jIo@rs}f7ooLT(OdMm&x2o_MZ`nigYNT) z_n`-Tz=zO7G2)}OD}NVbadLfn%lLTh$zR18Ke=VhfyNwjsuMA!b$<5Tp)qIQIg=-M zIG=MhVaDI2dPSP2T4XLw;~`CV`5K>EKxpThaYp;Kd+l-ehCQ>md8Ds=YF>q z@ZiYP!+%jy!MM=sxHNRovWQ#rmt%`-^lt}WLnLOT=zQni=;i2z3NKN-=#(15ncNz2I>Gc26 zcJT;p6r^QN`nZh@NQ5L%Z;p&e^dTm$#YYZlg1BnM7?wGu;{ixY7y|NrOdfy)h#iop zn9uNa52e0MdkN!RAiDza_Lk3mYf(xEoz=6eK|au z(zZrQA(tXX&NSnF{vRbgm6Ijs=>u%x4PfKuA>sw_Q7Erz^C@|Ef#d1-v0jN>Dy&uY zRPbDX+5K9(YZ5%l4^eYOhb6{xa&Dt1I7p)FeKo{zRu>RR@WbnN7L#XK$r!EUA#Nxm zEI)t4IPmi`n$r#A?xk~sMvA8R5+nb)!;#ozU7~G4hqo>o7@8D#fmKQE-#U!;MA);_ zfkyK4J~c|(c}p?-mku952YZcJ@E^ke&%J-}!2ifk_ppz3ziBPY@#xBUK;h2A6-@Yg zyL^-XbVrxFqnnzrCDVj0%qA$)>sm^?#y-O^uWC7oY)P22rO=7(8v91JIP{Q1>PyOT z3#9RsMhnav#P$3zKO z&8sAlPcdx1_%>H6ua_FFBad#_D0Yx6wUcJv*ql_i|%VH zc=E)!QrN6By*E{v>TG3twVKhtm?Q*EMAz0iQjO4U+Xi*Zdlb5}R%t1c#CV0MfXrKE vd>nLVf{i4E?iq~D7N|#f*^_52yf&@L%gTaMT8z5p-cY)j+y?AYvX za;@b^NP$PheGT6D1bmQv;Dx7tg+4Lsw4qm>t(}>j{q5{;XC}_QM#E{{e&Ij25&9Qh zdknC@g28_QK@h<)>aR5JYcSVhEz$crUipl^QDV%#S!%0qks2|G`77>Ms7pfzGIF-D-PN>AIgqSlGCi%MPDMN19h<0q(7KL-}*aR*By3&iL!)YKfF zI*bO4uVL`NF+u{3F~J4eK`N-w#yZhT%OHBG)w*$GO`*)vXO1mmkqWVgx-iET7&fW? zt}nDg8&{X;M{S`mj6zp5mv~$wHMmZF7cI=fBn^Uo)4;Y03syERS1fX?uy(*(a@kZi z+1f!$ulY3Bd|GR3yR_=$wI%-J{-SdFX;FEAe)@P}7xuWZL~ufTiGfdb;XvdKvLkL4 zkVufgYzc+=`JZR#8I6)^Dq^8d{R=Qna_17$B>SbM>hYek2!cYt|2WsYUfvo; z!VO0>oTM}1CIJ_e<+bB1AcDH_d>H4J*DG~fA+uQ=yD5u?(bVmBMKI)22fx(8%v;?q zPnr0l8!{S*l#xKtjwUTG2m~)RWh^&mV$l6eVuwK&p>ri9_VOyDF%3BF&GW`fr1IwH z?#;7-yO$q?ncE$dEPGDSTKBvU(MsAn62fTMD8n|~$`AP5K z8mguO5IXS0skp$^yt)n`YhcpT076rqH`m$u-?tMI73m7IA{?f!bihkkG^dQ`TeGXQ zu3a0eeU}I~caAfaHCLo=UR9S42ywl9vrI^uB;e@=iMw}!_YU*MONCfZFN>&qUa!-V zTFRvvj!49$9;OM1gh(@E(Nsu>&rULyhLi*5D9z|p8b{w8J(Sjyrw_h8ekvg)Niv&8 zA#jowpG}7_?FE0s8jDljkDBO zAC`VKmcyO+19LbANvp@N!tek(bV_PRsQmOk0Q>a>Cg?>aF)=i@Z4h_45{mt_v8Mo zY!~3t;Wil!?>+a)!+XB-opV2I zHf{agKe_+eRFr=!D}OrVpW}&NqF@SBLuH_%)mHBy2&=#7U~w?VB5!<_?)-S z6zs2lqI533f+osgN6jiTFBwtIyo6`Q#ETOye2s?jM>T1G2T%M<6p1ocnL1Z?l`~b% zTiS(|K38`YRw>6dR=qH8&^o3-2lFs(4uiz;N8CS-P7)_=Q*(9_hE61cVK8-4n|dZ( z47rn9PWLxXbRy!^Tn=wvSfA_O(KFqTCMYHhUw0CZI$CB69&#_{?o%9jI$FL;efT3~ zD|nejkGPci@as5pBh4R^KVa^Sv19$&Q z8sjEw6E5Z^R#HqG1mk+LwRJ(95Et764+_7~-h#=JT=+4io2`PI2z z%K9Jv@@oa}-ynob-F8Sf^t9(X>0FMfW0PHy7`+Uf?w-N>66(8Be51*(meM<=^lmwG zlf75=UMr+c_MKAtu9UXsnykyyn^%E&=P+$N&VlFfP7oEkj|oz%+f-YDCA z_~iaW_sQMIpM3P_(EaG}-lJ68+e>S`CA`vhukS~UcaI`5@seIVN_S|r>qpZgSNawg zz#Ir9dj4X_r>WlS^)n@H_4;=n+&;X2_u-@aJ-CW0(#r3zUw6{_EcB*R&YWoKydt$S z)y~vs=@sd0(PRRb?0OStZ}}--s(bfx-z{C4@zZ>M?z_2Ll>S?zojk^zUV3e9)BRsb zXU`Yxr*`4#wBOe`d)h1}64EVJVocp=36IMW1JGv=P~N0})&&d%r9 zG>l?Y&qM$=HL;&`O-x!H6bqV&{^OC^XQ~N<#WOgjGUf(gm0<38_*Ll1juQsfwt{$O#3K z$u?K#F>_auZ7W|_wrfS(E&>d#tj{&Lasv?oDPPkJF~~oU*y@o(D0!q8m6};q1r#hfhksyz}7hosU1g`MV!1L5bm(abgQA?v-f&TJTFhPe1!dtR9vNkyhlR5ql-O~3FP8B6>GTNUisQ3d>><8Oq&((CFp4f zIT$tZKKd_!uZ)HXM!p63suDs5AcUAxKq!xnm9bSs$J)G%wM<4y38ngBy0ro&CIVuN zv>}nSY^?+7ja2$S8@6NrU$)5U=WPbrfX{-_HiHt@MKv+!RaQmPNbFv?=E9g8 zW2;E%jB!n-d)nA8z(LYFB(yQENAmr2b&-&e=5OKp(d$1Aqha5jMR5|RSGwJ<9eOWt z7dddK%T5sG`GJ!@aDvz=!ZNeHlVlW$18492!mwxi5&ZtZ>3cC!h%)I%Tt|0rHXYiu zxt&@!e%rk<>E2*zt-Fl#u;zpb3f$>RX0)@O8Qn(0l(v>?NCo#_ivb33i2qJwg{994 znkmZ{1Br)O`*RF*UcZJV~L)Hk`xyl$_jEyC~BEa zfFh7ffS}>#(z@EApxDqc^VF|B Date: Wed, 21 Oct 2020 14:10:24 +0200 Subject: [PATCH 59/61] Update version to 7.7.1-dev --- CHANGELOG.md | 2 ++ library.json | 2 +- library.properties | 2 +- lv_conf_template.h | 2 +- lvgl.h | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7eb5629f..9eb4a23d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## v7.7.1 (04.11.2020) +### Bugfixes ## v7.7.0 (20.10.2020) diff --git a/library.json b/library.json index 7bb94041d..e1b2f03d1 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "lvgl", - "version": "7.7.0", + "version": "7.7.1", "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": { diff --git a/library.properties b/library.properties index f62ca30ab..ab875456a 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=lvgl -version=7.7.0 +version=7.7.1 author=kisvegabor maintainer=kisvegabor,embeddedt,pete-pjb sentence=Full-featured Graphics Library for Embedded Systems diff --git a/lv_conf_template.h b/lv_conf_template.h index f05195993..6ff7b4aab 100644 --- a/lv_conf_template.h +++ b/lv_conf_template.h @@ -1,6 +1,6 @@ /** * @file lv_conf.h - * Configuration file for v7.7.0-dev + * Configuration file for v7.7.1-dev */ /* diff --git a/lvgl.h b/lvgl.h index 58f3d5ce3..73c1f713e 100644 --- a/lvgl.h +++ b/lvgl.h @@ -16,7 +16,7 @@ extern "C" { ***************************/ #define LVGL_VERSION_MAJOR 7 #define LVGL_VERSION_MINOR 7 -#define LVGL_VERSION_PATCH 0 +#define LVGL_VERSION_PATCH 1 #define LVGL_VERSION_INFO "" /********************* From c03160abc2ca26805513d2e8c6f4b92e10a6a91a Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Thu, 22 Oct 2020 13:55:12 +0200 Subject: [PATCH 60/61] add lv_conf_kvoncfig.h to handle special Kconfig options --- scripts/lv_conf_checker.py | 3 + src/lv_conf_internal.h | 4 + src/lv_conf_kconfig.h | 294 +++++++++++++++++++++++++++++++++++++ 3 files changed, 301 insertions(+) create mode 100644 src/lv_conf_kconfig.h diff --git a/scripts/lv_conf_checker.py b/scripts/lv_conf_checker.py index 58cff17c9..a3c63800a 100755 --- a/scripts/lv_conf_checker.py +++ b/scripts/lv_conf_checker.py @@ -27,6 +27,9 @@ fout.write( #define LV_CONF_INTERNAL_H /* clang-format off */ +/*Handle special Kconfig options*/ +#include "lv_conf_kconfig.h" + #include /*If lv_conf.h is not skipped include it*/ diff --git a/src/lv_conf_internal.h b/src/lv_conf_internal.h index 72993190c..c7263ca8f 100644 --- a/src/lv_conf_internal.h +++ b/src/lv_conf_internal.h @@ -25,8 +25,12 @@ # endif #endif + /* clang-format off */ +/*Handle special Kconfig options*/ +#include "lv_conf_kconfig.h" + #include /*==================== diff --git a/src/lv_conf_kconfig.h b/src/lv_conf_kconfig.h new file mode 100644 index 000000000..e1e0b6a9f --- /dev/null +++ b/src/lv_conf_kconfig.h @@ -0,0 +1,294 @@ +/** + * @file lv_conf_kconfig.h + * Configs that needs special handling when LVGL is used with Kconfig + */ + +#ifndef LV_CONF_KCONFIG_H +#define LV_CONF_KCONFIG_H + +#ifdef __cplusplus +extern "C" { +#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 + #elif defined (CONFIG_LV_THEME_DEFAULT_INIT_TEMPLATE) + #define 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 + #elif defined (CONFIG_LV_THEME_DEFAULT_INIT_MONO) + #define LV_THEME_DEFAULT_INIT lv_theme_mono_init + #endif +#endif + +/******************* + * COLOR SELECTION + *******************/ + +#ifdef 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 + #ifdef CONFIG_LV_THEME_DEFAULT_COLOR_SECONDARY + #define LV_THEME_DEFAULT_COLOR_SECONDARY lv_color_hex(CONFIG_LV_THEME_DEFAULT_COLOR_SECONDARY) + #endif +#endif + +/******************** + * FONT SELECTION + *******************/ + +/* NOTE: In Kconfig instead of `LV_THEME_DEFAULT_FONT_SMALL` + * `CONFIG_LV_THEME_DEFAULT_FONT_SMALL_` is defined + * hence the large selection with if-s + */ + +/*------------------ + * SMALL FONT + *-----------------*/ +#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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_10 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_14 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_18 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_22 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_26 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_30 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_34 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_38 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_42 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT_46 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_UNSCII_8 + #define LV_THEME_DEFAULT_FONT_SMALL &lv_font_unscii_8 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_MONTSERRAT12SUBPX + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SMALL_DEJAVU_16_PERSIAN_HEBREW + #define 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 + #endif +#endif + +/*------------------ + * NORMAL FONT + *-----------------*/ +#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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_10 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_14 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_18 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_22 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_26 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_30 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_34 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_38 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_42 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT_46 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_UNSCII_8 + #define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_unscii_8 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_MONTSERRAT12SUBPX + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_NORMAL_DEJAVU_16_PERSIAN_HEBREW + #define 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 + #endif +#endif + +/*------------------ + * SUBTITLE FONT + *-----------------*/ +#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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_10 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_14 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_18 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_22 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_26 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_30 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_34 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_38 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_42 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_46 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_UNSCII_8 + #define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_unscii_8 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT12SUBPX + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_SUBTITLE_DEJAVU_16_PERSIAN_HEBREW + #define 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 + #endif +#endif + +/*------------------ + * TITLE FONT + *-----------------*/ +#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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_10 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_14 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_18 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_22 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_26 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_30 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_34 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_38 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_42 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT_46 + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_UNSCII_8 + #define LV_THEME_DEFAULT_FONT_TITLE &lv_font_unscii_8 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_MONTSERRAT12SUBPX + #define 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 + #elif defined CONFIG_LV_FONT_DEFAULT_TITLE_DEJAVU_16_PERSIAN_HEBREW + #define 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 + #endif +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /*LV_CONF_KCONFIG_H*/ From 200d3aa26dc3a255830d8c0050eb3d73aafdddf8 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Thu, 22 Oct 2020 13:57:25 +0200 Subject: [PATCH 61/61] fix build with out lv_conf.h Fixes: #1860 --- src/lv_gpu/lv_gpu_nxp_pxp.c | 2 +- src/lv_gpu/lv_gpu_nxp_pxp_osa.c | 2 +- src/lv_gpu/lv_gpu_nxp_vglite.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lv_gpu/lv_gpu_nxp_pxp.c b/src/lv_gpu/lv_gpu_nxp_pxp.c index 9efdd4713..d8ea7532a 100644 --- a/src/lv_gpu/lv_gpu_nxp_pxp.c +++ b/src/lv_gpu/lv_gpu_nxp_pxp.c @@ -32,7 +32,7 @@ * INCLUDES *********************/ -#include "lv_conf.h" +#include "../lv_conf_internal.h" #if LV_USE_GPU_NXP_PXP diff --git a/src/lv_gpu/lv_gpu_nxp_pxp_osa.c b/src/lv_gpu/lv_gpu_nxp_pxp_osa.c index 33f2b933a..19b4a12f1 100644 --- a/src/lv_gpu/lv_gpu_nxp_pxp_osa.c +++ b/src/lv_gpu/lv_gpu_nxp_pxp_osa.c @@ -31,7 +31,7 @@ * INCLUDES *********************/ -#include "lv_conf.h" +#include "../lv_conf_internal.h" #if LV_USE_GPU_NXP_PXP && LV_USE_GPU_NXP_PXP_AUTO_INIT diff --git a/src/lv_gpu/lv_gpu_nxp_vglite.c b/src/lv_gpu/lv_gpu_nxp_vglite.c index ba4d708ab..8db4bce7a 100644 --- a/src/lv_gpu/lv_gpu_nxp_vglite.c +++ b/src/lv_gpu/lv_gpu_nxp_vglite.c @@ -31,7 +31,7 @@ * INCLUDES *********************/ -#include "lv_conf.h" +#include "../lv_conf_internal.h" #if LV_USE_GPU_NXP_VG_LITE