From 62796a64bac11da00bb1ab6370670c434aad460f Mon Sep 17 00:00:00 2001 From: VIFEX Date: Tue, 11 Jun 2024 18:03:51 +0800 Subject: [PATCH] perf(vg_lite): invert the vector font Y axis coordinate in advance (#6353) Signed-off-by: pengyiqiang Co-authored-by: pengyiqiang --- src/draw/vg_lite/lv_draw_vg_lite_label.c | 22 ++++++++++++---------- src/draw/vg_lite/lv_vg_lite_utils.c | 5 ----- src/draw/vg_lite/lv_vg_lite_utils.h | 2 -- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/draw/vg_lite/lv_draw_vg_lite_label.c b/src/draw/vg_lite/lv_draw_vg_lite_label.c index c40fd6c27..ae409abf6 100644 --- a/src/draw/vg_lite/lv_draw_vg_lite_label.c +++ b/src/draw/vg_lite/lv_draw_vg_lite_label.c @@ -255,9 +255,6 @@ static void draw_letter_outline(lv_draw_vg_lite_unit_t * u, const lv_draw_glyph_ /* scale size */ vg_lite_scale(scale, scale, &matrix); - /* Cartesian coordinates to LCD coordinates */ - lv_vg_lite_matrix_flip_y(&matrix); - /* calc inverse matrix */ vg_lite_matrix_t result; if(!lv_vg_lite_matrix_inverse(&result, &matrix)) { @@ -305,23 +302,28 @@ static void vg_lite_outline_push(const lv_freetype_outline_event_param_t * param lv_freetype_outline_type_t type = param->type; switch(type) { + + /** + * Reverse the Y-axis coordinate direction to achieve + * the conversion from Cartesian coordinate system to LCD coordinate system + */ case LV_FREETYPE_OUTLINE_END: lv_vg_lite_path_end(outline); break; case LV_FREETYPE_OUTLINE_MOVE_TO: - lv_vg_lite_path_move_to(outline, param->to.x, param->to.y); + lv_vg_lite_path_move_to(outline, param->to.x, -param->to.y); break; case LV_FREETYPE_OUTLINE_LINE_TO: - lv_vg_lite_path_line_to(outline, param->to.x, param->to.y); + lv_vg_lite_path_line_to(outline, param->to.x, -param->to.y); break; case LV_FREETYPE_OUTLINE_CUBIC_TO: - lv_vg_lite_path_cubic_to(outline, param->control1.x, param->control1.y, - param->control2.x, param->control2.y, - param->to.x, param->to.y); + lv_vg_lite_path_cubic_to(outline, param->control1.x, -param->control1.y, + param->control2.x, -param->control2.y, + param->to.x, -param->to.y); break; case LV_FREETYPE_OUTLINE_CONIC_TO: - lv_vg_lite_path_quad_to(outline, param->control1.x, param->control1.y, - param->to.x, param->to.y); + lv_vg_lite_path_quad_to(outline, param->control1.x, -param->control1.y, + param->to.x, -param->to.y); break; default: LV_LOG_ERROR("unknown point type: %d", type); diff --git a/src/draw/vg_lite/lv_vg_lite_utils.c b/src/draw/vg_lite/lv_vg_lite_utils.c index 4598adcc0..63dde06f6 100644 --- a/src/draw/vg_lite/lv_vg_lite_utils.c +++ b/src/draw/vg_lite/lv_vg_lite_utils.c @@ -964,11 +964,6 @@ void lv_vg_lite_matrix_multiply(vg_lite_matrix_t * matrix, const vg_lite_matrix_ lv_memcpy(matrix, &temp, sizeof(temp)); } -void lv_vg_lite_matrix_flip_y(vg_lite_matrix_t * matrix) -{ - matrix->m[1][1] = -matrix->m[1][1]; -} - bool lv_vg_lite_matrix_inverse(vg_lite_matrix_t * result, const vg_lite_matrix_t * matrix) { vg_lite_float_t det00, det01, det02; diff --git a/src/draw/vg_lite/lv_vg_lite_utils.h b/src/draw/vg_lite/lv_vg_lite_utils.h index 32078a9ed..96ff3261b 100644 --- a/src/draw/vg_lite/lv_vg_lite_utils.h +++ b/src/draw/vg_lite/lv_vg_lite_utils.h @@ -159,8 +159,6 @@ bool lv_vg_lite_16px_align(void); void lv_vg_lite_matrix_multiply(vg_lite_matrix_t * matrix, const vg_lite_matrix_t * mult); -void lv_vg_lite_matrix_flip_y(vg_lite_matrix_t * matrix); - bool lv_vg_lite_matrix_inverse(vg_lite_matrix_t * result, const vg_lite_matrix_t * matrix); lv_point_precise_t lv_vg_lite_matrix_transform_point(const vg_lite_matrix_t * matrix, const lv_point_precise_t * point);