#pragma once #include "imgui.h" class geometry; class CORE_API widget : public std::enable_shared_from_this { public: virtual ~widget() = default; virtual void tick() {} virtual void on_paint(ImGuiIO& io) = 0; virtual void on_arrange_children(const geometry& allotted_geometry) {} [[nodiscard]] virtual ImVec2 compute_desired_size() const { return {0, 0}; } static ImGuiID generate_widget_id(); };