TGUI  1.4.0
Loading...
Searching...
No Matches
BackendText.hpp
1
2//
3// TGUI - Texus' Graphical User Interface
4// Copyright (C) 2012-2024 Bruno Van de Velde (vdv_b@tgui.eu)
5//
6// This software is provided 'as-is', without any express or implied warranty.
7// In no event will the authors be held liable for any damages arising from the use of this software.
8//
9// Permission is granted to anyone to use this software for any purpose,
10// including commercial applications, and to alter it and redistribute it freely,
11// subject to the following restrictions:
12//
13// 1. The origin of this software must not be misrepresented;
14// you must not claim that you wrote the original software.
15// If you use this software in a product, an acknowledgment
16// in the product documentation would be appreciated but is not required.
17//
18// 2. Altered source versions must be plainly marked as such,
19// and must not be misrepresented as being the original software.
20//
21// 3. This notice may not be removed or altered from any source distribution.
22//
24
25#ifndef TGUI_BACKEND_TEXT_HPP
26#define TGUI_BACKEND_TEXT_HPP
27
28#include <TGUI/Text.hpp>
29
30#include <TGUI/Backend/Font/BackendFont.hpp>
31#include <TGUI/Backend/Renderer/BackendTexture.hpp>
32
34
35TGUI_MODULE_EXPORT namespace tgui
36{
40 class TGUI_API BackendText
41 {
42 public:
43
45 using TextVertexData = std::vector<std::pair<std::shared_ptr<BackendTexture>, std::shared_ptr<std::vector<Vertex>>>>;
46
47 // Don't allow copying or moving, because we don't expect derived classes to handle it correctly
48 BackendText(const BackendText&) = delete;
49 BackendText(BackendText&&) = delete;
50 BackendText& operator=(const BackendText&) = delete;
51 BackendText& operator=(BackendText&&) = delete;
52
56 BackendText() = default;
57
61 virtual ~BackendText() = default;
62
67 TGUI_NODISCARD virtual Vector2f getSize();
68
73 virtual void setString(const String& string);
74
79 TGUI_NODISCARD const String& getString() const;
80
85 virtual void setCharacterSize(unsigned int characterSize);
86
91 TGUI_NODISCARD unsigned int getCharacterSize() const;
92
97 virtual void setFillColor(const Color& color);
98
103 TGUI_NODISCARD Color getFillColor() const;
104
109 virtual void setOutlineColor(const Color& color);
110
115 TGUI_NODISCARD Color getOutlineColor() const;
116
121 virtual void setOutlineThickness(float thickness);
122
127 TGUI_NODISCARD float getOutlineThickness() const;
128
133 virtual void setStyle(TextStyles style);
134
139 TGUI_NODISCARD TextStyles getStyle() const;
140
145 virtual void setFont(const std::shared_ptr<BackendFont>& font);
146
151 TGUI_NODISCARD std::shared_ptr<BackendFont> getFont() const;
152
157 TGUI_NODISCARD virtual Vector2f findCharacterPos(std::size_t index) const;
158
164
166 protected:
167
169 // Recreates all vertices if required
171 void updateVertices();
172
174 // Helper function used by updateVertices to add vertices for a glyph
176 void addGlyphQuad(std::vector<Vertex>& vertices, Vector2f position, const Vertex::Color& color,
177 const FontGlyph& glyph, float fontScale, float italicShear);
178
180 // Helper function used by updateVertices to add vertices for a line
182 void addLine(std::vector<Vertex>& vertices, float lineLength, float lineTop, const Vertex::Color& color,
183 float offset, float thickness, float outlineThickness, float fontScale);
184
186 protected:
187
188 std::shared_ptr<BackendFont> m_font;
189 unsigned int m_lastFontTextureVersion = 0;
190
191 String m_string;
192 unsigned int m_characterSize = getGlobalTextSize();
193 Color m_fillColor;
194 Color m_outlineColor;
195 float m_outlineThickness = 0;
196 TextStyles m_style = TextStyle::Regular;
197
198 Vector2f m_size;
199 std::shared_ptr<std::vector<Vertex>> m_vertices;
200 std::shared_ptr<std::vector<Vertex>> m_outlineVertices;
201 bool m_verticesNeedUpdate = true;
202 };
203}
204
206
207#endif // TGUI_BACKEND_TEXT_HPP
Base class for text implementations that depend on the backend.
Definition BackendText.hpp:41
TGUI_NODISCARD float getOutlineThickness() const
Returns the text outline thickness.
virtual void setFont(const std::shared_ptr< BackendFont > &font)
Changes the font used by the text.
virtual void setOutlineThickness(float thickness)
Changes the thickness of the text outline.
TGUI_NODISCARD Color getOutlineColor() const
Returns the text outline color.
virtual void setStyle(TextStyles style)
Changes the text style.
virtual void setCharacterSize(unsigned int characterSize)
Sets the size of the characters.
TGUI_NODISCARD unsigned int getCharacterSize() const
Returns the character size of the text.
TGUI_NODISCARD std::shared_ptr< BackendFont > getFont() const
Returns the font of the text.
virtual TGUI_NODISCARD Vector2f findCharacterPos(std::size_t index) const
Returns the top-left position of the character at the provided index.
TGUI_NODISCARD Color getFillColor() const
Returns the text fill color.
virtual void setString(const String &string)
Changes the text.
virtual void setOutlineColor(const Color &color)
Changes the color of the text outline.
TGUI_NODISCARD TextVertexData getVertexData()
Returns the information that is needed to render this text.
BackendText()=default
Default constructor.
virtual void setFillColor(const Color &color)
Changes the color of the text.
virtual TGUI_NODISCARD Vector2f getSize()
Returns the size of the text.
std::vector< std::pair< std::shared_ptr< BackendTexture >, std::shared_ptr< std::vector< Vertex > > > > TextVertexData
Type of the data that is passed to BackendRenderTarget where the actual rendering happens.
Definition BackendText.hpp:45
virtual ~BackendText()=default
Virtual destructor.
TGUI_NODISCARD const String & getString() const
Returns the text.
TGUI_NODISCARD TextStyles getStyle() const
Returns the style of the text.
Wrapper for colors.
Definition Color.hpp:73
Wrapper class to store strings.
Definition String.hpp:96
Wrapper for text styles.
Definition TextStyle.hpp:55
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:38
TGUI_NODISCARD TGUI_API unsigned int getGlobalTextSize()
Retrieves the default text size used for all new widgets.
Information about a glyph in the font.
Definition Font.hpp:48
Definition Vertex.hpp:41