From 5a75473e16afb8152aab943fd316d9820835f465 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Wed, 11 Sep 2024 18:18:20 +1000 Subject: [PATCH] try to fix that freaking rare font bug again --- source/core/StarFont.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/source/core/StarFont.cpp b/source/core/StarFont.cpp index 47569f2..07a6265 100644 --- a/source/core/StarFont.cpp +++ b/source/core/StarFont.cpp @@ -30,8 +30,8 @@ FTContext ftContext; struct FontImpl { FT_Face face; - unsigned loadedPixelSize = 0; String::Char loadedChar = 0; + unsigned renderedPixelSize = 0; }; FontPtr Font::loadFont(String const& fileName, unsigned pixelSize) { @@ -84,7 +84,8 @@ unsigned Font::width(String::Char c) { if (auto width = m_widthCache.maybe({c, m_pixelSize})) { return *width; } else { - FT_Load_Char(m_fontImpl->face, c, FontLoadFlags); + if (m_fontImpl->loadedChar != c) + FT_Load_Char(m_fontImpl->face, m_fontImpl->loadedChar = c, FontLoadFlags); unsigned newWidth = (m_fontImpl->face->glyph->linearHoriAdvance + 32768) / 65536; m_widthCache.insert({c, m_pixelSize}, newWidth); return newWidth; @@ -98,19 +99,19 @@ tuple Font::render(String::Char c) { FT_Face face = m_fontImpl->face; - if (m_fontImpl->loadedPixelSize != m_pixelSize || m_fontImpl->loadedChar != c) { - FT_UInt glyph_index = FT_Get_Char_Index(face, c); - if (FT_Load_Glyph(face, glyph_index, FontLoadFlags) != 0) + if (m_fontImpl->loadedChar != c) { + if (FT_Load_Glyph(face, FT_Get_Char_Index(face, m_fontImpl->loadedChar = c), FontLoadFlags) != 0) return {}; - // convert to an anti-aliased bitmap + m_fontImpl->renderedPixelSize = 0; + } + + if (m_fontImpl->renderedPixelSize != m_pixelSize) { + m_fontImpl->renderedPixelSize = m_pixelSize; if (FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL) != 0) return {}; } - m_fontImpl->loadedPixelSize = m_pixelSize; - m_fontImpl->loadedChar = c; - FT_GlyphSlot slot = face->glyph; if (!slot->bitmap.buffer) return {};