From 6368ca5e680bbcae3d13df4e87ed25ef80728cd3 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 17 Aug 2024 18:17:32 +0300 Subject: [PATCH] Support 2D scale in gfx::painter::text --- libs/gfx/include/psemek/gfx/painter.hpp | 4 ++-- libs/gfx/source/painter.cpp | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/libs/gfx/include/psemek/gfx/painter.hpp b/libs/gfx/include/psemek/gfx/painter.hpp index d3e26152..9560f647 100644 --- a/libs/gfx/include/psemek/gfx/painter.hpp +++ b/libs/gfx/include/psemek/gfx/painter.hpp @@ -42,7 +42,7 @@ namespace psemek::gfx struct text_options { font f = font::font_9x12; - float scale = 1.f; + geom::vector scale = {1.f, 1.f}; x_align x = x_align::center; y_align y = y_align::center; color c = {255, 255, 255, 255}; @@ -61,7 +61,7 @@ namespace psemek::gfx void besier(geom::point const & p0, geom::point const & p1, geom::point const & p2, float width, color const & c, int quality = 8, bool smooth = true); // 2D text - geom::vector text_size(std::string_view str, font f = font::font_9x12, float scale = 1.f); + geom::vector text_size(std::string_view str, font f = font::font_9x12); void text(geom::point const & p, std::string_view str, text_options const & opts); void texture(texture_2d const & texture, geom::box const & box, color const & c = {0, 0, 0, 0}); diff --git a/libs/gfx/source/painter.cpp b/libs/gfx/source/painter.cpp index 2867f05b..19b84603 100644 --- a/libs/gfx/source/painter.cpp +++ b/libs/gfx/source/painter.cpp @@ -281,7 +281,7 @@ namespace psemek::gfx } } - geom::vector painter::text_size(std::string_view str, font f, float scale) + geom::vector painter::text_size(std::string_view str, font f) { // TODO: multiline text geom::vector s; @@ -294,8 +294,7 @@ namespace psemek::gfx throw util::unknown_enum_value_exception(f); } - s[0] *= str.size() * scale; - s[1] *= scale; + s[0] *= str.size(); return s; } @@ -471,7 +470,7 @@ namespace psemek::gfx void painter::text3d(geom::point const & p, std::string_view str, text_options const & opts, geom::matrix const & t) { - auto const size = text_size(str, opts.f, opts.scale); + auto const size = geom::pointwise_mult(text_size(str, opts.f), opts.scale); geom::vector pen { 0.f, 0.f, 0.f }; @@ -503,8 +502,8 @@ namespace psemek::gfx throw util::unknown_enum_value_exception(opts.y); } - geom::vector const sx = {9.f * opts.scale, 0.f, 0.f}; - geom::vector const sy = {0.f, 12.f * opts.scale, 0.f}; + geom::vector const sx = {9.f * opts.scale[0], 0.f, 0.f}; + geom::vector const sy = {0.f, 12.f * opts.scale[1], 0.f}; auto to_texcoord = [](int tx, int ty, int ix, int iy) {