Skip to content

Commit ec56dc1

Browse files
TankOseXpl0it3r
authored andcommitted
refac, fix: Fix kerning; one return path
When calculating text metrics, kerning did not update the previous character, so kerning -- for every character -- was always calculated from the current character to the character with charcode 0x00. Fixes #89.
1 parent 261623b commit ec56dc1

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

src/SFGUI/Engine.cpp

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -183,31 +183,38 @@ sf::Vector2f Engine::GetTextStringMetrics( const sf::String& string, const sf::F
183183
auto longest_line = 0.f;
184184

185185
for( const auto& current_character : string ) {
186-
metrics.x += static_cast<float>( font.getKerning( previous_character, current_character, font_size ) );
187-
188186
switch( current_character ) {
189187
case L' ':
190188
metrics.x += horizontal_spacing;
191-
continue;
189+
break;
190+
192191
case L'\t':
193192
metrics.x += horizontal_spacing * tab_spaces;
194-
continue;
193+
break;
194+
195195
case L'\n':
196196
metrics.y += vertical_spacing;
197197
longest_line = std::max( metrics.x, longest_line );
198198
metrics.x = 0.f;
199-
continue;
199+
break;
200+
200201
case L'\v':
201202
metrics.y += vertical_spacing * tab_spaces;
202-
continue;
203-
default:
204203
break;
205-
}
206204

207-
const auto& glyph = font.getGlyph( current_character, font_size, false );
205+
default:
206+
if( previous_character != 0 ) {
207+
metrics.x += static_cast<float>( font.getKerning( previous_character, current_character, font_size ) );
208+
}
208209

209-
metrics.x += static_cast<float>( glyph.advance );
210-
metrics.y = std::max( metrics.y, static_cast<float>( glyph.bounds.size.y ) );
210+
previous_character = current_character;
211+
212+
const auto& glyph = font.getGlyph( current_character, font_size, false );
213+
metrics.x += static_cast<float>( glyph.advance );
214+
metrics.y = std::max( metrics.y, static_cast<float>( glyph.bounds.size.y ) );
215+
216+
break;
217+
}
211218
}
212219

213220
metrics.x = std::max( longest_line, metrics.x );

0 commit comments

Comments
 (0)