[Bf-blender-cvs] [0c2be4d] master: Fix T46113: Color picker erratic outside 0-1 range

Campbell Barton noreply at git.blender.org
Tue Sep 15 13:36:39 CEST 2015


Commit: 0c2be4d8e853a4c38f073921e9f01a4a7eeae945
Author: Campbell Barton
Date:   Tue Sep 15 21:22:33 2015 +1000
Branches: master
https://developer.blender.org/rB0c2be4d8e853a4c38f073921e9f01a4a7eeae945

Fix T46113: Color picker erratic outside 0-1 range

===================================================================

M	source/blender/editors/interface/interface.c
M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/interface/interface_intern.h
M	source/blender/editors/interface/interface_widgets.c

===================================================================

diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index a39990e..e40e4f1 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -3123,6 +3123,20 @@ void ui_block_cm_to_scene_linear_v3(uiBlock *block, float pixel[3])
 	IMB_colormanagement_display_to_scene_linear_v3(pixel, display);
 }
 
+void ui_block_cm_to_display_space_range(uiBlock *block, float *min, float *max)
+{
+	struct ColorManagedDisplay *display = ui_block_cm_display_get(block);
+	float pixel[3];
+
+	copy_v3_fl(pixel, *min);
+	IMB_colormanagement_scene_linear_to_display_v3(pixel, display);
+	*min = min_fff(UNPACK3(pixel));
+
+	copy_v3_fl(pixel, *max);
+	IMB_colormanagement_scene_linear_to_display_v3(pixel, display);
+	*max = max_fff(UNPACK3(pixel));
+}
+
 /**
  * \brief ui_def_but is the function that draws many button types
  *
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 259e2e3..995dc19 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -5200,11 +5200,16 @@ static bool ui_numedit_but_HSVCUBE(
 			hsv[2] = y;
 			break;
 		case UI_GRAD_V_ALT:
+		{
 			/* vertical 'value' strip */
-
+			float min = but->softmin, max = but->softmax;
+			if (use_display_colorspace) {
+				ui_block_cm_to_display_space_range(but->block, &min, &max);
+			}
 			/* exception only for value strip - use the range set in but->min/max */
-			hsv[2] = y * (but->softmax - but->softmin) + but->softmin;
+			hsv[2] = y * (max - min) + min;
 			break;
+		}
 		default:
 			BLI_assert(0);
 			break;
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 575eff5..032efad 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -498,6 +498,7 @@ extern void ui_block_align_calc(uiBlock *block);
 extern struct ColorManagedDisplay *ui_block_cm_display_get(uiBlock *block);
 void ui_block_cm_to_display_space_v3(uiBlock *block, float pixel[3]);
 void ui_block_cm_to_scene_linear_v3(uiBlock *block, float pixel[3]);
+void ui_block_cm_to_display_space_range(uiBlock *block, float *min, float *max);
 
 /* interface_regions.c */
 
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index b98a29c..369cfaa 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -2587,8 +2587,11 @@ static void ui_draw_but_HSV_v(uiBut *but, const rcti *rect)
 	
 	/* map v from property range to [0,1] */
 	if (but->a1 == UI_GRAD_V_ALT) {
-		float range = but->softmax - but->softmin;
-		v = (v - but->softmin) / range;
+		float min = but->softmin, max = but->softmax;
+		if (color_profile) {
+			ui_block_cm_to_display_space_range(but->block, &min, &max);
+		}
+		v = (v - min) / (max - min);
 	}
 
 	widget_init(&wtb);




More information about the Bf-blender-cvs mailing list