[Bf-blender-cvs] [90e0c31c72d] soc-2017-vertex_paint: added the color lock in vertex paint

Darshan Kadu noreply at git.blender.org
Sat Jul 22 12:12:48 CEST 2017


Commit: 90e0c31c72d351d10044bc3579c23497b2fd51ec
Author: Darshan Kadu
Date:   Sat Jul 22 15:41:36 2017 +0530
Branches: soc-2017-vertex_paint
https://developer.blender.org/rB90e0c31c72d351d10044bc3579c23497b2fd51ec

added the color lock in vertex paint

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

M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/editors/sculpt_paint/paint_vertex.c
M	source/blender/editors/sculpt_paint/sculpt_intern.h
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_sculpt_paint.c

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

diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index e8f764afe47..ca33d54a781 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -1165,6 +1165,16 @@ class VIEW3D_PT_tools_brush(Panel, View3DPaintPanel):
             # row.prop(brush, "jitter", slider=True)
             # row.prop(brush, "use_pressure_jitter", toggle=True, text="")
             col.separator()
+            #color lock
+            col.label(text="Lock Color:")
+            row= col.row(align= True)
+            toolsettings = context.tool_settings
+            vpaint = toolsettings.vertex_paint
+            row.prop(vpaint,"color_lock_r",text="R",toggle= True)
+            row.prop(vpaint,"color_lock_g",text="G",toggle= True)
+            row.prop(vpaint,"color_lock_b",text="B",toggle= True)
+            row.prop(vpaint,"color_lock_a",text="A",toggle= True)
+            col.separator()
             col.prop(brush, "vertex_tool", text="Blend")
             col.prop(brush,"use_accumulate")
             col.prop(brush,"use_alpha_vpaint")
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index e01c7499463..f25b2ed7691 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -569,7 +569,7 @@ void vpaint_dogamma(Scene *scene)
 #endif
 
 BLI_INLINE unsigned int mcol_blend(unsigned int col1, unsigned int col2, int fac,
-									const bool use_alpha, const unsigned char alpha_value)
+									const bool use_alpha, const unsigned char alpha_value, ColorLock *lock)
 {
 	unsigned char *cp1, *cp2, *cp;
 	int mfac;
@@ -583,7 +583,12 @@ BLI_INLINE unsigned int mcol_blend(unsigned int col1, unsigned int col2, int fac
 
 	if (fac >= 255) {
 		cp = (unsigned char *)&col2;
-		cp[3] = use_alpha ? alpha_value : cp[3];
+		cp1 = (unsigned char *)&col1;
+		cp[3] = use_alpha ? alpha_value : cp[3] ;
+		cp[0] = lock->lock_red   ? cp1[0] : cp[0];
+		cp[1] = lock->lock_green ? cp1[1] : cp[1];
+		cp[2] = lock->lock_blue  ? cp1[2] : cp[2];
+		cp[3] = lock->lock_alpha ? cp1[3] : cp[3];
 		return col2;
 	}
 
@@ -604,16 +609,16 @@ BLI_INLINE unsigned int mcol_blend(unsigned int col1, unsigned int col2, int fac
 	int b2 = cp2[2] * cp2[2];
 	int a2 = cp2[3] * cp2[3];
 
-	cp[0] = (unsigned char)round(sqrt(divide_round_i((mfac * r1 + fac * r2), 255)));
-	cp[1] = (unsigned char)round(sqrt(divide_round_i((mfac * g1 + fac * g2), 255)));
-	cp[2] = (unsigned char)round(sqrt(divide_round_i((mfac * b1 + fac * b2), 255)));
-	cp[3] = (unsigned char)round(sqrt(divide_round_i((mfac * a1 + fac * a2), 255)));
+	cp[0] = lock->lock_red?    cp1[0] : (unsigned char)round(sqrt(divide_round_i((mfac * r1 + fac * r2), 255)));
+	cp[1] = lock->lock_green ? cp1[1] : (unsigned char)round(sqrt(divide_round_i((mfac * g1 + fac * g2), 255)));
+	cp[2] = lock->lock_blue ?  cp1[2] : (unsigned char)round(sqrt(divide_round_i((mfac * b1 + fac * b2), 255)));
+	cp[3] = lock->lock_alpha ? cp1[3] : (unsigned char)round(sqrt(divide_round_i((mfac * a1 + fac * a2), 255)));
 
 	return col;
 }
 
 BLI_INLINE unsigned int mcol_add(unsigned int col1, unsigned int col2, int fac,
-								 const bool use_alpha, const unsigned char alpha_value)
+								 const bool use_alpha, const unsigned char alpha_value, ColorLock *lock)
 {
 	unsigned char *cp1, *cp2, *cp;
 	int temp;
@@ -630,19 +635,19 @@ BLI_INLINE unsigned int mcol_add(unsigned int col1, unsigned int col2, int fac,
 	cp  = (unsigned char *)&col;
 
 	temp = cp1[0] + divide_round_i((fac * cp2[0]), 255);
-	cp[0] = (temp > 254) ? 255 : temp;
+	cp[0] = lock->lock_red ? cp1[0] : ((temp > 254) ? 255 : temp);
 	temp = cp1[1] + divide_round_i((fac * cp2[1]), 255);
-	cp[1] = (temp > 254) ? 255 : temp;
+	cp[1] = lock->lock_green ? cp1[1] : ((temp > 254) ? 255 : temp);
 	temp = cp1[2] + divide_round_i((fac * cp2[2]), 255);
-	cp[2] = (temp > 254) ? 255 : temp;
+	cp[2] = lock->lock_blue ? cp1[2] : ((temp > 254) ? 255 : temp);
 	temp = cp1[3] + divide_round_i((fac * cp2[3]), 255);
-	cp[3] = (temp > 254) ? 255 : temp;
+	cp[3] = lock->lock_alpha ? cp1[3] : ((temp > 254) ? 255 : temp);
 	
 	return col;
 }
 
 BLI_INLINE unsigned int mcol_sub(unsigned int col1, unsigned int col2, int fac,
-								 const bool use_alpha, const unsigned char alpha_value)
+								 const bool use_alpha, const unsigned char alpha_value, ColorLock *lock)
 {
 	unsigned char *cp1, *cp2, *cp;
 	int temp;
@@ -659,19 +664,19 @@ BLI_INLINE unsigned int mcol_sub(unsigned int col1, unsigned int col2, int fac,
 	cp  = (unsigned char *)&col;
 
 	temp = cp1[0] - divide_round_i((fac * cp2[0]), 255);
-	cp[0] = (temp < 0) ? 0 : temp;
+	cp[0] = lock->lock_red ? cp1[0] : ((temp < 0) ? 0 : temp);
 	temp = cp1[1] - divide_round_i((fac * cp2[1]), 255);
-	cp[1] = (temp < 0) ? 0 : temp;
+	cp[1] = lock->lock_green ? cp1[1] : ((temp < 0) ? 0 : temp);
 	temp = cp1[2] - divide_round_i((fac * cp2[2]), 255);
-	cp[2] = (temp < 0) ? 0 : temp;
+	cp[2] = lock->lock_blue ? cp1[2] : ((temp < 0) ? 0 : temp);
 	temp = cp1[3] - divide_round_i((fac * cp2[3]), 255);
-	cp[3] = (temp < 0) ? 0 : temp;
+	cp[3] = lock->lock_alpha ? cp1[3] : ((temp < 0) ? 0 : temp);
 
 	return col;
 }
 
 BLI_INLINE unsigned int mcol_mul(unsigned int col1, unsigned int col2, int fac,
-								 const bool use_alpha, const unsigned char alpha_value)
+								 const bool use_alpha, const unsigned char alpha_value, ColorLock *lock)
 {
 	unsigned char *cp1, *cp2, *cp;
 	int mfac;
@@ -690,16 +695,16 @@ BLI_INLINE unsigned int mcol_mul(unsigned int col1, unsigned int col2, int fac,
 	cp  = (unsigned char *)&col;
 
 	/* first mul, then blend the fac */
-	cp[0] = divide_round_i(mfac * cp1[0] * 255 + fac * cp2[0] * cp1[0], 255 * 255);
-	cp[1] = divide_round_i(mfac * cp1[1] * 255 + fac * cp2[1] * cp1[1], 255 * 255);
-	cp[2] = divide_round_i(mfac * cp1[2] * 255 + fac * cp2[2] * cp1[2], 255 * 255);
-	cp[3] = divide_round_i(mfac * cp1[3] * 255 + fac * cp2[3] * cp1[3], 255 * 255);
+	cp[0] = lock->lock_red   ? cp1[0] : (divide_round_i(mfac * cp1[0] * 255 + fac * cp2[0] * cp1[0], 255 * 255));
+	cp[1] = lock->lock_green ? cp1[1] : (divide_round_i(mfac * cp1[1] * 255 + fac * cp2[1] * cp1[1], 255 * 255));
+	cp[2] = lock->lock_blue  ? cp1[2] : (divide_round_i(mfac * cp1[2] * 255 + fac * cp2[2] * cp1[2], 255 * 255));
+	cp[3] = lock->lock_alpha ? cp1[3] : (divide_round_i(mfac * cp1[3] * 255 + fac * cp2[3] * cp1[3], 255 * 255));
 
 	return col;
 }
 
 BLI_INLINE unsigned int mcol_lighten(unsigned int col1, unsigned int col2, int fac,
-									 const bool use_alpha, const unsigned char alpha_value)
+									 const bool use_alpha, const unsigned char alpha_value, ColorLock *lock)
 {
 	unsigned char *cp1, *cp2, *cp;
 	int mfac;
@@ -728,16 +733,16 @@ BLI_INLINE unsigned int mcol_lighten(unsigned int col1, unsigned int col2, int f
 		return col1;
 	}
 
-	cp[0] = divide_round_i(mfac * cp1[0] + fac * cp2[0], 255);
-	cp[1] = divide_round_i(mfac * cp1[1] + fac * cp2[1], 255);
-	cp[2] = divide_round_i(mfac * cp1[2] + fac * cp2[2], 255);
-	cp[3] = divide_round_i(mfac * cp1[3] + fac * cp2[3], 255);
+	cp[0] = lock->lock_red   ? cp1[0] : (divide_round_i(mfac * cp1[0] + fac * cp2[0], 255));
+	cp[1] = lock->lock_green ? cp1[2] : (divide_round_i(mfac * cp1[1] + fac * cp2[1], 255));
+	cp[2] = lock->lock_blue  ? cp1[3] : (divide_round_i(mfac * cp1[2] + fac * cp2[2], 255));
+	cp[3] = lock->lock_alpha ? cp1[4] : (divide_round_i(mfac * cp1[3] + fac * cp2[3], 255));
 
 	return col;
 }
 
 BLI_INLINE unsigned int mcol_darken(unsigned int col1, unsigned int col2, int fac,
-									const bool use_alpha, const unsigned char alpha_value)
+									const bool use_alpha, const unsigned char alpha_value, ColorLock *lock)
 {
 	unsigned char *cp1, *cp2, *cp;
 	int mfac;
@@ -750,7 +755,12 @@ BLI_INLINE unsigned int mcol_darken(unsigned int col1, unsigned int col2, int fa
 	}
 	else if (fac >= 255) {
 		cp = (unsigned char *)&col2;
+		cp1 = (unsigned char *)&col1;
 		cp[3] = use_alpha ? alpha_value : cp[3];
+		cp[0] = lock->lock_red   ? cp1[0] : cp[0];
+		cp[1] = lock->lock_green ? cp1[1] : cp[1];
+		cp[2] = lock->lock_blue  ? cp1[2] : cp[2];
+		cp[3] = lock->lock_alpha ? cp1[3] : cp[3];
 		return col2;
 	}
 
@@ -766,15 +776,15 @@ BLI_INLINE unsigned int mcol_darken(unsigned int col1, unsigned int col2, int fa
 		return col1;
 	}
 
-	cp[0] = divide_round_i((mfac * cp1[0] + fac * cp2[0]), 255);
-	cp[1] = divide_round_i((mfac * cp1[1] + fac * cp2[1]), 255);
-	cp[2] = divide_round_i((mfac * cp1[2] + fac * cp2[2]), 255);
-	cp[3] = divide_round_i((mfac * cp1[3] + fac * cp2[3]), 255);
+	cp[0] = lock->lock_red   ? cp1[0] : (divide_round_i((mfac * cp1[0] + fac * cp2[0]), 255));
+	cp[1] = lock->lock_green ? cp1[1] : (divide_round_i((mfac * cp1[1] + fac * cp2[1]), 255));
+	cp[2] = lock->lock_blue	 ? cp1[2] : (divide_round_i((mfac * cp1[2] + fac * cp2[2]), 255));
+	cp[3] = lock->lock_alpha ? cp1[3] : (divide_round_i((mfac * cp1[3] + fac * cp2[3]), 255));
 	return col;
 }
 
 BLI_INLINE unsigned int mcol_colordodge(unsigned int col1, unsigned int col2, int fac,
-										const bool use_alpha, const unsigned char alpha_value)
+										const bool use_alpha, const unsigned char alpha_value, ColorLock *lock)
 {
 	unsigned char *cp1, *cp2, *cp;
 	int mfac,temp;
@@ -793,18 +803,18 @@ BLI_INLINE unsigned int mcol_colordodge(unsigned int col1, unsigned int col2, in
 	cp = (unsigned char *)&col;
 
 	temp = (cp2[0] == 255) ? 255 : min_ii((cp1[0] * 225) / (255 - cp2[0]), 255);
-	cp[0] = (mfac * cp1[0] + temp * fac) / 255;
+	cp[0] = lock->lock_red ? cp1[0] : ((mfac * cp1[0] + temp * fac) / 255);
 	temp = (cp2[1] == 255) ? 255 : min_ii((cp1[1] * 225) / (255 - cp2[1]), 255);
-	cp[1] = (mfac * cp1[1] + temp * fac) / 255;
+	cp[1] = lock->lock_green ? cp1[1] : ((mfac * cp1[1] + temp * fac) / 255);
 	temp = (cp2[2] == 255) ? 255 : min_ii((cp1[2] * 225 )/ (255 - cp2[2]), 255);
-	cp[2] = (mfac * cp1[2] + temp * fac) / 255;
+	cp[2] = lock->lock_blue ? cp1[2] : ((mfac * cp1[2] + temp * fac) / 255);
 	temp = (cp2[3] == 255) ? 255 : min_ii((cp1[3] * 225) / (255 - cp2[3]), 255);
-	cp[3] = (mfac * cp1[3] + temp * fac)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list