#pragma once #include #include #include #include class Widget : public sf::Drawable, std::enable_shared_from_this { public: Widget(const std::shared_ptr& parent = nullptr); virtual ~Widget() = default; virtual void input(const sf::Event& event) = 0; virtual void update() = 0; virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const = 0; virtual void setRect(const sf::FloatRect& rect) = 0; virtual void setPosition(const sf::Vector2f& position) = 0; protected: void addChild(const std::shared_ptr& child); std::vector> _children; const std::shared_ptr _parent; };