Index: trunk/src/gui/gui_environment.cc
===================================================================
--- trunk/src/gui/gui_environment.cc	(revision 270)
+++ trunk/src/gui/gui_environment.cc	(revision 271)
@@ -30,6 +30,6 @@
 	m_area.dim( dimension( w->get_width(), w->get_height() ) );
 	
-	m_screen           = create_handle();
-	element* screen    = get_element( m_screen );
+	m_screen           = m_elements.create();
+	element* screen    = m_elements.get( m_screen );
 	screen->m_absolute = m_area;
 	screen->m_relative = m_area;
@@ -51,6 +51,6 @@
 {
 	if ( parent.is_nil() ) parent = m_screen;
-	handle result = create_handle();
-	element* e    = get_element( result );
+	handle result = m_elements.create();
+	element* e    = m_elements.get( result );
 	e->m_absolute = r;
 	e->m_relative = r;
@@ -59,14 +59,7 @@
 }
 
-nv::gui::handle nv::gui::environment::create_handle()
-{
-	m_elements.emplace_back();
-	m_elements.back().m_this = m_indexes.create_handle( sint32( m_elements.size() - 1 ) );
-	return m_elements.back().m_this;
-}
-
 void nv::gui::environment::destroy_element( handle e )
 {
-	element* dead_element = get_element( e );
+	element* dead_element = m_elements.get( e );
 	if ( dead_element == nullptr ) return;
 	destroy_children( e );
@@ -77,18 +70,10 @@
 	dead_element->m_parent = handle();
 
-	handle swap_handle    = m_elements.back().m_this;
-	sint32 dead_eindex    = m_indexes.get_index( e );
-	if ( dead_eindex != (sint32)m_elements.size()-1 )
-	{
-		m_elements[ dead_eindex ] = m_elements.back();
-	}
-	m_elements.pop_back();
-	m_indexes.swap_indices( e, swap_handle );
-	m_indexes.free_handle( e );
+	m_elements.destroy( e );
 }
 
 void nv::gui::environment::update( handle e, uint32 elapsed )
 {
-	element* el = get_element( e );
+	element* el = m_elements.get( e );
 	if ( !el ) return;
 	//	el->on_update( elapsed );
@@ -109,5 +94,5 @@
 void nv::gui::environment::draw( handle e )
 {
-	element* el = get_element( e );
+	element* el = m_elements.get( e );
 	if ( !el ) return;
 	if ( el->m_visible )
@@ -140,6 +125,6 @@
 void nv::gui::environment::add_child( handle parent, handle child )
 {
-	element* e = get_element( child );
-	element* p = get_element( parent );
+	element* e = m_elements.get( child );
+	element* p = m_elements.get( parent );
 	if ( e && p )
 	{
@@ -153,5 +138,5 @@
 void nv::gui::environment::destroy_children( handle e )
 {
-	element* parent = get_element(e);
+	element* parent = m_elements.get(e);
 	if ( parent )
 	{
@@ -177,5 +162,5 @@
 bool nv::gui::environment::process_io_event( handle e, const io_event& ev )
 {
-	element* el = get_element( e );
+	element* el = m_elements.get( e );
 	return el && el->m_parent.is_valid() ? process_io_event( el->m_parent, ev ) : false;
 }
@@ -186,14 +171,7 @@
 }
 
-nv::gui::element* nv::gui::environment::get_element( handle h )
-{
-	if ( h.is_nil() ) return nullptr;
-	sint32 eindex = m_indexes.get_index( h );
-	return eindex >= 0 ? &m_elements[ eindex ] : nullptr;
-}
-
 nv::gui::handle nv::gui::environment::get_deepest_child( handle e, const position& p )
 {
-	element* el = get_element(e);
+	element* el = m_elements.get(e);
 	if ( !el && !el->m_visible ) return handle();
 
@@ -214,6 +192,6 @@
 void nv::gui::environment::move_to_top( handle child )
 {
-	element* e      = get_element( child );
-	element* parent = get_element( e->m_parent );
+	element* e      = m_elements.get( child );
+	element* parent = m_elements.get( e->m_parent );
 	if ( e && parent )
 	{
@@ -230,6 +208,6 @@
 void nv::gui::environment::move_to_bottom( handle child )
 {
-	element* e      = get_element( child );
-	element* parent = get_element( e->m_parent );
+	element* e      = m_elements.get( child );
+	element* parent = m_elements.get( e->m_parent );
 	if ( e && parent )
 	{
@@ -246,5 +224,5 @@
 void nv::gui::environment::set_relative( handle e, const rectangle& r )
 {
-	element* el = get_element(e);
+	element* el = m_elements.get(e);
 	if ( el )
 	{
@@ -257,5 +235,5 @@
 void nv::gui::environment::set_relative( handle e, const position& p )
 {
-	element* el = get_element(e);
+	element* el = m_elements.get(e);
 	if ( el )
 	{
@@ -266,6 +244,6 @@
 void nv::gui::environment::recalculate_absolute( handle e )
 {
-	element* el = get_element(e);
-	rectangle pabsolute = get_element( el->m_parent )->m_absolute;
+	element* el = m_elements.get(e);
+	rectangle pabsolute = m_elements.get( el->m_parent )->m_absolute;
 	el->m_absolute = el->m_relative + pabsolute.ul;
 
@@ -278,5 +256,5 @@
 void nv::gui::environment::set_class( handle e, const string& text )
 {
-	element* ep = get_element(e);
+	element* ep = m_elements.get(e);
 	if ( ep != nullptr )
 	{
@@ -288,5 +266,5 @@
 void nv::gui::environment::set_text( handle e, const string& text )
 {
-	element* ep = get_element(e);
+	element* ep = m_elements.get(e);
 	if ( ep != nullptr )
 	{
@@ -298,5 +276,5 @@
 void nv::gui::environment::remove_child( handle parent, handle child )
 {
-	element* p = get_element( parent );
+	element* p = m_elements.get( parent );
 	if ( p )
 	{
@@ -304,5 +282,5 @@
 		if ( it != p->m_children.end() )
 		{
-			element* e = get_element( *it );
+			element* e = m_elements.get( *it );
 			e->m_parent = handle();
 			p->m_children.erase(it);
