diff options
author | Ekaitz Zarraga <ekaitz@elenq.tech> | 2022-12-10 20:42:27 +0100 |
---|---|---|
committer | Ekaitz Zarraga <ekaitz@elenq.tech> | 2022-12-10 20:46:26 +0100 |
commit | d0ee939a32fc7cec65a77d028d72881ee8ea1495 (patch) | |
tree | dc6983005b145c6be2dbcde5268544adee4fcba7 /src/graphics/font.cpp | |
parent | 2b6cd04c1fcf9807b6da9aa03e9920c28780db2c (diff) |
Move font support and clean
Diffstat (limited to 'src/graphics/font.cpp')
-rw-r--r-- | src/graphics/font.cpp | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/src/graphics/font.cpp b/src/graphics/font.cpp deleted file mode 100644 index 42176b2..0000000 --- a/src/graphics/font.cpp +++ /dev/null @@ -1,86 +0,0 @@ -#include "font.h" - -using namespace Graphics; - -// Font - -Font::Font(const sf::Texture &texture, const std::string &mapping, - unsigned int numrows, unsigned int numcols) - : tex_(texture) - , mapping_(mapping) - , numrows_(numrows) - , numcols_(numcols) -{ - sf::Vector2u totalSize = tex_.getSize(); - sf::Vector2f totalSize_f (totalSize.x, totalSize.y); - glyphSize_ = sf::Vector2f( totalSize.x / numcols_, totalSize.y / numrows_ ); -} - -std::array<sf::Vector2f, 4> Font::getGlyphMapping(const char ch){ - unsigned int pos = static_cast<unsigned int>( mapping_.find_first_of(ch)); - if (pos == std::string::npos){ - // TODO: Error handling! - pos = 0; - } - unsigned int x = pos % numcols_; - unsigned int y = (pos - x) / numcols_; - - sf::Vector2f basePos(x*glyphSize_.x, y*glyphSize_.y); - - // 1 --- 2 - // | | - // 4 --- 3 - return std::array<sf::Vector2f,4> { - basePos, - basePos + sf::Vector2f( glyphSize_.x, 0 ), - basePos + glyphSize_, - basePos + sf::Vector2f( 0, glyphSize_.y ), - }; -} - -sf::Vector2f Font::getGlyphSize(){ - return glyphSize_; -} - -const sf::Texture * Font::getTexture(){ - return &tex_; -} - - - - -// Text - -Text::Text(Font &font, const std::string &text) - : font_(font) - , text_(text) - , vertices_(sf::Quads, text.size()*4) -{ - unsigned int length = vertices_.getVertexCount(); - sf::Vector2f glyphSize = font_.getGlyphSize(); - // TODO: this is the simplest rendering way: everything in one line - // we should improve this to make it handle newlines or max witdths - for(unsigned int i=0; i < length; i=i+4){ - vertices_[i+0].position = sf::Vector2f(glyphSize.x * i/4, 0); - vertices_[i+1].position = sf::Vector2f(glyphSize.x * (i/4 + 1), 0); - vertices_[i+2].position = sf::Vector2f(glyphSize.x * (i/4 + 1), glyphSize.y); - vertices_[i+3].position = sf::Vector2f(glyphSize.x * i/4, glyphSize.y); - - std::array<sf::Vector2f, 4> glyph = font_.getGlyphMapping(text_[i/4]); - - vertices_[i+0].texCoords = glyph[0]; - vertices_[i+1].texCoords = glyph[1]; - vertices_[i+2].texCoords = glyph[2]; - vertices_[i+3].texCoords = glyph[3]; - } -} - -void Text::draw(sf::RenderTarget& target, sf::RenderStates states) const -{ - // TODO: only repaint if needed: when repainting is needed - // vertices_.clear() and fun - states.transform *= getTransform(); - states.texture = font_.getTexture(); - // you may also override states.shader or states.blendMode if you want - target.draw(vertices_, states); -} |