mirror of
https://gitee.com/Vancouver2017/luban-lite.git
synced 2025-12-15 16:48:56 +00:00
v1.2.1
This commit is contained in:
2
packages/artinchip/lvgl-ui/lvgl_v9/lvgl/src/libs/freetype/lv_freetype.c
Executable file → Normal file
2
packages/artinchip/lvgl-ui/lvgl_v9/lvgl/src/libs/freetype/lv_freetype.c
Executable file → Normal file
@@ -368,12 +368,14 @@ static bool cache_node_cache_create_cb(lv_freetype_cache_node_t * node, void * u
|
||||
}
|
||||
|
||||
node->face = face;
|
||||
lv_mutex_init(&node->face_lock);
|
||||
|
||||
return true;
|
||||
}
|
||||
static void cache_node_cache_free_cb(lv_freetype_cache_node_t * node, void * user_data)
|
||||
{
|
||||
FT_Done_Face(node->face);
|
||||
lv_mutex_delete(&node->face_lock);
|
||||
|
||||
if(node->glyph_cache) {
|
||||
lv_cache_destroy(node->glyph_cache, user_data);
|
||||
|
||||
@@ -129,13 +129,19 @@ static bool freetype_glyph_create_cb(lv_freetype_glyph_cache_data_t * data, void
|
||||
|
||||
lv_font_glyph_dsc_t * dsc_out = &data->glyph_dsc;
|
||||
|
||||
lv_mutex_lock(&dsc->cache_node->face_lock);
|
||||
|
||||
FT_Face face = dsc->cache_node->face;
|
||||
|
||||
FT_UInt glyph_index = FT_Get_Char_Index(face, data->unicode);
|
||||
|
||||
FT_Set_Pixel_Sizes(face, 0, dsc->size);
|
||||
|
||||
error = FT_Load_Glyph(face, glyph_index, FT_LOAD_COMPUTE_METRICS | FT_LOAD_NO_BITMAP);
|
||||
|
||||
if(error) {
|
||||
FT_ERROR_MSG("FT_Load_Glyph", error);
|
||||
lv_mutex_unlock(&dsc->cache_node->face_lock);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -172,6 +178,8 @@ static bool freetype_glyph_create_cb(lv_freetype_glyph_cache_data_t * data, void
|
||||
dsc_out->is_placeholder = glyph_index == 0;
|
||||
dsc_out->glyph_index = glyph_index;
|
||||
|
||||
lv_mutex_unlock(&dsc->cache_node->face_lock);
|
||||
|
||||
return true;
|
||||
}
|
||||
static void freetype_glyph_free_cb(lv_freetype_glyph_cache_data_t * data, void * user_data)
|
||||
|
||||
16
packages/artinchip/lvgl-ui/lvgl_v9/lvgl/src/libs/freetype/lv_freetype_image.c
Executable file → Normal file
16
packages/artinchip/lvgl-ui/lvgl_v9/lvgl/src/libs/freetype/lv_freetype_image.c
Executable file → Normal file
@@ -123,15 +123,21 @@ static bool freetype_image_create_cb(lv_freetype_image_cache_data_t * data, void
|
||||
|
||||
FT_Error error;
|
||||
|
||||
lv_mutex_lock(&dsc->cache_node->face_lock);
|
||||
|
||||
FT_Face face = dsc->cache_node->face;
|
||||
|
||||
FT_Set_Pixel_Sizes(face, 0, dsc->size);
|
||||
|
||||
error = FT_Load_Glyph(face, data->glyph_index, FT_LOAD_RENDER | FT_LOAD_TARGET_NORMAL);
|
||||
if(error) {
|
||||
lv_mutex_unlock(&dsc->cache_node->face_lock);
|
||||
FT_ERROR_MSG("FT_Load_Glyph", error);
|
||||
return false;
|
||||
}
|
||||
error = FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL);
|
||||
if(error) {
|
||||
lv_mutex_unlock(&dsc->cache_node->face_lock);
|
||||
FT_ERROR_MSG("FT_Render_Glyph", error);
|
||||
return false;
|
||||
}
|
||||
@@ -139,6 +145,7 @@ static bool freetype_image_create_cb(lv_freetype_image_cache_data_t * data, void
|
||||
FT_Glyph glyph;
|
||||
error = FT_Get_Glyph(face->glyph, &glyph);
|
||||
if(error) {
|
||||
lv_mutex_unlock(&dsc->cache_node->face_lock);
|
||||
FT_ERROR_MSG("FT_Get_Glyph", error);
|
||||
return false;
|
||||
}
|
||||
@@ -150,7 +157,12 @@ static bool freetype_image_create_cb(lv_freetype_image_cache_data_t * data, void
|
||||
|
||||
uint32_t stride = lv_draw_buf_width_to_stride(box_w, LV_COLOR_FORMAT_A8);
|
||||
data->draw_buf = lv_draw_buf_create(box_w, box_h, LV_COLOR_FORMAT_A8, stride);
|
||||
|
||||
if (!data->draw_buf) {
|
||||
FT_Done_Glyph(glyph);
|
||||
lv_mutex_unlock(&dsc->cache_node->face_lock);
|
||||
LV_LOG_ERROR("Can not create freetype draw buf");
|
||||
return false;
|
||||
}
|
||||
for(int y = 0; y < box_h; ++y) {
|
||||
lv_memcpy((uint8_t *)(data->draw_buf->data) + y * stride, glyph_bitmap->bitmap.buffer + y * box_w,
|
||||
box_w);
|
||||
@@ -158,6 +170,8 @@ static bool freetype_image_create_cb(lv_freetype_image_cache_data_t * data, void
|
||||
|
||||
FT_Done_Glyph(glyph);
|
||||
|
||||
lv_mutex_unlock(&dsc->cache_node->face_lock);
|
||||
|
||||
return true;
|
||||
}
|
||||
static void freetype_image_free_cb(lv_freetype_image_cache_data_t * data, void * user_data)
|
||||
|
||||
5
packages/artinchip/lvgl-ui/lvgl_v9/lvgl/src/libs/freetype/lv_freetype_outline.c
Executable file → Normal file
5
packages/artinchip/lvgl-ui/lvgl_v9/lvgl/src/libs/freetype/lv_freetype_outline.c
Executable file → Normal file
@@ -119,12 +119,17 @@ bool lv_freetype_is_outline_font(const lv_font_t * font)
|
||||
static bool freetype_glyph_outline_create_cb(lv_freetype_outline_node_t * node, lv_freetype_font_dsc_t * dsc)
|
||||
{
|
||||
lv_freetype_outline_t outline;
|
||||
|
||||
lv_mutex_lock(&dsc->cache_node->face_lock);
|
||||
|
||||
outline = outline_create(dsc->context,
|
||||
dsc->cache_node->face,
|
||||
node->glyph_index,
|
||||
dsc->cache_node->ref_size,
|
||||
dsc->style & LV_FREETYPE_FONT_STYLE_BOLD ? 1 : 0);
|
||||
|
||||
lv_mutex_unlock(&dsc->cache_node->face_lock);
|
||||
|
||||
if(!outline) {
|
||||
return false;
|
||||
}
|
||||
|
||||
1
packages/artinchip/lvgl-ui/lvgl_v9/lvgl/src/libs/freetype/lv_freetype_private.h
Executable file → Normal file
1
packages/artinchip/lvgl-ui/lvgl_v9/lvgl/src/libs/freetype/lv_freetype_private.h
Executable file → Normal file
@@ -66,6 +66,7 @@ struct _lv_freetype_cache_node_t {
|
||||
uint32_t ref_size; /**< Reference size for calculating outline glyph's real size.*/
|
||||
|
||||
FT_Face face;
|
||||
lv_mutex_t face_lock;
|
||||
|
||||
/*glyph cache*/
|
||||
lv_cache_t * glyph_cache;
|
||||
|
||||
Reference in New Issue
Block a user