From c198fcf8089a1a09a03086071b3d6ddb8c62cfa9 Mon Sep 17 00:00:00 2001 From: Mark Page Date: Thu, 10 Mar 2022 07:58:06 +0000 Subject: [PATCH] Fix font draw path using hiDPI to correctly scale the font --- Sources/Display/Font/FontDraw/font_draw_path.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Sources/Display/Font/FontDraw/font_draw_path.cpp b/Sources/Display/Font/FontDraw/font_draw_path.cpp index e1d72d9e3..4da72b85f 100644 --- a/Sources/Display/Font/FontDraw/font_draw_path.cpp +++ b/Sources/Display/Font/FontDraw/font_draw_path.cpp @@ -65,8 +65,13 @@ namespace clan float offset_y = 0; UTF8_Reader reader(text.data(), text.length()); - const Mat4f original_transform = canvas.get_transform(); - clan::Mat4f scale_matrix = clan::Mat4f::scale(scaled_height, scaled_height, scaled_height); + clan::TransformState original_transform(&canvas); + + float pixel_ratio = canvas.get_pixel_ratio(); + if (pixel_ratio == 0.0f) + pixel_ratio = 1.0f; + float scaled_pixel_ratio = scaled_height / pixel_ratio; + clan::Mat4f scale_matrix = clan::Mat4f::scale(scaled_pixel_ratio, scaled_pixel_ratio, scaled_pixel_ratio); Brush brush(color); Sizef advance; @@ -82,7 +87,7 @@ namespace clan continue; } - canvas.set_transform(original_transform * Mat4f::translate(position.x + offset_x, position.y + offset_y, 0) * scale_matrix); + canvas.set_transform(original_transform.matrix * Mat4f::translate(position.x + offset_x, position.y + offset_y, 0) * scale_matrix); Font_PathGlyph *gptr = path_cache->get_glyph(canvas, font_engine, glyph); if (gptr) { @@ -91,6 +96,5 @@ namespace clan offset_y += gptr->metrics.advance.height * scaled_height; } } - canvas.set_transform(original_transform); } }