[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