| 
				
			 | 
			
			
				@@ -222,6 +222,49 @@ void slop::GLSelectRectangle::generateMagnifyingGlass() { 
			 | 
		
	
		
			
			| 
				222
			 | 
			
				222
			 | 
			
			
				     glDisable(GL_TEXTURE_2D); 
			 | 
		
	
		
			
			| 
				223
			 | 
			
				223
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				224
			 | 
			
				224
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				225
			 | 
			
			
				+void slop::GLSelectRectangle::setTheme( bool on, std::string name ) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				226
			 | 
			
			
				+    if ( !on ) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				227
			 | 
			
			
				+        return; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				228
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				229
			 | 
			
			
				+    std::string root = resource->getRealPath( name ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				230
			 | 
			
			
				+    std::string tl = root + "/corner_tl.png"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				231
			 | 
			
			
				+    std::string bl = root + "/corner_bl.png"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				232
			 | 
			
			
				+    std::string tr = root + "/corner_tr.png"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				233
			 | 
			
			
				+    std::string br = root + "/corner_br.png"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				234
			 | 
			
			
				+    std::string straight = root + "/straight.png"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				235
			 | 
			
			
				+    // One of the textures didn't exist, so we cancel the theme. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				236
			 | 
			
			
				+    if (!resource->validatePath( tl ) || 
			 | 
		
	
		
			
			| 
				
			 | 
			
				237
			 | 
			
			
				+        !resource->validatePath( bl ) || 
			 | 
		
	
		
			
			| 
				
			 | 
			
				238
			 | 
			
			
				+        !resource->validatePath( tr ) || 
			 | 
		
	
		
			
			| 
				
			 | 
			
				239
			 | 
			
			
				+        !resource->validatePath( br ) || 
			 | 
		
	
		
			
			| 
				
			 | 
			
				240
			 | 
			
			
				+        !resource->validatePath( straight ) ) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				241
			 | 
			
			
				+        fprintf( stderr, "One of the textures was missing in the theme... disabling.\n" ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				242
			 | 
			
			
				+        return; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				243
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				244
			 | 
			
			
				+    // Otherwise we load each one :) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				245
			 | 
			
			
				+    ilInit(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				246
			 | 
			
			
				+    ilutInit(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				247
			 | 
			
			
				+    ilutRenderer(ILUT_OPENGL); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				248
			 | 
			
			
				+    ILuint corner; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				249
			 | 
			
			
				+    ilGenImages( 1, &corner ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				250
			 | 
			
			
				+    ilBindImage( corner ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				251
			 | 
			
			
				+    ilLoadImage( tl.c_str() ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				252
			 | 
			
			
				+    m_cornerids[0] = ilutGLBindMipmaps(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				253
			 | 
			
			
				+    ilLoadImage( tr.c_str() ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				254
			 | 
			
			
				+    m_cornerids[1] = ilutGLBindMipmaps(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				255
			 | 
			
			
				+    ilLoadImage( bl.c_str() ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				256
			 | 
			
			
				+    m_cornerids[2] = ilutGLBindMipmaps(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				257
			 | 
			
			
				+    ilLoadImage( br.c_str() ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				258
			 | 
			
			
				+    m_cornerids[3] = ilutGLBindMipmaps(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				259
			 | 
			
			
				+    ilLoadImage( straight.c_str() ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				260
			 | 
			
			
				+    m_straightwidth = ilGetInteger( IL_IMAGE_WIDTH ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				261
			 | 
			
			
				+    m_straightheight = ilGetInteger( IL_IMAGE_HEIGHT ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				262
			 | 
			
			
				+    m_straightid = ilutGLBindMipmaps(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				263
			 | 
			
			
				+    // And clean up after. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				264
			 | 
			
			
				+    ilDeleteImages( 1, &corner ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				265
			 | 
			
			
				+    m_themed = on; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				266
			 | 
			
			
				+} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				267
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				225
			 | 
			
				268
			 | 
			
			
				 slop::GLSelectRectangle::GLSelectRectangle( int sx, int sy, int ex, int ey, int border, bool highlight, float r, float g, float b, float a ) { 
			 | 
		
	
		
			
			| 
				226
			 | 
			
				269
			 | 
			
			
				     m_x = std::min( sx, ex ); 
			 | 
		
	
		
			
			| 
				227
			 | 
			
				270
			 | 
			
			
				     m_y = std::min( sy, ey ); 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -242,6 +285,7 @@ slop::GLSelectRectangle::GLSelectRectangle( int sx, int sy, int ex, int ey, int 
			 | 
		
	
		
			
			| 
				242
			 | 
			
				285
			 | 
			
			
				     m_glassSize = 4; 
			 | 
		
	
		
			
			| 
				243
			 | 
			
				286
			 | 
			
			
				     m_glassBorder = 1; 
			 | 
		
	
		
			
			| 
				244
			 | 
			
				287
			 | 
			
			
				     m_monitors = xengine->getCRTCS(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				288
			 | 
			
			
				+    m_themed = false; 
			 | 
		
	
		
			
			| 
				245
			 | 
			
				289
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				246
			 | 
			
				290
			 | 
			
			
				     // If we don't have a border, we don't exist, so just die. 
			 | 
		
	
		
			
			| 
				247
			 | 
			
				291
			 | 
			
			
				     if ( m_border == 0 ) { 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -352,6 +396,8 @@ slop::GLSelectRectangle::GLSelectRectangle( int sx, int sy, int ex, int ey, int 
			 | 
		
	
		
			
			| 
				352
			 | 
			
				396
			 | 
			
			
				     if ( !glXMakeContextCurrent( xengine->m_display, m_glxWindow, m_glxWindow, m_renderContext ) ) { 
			 | 
		
	
		
			
			| 
				353
			 | 
			
				397
			 | 
			
			
				         fprintf( stderr, "Failed to attach GL context to window!\n" ); 
			 | 
		
	
		
			
			| 
				354
			 | 
			
				398
			 | 
			
			
				     } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				399
			 | 
			
			
				+    glEnable( GL_BLEND ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				400
			 | 
			
			
				+    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 
			 | 
		
	
		
			
			| 
				355
			 | 
			
				401
			 | 
			
			
				     glClearColor( 0, 0, 0, 0 ); 
			 | 
		
	
		
			
			| 
				356
			 | 
			
				402
			 | 
			
			
				     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); 
			 | 
		
	
		
			
			| 
				357
			 | 
			
				403
			 | 
			
			
				     glXSwapBuffers( xengine->m_display, m_glxWindow ); 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -382,11 +428,75 @@ void slop::GLSelectRectangle::update( double dt ) { 
			 | 
		
	
		
			
			| 
				382
			 | 
			
				428
			 | 
			
			
				     glMatrixMode( GL_MODELVIEW ); 
			 | 
		
	
		
			
			| 
				383
			 | 
			
				429
			 | 
			
			
				     glLoadIdentity(); 
			 | 
		
	
		
			
			| 
				384
			 | 
			
				430
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				385
			 | 
			
				
			 | 
			
			
				-    glColor4f( m_r, m_g, m_b, m_a ); 
			 | 
		
	
		
			
			| 
				386
			 | 
			
				
			 | 
			
			
				-    glRecti( m_x-m_border, m_y, m_x+m_width+m_border, m_y-m_border ); 
			 | 
		
	
		
			
			| 
				387
			 | 
			
				
			 | 
			
			
				-    glRecti( m_x-m_border, m_y+m_height, m_x+m_width+m_border, m_y+m_height+m_border ); 
			 | 
		
	
		
			
			| 
				388
			 | 
			
				
			 | 
			
			
				-    glRecti( m_x-m_border, m_y, m_x, m_y+m_height ); 
			 | 
		
	
		
			
			| 
				389
			 | 
			
				
			 | 
			
			
				-    glRecti( m_x+m_width, m_y, m_x+m_width+m_border, m_y+m_height ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				431
			 | 
			
			
				+    if ( !m_themed ) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				432
			 | 
			
			
				+        glColor4f( m_r, m_g, m_b, m_a ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				433
			 | 
			
			
				+        glRecti( m_x-m_border, m_y, m_x+m_width+m_border, m_y-m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				434
			 | 
			
			
				+        glRecti( m_x-m_border, m_y+m_height, m_x+m_width+m_border, m_y+m_height+m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				435
			 | 
			
			
				+        glRecti( m_x-m_border, m_y, m_x, m_y+m_height ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				436
			 | 
			
			
				+        glRecti( m_x+m_width, m_y, m_x+m_width+m_border, m_y+m_height ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				437
			 | 
			
			
				+    } else { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				438
			 | 
			
			
				+        glColor4f( m_r, m_g, m_b, m_a ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				439
			 | 
			
			
				+        glEnable( GL_TEXTURE_2D ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				440
			 | 
			
			
				+        glBindTexture( GL_TEXTURE_2D, m_straightid ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				441
			 | 
			
			
				+        float something = (float)(m_border)/(float)m_straightheight; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				442
			 | 
			
			
				+        float txoffset = (((float)m_width+m_border)/(float)m_straightwidth)/something; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				443
			 | 
			
			
				+        float tyoffset = (((float)m_height+m_border)/(float)m_straightwidth)/something; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				444
			 | 
			
			
				+        //float ratio = ((float)m_straightwidth/(float)m_straightheight); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				445
			 | 
			
			
				+        glBegin( GL_QUADS ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				446
			 | 
			
			
				+        // straight top 
			 | 
		
	
		
			
			| 
				
			 | 
			
				447
			 | 
			
			
				+        glTexCoord2f(0.0, 1.0); glVertex2f( m_x-m_border/2, m_y-m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				448
			 | 
			
			
				+        glTexCoord2f(txoffset, 1.0); glVertex2f( m_x+m_width+m_border/2, m_y-m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				449
			 | 
			
			
				+        glTexCoord2f(txoffset, 0.0); glVertex2f( m_x+m_width+m_border/2, m_y ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				450
			 | 
			
			
				+        glTexCoord2f(0.0, 0.0); glVertex2f( m_x-m_border/2, m_y ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				451
			 | 
			
			
				+        // straight bot 
			 | 
		
	
		
			
			| 
				
			 | 
			
				452
			 | 
			
			
				+        glTexCoord2f(0.0, 1.0); glVertex2f( m_x-m_border/2, m_y+m_height ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				453
			 | 
			
			
				+        glTexCoord2f(txoffset, 1.0); glVertex2f( m_x+m_width+m_border/2, m_y+m_height ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				454
			 | 
			
			
				+        glTexCoord2f(txoffset, 0.0); glVertex2f( m_x+m_width+m_border/2, m_y+m_height+m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				455
			 | 
			
			
				+        glTexCoord2f(0.0, 0.0); glVertex2f( m_x-m_border/2, m_y+m_height+m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				456
			 | 
			
			
				+        // straight left 
			 | 
		
	
		
			
			| 
				
			 | 
			
				457
			 | 
			
			
				+        glTexCoord2f(0.0, 0.0); glVertex2f( m_x-m_border, m_y-m_border/2 ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				458
			 | 
			
			
				+        glTexCoord2f(0.0, 1.0); glVertex2f( m_x, m_y-m_border/2 ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				459
			 | 
			
			
				+        glTexCoord2f(tyoffset, 1.0); glVertex2f( m_x, m_y+m_height+m_border/2 ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				460
			 | 
			
			
				+        glTexCoord2f(tyoffset, 0.0); glVertex2f( m_x-m_border, m_y+m_height+m_border/2 ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				461
			 | 
			
			
				+        // straight right 
			 | 
		
	
		
			
			| 
				
			 | 
			
				462
			 | 
			
			
				+        glTexCoord2f(0.0, 0.0); glVertex2f( m_x+m_width, m_y-m_border/2 ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				463
			 | 
			
			
				+        glTexCoord2f(0.0, 1.0); glVertex2f( m_x+m_width+m_border, m_y-m_border/2 ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				464
			 | 
			
			
				+        glTexCoord2f(tyoffset, 1.0); glVertex2f( m_x+m_width+m_border, m_y+m_height+m_border/2 ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				465
			 | 
			
			
				+        glTexCoord2f(tyoffset, 0.0); glVertex2f( m_x+m_width, m_y+m_height+m_border/2 ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				466
			 | 
			
			
				+        glEnd(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				467
			 | 
			
			
				+        // top left corner 
			 | 
		
	
		
			
			| 
				
			 | 
			
				468
			 | 
			
			
				+        glBindTexture( GL_TEXTURE_2D, m_cornerids[0] ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				469
			 | 
			
			
				+        glBegin( GL_QUADS ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				470
			 | 
			
			
				+        glTexCoord2f(0.0, 1.0); glVertex2f( m_x-m_border, m_y-m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				471
			 | 
			
			
				+        glTexCoord2f(1.0, 1.0); glVertex2f( m_x, m_y-m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				472
			 | 
			
			
				+        glTexCoord2f(1.0, 0.0); glVertex2f( m_x, m_y ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				473
			 | 
			
			
				+        glTexCoord2f(0.0, 0.0); glVertex2f( m_x-m_border, m_y ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				474
			 | 
			
			
				+        glEnd(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				475
			 | 
			
			
				+        // top right 
			 | 
		
	
		
			
			| 
				
			 | 
			
				476
			 | 
			
			
				+        glBindTexture( GL_TEXTURE_2D, m_cornerids[1] ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				477
			 | 
			
			
				+        glBegin( GL_QUADS ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				478
			 | 
			
			
				+        glTexCoord2f(0.0, 1.0); glVertex2f( m_x+m_width, m_y-m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				479
			 | 
			
			
				+        glTexCoord2f(1.0, 1.0); glVertex2f( m_x+m_width+m_border, m_y-m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				480
			 | 
			
			
				+        glTexCoord2f(1.0, 0.0); glVertex2f( m_x+m_width+m_border, m_y ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				481
			 | 
			
			
				+        glTexCoord2f(0.0, 0.0); glVertex2f( m_x+m_width, m_y ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				482
			 | 
			
			
				+        glEnd(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				483
			 | 
			
			
				+        // bottom left 
			 | 
		
	
		
			
			| 
				
			 | 
			
				484
			 | 
			
			
				+        glBindTexture( GL_TEXTURE_2D, m_cornerids[2] ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				485
			 | 
			
			
				+        glBegin( GL_QUADS ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				486
			 | 
			
			
				+        glTexCoord2f(0.0, 1.0); glVertex2f( m_x-m_border, m_y+m_height ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				487
			 | 
			
			
				+        glTexCoord2f(1.0, 1.0); glVertex2f( m_x, m_y+m_height ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				488
			 | 
			
			
				+        glTexCoord2f(1.0, 0.0); glVertex2f( m_x, m_y+m_height+m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				489
			 | 
			
			
				+        glTexCoord2f(0.0, 0.0); glVertex2f( m_x-m_border, m_y+m_height+m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				490
			 | 
			
			
				+        glEnd(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				491
			 | 
			
			
				+        // bottom right 
			 | 
		
	
		
			
			| 
				
			 | 
			
				492
			 | 
			
			
				+        glBindTexture( GL_TEXTURE_2D, m_cornerids[2] ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				493
			 | 
			
			
				+        glBegin( GL_QUADS ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				494
			 | 
			
			
				+        glTexCoord2f(0.0, 1.0); glVertex2f( m_x+m_width, m_y+m_height ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				495
			 | 
			
			
				+        glTexCoord2f(1.0, 1.0); glVertex2f( m_x+m_width+m_border, m_y+m_height ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				496
			 | 
			
			
				+        glTexCoord2f(1.0, 0.0); glVertex2f( m_x+m_width+m_border, m_y+m_height+m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				497
			 | 
			
			
				+        glTexCoord2f(0.0, 0.0); glVertex2f( m_x+m_width, m_y+m_height+m_border ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				498
			 | 
			
			
				+        glEnd(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				499
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				390
			 | 
			
				500
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				391
			 | 
			
				501
			 | 
			
			
				     if ( m_glassEnabled ) { 
			 | 
		
	
		
			
			| 
				392
			 | 
			
				502
			 | 
			
			
				         generateMagnifyingGlass(); 
			 |