[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25792] trunk/blender: Color Picker work:

Matt Ebb matt at mke3.net
Thu Jan 7 10:55:11 CET 2010


Revision: 25792
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25792
Author:   broken
Date:     2010-01-07 10:55:11 +0100 (Thu, 07 Jan 2010)

Log Message:
-----------
Color Picker work:

Restored the old Eyedropper tool from the 2.4 colour picker. Now it's an operator, 
working nicely using rna properties (fixes #19475 and some todo items)

This ended up being a bit more work than expected, it involved converting the 
colour picker to use RNA properties directly, rather than temporary values. This has 
several advantages, including being able to type in RGB values greater than 1, 
however there are still some redraw issues with sliders.

Also removed the alternate color pickers after this time spent testing, the current one 
should be sufficient, or alternatives to the wheel can possibly become preferences 
in the current design.

Converting the picker to RNA also made it very trivial to make a cool new 
ColorWheel template, which can be embedded in UI layouts. I've enabled it already 
in texture/vertex paint brush properties and the sequence editor color correction:
http://mke3.net/blender/devel/2.5/colorwheels.jpg

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_image.py
    trunk/blender/release/scripts/ui/space_sequencer.py
    trunk/blender/release/scripts/ui/space_view3d_toolbar.py
    trunk/blender/source/blender/editors/include/UI_interface.h
    trunk/blender/source/blender/editors/interface/interface.c
    trunk/blender/source/blender/editors/interface/interface_anim.c
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/editors/interface/interface_intern.h
    trunk/blender/source/blender/editors/interface/interface_layout.c
    trunk/blender/source/blender/editors/interface/interface_ops.c
    trunk/blender/source/blender/editors/interface/interface_regions.c
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/editors/interface/interface_widgets.c
    trunk/blender/source/blender/makesrna/intern/rna_ui_api.c

Modified: trunk/blender/release/scripts/ui/space_image.py
===================================================================
--- trunk/blender/release/scripts/ui/space_image.py	2010-01-07 05:23:54 UTC (rev 25791)
+++ trunk/blender/release/scripts/ui/space_image.py	2010-01-07 09:55:11 UTC (rev 25792)
@@ -475,6 +475,7 @@
 
         if brush:
             col = layout.column()
+            col.template_color_wheel(brush, "color", value_slider=True)
             col.prop(brush, "color", text="")
 
             row = col.row(align=True)

Modified: trunk/blender/release/scripts/ui/space_sequencer.py
===================================================================
--- trunk/blender/release/scripts/ui/space_sequencer.py	2010-01-07 05:23:54 UTC (rev 25791)
+++ trunk/blender/release/scripts/ui/space_sequencer.py	2010-01-07 09:55:11 UTC (rev 25792)
@@ -606,13 +606,16 @@
             row = layout.row()
             row.active = strip.use_color_balance
             col = row.column()
-            col.prop(strip.color_balance, "lift")
+            col.template_color_wheel(strip.color_balance, "lift", value_slider=False)
+            col.row().prop(strip.color_balance, "lift")
             col.prop(strip.color_balance, "inverse_lift", text="Inverse")
             col = row.column()
-            col.prop(strip.color_balance, "gamma")
+            col.template_color_wheel(strip.color_balance, "gamma", value_slider=False)
+            col.row().prop(strip.color_balance, "gamma")
             col.prop(strip.color_balance, "inverse_gamma", text="Inverse")
             col = row.column()
-            col.prop(strip.color_balance, "gain")
+            col.template_color_wheel(strip.color_balance, "gain", value_slider=False)
+            col.row().prop(strip.color_balance, "gain")
             col.prop(strip.color_balance, "inverse_gain", text="Inverse")
 
 

Modified: trunk/blender/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2010-01-07 05:23:54 UTC (rev 25791)
+++ trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2010-01-07 09:55:11 UTC (rev 25792)
@@ -571,6 +571,7 @@
 
         elif context.texture_paint_object and brush:
             col = layout.column()
+            col.template_color_wheel(brush, "color", value_slider=True)
             col.prop(brush, "color", text="")
 
             row = col.row(align=True)
@@ -610,6 +611,7 @@
 
         elif context.vertex_paint_object and brush:
             col = layout.column()
+            col.template_color_wheel(brush, "color", value_slider=True)
             col.prop(brush, "color", text="")
 
             row = col.row(align=True)

Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h	2010-01-07 05:23:54 UTC (rev 25791)
+++ trunk/blender/source/blender/editors/include/UI_interface.h	2010-01-07 09:55:11 UTC (rev 25792)
@@ -456,7 +456,6 @@
 uiBut *uiDefSearchBut(uiBlock *block, void *arg, int retval, int icon, int maxlen, short x1, short y1, short x2, short y2, float a1, float a2, char *tip);
 
 void uiBlockPickerButtons(struct uiBlock *block, float *col, float *hsv, float *old, char *hexcol, char mode, short retval);
-void uiBlockColorbandButtons(struct uiBlock *block, struct ColorBand *coba, struct rctf *butr, int event);
 
 uiBut *uiDefAutoButR(uiBlock *block, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, char *name, int icon, int x1, int y1, int x2, int y2);
 void uiDefAutoButsRNA(const struct bContext *C, uiLayout *layout, struct PointerRNA *ptr, int columns);
@@ -654,6 +653,7 @@
 void uiTemplatePreview(uiLayout *layout, struct ID *id, struct ID *parent, struct MTex *slot);
 void uiTemplateColorRamp(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
 void uiTemplateCurveMapping(uiLayout *layout, struct PointerRNA *ptr, char *propname, int type, int levels, int brush);
+void uiTemplateColorWheel(uiLayout *layout, struct PointerRNA *ptr, char *propname, int value_slider);
 void uiTemplateTriColorSet(uiLayout *layout, struct PointerRNA *ptr, char *propname);
 void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname,
 		      PointerRNA *used_ptr, char *used_propname, int active_layer);

Modified: trunk/blender/source/blender/editors/interface/interface.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface.c	2010-01-07 05:23:54 UTC (rev 25791)
+++ trunk/blender/source/blender/editors/interface/interface.c	2010-01-07 09:55:11 UTC (rev 25792)
@@ -1116,7 +1116,6 @@
 
 	if(but->editvec) {
 		VECCOPY(vec, but->editvec);
-		return;
 	}
 
 	if(but->rnaprop) {
@@ -1152,7 +1151,6 @@
 
 	if(but->editvec) {
 		VECCOPY(but->editvec, vec);
-		return;
 	}
 
 	if(but->rnaprop) {

Modified: trunk/blender/source/blender/editors/interface/interface_anim.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_anim.c	2010-01-07 05:23:54 UTC (rev 25791)
+++ trunk/blender/source/blender/editors/interface/interface_anim.c	2010-01-07 09:55:11 UTC (rev 25792)
@@ -168,7 +168,7 @@
 	if(ar) {
 		for(block=ar->uiblocks.first; block; block=block->next) {
 			for(but=block->buttons.first; but; but= but->next) {
-				if(but->active && but->rnapoin.id.data) {
+				if((but->active || but->flag & UI_BUT_LAST_ACTIVE) && but->rnapoin.id.data) {
 					*ptr= but->rnapoin;
 					*prop= but->rnaprop;
 					*index= but->rnaindex;

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2010-01-07 05:23:54 UTC (rev 25791)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2010-01-07 09:55:11 UTC (rev 25792)
@@ -402,11 +402,7 @@
 
 static void ui_apply_but_BLOCK(bContext *C, uiBut *but, uiHandleButtonData *data)
 {
-	if(but->type == COL) {
-		if(but->a1 != -1) // this is not a color picker (weak!)
-			ui_set_but_vectorf(but, data->vec);
-	}
-	else if(ELEM3(but->type, MENU, ICONROW, ICONTEXTROW))
+	if(ELEM3(but->type, MENU, ICONROW, ICONTEXTROW))
 		ui_set_but_val(but, data->value);
 
 	ui_check_but(but);
@@ -2586,6 +2582,7 @@
 					but->hsv[2]= CLAMPIS(but->hsv[2]+0.05f, 0.0f, 1.0f);
 				
 				hsv_to_rgb(but->hsv[0], but->hsv[1], but->hsv[2], data->vec, data->vec+1, data->vec+2);
+				ui_set_but_vectorf(but, data->vec);
 				
 				button_activate_state(C, but, BUTTON_STATE_EXIT);
 				ui_apply_button(C, but->block, but, data, 1);
@@ -2694,6 +2691,7 @@
 
 static int ui_numedit_but_HSVCUBE(uiBut *but, uiHandleButtonData *data, int mx, int my)
 {
+	float rgb[3], hsv[3];
 	float x, y;
 	int changed= 1;
 	int color_profile = but->block->color_profile;
@@ -2702,6 +2700,9 @@
 		if (RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA)
 			color_profile = BLI_PR_NONE;
 	}
+	
+	ui_get_but_vectorf(but, rgb);
+	rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
 		
 	/* relative position within box */
 	x= ((float)mx-but->x1)/(but->x2-but->x1);
@@ -2710,31 +2711,29 @@
 	CLAMP(y, 0.0, 1.0);
 	
 	if(but->a1==0) {
-		but->hsv[0]= x; 
-		but->hsv[2]= y; 
+		hsv[0]= x; 
+		hsv[2]= y; 
 	}
 	else if(but->a1==1) {
-		but->hsv[0]= x; 				
-		but->hsv[1]= y; 				
+		hsv[0]= x; 				
+		hsv[1]= y; 				
 	}
 	else if(but->a1==2) {
-		but->hsv[2]= x; 
-		but->hsv[1]= y; 
+		hsv[2]= x; 
+		hsv[1]= y; 
 	}
 	else if(but->a1==3) {
-		but->hsv[0]= x; 
+		hsv[0]= x; 
 	}
 	else {
 		/* vertical 'value' strip */
-		but->hsv[2]= y; 
+		hsv[2]= y; 
 		if (color_profile)
-			but->hsv[2] = srgb_to_linearrgb(but->hsv[2]);
+			hsv[2] = srgb_to_linearrgb(hsv[2]);
 	}
 
-	ui_set_but_hsv(but);	// converts to rgb
-	
-	// update button values and strings
-	ui_update_block_buts_hsv(but->block, but->hsv);
+	hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2);
+	ui_set_but_vectorf(but, rgb);
 
 	data->draglastx= mx;
 	data->draglasty= my;
@@ -2785,16 +2784,18 @@
 {
 	rcti rect;
 	int changed= 1;
-
+	float rgb[3], hsv[3];
+	
 	rect.xmin= but->x1; rect.xmax= but->x2;
 	rect.ymin= but->y1; rect.ymax= but->y2;
 	
-	ui_hsvcircle_vals_from_pos(but->hsv, but->hsv+1, &rect, (float)mx, (float)my);
+	ui_get_but_vectorf(but, rgb);
+	rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
 	
-	ui_set_but_hsv(but);	// converts to rgb
+	ui_hsvcircle_vals_from_pos(hsv, hsv+1, &rect, (float)mx, (float)my);
 	
-	// update button values and strings
-	// XXX ui_update_block_buts_hsv(but->block, but->hsv);
+	hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2);
+	ui_set_but_vectorf(but, rgb);
 	
 	data->draglastx= mx;
 	data->draglasty= my;

Modified: trunk/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_intern.h	2010-01-07 05:23:54 UTC (rev 25791)
+++ trunk/blender/source/blender/editors/interface/interface_intern.h	2010-01-07 09:55:11 UTC (rev 25792)
@@ -348,7 +348,6 @@
 extern void ui_check_but(uiBut *but);
 extern int  ui_is_but_float(uiBut *but);
 extern int  ui_is_but_unit(uiBut *but);
-extern void ui_update_block_buts_hsv(uiBlock *block, float *hsv);
 
 extern void ui_bounds_block(uiBlock *block);
 extern void ui_block_translate(uiBlock *block, int x, int y);

Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_layout.c	2010-01-07 05:23:54 UTC (rev 25791)
+++ trunk/blender/source/blender/editors/interface/interface_layout.c	2010-01-07 09:55:11 UTC (rev 25792)
@@ -409,7 +409,7 @@
 		}
 	}
 	else {
-		if(ELEM(subtype, PROP_COLOR, PROP_COLOR_GAMMA))
+		if(ELEM(subtype, PROP_COLOR, PROP_COLOR_GAMMA) && !expand)
 			uiDefAutoButR(block, ptr, prop, -1, "", 0, 0, 0, w, UI_UNIT_Y);
 
 		if(!ELEM(subtype, PROP_COLOR, PROP_COLOR_GAMMA) || expand) {

Modified: trunk/blender/source/blender/editors/interface/interface_ops.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_ops.c	2010-01-07 05:23:54 UTC (rev 25791)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list