Index: trunk/src/gui/gui_renderer.cc
===================================================================
--- trunk/src/gui/gui_renderer.cc	(revision 322)
+++ trunk/src/gui/gui_renderer.cc	(revision 328)
@@ -38,6 +38,9 @@
 	"}\n";
 
+
 using namespace nv;
 using namespace nv::gui;
+
+const ivec2 atlas_size = ivec2( 1024, 1024 );
 
 struct gui_quad
@@ -121,5 +124,5 @@
 	: m_window(w)
 	, m_style()
-	, m_atlas( glm::ivec2( 1024, 1024 ), 4 )
+	, m_atlas( atlas_size, 4 )
 	, m_reupload( true )
 {
@@ -164,8 +167,8 @@
 }
 
-nv::vec4 renderer::get_image( size_t name ) const
-{
-	if ( name >= m_images.size() ) return nv::vec4();
-	return m_images[ name ];
+const image_info* renderer::get_image( size_t name ) const
+{
+	if ( name >= m_images.size() ) return nullptr;
+	return &m_images[ name ];
 }
 
@@ -201,4 +204,5 @@
 	region r = m_atlas.get_region( data->get_size() );
 	m_atlas.set_region( r, data->get_data() );
+	m_images.emplace_back( vec2( r.pos ) / vec2( atlas_size ), vec2( r.size + r.pos ) / vec2( atlas_size ), r.size );
 	delete data;
 	m_reupload = true;
@@ -228,21 +232,69 @@
 	if ( e->m_absolute != m_area )
 	{
-		int border;
+		int border = 0;
 		vec4 color;
 		std::string path;
 		std::string text;
-		if ( m_style.get( e, "border", border ) && m_style.get( e, "border_color", color ) )
+
+		if ( m_style.get( e, "skin", path ) )
 		{
-			rectangle inner = abs.shrinked( border );
-			qvec.emplace_back( abs.ul, inner.ul, inner.ur(), abs.ur(), color );
-			qvec.emplace_back( abs.ul, abs.ll(), inner.ll(), inner.ul, color );
-			qvec.emplace_back( inner.ur(), inner.lr, abs.lr, abs.ur(), color );
-			qvec.emplace_back( inner.ll(), abs.ll(), abs.lr, inner.lr, color );
-			abs = inner;
+			size_t image_id = load_image( path );
+			const image_info* image  = get_image( image_id );
+			if ( image )
+			{
+				color = vec4( 2, 2, 2, 1 );
+				ivec2 isize3  = image->size / 3;
+				ivec2 isize3x = ivec2( isize3.x, 0 );
+				ivec2 isize3y = ivec2( 0, isize3.y );
+				vec2 tsize    = ( image->t2 - image->t1 );
+				vec2 tsize3   = ( image->t2 - image->t1 ) / 3.0f;
+				vec2 tsize32  = ( image->t2 - image->t1 ) * ( 2.0f / 3.0f );
+				vec2 tsizex   = vec2( tsize.x, 0.0f );
+				vec2 tsizey   = vec2( 0.0f, tsize.y );
+				vec2 tsize3x  = vec2( tsize3.x, 0.0f );
+				vec2 tsize3y  = vec2( 0.0f, tsize3.y );
+				vec2 tsize3x2 = vec2( tsize32.x, 0.0f );
+				vec2 tsize3y2 = vec2( 0.0f, tsize32.y );
+
+				rectangle inner = abs.shrinked( isize3 );
+				qvec.emplace_back( abs.ul, inner.ul, color, image->t1, image->t1+tsize3 );
+				qvec.emplace_back( abs.ul+isize3x, inner.ur(), color, image->t1+tsize3x, image->t1+tsize3x2+tsize3y);
+				qvec.emplace_back( abs.ur()-isize3x, inner.ur()+isize3x, color, image->t1+tsize3x2, image->t1+tsizex+tsize3y );
+
+				qvec.emplace_back( abs.ul+isize3y, inner.ll(), color, image->t1+tsize3y, image->t1+tsize3y2+tsize3x );
+				qvec.emplace_back( inner.ul, inner.lr, color, image->t1+tsize3, image->t1+tsize32 );
+				qvec.emplace_back( inner.ur(), inner.lr+isize3x, color, image->t1+tsize3+tsize3x, image->t1+tsize32+tsize3x );
+
+
+				qvec.emplace_back( abs.ll()-isize3y, inner.ll()+isize3y, color, image->t1+tsize3y2, image->t1+tsize3y2+tsize3 );
+				qvec.emplace_back( inner.ll(), abs.lr-isize3x, color, image->t1+tsize3y2+tsize3x, image->t1+tsize32+tsize3y );
+				qvec.emplace_back( inner.lr, abs.lr, color, image->t1+tsize32, image->t1+tsize );
+
+	
+// 				qvec.emplace_back( abs.ul, abs.ll(), inner.ll(), inner.ul, color );
+// 				qvec.emplace_back( inner.ur(), inner.lr, abs.lr, abs.ur(), color );
+// 				qvec.emplace_back( inner.ll(), abs.ll(), abs.lr, inner.lr, color );
+				abs = inner;
+
+			}
+
 		}
-
-		if ( m_style.get( e, "background_color", color ) )
+		else
 		{
-			qvec.emplace_back( abs.ul, abs.lr, color );
+
+			if ( m_style.get( e, "border", border ) && m_style.get( e, "border_color", color ) )
+			{
+				rectangle inner = abs.shrinked( border );
+				qvec.emplace_back( abs.ul, inner.ul, inner.ur(), abs.ur(), color );
+				qvec.emplace_back( abs.ul, abs.ll(), inner.ll(), inner.ul, color );
+				qvec.emplace_back( inner.ur(), inner.lr, abs.lr, abs.ur(), color );
+				qvec.emplace_back( inner.ll(), abs.ll(), abs.lr, inner.lr, color );
+				abs = inner;
+			}
+
+			if ( m_style.get( e, "background_color", color ) )
+			{
+				qvec.emplace_back( abs.ul, abs.lr, color );
+			}
 		}
 
