diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-08-22 19:18:37 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-08-22 19:18:37 +0100 |
commit | 69c69e8b33ab83d7e6a6f06f3691f3bccf413f4c (patch) | |
tree | ebc5f7be617701a3cb2741e159c93e404a55eb50 /ui/font.cpp | |
parent | Make utf8_string_view work on any contiguous collection of chars (diff) | |
download | ilt-69c69e8b33ab83d7e6a6f06f3691f3bccf413f4c.tar.bz2 ilt-69c69e8b33ab83d7e6a6f06f3691f3bccf413f4c.tar.xz ilt-69c69e8b33ab83d7e6a6f06f3691f3bccf413f4c.zip |
Use utf8_string_view for processing text to renderings
Diffstat (limited to 'ui/font.cpp')
-rw-r--r-- | ui/font.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/ui/font.cpp b/ui/font.cpp index 0e251ea..fc66d52 100644 --- a/ui/font.cpp +++ b/ui/font.cpp @@ -68,13 +68,12 @@ Font::Font(std::filesystem::path p, unsigned s) : path {std::move(p)}, size {get } void -Font::generateChars(const std::string_view chars) const +Font::generateChars(const utf8_string_view chars) const { std::optional<FT> ft; std::optional<Face> face; - for (auto c = &chars.front(); c <= &chars.back(); c = next_char(c)) { - const auto codepoint = get_codepoint(c); + for (auto codepoint : chars) { if (charsData.find(codepoint) == charsData.end()) { if (!ft) { ft.emplace(); @@ -148,7 +147,7 @@ Font::getTextureSize(unsigned int height) } Font::TextureQuads -Font::render(const std::string_view chars) const +Font::render(const utf8_string_view chars) const { constexpr static const std::array<std::pair<glm::vec2, glm::vec2>, 4> C {{ {{0, 0}, {0, 1}}, @@ -161,12 +160,12 @@ Font::render(const std::string_view chars) const glm::vec2 pos {}; TextureQuads out; - for (auto c = chars.data(); c <= &chars.back(); c = next_char(c)) { - if (isspace(*c)) { + for (auto codepoint : chars) { + if (std::isspace(static_cast<int>(codepoint))) { pos.x += static_cast<float>(size.y) / 4.F; continue; } - const auto & ch = charsData.at(get_codepoint(c)); + const auto & ch = charsData.at(codepoint); if (!ch.advance) { continue; } |