forked from Aloshi/EmulationStation
-
Notifications
You must be signed in to change notification settings - Fork 341
/
TextComponent.h
70 lines (54 loc) · 2.33 KB
/
TextComponent.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#pragma once
#ifndef ES_CORE_COMPONENTS_TEXT_COMPONENT_H
#define ES_CORE_COMPONENTS_TEXT_COMPONENT_H
#include "resources/Font.h"
#include "GuiComponent.h"
class ThemeData;
// Used to display text.
// TextComponent::setSize(x, y) works a little differently than most components:
// * (0, 0) - will automatically calculate a size that fits the text on one line (expand horizontally)
// * (x != 0, 0) - wrap text so that it does not reach beyond x. Will automatically calculate a vertical size (expand vertically).
// * (x != 0, y <= fontHeight) - will truncate text so it fits within this box.
class TextComponent : public GuiComponent
{
public:
TextComponent(Window* window);
TextComponent(Window* window, const std::string& text, const std::shared_ptr<Font>& font, unsigned int color = 0x000000FF, Alignment align = ALIGN_LEFT,
Vector3f pos = Vector3f::Zero(), Vector2f size = Vector2f::Zero(), unsigned int bgcolor = 0x00000000);
void setFont(const std::shared_ptr<Font>& font);
void setUppercase(bool uppercase);
void onSizeChanged() override;
void setText(const std::string& text);
void setColor(unsigned int color);
void setHorizontalAlignment(Alignment align);
void setVerticalAlignment(Alignment align);
void setLineSpacing(float spacing);
void setBackgroundColor(unsigned int color);
void setRenderBackground(bool render);
void render(const Transform4x4f& parentTrans) override;
std::string getValue() const override;
void setValue(const std::string& value) override;
unsigned char getOpacity() const override;
void setOpacity(unsigned char opacity) override;
inline std::shared_ptr<Font> getFont() const { return mFont; }
virtual void applyTheme(const std::shared_ptr<ThemeData>& theme, const std::string& view, const std::string& element, unsigned int properties) override;
protected:
virtual void onTextChanged();
std::string mText;
std::shared_ptr<Font> mFont;
private:
std::string calculateExtent(bool allow_wrapping);
void onColorChanged();
unsigned int mColor;
unsigned int mBgColor;
unsigned char mColorOpacity;
unsigned char mBgColorOpacity;
bool mRenderBackground;
bool mUppercase;
Vector2i mAutoCalcExtent;
std::shared_ptr<TextCache> mTextCache;
Alignment mHorizontalAlignment;
Alignment mVerticalAlignment;
float mLineSpacing;
};
#endif // ES_CORE_COMPONENTS_TEXT_COMPONENT_H