Files
Renderive/Core2/renderable/Renderable.h
T
2026-08-10 19:55:29 +08:00

54 lines
1.3 KiB
C++

#pragma once
#include "../base/Types.h"
#include "../event/Event.h"
#include <renderive/renderable/base/Renderable_Base.hpp>
#include <atomic>
#include <mutex>
#include <string>
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<bool> visible_{true};
};
} // namespace renderive