Index: gui.h
===================================================================
--- gui.h	(revision 816)
+++ gui.h	(revision 817)
@@ -22,6 +22,7 @@
 #define RAYDIUM_GUI_CHECK       5
 #define RAYDIUM_GUI_COMBO       6
 #define RAYDIUM_GUI_ZONE        7
+#define RAYDIUM_GUI_COLORPICK   8
 
 #define RAYDIUM_GUI_NORMAL      1
 #define RAYDIUM_GUI_FOCUS       2
@@ -51,6 +52,14 @@
     int      tag;
 } raydium_gui_Zone;
 
+typedef struct raydium_gui_Colorpick
+{
+    raydium_gui_Zone *  zone;
+    signed char         expanded;
+    GLfloat             picker_zoom_factor;
+    unsigned int        picker_texture;
+} raydium_gui_Colorpick;
+
 typedef struct raydium_gui_Label
 {
     char     caption[RAYDIUM_MAX_NAME_LEN];
@@ -136,7 +145,7 @@
 
 typedef struct raydium_gui_Theme
 {
-    signed char     loaded;
+    signed char loaded;
     char     filename[RAYDIUM_MAX_NAME_LEN];
     int      texture;
     int      texture_size[2];
 )
         {
         part=malloc(sizeof(raydium_object_render_Part));
         if(!part) { raydium_log("ERROR: object: can't allocate render cache !"); exit(102); }
 
-        state_texture=raydium_vertex_texture[i];
+        state_texture[0]=raydium_vertex_texture[i];
+        state_texture[1]=raydium_vertex_texture_multi[i];
+
         part->start=i;
-        part->texture=state_texture;
+        part->texture[0]=state_texture[0];
+        part->texture[1]=state_texture[1];
 
         raydium_object_cache[obj].parts[raydium_object_cache[obj].n_parts++]=part;
         if(raydium_object_cache[obj].n_parts>=RAYDIUM_OBJECT_RENDER_CACHE_MAXPARTS)
@@ -62,12 +71,13 @@
 
 
 raydium_log("object: render cache: %i part(s)",raydium_object_cache[obj].n_parts);
-for(i=0;i<raydium_object_cache[obj].n_parts;i++)
-    raydium_log("\tstart=%i len=%i tex=%i",
+/*for(i=0;i<raydium_object_cache[obj].n_parts;i++)
+    raydium_log("\tstart=%i len=%i tex=%i|%i",
         raydium_object_cache[obj].parts[i]->start,
         raydium_object_cache[obj].parts[i]->len,
-        raydium_object_cache[obj].parts[i]->texture
-    );
+        raydium_object_cache[obj].parts[i]->texture[0],
+        raydium_object_cache[obj].parts[i]->texture[1]
+    );*/
 }
 
 void raydium_object_render_va_init(signed char simple)
@@ -86,6 +96,12 @@
 
 glVertexPointer(3, GL_FLOAT, 0, raydium_vertex_arr);
 glNormalPointer(GL_FLOAT, 0, raydium_vertex_normal_visu_arr);
+
+glClientActiveTexture(GL_TEXTURE1);
+glTexCoordPointer(2, GL_FLOAT, 0, raydium_vertex_texture_multi_uv_arr);
+glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+
+glClientActiveTexture(GL_TEXTURE0);
 glTexCoordPointer(2, GL_FLOAT, 0, raydium_vertex_texture_uv_arr);
 
 }
@@ -107,10 +123,15 @@
     part=raydium_object_cache[obj].parts[i];
 
     if(!simple)
-        raydium_rendering_prepare_texture_unit(GL_TEXTURE0_ARB,part->texture);
+        {
+        raydium_rendering_prepare_texture_unit(GL_TEXTURE0_ARB,part->texture[0]);
+        raydium_rendering_prepare_texture_unit(GL_TEXTURE1_ARB,part->texture[1]);
+        }
     glDrawArrays(GL_TRIANGLES, part->start, part->len);
     }
 
+for(i=0;i<(RAYDIUM_RENDER_MAX_TEXUNITS-1);i++)
+        raydium_rendering_prepare_texture_unit(GL_TEXTURE1_ARB+i,0);
 }