#pragma once #include "../base/Types.h" #include "../event/Event.h" #include #include #include #include namespace renderive { class Plot_Core; namespace detail { class Painter; } class Event_Handler { public: virtual ~Event_Handler() = default; virtual void handle_event(const Event& event) = 0; }; class LIB_DECL Renderable : public ::Renderable_Base { public: explicit Renderable(Plot_Core& plot, bool cache_enabled = true); ~Renderable() override; [[nodiscard]] Plot_Core& plot() const noexcept { return plot_; } [[nodiscard]] Renderable_Cache_Mode get_cache_mode() const noexcept; void set_cache_mode(Renderable_Cache_Mode mode); [[nodiscard]] std::string object_name() const; void set_object_name(std::string name); [[nodiscard]] bool is_visible() const noexcept; void set_visible(bool visible); void render(const ::Scene_Render_Context& context) final; protected: virtual void paint(detail::Painter& painter) = 0; void changed() noexcept; [[nodiscard]] Size viewport_size() const noexcept; private: Plot_Core& plot_; mutable std::mutex metadata_mutex_; std::string object_name_; std::atomic visible_{true}; }; } // namespace renderive