MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ bring_to_front()

bool MayaFlux::Portal::Forma::Layer::bring_to_front ( uint32_t  id)

Move element to the top of the hit-test and paint order (drawn last), cascading to every related element.

Definition at line 114 of file Layer.cpp.

115{
116 if (!get(id))
117 return false;
118
119 const std::vector<uint32_t> ids = closure(id);
120
121 auto raise = [this](uint32_t target) {
122 auto it = std::ranges::find_if(m_elements,
123 [target](const Element& e) { return e.id == target; });
124 if (it == m_elements.end())
125 return;
126 std::rotate(it, it + 1, m_elements.end());
127 m_index_stale = true;
128
129 if (it = m_elements.end() - 1; it->buffer)
130 it->buffer.bring_to_front(++m_next_front_priority);
131 };
132
133 for (size_t i = 1; i < ids.size(); ++i)
134 raise(ids[i]);
135 raise(ids.front());
136
137 return true;
138}
std::vector< uint64_t > ids
std::vector< uint32_t > closure(uint32_t id) const
Return id plus every id transitively related to it.
Definition Layer.cpp:243
const Element * get(uint32_t id) const
Definition Layer.cpp:272
std::vector< Element > m_elements
Definition Layer.hpp:313

References closure(), get(), MayaFlux::Portal::Forma::Element::id, ids, m_elements, m_index_stale, and m_next_front_priority.

+ Here is the call graph for this function: