mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-23 15:56:59 +08:00
fix(freetype): correct cache release behavior and change glyph cache cnt macro name (#5219)
This commit is contained in:
@@ -1156,9 +1156,8 @@ menu "LVGL configuration"
|
||||
config LV_FREETYPE_CACHE_FT_SIZES
|
||||
int "The maximum number of FT_Size"
|
||||
default 8
|
||||
config LV_FREETYPE_CACHE_FT_OUTLINES
|
||||
int "The maximum number of Outline"
|
||||
depends on LV_FREETYPE_CACHE_TYPE_OUTLINE
|
||||
config LV_FREETYPE_CACHE_FT_GLYPH_CNT
|
||||
int "The maximum number of Glyph in count"
|
||||
default 256
|
||||
endmenu
|
||||
|
||||
|
||||
+1
-1
@@ -662,7 +662,7 @@
|
||||
/* (0:use system defaults) */
|
||||
#define LV_FREETYPE_CACHE_FT_FACES 8
|
||||
#define LV_FREETYPE_CACHE_FT_SIZES 8
|
||||
#define LV_FREETYPE_CACHE_FT_OUTLINES 256
|
||||
#define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256
|
||||
#endif
|
||||
|
||||
/* Built-in TTF decoder */
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
#define ft_ctx LV_GLOBAL_DEFAULT()->ft_context
|
||||
#define LV_FREETYPE_OUTLINE_REF_SIZE_DEF 128
|
||||
|
||||
#if LV_FREETYPE_CACHE_FT_GLYPH_CNT <= 0
|
||||
#error "LV_FREETYPE_CACHE_FT_GLYPH_CNT must be greater than 0"
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
@@ -161,6 +165,7 @@ lv_font_t * lv_freetype_font_create(const char * pathname, lv_freetype_font_rend
|
||||
FT_Size ft_size = lv_freetype_lookup_size(dsc);
|
||||
|
||||
if(!ft_size || !lv_freetype_on_font_create(dsc)) {
|
||||
lv_cache_release(ctx->cache_node_cache, dsc->cache_node_entry, NULL);
|
||||
lv_freetype_drop_face_id(ctx, dsc->face_id);
|
||||
lv_free(dsc);
|
||||
return NULL;
|
||||
@@ -390,8 +395,14 @@ static bool cache_node_cache_create_cb(lv_freetype_cache_node_t * node, void * u
|
||||
}
|
||||
static void cache_node_cache_free_cb(lv_freetype_cache_node_t * node, void * user_data)
|
||||
{
|
||||
lv_cache_destroy(node->glyph_cache, user_data);
|
||||
lv_cache_destroy(node->draw_data_cache, user_data);
|
||||
if(node->glyph_cache) {
|
||||
lv_cache_destroy(node->glyph_cache, user_data);
|
||||
node->glyph_cache = NULL;
|
||||
}
|
||||
if(node->draw_data_cache) {
|
||||
lv_cache_destroy(node->draw_data_cache, user_data);
|
||||
node->draw_data_cache = NULL;
|
||||
}
|
||||
}
|
||||
static lv_cache_compare_res_t cache_node_cache_compare_cb(const lv_freetype_cache_node_t * lhs,
|
||||
const lv_freetype_cache_node_t * rhs)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
#define LV_FREETYPE_GLYPH_DSC_CACHE_SIZE (LV_FREETYPE_CACHE_FT_OUTLINES * 2)
|
||||
#define LV_FREETYPE_GLYPH_DSC_CACHE_SIZE (LV_FREETYPE_CACHE_FT_GLYPH_CNT * 2)
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
@@ -74,10 +74,11 @@ bool lv_freetype_image_font_create(lv_freetype_font_dsc_t * dsc)
|
||||
}
|
||||
|
||||
dsc->cache_node->draw_data_cache = lv_cache_create(&lv_cache_class_lru_rb_count, sizeof(lv_freetype_image_cache_data_t),
|
||||
LV_FREETYPE_CACHE_FT_OUTLINES, ops);
|
||||
if(dsc->cache_node->draw_data_cache == NULL || dsc->cache_node->glyph_cache == NULL) {
|
||||
LV_LOG_ERROR("lv_cache_create failed");
|
||||
return NULL;
|
||||
LV_FREETYPE_CACHE_FT_GLYPH_CNT, ops);
|
||||
if(dsc->cache_node->draw_data_cache == NULL
|
||||
|| dsc->cache_node->glyph_cache == NULL) {
|
||||
LV_LOG_ERROR("draw data cache creating failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -15,10 +15,6 @@
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
#if LV_FREETYPE_CACHE_FT_OUTLINES <= 0
|
||||
#error "LV_FREETYPE_CACHE_FT_OUTLINES must be greater than 0"
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
@@ -77,7 +73,7 @@ bool lv_freetype_outline_font_create(lv_freetype_font_dsc_t * dsc)
|
||||
}
|
||||
|
||||
dsc->cache_node->draw_data_cache = lv_cache_create(&lv_cache_class_lru_rb_count, sizeof(lv_freetype_outline_node_t),
|
||||
LV_FREETYPE_CACHE_FT_OUTLINES,
|
||||
LV_FREETYPE_CACHE_FT_GLYPH_CNT,
|
||||
glyph_outline_cache_ops);
|
||||
|
||||
LV_LOG_INFO("outline cache(name: %s, style: 0x%x) create %p, ref_cnt = %d",
|
||||
|
||||
@@ -2206,11 +2206,11 @@
|
||||
#define LV_FREETYPE_CACHE_FT_SIZES 8
|
||||
#endif
|
||||
#endif
|
||||
#ifndef LV_FREETYPE_CACHE_FT_OUTLINES
|
||||
#ifdef CONFIG_LV_FREETYPE_CACHE_FT_OUTLINES
|
||||
#define LV_FREETYPE_CACHE_FT_OUTLINES CONFIG_LV_FREETYPE_CACHE_FT_OUTLINES
|
||||
#ifndef LV_FREETYPE_CACHE_FT_GLYPH_CNT
|
||||
#ifdef CONFIG_LV_FREETYPE_CACHE_FT_GLYPH_CNT
|
||||
#define LV_FREETYPE_CACHE_FT_GLYPH_CNT CONFIG_LV_FREETYPE_CACHE_FT_GLYPH_CNT
|
||||
#else
|
||||
#define LV_FREETYPE_CACHE_FT_OUTLINES 256
|
||||
#define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user