From 6469f35d99d08a4c088972d303a9f6d818c9f6ae Mon Sep 17 00:00:00 2001 From: binary1248 Date: Tue, 22 Apr 2014 22:01:10 +0200 Subject: [PATCH] Fix text being rendered with a vertical offset when the font's ascent doesn't match it's size. --- src/SFML/Graphics/Font.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/SFML/Graphics/Font.cpp b/src/SFML/Graphics/Font.cpp index 954c8b5e..0cf7b3db 100644 --- a/src/SFML/Graphics/Font.cpp +++ b/src/SFML/Graphics/Font.cpp @@ -445,6 +445,11 @@ Glyph Font::loadGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) c int width = bitmap.width; int height = bitmap.rows; + int ascender = face->size->metrics.ascender >> 6; + + // Offset to make up for empty space between ascender and virtual top of the typeface + int offset = characterSize - ascender; + if ((width > 0) && (height > 0)) { // Leave a small padding around characters, so that filtering doesn't @@ -459,7 +464,7 @@ Glyph Font::loadGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) c // Compute the glyph's bounding box glyph.bounds.left = bitmapGlyph->left - padding; - glyph.bounds.top = -bitmapGlyph->top - padding; + glyph.bounds.top = -bitmapGlyph->top - padding - offset; glyph.bounds.width = width + 2 * padding; glyph.bounds.height = height + 2 * padding;