/* * TextArea.h * * Created on: Nov 27, 2016 * Author: tibi */ #ifndef GUI_PRIMITIVES_TEXTAREA_H_ #define GUI_PRIMITIVES_TEXTAREA_H_ #include #include namespace farmlands { namespace gui { namespace widgets { enum class TextAlign { TopLeft, TopCenter, TopRight, MiddleLeft, MiddleCenter, MiddleRight, BottomLeft, BottomCenter, BottomRight, }; enum class TextHorizontalWrapping { Overflow, Wrap, Trim, Ellipsis }; enum class TextVerticalWrapping { Overflow, Trim }; class TextArea: public primitives::UIElement { public: TextArea(); virtual ~TextArea(); virtual void render(RenderContext& context) override; // Getters and setters inline std::string text() const { return m_text; } inline int font() const { return m_fontId; } inline int textSize() const { return m_fontSize; } inline SDL_Color color() const { return m_color; } inline TextAlign alignment() const { return m_align; } inline TextHorizontalWrapping horizontalWrap() const { return m_horWrap; } inline TextVerticalWrapping verticalWrap() const { return m_verWrap; } void setText(const std::string& text); void setFont(int fontId); void setTextSize(int size); void setColor(SDL_Color color); void setColor(float r, float g, float b, float a = 1.0f); void setAlignment(TextAlign align); void setHorizontalWrap(TextHorizontalWrapping wrap); void setVerticalWrap(TextVerticalWrapping wrap); private: void wrapText(TTF_Font* font); void renderLines(RenderContext& context, TTF_Font* font); std::string m_text; std::string m_wrappedText; bool m_textChanged; int m_fontId; int m_fontSize; SDL_Color m_color; TextAlign m_align; TextHorizontalWrapping m_horWrap; TextVerticalWrapping m_verWrap; std::vector m_renderedLines; }; } /* namespace primitives */ } /* namespace gui */ } /* namespace farmlands */ #endif /* GUI_PRIMITIVES_TEXTAREA_H_ */