[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25848] trunk/blender: Added user preferences for color picker type, includes colour wheel + 3 square types.

Matt Ebb matt at mke3.net
Sat Jan 9 07:44:56 CET 2010


Revision: 25848
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25848
Author:   broken
Date:     2010-01-09 07:44:54 +0100 (Sat, 09 Jan 2010)

Log Message:
-----------
Added user preferences for color picker type, includes colour wheel + 3 square types.

Find it in prefs -> system

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_userpref.py
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/editors/interface/interface_regions.c
    trunk/blender/source/blender/editors/interface/interface_widgets.c
    trunk/blender/source/blender/makesdna/DNA_userdef_types.h
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c

Modified: trunk/blender/release/scripts/ui/space_userpref.py
===================================================================
--- trunk/blender/release/scripts/ui/space_userpref.py	2010-01-09 00:49:29 UTC (rev 25847)
+++ trunk/blender/release/scripts/ui/space_userpref.py	2010-01-09 06:44:54 UTC (rev 25848)
@@ -506,7 +506,11 @@
         column.separator()
 
         col = column.column()
-
+        
+        col.prop(system, "color_picker_type")
+        
+        column.separator()
+        
         col.prop(system, "use_weight_color_range", text="Custom Weight Paint Range")
         sub = col.column()
         sub.active = system.use_weight_color_range

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2010-01-09 00:49:29 UTC (rev 25847)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2010-01-09 06:44:54 UTC (rev 25848)
@@ -2711,21 +2711,27 @@
 	CLAMP(y, 0.0, 1.0);
 	
 	if(but->a1==0) {
-		hsv[0]= x; 
-		hsv[2]= y; 
+		hsv[2]= x; 
+		hsv[1]= y; 
 	}
 	else if(but->a1==1) {
 		hsv[0]= x; 				
-		hsv[1]= y; 				
+		hsv[2]= y; 				
 	}
 	else if(but->a1==2) {
-		hsv[2]= x; 
+		hsv[0]= x; 
 		hsv[1]= y; 
 	}
 	else if(but->a1==3) {
 		hsv[0]= x; 
 	}
