[Bf-blender-cvs] [0ebd7d41aea] temp-T97479-3d-texturing-undo: 3D Texturing: Undo.

Jeroen Bakker noreply at git.blender.org
Mon May 2 16:15:33 CEST 2022


Commit: 0ebd7d41aea0ef810d834e1da905945274b80621
Author: Jeroen Bakker
Date:   Mon May 2 16:14:34 2022 +0200
Branches: temp-T97479-3d-texturing-undo
https://developer.blender.org/rB0ebd7d41aea0ef810d834e1da905945274b80621

3D Texturing: Undo.

Differential Revision: https://developer.blender.org/D14821

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

M	source/blender/editors/sculpt_paint/sculpt.c

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

diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 32b7047c2b0..53a45f5a8d9 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -5276,6 +5276,7 @@ static bool sculpt_stroke_test_start(bContext *C, struct wmOperator *op, const f
     SculptSession *ss = ob->sculpt;
     Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
     Brush *brush = BKE_paint_brush(&sd->paint);
+    ToolSettings *tool_settings = CTX_data_tool_settings(C);
 
     /* NOTE: This should be removed when paint mode is available. Paint mode can force based on the
      * canvas it is painting on. (ref. use_sculpt_texture_paint). */
@@ -5293,7 +5294,14 @@ static bool sculpt_stroke_test_start(bContext *C, struct wmOperator *op, const f
     SculptCursorGeometryInfo sgi;
     SCULPT_cursor_geometry_info_update(C, &sgi, mouse, false);
 
-    SCULPT_undo_push_begin(ob, sculpt_tool_name(sd));
+    /* This is incorrect as this crashes other areas. We should integrate the image undo into the
+     * sculpt undo. (sub system?). */
+    if (SCULPT_use_image_paint_brush(&tool_settings->paint_mode, ob)) {
+      ED_image_undo_push_begin(op->type->name, PAINT_MODE_TEXTURE_3D);
+    }
+    else {
+      SCULPT_undo_push_begin(ob, sculpt_tool_name(sd));
+    }
 
     return true;
   }
@@ -5420,22 +5428,28 @@ static void sculpt_stroke_done(const bContext *C, struct PaintStroke *UNUSED(str
   SCULPT_cache_free(ss->cache);
   ss->cache = NULL;
 
-  SCULPT_undo_push_end(ob);
-
-  if (brush->sculpt_tool == SCULPT_TOOL_MASK) {
-    SCULPT_flush_update_done(C, ob, SCULPT_UPDATE_MASK);
-  }
-  else if (brush->sculpt_tool == SCULPT_TOOL_PAINT) {
-    if (SCULPT_use_image_paint_brush(&tool_settings->paint_mode, ob)) {
-      SCULPT_flush_update_done(C, ob, SCULPT_UPDATE_IMAGE);
-    }
+  if (SCULPT_use_image_paint_brush(&tool_settings->paint_mode, ob)) {
+    ED_image_undo_push_end();
   }
   else {
-    SCULPT_flush_update_done(C, ob, SCULPT_UPDATE_COORDS);
+    SCULPT_undo_push_end(ob);
   }
+}
 
-  WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
-  sculpt_brush_exit_tex(sd);
+if (brush->sculpt_tool == SCULPT_TOOL_MASK) {
+  SCULPT_flush_update_done(C, ob, SCULPT_UPDATE_MASK);
+}
+else if (brush->sculpt_tool == SCULPT_TOOL_PAINT) {
+  if (SCULPT_use_image_paint_brush(&tool_settings->paint_mode, ob)) {
+    SCULPT_flush_update_done(C, ob, SCULPT_UPDATE_IMAGE);
+  }
+}
+else {
+  SCULPT_flush_update_done(C, ob, SCULPT_UPDATE_COORDS);
+}
+
+WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
+sculpt_brush_exit_tex(sd);
 }
 
 static int sculpt_brush_stroke_invoke(bContext *C, wmOperator *op, const wmEvent *event)



More information about the Bf-blender-cvs mailing list