#ifndef FRONTEND_GUI_CONTROLS_H_ #define FRONTEND_GUI_CONTROLS_H_ #include #include #include #include #include #include "GUI.h" #include "UINode.h" #include "containers.h" #include "../../window/input.h" #include "../../delegates.h" #include "../../typedefs.h" class Batch2D; class Assets; class Font; namespace gui { class Label : public UINode { protected: std::wstring text; std::string fontName; wstringsupplier supplier = nullptr; uint lines = 1; float lineInterval = 1.5f; Align valign = Align::center; bool multiline = false; // runtime values int textYOffset = 0; int totalLineHeight = 1; public: Label(std::string text, std::string fontName="normal"); Label(std::wstring text, std::string fontName="normal"); virtual void setText(std::wstring text); const std::wstring& getText() const; virtual void setFontName(std::string name); virtual const std::string& getFontName() const; virtual void setVerticalAlign(Align align); virtual Align getVerticalAlign() const; virtual float getLineInterval() const; virtual void setLineInterval(float interval); virtual int getTextYOffset() const; virtual int getLineYOffset(uint line) const; virtual void draw(const GfxContext* pctx, Assets* assets) override; virtual void textSupplier(wstringsupplier supplier); virtual void setMultiline(bool multiline); virtual bool isMultiline() const; }; class Image : public UINode { protected: std::string texture; bool autoresize = false; public: Image(std::string texture, glm::vec2 size=glm::vec2(32,32)); virtual void draw(const GfxContext* pctx, Assets* assets) override; virtual void setAutoResize(bool flag); virtual bool isAutoResize() const; }; class Button : public Panel { protected: glm::vec4 pressedColor {0.0f, 0.0f, 0.0f, 0.95f}; std::vector actions; std::shared_ptr