24class MAYAFLUX_API
Layer :
public std::enable_shared_from_this<Layer> {
68 operator uint32_t() const noexcept {
return m_id; }
73 [[nodiscard]] uint32_t
id() const noexcept {
return m_id; }
88 m_layer.relate(primary_id, m_id);
101 m_layer.set_visible(m_id,
false);
112 m_layer.set_interactive(m_id,
false);
121 m_layer.bring_to_front(m_id);
130 m_layer.send_to_back(m_id);
172 bool remove(uint32_t
id);
193 bool set_contains(uint32_t
id, std::function<
bool(glm::vec2)> fn);
203 bool set_clip(uint32_t
id, std::optional<Kinesis::AABB2D> clip);
205 bool set_interactive(uint32_t
id,
bool interactive);
206 bool set_visible(uint32_t
id,
bool visible);
216 void set_all_visible(
bool visible);
222 bool bring_to_front(uint32_t
id);
228 bool send_to_back(uint32_t
id);
245 [[nodiscard]] std::optional<uint32_t> hit_test(glm::vec2 ndc)
const;
251 [[nodiscard]] std::vector<uint32_t> hit_test_all(glm::vec2 ndc)
const;
264 [[nodiscard]] std::optional<uint32_t> hit_test(
265 double px,
double py, uint32_t win_w, uint32_t win_h)
const;
267 [[nodiscard]] std::vector<uint32_t> hit_test_all(
268 double px,
double py, uint32_t win_w, uint32_t win_h)
const;
283 bool relate(uint32_t primary_id, uint32_t related_id);
289 bool unrelate(uint32_t primary_id, uint32_t related_id);
294 [[nodiscard]] std::vector<uint32_t> related_ids(uint32_t primary_id)
const;
299 [[nodiscard]] std::vector<uint32_t> closure(uint32_t
id)
const;
305 [[nodiscard]]
const Element* get(uint32_t
id)
const;
306 [[nodiscard]]
Element* get(uint32_t
id);
308 [[nodiscard]]
const std::vector<Element>&
elements()
const {
return m_elements; }
309 [[nodiscard]]
size_t size()
const {
return m_elements.size(); }
310 [[nodiscard]]
bool empty()
const {
return m_elements.empty(); }
314 mutable std::unordered_map<uint32_t, size_t>
m_index;
315 mutable bool m_index_stale {};
316 uint32_t m_next_id { 1 };
318 int64_t m_next_front_priority {};
319 int64_t m_next_back_priority {};
323 void reindex()
const;
325 [[nodiscard]]
static glm::vec2 to_ndc(
326 double px,
double py,
327 uint32_t win_w, uint32_t win_h)
noexcept;
329 [[nodiscard]]
static bool test_element(
330 const Element& el, glm::vec2 ndc)
noexcept;