65 operator uint32_t() const noexcept {
return m_id; }
70 [[nodiscard]] uint32_t
id() const noexcept {
return m_id; }
85 m_layer.relate(primary_id, m_id);
98 m_layer.set_visible(m_id,
false);
109 m_layer.set_interactive(m_id,
false);
118 m_layer.bring_to_front(m_id);
127 m_layer.send_to_back(m_id);
168 bool remove(uint32_t
id);
189 bool set_contains(uint32_t
id, std::function<
bool(glm::vec2)> fn);
191 bool set_interactive(uint32_t
id,
bool interactive);
192 bool set_visible(uint32_t
id,
bool visible);
197 bool bring_to_front(uint32_t
id);
202 bool send_to_back(uint32_t
id);
219 [[nodiscard]] std::optional<uint32_t> hit_test(glm::vec2 ndc)
const;
225 [[nodiscard]] std::vector<uint32_t> hit_test_all(glm::vec2 ndc)
const;
238 [[nodiscard]] std::optional<uint32_t> hit_test(
239 double px,
double py, uint32_t win_w, uint32_t win_h)
const;
241 [[nodiscard]] std::vector<uint32_t> hit_test_all(
242 double px,
double py, uint32_t win_w, uint32_t win_h)
const;
255 bool relate(uint32_t primary_id, uint32_t related_id);
261 bool unrelate(uint32_t primary_id, uint32_t related_id);
266 [[nodiscard]] std::vector<uint32_t> related_ids(uint32_t primary_id)
const;
272 [[nodiscard]]
const Element* get(uint32_t
id)
const;
273 [[nodiscard]]
Element* get(uint32_t
id);
275 [[nodiscard]]
const std::vector<Element>&
elements()
const {
return m_elements; }
276 [[nodiscard]]
size_t size()
const {
return m_elements.size(); }
277 [[nodiscard]]
bool empty()
const {
return m_elements.empty(); }
281 uint32_t m_next_id { 1 };
285 [[nodiscard]]
static glm::vec2 to_ndc(
286 double px,
double py,
287 uint32_t win_w, uint32_t win_h)
noexcept;
289 [[nodiscard]]
static bool test_element(
290 const Element& el, glm::vec2 ndc)
noexcept;
Axis-aligned bounding rectangle in a 2D coordinate space.