-	else {
+	else if(but->a1==4) {
+		hsv[1]= x; 
+	}
+	else if(but->a1==5) {
+		hsv[2]= x; 
+	}
+	else if (but->a1==9){
 		/* vertical 'value' strip */
 		hsv[2]= y; 
 		if (color_profile)
@@ -3791,7 +3797,7 @@
 		retval= ui_do_but_BUT(C, but, data, event);
 		break;
 	case COL:
-		if(but->a1 == -1)  // signal to prevent calling up color picker
+		if(but->a1 == 9)  // signal to prevent calling up color picker
 			retval= ui_do_but_EXIT(C, but, data, event);
 		else
 			retval= ui_do_but_BLOCK(C, but, data, event);

Modified: trunk/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_regions.c	2010-01-09 00:49:29 UTC (rev 25847)
+++ trunk/blender/source/blender/editors/interface/interface_regions.c	2010-01-09 06:44:54 UTC (rev 25848)
@@ -1647,10 +1647,6 @@
 		popup->menuretval= UI_RETURN_OK;
 }
 
-/* picker sizes S hsize, F full size, D spacer, B button/pallette height  */
-#define SPICK1	150.0
-#define DPICK1	6.0
-
 static void picker_new_hide_reveal(uiBlock *block, short colormode)
 {
 	uiBut *bt;
@@ -1682,6 +1678,46 @@
 	picker_new_hide_reveal(bt->block, colormode);
 }
 
+/* picker sizes S hsize, F full size, D spacer, B button/pallette height  */
+#define SPICK1	150.0
+#define DPICK1	6.0
+
+#define PICKER_H	150
+#define PICKER_W	150
+#define PICKER_SPACE	6
+#define PICKER_BAR		14
+
+#define PICKER_TOTAL_W	(PICKER_W+PICKER_SPACE+PICKER_BAR)
+
+static void circle_picker(uiBlock *block, PointerRNA *ptr, const char *propname)
+{
+	uiBut *bt;
+	
+	/* HS circle */
+	bt= uiDefButR(block, HSVCIRCLE, 0, "",	0, 0, PICKER_H, PICKER_W, ptr, propname, -1, 0.0, 0.0, 0, 0, "");
+	uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
+	
+	/* value */
+	uiDefButR(block, HSVCUBE, 0, "", PICKER_W+PICKER_SPACE,0,PICKER_BAR,PICKER_H, ptr, propname, -1, 0.0, 0.0, 9, 0, "");
+	uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
+}
+
+
+static void square_picker(uiBlock *block, PointerRNA *ptr, const char *propname, int type)
+{
+	uiBut *bt;
+	int bartype = type + 3;
+	
+	/* HS square */
+	bt= uiDefButR(block, HSVCUBE, 0, "",	0, PICKER_BAR+PICKER_SPACE, PICKER_TOTAL_W, PICKER_H, ptr, propname, -1, 0.0, 0.0, type, 0, "");
+	uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
+	
+	/* value */
+	uiDefButR(block, HSVCUBE, 0, "",		0, 0, PICKER_TOTAL_W, PICKER_BAR, ptr, propname, -1, 0.0, 0.0, bartype, 0, "");
+	uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
+}
+
+
 /* a HS circle, V slider, rgb/hsv/hex sliders */
 static void uiBlockPicker(uiBlock *block, float *rgb, PointerRNA *ptr, PropertyRNA *prop)
 {
@@ -1693,7 +1729,7 @@
 	static char hexcol[128];
 	const char *propname = RNA_property_identifier(prop);
 	
-	width= (SPICK1+DPICK1+14);
+	width= PICKER_TOTAL_W;
 	butwidth = width - UI_UNIT_X - 10;
 	
 	/* existence of profile means storage is in linear colour space, with display correction */
@@ -1704,15 +1740,22 @@
 	
 	RNA_property_float_get_array(ptr, prop, rgb);
 	rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
+
+	switch (U.color_picker_type) {
+		case USER_CP_CIRCLE:
+			circle_picker(block, ptr, propname);
+			break;
+		case USER_CP_SQUARE_SV:
+			square_picker(block, ptr, propname, 0);
+			break;
+		case USER_CP_SQUARE_HS:
+			square_picker(block, ptr, propname, 1);
+			break;
+		case USER_CP_SQUARE_HV:
+			square_picker(block, ptr, propname, 2);
+			break;
+	}
 	
-	/* HS circle */
-	bt= uiDefButR(block, HSVCIRCLE, 0, "",	0, 0, SPICK1, SPICK1, ptr, propname, -1, 0.0, 0.0, 0, 0, "");
-	uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
-	
-	/* value */
-	uiDefButR(block, HSVCUBE, 0, "", SPICK1+DPICK1,0,14,SPICK1, ptr, propname, -1, 0.0, 0.0, 4, 0, "");
-	uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
-	
 	/* mode */
 	uiBlockBeginAlign(block);
 	bt= uiDefButS(block, ROW, 0, "RGB",	0, -30, width/3, UI_UNIT_Y, &colormode, 0.0, 0.0, 0, 0, "");

Modified: trunk/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_widgets.c	2010-01-09 00:49:29 UTC (rev 25847)
+++ trunk/blender/source/blender/editors/interface/interface_widgets.c	2010-01-09 06:44:54 UTC (rev 25848)
@@ -1616,35 +1616,53 @@
 	/* draw series of gouraud rects */
 	glShadeModel(GL_SMOOTH);
 	
-	if(but->a1==0) {	// H and V vary
+	
+	if(but->a1==0) {	// S and V vary
+		hsv_to_rgb(h, 0.0, 0.0,   &col1[0][0], &col1[0][1], &col1[0][2]);
+		hsv_to_rgb(h, 0.333, 0.0, &col1[1][0], &col1[1][1], &col1[1][2]);
+		hsv_to_rgb(h, 0.666, 0.0, &col1[2][0], &col1[2][1], &col1[2][2]);
+		hsv_to_rgb(h, 1.0, 0.0,   &col1[3][0], &col1[3][1], &col1[3][2]);
+		x= v; y= s;
+	}
+	else if(but->a1==1) {	// H and V vary
 		hsv_to_rgb(0.0, s, 0.0,   &col1[0][0], &col1[0][1], &col1[0][2]);
 		hsv_to_rgb(0.0, s, 0.333, &col1[1][0], &col1[1][1], &col1[1][2]);
 		hsv_to_rgb(0.0, s, 0.666, &col1[2][0], &col1[2][1], &col1[2][2]);
 		hsv_to_rgb(0.0, s, 1.0,   &col1[3][0], &col1[3][1], &col1[3][2]);
 		x= h; y= v;
 	}
-	else if(but->a1==1) {	// H and S vary
+	else if(but->a1==2) {	// H and S vary
 		hsv_to_rgb(0.0, 0.0, v,   &col1[0][0], &col1[0][1], &col1[0][2]);
 		hsv_to_rgb(0.0, 0.333, v, &col1[1][0], &col1[1][1], &col1[1][2]);
 		hsv_to_rgb(0.0, 0.666, v, &col1[2][0], &col1[2][1], &col1[2][2]);
 		hsv_to_rgb(0.0, 1.0, v,   &col1[3][0], &col1[3][1], &col1[3][2]);
 		x= h; y= s;
 	}
-	else if(but->a1==2) {	// S and V vary
-		hsv_to_rgb(h, 0.0, 0.0,   &col1[0][0], &col1[0][1], &col1[0][2]);
-		hsv_to_rgb(h, 0.333, 0.0, &col1[1][0], &col1[1][1], &col1[1][2]);
-		hsv_to_rgb(h, 0.666, 0.0, &col1[2][0], &col1[2][1], &col1[2][2]);
-		hsv_to_rgb(h, 1.0, 0.0,   &col1[3][0], &col1[3][1], &col1[3][2]);
-		x= v; y= s;
-	}
-	else if(but->a1==3) {		// only hue slider
+	else if(but->a1==3) {	// only H
 		hsv_to_rgb(0.0, 1.0, 1.0,   &col1[0][0], &col1[0][1], &col1[0][2]);
 		VECCOPY(col1[1], col1[0]);
 		VECCOPY(col1[2], col1[0]);
 		VECCOPY(col1[3], col1[0]);
 		x= h; y= 0.5;
 	}
+	else if(but->a1==4) {	// only S
+		hsv_to_rgb(1.0, 0.0, 1.0,   &col1[1][0], &col1[1][1], &col1[1][2]);
+		VECCOPY(col1[0], col1[1]);
+		VECCOPY(col1[2], col1[1]);
+		VECCOPY(col1[3], col1[1]);
+		x= s; y= 0.5;
+	}
+	else if(but->a1==5) {	// only V
+		hsv_to_rgb(1.0, 1.0, 0.0,   &col1[2][0], &col1[2][1], &col1[2][2]);
+		VECCOPY(col1[0], col1[2]);
+		VECCOPY(col1[1], col1[2]);
+		VECCOPY(col1[3], col1[2]);
+		x= v; y= 0.5;
+	}
 	
+	
+	/* old below */
+	
 	for(dx=0.0; dx<1.0; dx+= 0.05) {
 		// previous color
 		VECCOPY(col0[0], col1[0]);
@@ -1653,30 +1671,42 @@
 		VECCOPY(col0[3], col1[3]);
 		
 		// new color
-		if(but->a1==0) {	// H and V vary
+		if(but->a1==0) {	// S and V vary
+			hsv_to_rgb(h, 0.0, dx,   &col1[0][0], &col1[0][1], &col1[0][2]);
+			hsv_to_rgb(h, 0.333, dx, &col1[1][0], &col1[1][1], &col1[1][2]);
+			hsv_to_rgb(h, 0.666, dx, &col1[2][0], &col1[2][1], &col1[2][2]);
+			hsv_to_rgb(h, 1.0, dx,   &col1[3][0], &col1[3][1], &col1[3][2]);
+		}
+		else if(but->a1==1) {	// H and V vary
 			hsv_to_rgb(dx, s, 0.0,   &col1[0][0], &col1[0][1], &col1[0][2]);
 			hsv_to_rgb(dx, s, 0.333, &col1[1][0], &col1[1][1], &col1[1][2]);
 			hsv_to_rgb(dx, s, 0.666, &col1[2][0], &col1[2][1], &col1[2][2]);
 			hsv_to_rgb(dx, s, 1.0,   &col1[3][0], &col1[3][1], &col1[3][2]);
 		}
-		else if(but->a1==1) {	// H and S vary
+		else if(but->a1==2) {	// H and S vary
 			hsv_to_rgb(dx, 0.0, v,   &col1[0][0], &col1[0][1], &col1[0][2]);
 			hsv_to_rgb(dx, 0.333, v, &col1[1][0], &col1[1][1], &col1[1][2]);
 			hsv_to_rgb(dx, 0.666, v, &col1[2][0], &col1[2][1], &col1[2][2]);
 			hsv_to_rgb(dx, 1.0, v,   &col1[3][0], &col1[3][1], &col1[3][2]);
 		}
-		else if(but->a1==2) {	// S and V vary
-			hsv_to_rgb(h, 0.0, dx,   &col1[0][0], &col1[0][1], &col1[0][2]);
-			hsv_to_rgb(h, 0.333, dx, &col1[1][0], &col1[1][1], &col1[1][2]);
-			hsv_to_rgb(h, 0.666, dx, &col1[2][0], &col1[2][1], &col1[2][2]);
-			hsv_to_rgb(h, 1.0, dx,   &col1[3][0], &col1[3][1], &col1[3][2]);
-		}
 		else if(but->a1==3) {	// only H
 			hsv_to_rgb(dx, 1.0, 1.0,   &col1[0][0], &col1[0][1], &col1[0][2]);
 			VECCOPY(col1[1], col1[0]);
 			VECCOPY(col1[2], col1[0]);
 			VECCOPY(col1[3], col1[0]);
 		}
+		else if(but->a1==4) {	// only S
+			hsv_to_rgb(h, dx, 1.0,   &col1[1][0], &col1[1][1], &col1[1][2]);
+			VECCOPY(col1[0], col1[1]);
+			VECCOPY(col1[2], col1[1]);
+			VECCOPY(col1[3], col1[1]);
+		}
+		else if(but->a1==5) {	// only V
+			hsv_to_rgb(h, 1.0, dx,   &col1[2][0], &col1[2][1], &col1[2][2]);
+			VECCOPY(col1[0], col1[2]);
+			VECCOPY(col1[1], col1[2]);
+			VECCOPY(col1[3], col1[2]);
+		}
 		
 		// rect
 		sx1= rect->xmin + dx*(rect->xmax-rect->xmin);
@@ -2589,7 +2619,7 @@
 				break;
 				
 			case HSVCUBE:
-				if(but->a1==4) // vertical V slider, uses new widget draw now
+				if(but->a1==9) // vertical V slider, uses new widget draw now
 					ui_draw_but_HSV_v(but, rect);
 				else  // other HSV pickers...
 					ui_draw_but_HSVCUBE(but, rect);

Modified: trunk/blender/source/blender/makesdna/DNA_userdef_types.h
===================================================================

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list