From 1ee7d3a84e3bc880abd7226b7dc1336b19d9211d Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 3 Sep 2021 02:37:37 +0200 Subject: Consistently calculate font height for different fonts --- src/Text.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/Text.cpp') diff --git a/src/Text.cpp b/src/Text.cpp index e012af5..421de8c 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -305,6 +305,10 @@ namespace QuickMedia } } + float Text::font_get_real_height(sf::Font *font) { + return font->getGlyph('|', characterSize, false).bounds.height + std::floor(4.0f * ((float)characterSize / (float)14.0f)); + } + float Text::get_text_quad_left_side(const VertexRef &vertex_ref) const { return vertices[vertex_ref.vertices_index][vertex_ref.index + 1].position.x; } @@ -392,7 +396,7 @@ namespace QuickMedia float latin_font_height = latin_font->getGlyph(' ', characterSize, false).advance; float hspace = latin_font_height + characterSpacing; - float vspace = latin_font->getLineSpacing(characterSize); // TODO: What about japanese font??? + const float vspace = font_get_real_height(latin_font); const sf::Color url_color = get_current_theme().url_text_color; @@ -650,9 +654,11 @@ namespace QuickMedia else latin_font = FontLoader::get_font(FontLoader::FontType::LATIN); + const float vspace = font_get_real_height(latin_font); + if(vertices_linear.empty()) { caretIndex = 0; - caretPosition = sf::Vector2f(0.0f, floor(latin_font->getLineSpacing(characterSize))); + caretPosition = sf::Vector2f(0.0f, floor(vspace)); caret_offset_x = 0.0f; return; } @@ -708,10 +714,10 @@ namespace QuickMedia caretPosition.x = 0.0f; else caretPosition.x = get_text_quad_right_side(last_vertex); - caretPosition.y = (1 + get_vertex_line(caretIndex)) * floor(latin_font->getLineSpacing(characterSize) + lineSpacing); + caretPosition.y = (1 + get_vertex_line(caretIndex)) * floor(vspace + lineSpacing); } else { caretPosition.x = get_caret_offset_by_caret_index(caretIndex); - caretPosition.y = (1 + get_vertex_line(caretIndex)) * floor(latin_font->getLineSpacing(characterSize) + lineSpacing); + caretPosition.y = (1 + get_vertex_line(caretIndex)) * floor(vspace + lineSpacing); } } @@ -933,7 +939,7 @@ namespace QuickMedia latin_font_type = FontLoader::FontType::LATIN; sf::Font *latin_font = FontLoader::get_font(latin_font_type); - const float vspace = latin_font->getLineSpacing(characterSize); + const float vspace = font_get_real_height(latin_font); pos.y += floor(vspace); // Origin is at bottom left, we want it to be at top left const FontLoader::FontType font_types[] = { latin_font_type, FontLoader::FontType::CJK, FontLoader::FontType::SYMBOLS }; -- cgit v1.2.3