From 69c69e8b33ab83d7e6a6f06f3691f3bccf413f4c Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 22 Aug 2022 19:18:37 +0100 Subject: Use utf8_string_view for processing text to renderings --- ui/font.cpp | 13 ++++++------- ui/font.h | 7 ++++--- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'ui') 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; std::optional 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, 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(codepoint))) { pos.x += static_cast(size.y) / 4.F; continue; } - const auto & ch = charsData.at(get_codepoint(c)); + const auto & ch = charsData.at(codepoint); if (!ch.advance) { continue; } diff --git a/ui/font.h b/ui/font.h index f8a29de..52b92a7 100644 --- a/ui/font.h +++ b/ui/font.h @@ -10,6 +10,7 @@ #include #include #include +#include #include class Font { @@ -21,7 +22,7 @@ public: using Quad = std::array; using Quads = std::vector; using TextureQuads = std::map; - TextureQuads render(const std::string_view text) const; + TextureQuads render(const utf8_string_view text) const; struct CharData { size_t textureIdx; @@ -38,12 +39,12 @@ public: static glm::uvec3 getTextureSize(unsigned int height); protected: - void generateChars(const std::string_view text) const; + void generateChars(const utf8_string_view text) const; const CharData getChar(char) const; std::size_t getTextureWithSpace(unsigned int adv) const; std::filesystem::path path; glm::uvec3 size; - mutable std::map charsData; + mutable std::map charsData; mutable std::vector fontTextures; }; -- cgit v1.2.3