[Bf-blender-cvs] [fbb2c79] gooseberry: Color Wire: improve method of tinting colors

Campbell Barton noreply at git.blender.org
Sat Nov 1 20:28:41 CET 2014


Commit: fbb2c796183be1b40f084095bbf7b27070c13c79
Author: Campbell Barton
Date:   Sat Nov 1 20:27:52 2014 +0100
Branches: gooseberry
https://developer.blender.org/rBfbb2c796183be1b40f084095bbf7b27070c13c79

Color Wire: improve method of tinting colors

also improve method to ensure contrast with background

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

M	source/blender/editors/space_view3d/drawobject.c

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

diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 3ddbc9a..246ea13 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -7093,12 +7093,30 @@ static void draw_object_wire_color(Scene *scene, Base *base, unsigned char r_ob_
 	r_ob_wire_col[3] = 255;
 }
 
+
 static float draw_object_wire_grey = -1.0f;
 void draw_object_bg_wire_color_set(const float color[3])
 {
-	float hsv[3];
-	rgb_to_hsv_v(color, hsv);
-	draw_object_wire_grey = hsv[2];
+	draw_object_wire_grey = rgb_to_grayscale(color);
+}
+
+
+static void tint_neg(float rgb[3], float fac)
+{
+	mul_v3_fl(rgb, fac);
+}
+
+static void tint_pos(float rgb[3], float fac)
+{
+	rgb[0] = 1.0 - rgb[0];
+	rgb[1] = 1.0 - rgb[1];
+	rgb[2] = 1.0 - rgb[2];
+
+	mul_v3_fl(rgb, fac);
+
+	rgb[0] = 1.0 - rgb[0];
+	rgb[1] = 1.0 - rgb[1];
+	rgb[2] = 1.0 - rgb[2];
 }
 
 static void draw_object_wire_color_adjust_contrast(
@@ -7107,36 +7125,39 @@ static void draw_object_wire_color_adjust_contrast(
         const int select_state,
         const short draw_type)
 {
-	const float tint[3] = {0.0, 0.65f, 1.0f};
-	const float fac[3] = {0.666f, 0.75f, 1.0f};
-	const float contrast = 0.075f;
+	const float contrast = 0.1f;
 
-	float hsv[3];
+	float rgb[3];
 
 	BLI_assert(draw_object_wire_grey != -1.0);
 
-	rgb_uchar_to_float(hsv, ob_wire_col);
-	rgb_to_hsv_v(hsv, hsv);
+	rgb_uchar_to_float(rgb, ob_wire_col);
+
+	if (select_state == 0) {
+		tint_neg(rgb, 0.5f);
+	}
+	else {
+		tint_pos(rgb, select_state == 2 ? 0.15f : 0.35f);
+	}
 
-	hsv[2] = interpf(tint[select_state], hsv[2], fac[select_state]);
 
 	/* when no solid --- ensure contrast */
 	if (draw_type <= OB_WIRE) {
 		const float fill_bw = draw_object_wire_grey;
+		const float wire_bw = rgb_to_grayscale(rgb);
+		const float delta = wire_bw - fill_bw;
 
-		if (fabsf(fill_bw - hsv[2]) < contrast) {
-			if (fill_bw < hsv[2]) {
-				hsv[2] = fill_bw + contrast;
+		if (fabsf(delta) < contrast) {
+			if (delta > 0.0f) {
+				tint_neg(rgb, 1.0f - (delta * 2.0f));
 			}
 			else {
-				hsv[2] = fill_bw - contrast;
+				tint_pos(rgb, 1.0f - (delta * -2.0f));
+
 			}
 		}
-
 	}
-
-	hsv_to_rgb_v(hsv, hsv);
-	rgb_float_to_uchar(ob_wire_col, hsv);
+	rgb_float_to_uchar(ob_wire_col, rgb);
 }
 
 static void draw_object_matcap_check(View3D *v3d, Object *ob)




More information about the Bf-blender-cvs mailing list