#pragma once #include #include #include #include #include class Widget : public sf::Drawable, public std::enable_shared_from_this { public: virtual ~Widget() = default; virtual void input(const sf::Event& event) = 0; virtual void update(const sf::Time& dt) = 0; virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const = 0; virtual void move(const sf::Vector2f& delta) = 0; virtual bool isUnderMouse(int mouse_x, int mouse_y) const = 0; virtual void setRect(const sf::FloatRect& rect) = 0; virtual sf::FloatRect rect() const = 0; virtual void setPosition(const sf::Vector2f& position) = 0; virtual sf::Vector2f position() const = 0; virtual void setVisibility(bool is_visible = true); bool isVisible() const; void addChild(const std::shared_ptr& child); void setParent(const std::shared_ptr& parent); void blockBy(const std::shared_ptr& blocker); void unblock(); protected: std::vector> _children; std::shared_ptr _parent; std::shared_ptr _blocker; bool _is_visible = true; };