#pragma once #include "../architecture/Render_Config.h" #include "../base/Color.h" #include "../base/Geometry.h" #include "../event/Event.h" #include "../flow/Frame_Flow.h" #include "../flow/Present_Surface_Lease.h" #include "Presentation_Sink.h" #include #include namespace renderive { class Plot_Core_Private; struct Plot_Core_Context_Access; class Renderable; class Renderable_Runtime; class Plot_Core { public: explicit Plot_Core(std::unique_ptr flow); ~Plot_Core(); void init(); [[nodiscard]] std::shared_ptr root_renderable() const; [[nodiscard]] std::shared_ptr create_renderable_node( const std::shared_ptr& parent, std::string object_name = {}); void remove_renderable(const std::shared_ptr& renderable); void set_background_color(Color color); [[nodiscard]] Color background_color() const; void set_viewport_size(Size size); [[nodiscard]] Size viewport_size() const; void dispatch_event(const Event& event); void notify_model_dirty(Dirty_Reason reason = Dirty_Reason::Core_Data); void request_explicit_render(); void activate_view(); void deactivate_view(); [[nodiscard]] bool view_active() const; void set_presentation_sink(std::weak_ptr sink); [[nodiscard]] std::unique_ptr create_renderable_runtime(Renderable& owner) const; Present_Surface_Lease begin_present(); void end_present(Present_Surface_Lease&& frame, std::uint64_t paint_begin_ns, std::uint64_t paint_end_ns); private: friend struct Plot_Core_Context_Access; std::shared_ptr d; }; } // namespace renderive