[Bf-blender-cvs] [59b35c39279] temp-workspace-object-mode-removal: Check multiple modes with brush update
Campbell Barton
noreply at git.blender.org
Wed Feb 7 05:26:43 CET 2018
Commit: 59b35c39279d8121976071baf98b48213243254b
Author: Campbell Barton
Date: Wed Feb 7 15:26:19 2018 +1100
Branches: temp-workspace-object-mode-removal
https://developer.blender.org/rB59b35c39279d8121976071baf98b48213243254b
Check multiple modes with brush update
===================================================================
M source/blender/blenkernel/intern/paint.c
===================================================================
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 507c43bf251..5a267f97d03 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -75,31 +75,67 @@ const char PAINT_CURSOR_TEXTURE_PAINT[3] = {255, 255, 255};
static eOverlayControlFlags overlay_flags = 0;
+/* Keep in sync with 'BKE_paint_get_active' */
+#define OB_MODE_HAS_PAINT_STRUCT(SEP) \
+ OB_MODE_SCULPT SEP \
+ OB_MODE_VERTEX_PAINT SEP \
+ OB_MODE_WEIGHT_PAINT SEP \
+ OB_MODE_TEXTURE_PAINT SEP \
+ OB_MODE_EDIT
+
+#define COMMA ,
+static const eObjectMode ob_mode_has_paint_struct = OB_MODE_HAS_PAINT_STRUCT(|);
+static const eObjectMode ob_mode_has_paint_struct_array[] = {OB_MODE_HAS_PAINT_STRUCT(COMMA)};
+#undef COMMA
+
+#define FOREACH_OB_MODE_PAINT_ITER_BEGIN(scene, view_layer, object_mode, p) \
+{ \
+ eObjectMode object_mode_test = object_mode & ob_mode_has_paint_struct; \
+ for (uint _i = 0; _i < ARRAY_SIZE(ob_mode_has_paint_struct_array) && object_mode_test; _i++) { \
+ eObjectMode object_mode_single = ob_mode_has_paint_struct_array[_i]; \
+ if (object_mode_test & object_mode_single) { \
+ object_mode_test &= ~object_mode_single; \
+ Paint *p = BKE_paint_get_active(scene, view_layer, object_mode_single); \
+ {
+
+#define FOREACH_OB_MODE_PAINT_ITER_END \
+ } \
+ } \
+ } \
+} ((void)0)
+
void BKE_paint_invalidate_overlay_tex(
Scene *scene, ViewLayer *view_layer, const Tex *tex, eObjectMode object_mode)
{
- /* TODO/OBMODE: enumerate multiple modes */
- Paint *p = BKE_paint_get_active(scene, view_layer, object_mode);
- Brush *br = p->brush;
-
- if (!br)
- return;
-
- if (br->mtex.tex == tex)
- overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_PRIMARY;
- if (br->mask_mtex.tex == tex)
- overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_SECONDARY;
+ FOREACH_OB_MODE_PAINT_ITER_BEGIN(scene, view_layer, object_mode, p)
+ {
+ Brush *br = p->brush;
+ if (br) {
+ if (br->mtex.tex == tex) {
+ overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_PRIMARY;
+ }
+ if (br->mask_mtex.tex == tex) {
+ overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_SECONDARY;
+ }
+ }
+ }
+ FOREACH_OB_MODE_PAINT_ITER_END;
}
void BKE_paint_invalidate_cursor_overlay(
Scene *scene, ViewLayer *view_layer, CurveMapping *curve, eObjectMode object_mode)
{
- /* TODO/OBMODE: enumerate multiple modes */
- Paint *p = BKE_paint_get_active(scene, view_layer, object_mode);
- Brush *br = p->brush;
-
- if (br && br->curve == curve)
- overlay_flags |= PAINT_INVALID_OVERLAY_CURVE;
+ FOREACH_OB_MODE_PAINT_ITER_BEGIN(scene, view_layer, object_mode, p)
+ {
+ Brush *br = p->brush;
+ if (br) {
+ if (br->curve == curve) {
+ overlay_flags |= PAINT_INVALID_OVERLAY_CURVE;
+ break;
+ }
+ }
+ }
+ FOREACH_OB_MODE_PAINT_ITER_END;
}
void BKE_paint_invalidate_overlay_all(void)
More information about the Bf-blender-cvs
mailing list