mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-30 23:51:54 +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
|
config LV_FREETYPE_CACHE_FT_SIZES
|
||||||
int "The maximum number of FT_Size"
|
int "The maximum number of FT_Size"
|
||||||
default 8
|
default 8
|
||||||
config LV_FREETYPE_CACHE_FT_OUTLINES
|
config LV_FREETYPE_CACHE_FT_GLYPH_CNT
|
||||||
int "The maximum number of Outline"
|
int "The maximum number of Glyph in count"
|
||||||
depends on LV_FREETYPE_CACHE_TYPE_OUTLINE
|
|
||||||
default 256
|
default 256
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -662,7 +662,7 @@
|
|||||||
/* (0:use system defaults) */
|
/* (0:use system defaults) */
|
||||||
#define LV_FREETYPE_CACHE_FT_FACES 8
|
#define LV_FREETYPE_CACHE_FT_FACES 8
|
||||||
#define LV_FREETYPE_CACHE_FT_SIZES 8
|
#define LV_FREETYPE_CACHE_FT_SIZES 8
|
||||||
#define LV_FREETYPE_CACHE_FT_OUTLINES 256
|
#define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Built-in TTF decoder */
|
/* Built-in TTF decoder */
|
||||||
|
|||||||
@@ -20,6 +20,10 @@
|
|||||||
#define ft_ctx LV_GLOBAL_DEFAULT()->ft_context
|
#define ft_ctx LV_GLOBAL_DEFAULT()->ft_context
|
||||||
#define LV_FREETYPE_OUTLINE_REF_SIZE_DEF 128
|
#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
|
* 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);
|
FT_Size ft_size = lv_freetype_lookup_size(dsc);
|
||||||
|
|
||||||
if(!ft_size || !lv_freetype_on_font_create(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_freetype_drop_face_id(ctx, dsc->face_id);
|
||||||
lv_free(dsc);
|
lv_free(dsc);
|
||||||
return NULL;
|
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)
|
static void cache_node_cache_free_cb(lv_freetype_cache_node_t * node, void * user_data)
|
||||||
{
|
{
|
||||||
lv_cache_destroy(node->glyph_cache, user_data);
|
if(node->glyph_cache) {
|
||||||
lv_cache_destroy(node->draw_data_cache, user_data);
|
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,
|
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)
|
const lv_freetype_cache_node_t * rhs)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
* DEFINES
|
* 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
|
* 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),
|
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);
|
LV_FREETYPE_CACHE_FT_GLYPH_CNT, ops);
|
||||||
if(dsc->cache_node->draw_data_cache == NULL || dsc->cache_node->glyph_cache == NULL) {
|
if(dsc->cache_node->draw_data_cache == NULL
|
||||||
LV_LOG_ERROR("lv_cache_create failed");
|
|| dsc->cache_node->glyph_cache == NULL) {
|
||||||
return NULL;
|
LV_LOG_ERROR("draw data cache creating failed");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -15,10 +15,6 @@
|
|||||||
* DEFINES
|
* DEFINES
|
||||||
*********************/
|
*********************/
|
||||||
|
|
||||||
#if LV_FREETYPE_CACHE_FT_OUTLINES <= 0
|
|
||||||
#error "LV_FREETYPE_CACHE_FT_OUTLINES must be greater than 0"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* TYPEDEFS
|
* 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),
|
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);
|
glyph_outline_cache_ops);
|
||||||
|
|
||||||
LV_LOG_INFO("outline cache(name: %s, style: 0x%x) create %p, ref_cnt = %d",
|
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
|
#define LV_FREETYPE_CACHE_FT_SIZES 8
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef LV_FREETYPE_CACHE_FT_OUTLINES
|
#ifndef LV_FREETYPE_CACHE_FT_GLYPH_CNT
|
||||||
#ifdef CONFIG_LV_FREETYPE_CACHE_FT_OUTLINES
|
#ifdef CONFIG_LV_FREETYPE_CACHE_FT_GLYPH_CNT
|
||||||
#define LV_FREETYPE_CACHE_FT_OUTLINES CONFIG_LV_FREETYPE_CACHE_FT_OUTLINES
|
#define LV_FREETYPE_CACHE_FT_GLYPH_CNT CONFIG_LV_FREETYPE_CACHE_FT_GLYPH_CNT
|
||||||
#else
|
#else
|
||||||
#define LV_FREETYPE_CACHE_FT_OUTLINES 256
|
#define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user