From 02fe1199884d1056a3282268a8c75b3f086bfc9d Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Tue, 13 Dec 2022 19:58:50 +0100 Subject: Sketch a proper font rendering infrastructure: - Kerning - LineSpacing - ... We should include that for a proper interaction with Graphics::Text and to be able to render beautiful UIs. Also, we need to discard spaces in newlines, break lines by word, and that kind of things... We'll see. --- src/graphics/text.cpp | 1 + src/graphics/textureFont.cpp | 16 +++++++++++++++- src/graphics/textureFont.h | 7 ++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/graphics/text.cpp b/src/graphics/text.cpp index 43e8be1..7b135d6 100644 --- a/src/graphics/text.cpp +++ b/src/graphics/text.cpp @@ -5,6 +5,7 @@ using namespace Graphics; template <> void Text::arrange(TextureFont &font){ // TODO: this is really awful rendering but works a little bit + // Add getLineSpacing + getKerning and so on unsigned int filledX = 0; unsigned int row = 0; unsigned int col = 0; diff --git a/src/graphics/textureFont.cpp b/src/graphics/textureFont.cpp index 3be2444..d39677e 100644 --- a/src/graphics/textureFont.cpp +++ b/src/graphics/textureFont.cpp @@ -37,6 +37,20 @@ const sf::Glyph & TextureFont::getGlyph(char ch) const{ return pair->second; } -const sf::Texture * TextureFont::getTexture(unsigned int _){ +const sf::Texture * TextureFont::getTexture(...){ return &tex_; } + +float TextureFont::getLineSpacing(...){ + // TODO make sure this is the appropiate measurement, it might be + // smaller... + // SFML obtains that from freetype face->metrics.height which only includes + // the height from the baseline, then that's corrected in sf::Text with an + // spacing ratio -> just test with a font and see what's supposed to do + return glyphSize_.y; +} + +float TextureFont::getKerning(...){ + // Monospaced fonts have 0 kerning + return 0; +} diff --git a/src/graphics/textureFont.h b/src/graphics/textureFont.h index f3f194a..224d300 100644 --- a/src/graphics/textureFont.h +++ b/src/graphics/textureFont.h @@ -22,7 +22,12 @@ namespace Graphics { public: TextureFont(const sf::Texture &texture, Descr desc); const sf::Glyph &getGlyph(char ch) const; - const sf::Texture *getTexture(unsigned int _); + + // Doesn't control sizes or anything, they are like this to be + // compatible with sf::Font somehow. + const sf::Texture *getTexture(...); + float getLineSpacing(...); + float getKerning(...); }; } -- cgit v1.2.3