diff --git a/src/SFGUI/Engine.cpp b/src/SFGUI/Engine.cpp index 0e9818d0..cfee53d3 100644 --- a/src/SFGUI/Engine.cpp +++ b/src/SFGUI/Engine.cpp @@ -183,31 +183,38 @@ sf::Vector2f Engine::GetTextStringMetrics( const sf::String& string, const sf::F auto longest_line = 0.f; for( const auto& current_character : string ) { - metrics.x += static_cast( font.getKerning( previous_character, current_character, font_size ) ); - switch( current_character ) { case L' ': metrics.x += horizontal_spacing; - continue; + break; + case L'\t': metrics.x += horizontal_spacing * tab_spaces; - continue; + break; + case L'\n': metrics.y += vertical_spacing; longest_line = std::max( metrics.x, longest_line ); metrics.x = 0.f; - continue; + break; + case L'\v': metrics.y += vertical_spacing * tab_spaces; - continue; - default: break; - } - const auto& glyph = font.getGlyph( current_character, font_size, false ); + default: + if( previous_character != 0 ) { + metrics.x += static_cast( font.getKerning( previous_character, current_character, font_size ) ); + } - metrics.x += static_cast( glyph.advance ); - metrics.y = std::max( metrics.y, static_cast( glyph.bounds.size.y ) ); + previous_character = current_character; + + const auto& glyph = font.getGlyph( current_character, font_size, false ); + metrics.x += static_cast( glyph.advance ); + metrics.y = std::max( metrics.y, static_cast( glyph.bounds.size.y ) ); + + break; + } } metrics.x = std::max( longest_line, metrics.x );