Support floating-point glyph coordinates

This commit is contained in:
Nikita Lisitsa 2023-02-04 18:21:43 +03:00
parent 1582b341d3
commit a2922708e8
2 changed files with 16 additions and 15 deletions

View file

@ -13,13 +13,13 @@ namespace psemek::ui
{ {
struct glyph_data struct glyph_data
{ {
int start_x; float start_x;
int start_y; float start_y;
int size_x; float size_x;
int size_y; float size_y;
int offset_x; float offset_x;
int offset_y; float offset_y;
int advance; float advance;
}; };
std::string name; std::string name;
@ -28,6 +28,7 @@ namespace psemek::ui
std::unordered_map<char32_t, glyph_data> glyphs; std::unordered_map<char32_t, glyph_data> glyphs;
float sdf_scale = 0.f; float sdf_scale = 0.f;
// Parse JSON font info generated by BMFont or msdf-bmfont
static bmfont_data parse(io::istream && stream); static bmfont_data parse(io::istream && stream);
}; };

View file

@ -73,7 +73,7 @@ namespace psemek::ui
{ {
auto const & sdf = document["common"]; 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(); char32_t id = charInfo["id"].GetUint();
auto & data = result.glyphs[id]; auto & data = result.glyphs[id];
data.start_x = charInfo["x"].GetInt(); data.start_x = charInfo["x"].GetFloat();
data.start_y = charInfo["y"].GetInt(); data.start_y = charInfo["y"].GetFloat();
data.size_x = charInfo["width"].GetInt(); data.size_x = charInfo["width"].GetFloat();
data.size_y = charInfo["height"].GetInt(); data.size_y = charInfo["height"].GetFloat();
data.offset_x = charInfo["xoffset"].GetInt(); data.offset_x = charInfo["xoffset"].GetFloat();
data.offset_y = charInfo["yoffset"].GetInt(); data.offset_y = charInfo["yoffset"].GetFloat();
data.advance = charInfo["xadvance"].GetInt(); data.advance = charInfo["xadvance"].GetFloat();
data.offset_y = - data.offset_y - data.size_y; data.offset_y = - data.offset_y - data.size_y;
} }