From a2922708e8457b9931d36d4f1d359a38b3eedef1 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 4 Feb 2023 18:21:43 +0300 Subject: [PATCH] Support floating-point glyph coordinates --- libs/ui/include/psemek/ui/bmfont.hpp | 15 ++++++++------- libs/ui/source/bmfont.cpp | 16 ++++++++-------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/libs/ui/include/psemek/ui/bmfont.hpp b/libs/ui/include/psemek/ui/bmfont.hpp index 20b20994..51058de1 100644 --- a/libs/ui/include/psemek/ui/bmfont.hpp +++ b/libs/ui/include/psemek/ui/bmfont.hpp @@ -13,13 +13,13 @@ namespace psemek::ui { struct glyph_data { - int start_x; - int start_y; - int size_x; - int size_y; - int offset_x; - int offset_y; - int advance; + float start_x; + float start_y; + float size_x; + float size_y; + float offset_x; + float offset_y; + float advance; }; std::string name; @@ -28,6 +28,7 @@ namespace psemek::ui std::unordered_map glyphs; float sdf_scale = 0.f; + // Parse JSON font info generated by BMFont or msdf-bmfont static bmfont_data parse(io::istream && stream); }; diff --git a/libs/ui/source/bmfont.cpp b/libs/ui/source/bmfont.cpp index b7323e8e..42e2cd6b 100644 --- a/libs/ui/source/bmfont.cpp +++ b/libs/ui/source/bmfont.cpp @@ -73,7 +73,7 @@ namespace psemek::ui { auto const & sdf = document["common"]; - result.baseline = sdf["base"].GetInt(); + result.baseline = sdf["base"].GetFloat(); } { @@ -84,13 +84,13 @@ namespace psemek::ui char32_t id = charInfo["id"].GetUint(); auto & data = result.glyphs[id]; - data.start_x = charInfo["x"].GetInt(); - data.start_y = charInfo["y"].GetInt(); - data.size_x = charInfo["width"].GetInt(); - data.size_y = charInfo["height"].GetInt(); - data.offset_x = charInfo["xoffset"].GetInt(); - data.offset_y = charInfo["yoffset"].GetInt(); - data.advance = charInfo["xadvance"].GetInt(); + data.start_x = charInfo["x"].GetFloat(); + data.start_y = charInfo["y"].GetFloat(); + data.size_x = charInfo["width"].GetFloat(); + data.size_y = charInfo["height"].GetFloat(); + data.offset_x = charInfo["xoffset"].GetFloat(); + data.offset_y = charInfo["yoffset"].GetFloat(); + data.advance = charInfo["xadvance"].GetFloat(); data.offset_y = - data.offset_y - data.size_y; }