Changeset 270 for trunk/src/gui
- Timestamp:
- 07/04/14 13:57:51 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gui/gui_environment.cc
r269 r270 26 26 27 27 nv::gui::environment::environment( window* w, const std::string& shader_path ) 28 : m_renderer( nullptr ), m_window( w ) , m_first_free(-1), m_last_free(-1)28 : m_renderer( nullptr ), m_window( w ) 29 29 { 30 30 m_area.dim( dimension( w->get_width(), w->get_height() ) ); … … 62 62 { 63 63 m_elements.emplace_back(); 64 m_elements.back().m_this = create_index( uint16( m_elements.size() - 1 ) );64 m_elements.back().m_this = m_indexes.create_handle( sint32( m_elements.size() - 1 ) ); 65 65 return m_elements.back().m_this; 66 }67 68 nv::gui::handle nv::gui::environment::create_index( sint16 element_id )69 {70 uint16 i = get_free_index();71 index& idx = m_indices[i];72 idx.element_id = element_id;73 idx.counter++;74 return handle( i, idx.counter );75 }76 77 nv::uint16 nv::gui::environment::get_free_index()78 {79 if ( m_first_free != -1 )80 {81 uint16 result = (uint16)m_first_free;82 m_first_free = m_indices[result].next_free;83 m_indices[result].next_free = -1;84 if ( m_first_free == -1 ) m_last_free = -1;85 return result;86 }87 m_indices.emplace_back();88 return uint16( m_indices.size() - 1 );89 }90 91 void nv::gui::environment::free_index( uint16 idx_index )92 {93 // TODO: reuse94 index& idx = m_indices[ idx_index ];95 idx.element_id = -1;96 idx.next_free = -1;97 if ( m_last_free == -1 )98 {99 m_first_free = m_last_free = idx_index;100 }101 else102 {103 m_indices[ m_last_free ].next_free = idx_index;104 m_last_free = idx_index;105 }106 66 } 107 67 … … 117 77 dead_element->m_parent = handle(); 118 78 119 uint16 dead_index = m_indices[ e.m_index ].element_id; 120 if ( dead_index != m_elements.size()-1 ) 121 { 122 m_elements[ dead_index ] = m_elements.back(); 123 m_elements.pop_back(); 124 m_indices[ m_elements[ dead_index ].m_this.m_index ].element_id = dead_index; 125 } 126 else 127 m_elements.pop_back(); 128 free_index( e.m_index ); 79 handle swap_handle = m_elements.back().m_this; 80 sint32 dead_eindex = m_indexes.get_index( e ); 81 if ( dead_eindex != (sint32)m_elements.size()-1 ) 82 { 83 m_elements[ dead_eindex ] = m_elements.back(); 84 } 85 m_elements.pop_back(); 86 m_indexes.swap_indices( e, swap_handle ); 87 m_indexes.free_handle( e ); 129 88 } 130 89 … … 219 178 { 220 179 element* el = get_element( e ); 221 return el && el->m_parent. m_index? process_io_event( el->m_parent, ev ) : false;180 return el && el->m_parent.is_valid() ? process_io_event( el->m_parent, ev ) : false; 222 181 } 223 182 … … 230 189 { 231 190 if ( h.is_nil() ) return nullptr; 232 const index& idx = m_indices[ h.m_index ];233 return idx.counter == h.m_counter && idx.element_id >= 0 ? &m_elements[ idx.element_id] : nullptr;191 sint32 eindex = m_indexes.get_index( h ); 192 return eindex >= 0 ? &m_elements[ eindex ] : nullptr; 234 193 } 235 194 … … 245 204 { 246 205 result = get_deepest_child( *it, p ); 247 if ( result. m_index) return result;206 if ( result.is_valid() ) return result; 248 207 ++it; 249 208 }
Note: See TracChangeset
for help on using the changeset viewer.