#ifndef FRONTEND_GUI_GUI_H_ #define FRONTEND_GUI_GUI_H_ #include #include #include #include #include #include class Batch2D; class Assets; class Camera; /* Some info about padding and margin. Padding is element inner space, margin is outer glm::vec4 usage: x - left y - top z - right w - bottom Outer element +======================================================================+ | . . . . | | .padding.y . . . | | padding.x . . . . padding.z | |- - - - - - + - - - - - + - - - - - - - - - -+- - - - - + - - - - - - | | . . . . | | . .margin.y . . | | .margin.x . . margin.z. | |- - - - - - + - - - - - +====================+- - - - - + - - - - - - | | . | Inner element | . | |- - - - - - + - - - - - +====================+- - - - - + - - - - - - | | . . . . | | . .margin.w . . | | . . . . | |- - - - - - + - - - - - + - - - - - - - - - -+- - - - - + - - - - - - | | . . . . | | .padding.w . . . | | . . . . | +======================================================================+ */ namespace gui { typedef std::function runnable; class UINode; class Container; class PagesControl; class GUI { Container* container; std::shared_ptr hover = nullptr; std::shared_ptr pressed = nullptr; std::shared_ptr focus = nullptr; std::unordered_map> storage; Camera* uicamera; PagesControl* menu; void actMouse(float delta); public: GUI(); ~GUI(); PagesControl* getMenu(); std::shared_ptr getFocused() const; bool isFocusCaught() const; void act(float delta); void draw(Batch2D* batch, Assets* assets); void add(std::shared_ptr panel); void remove(std::shared_ptr panel); void store(std::string name, std::shared_ptr node); std::shared_ptr get(std::string name); void remove(std::string name); void setFocus(std::shared_ptr node); }; } #endif // FRONTEND_GUI_GUI_H_