[Bf-blender-cvs] [ab6e67767e7] master: Comments: notes on sculpt/image undo looping logic

Campbell Barton noreply at git.blender.org
Mon Mar 15 13:31:52 CET 2021


Commit: ab6e67767e730309e51fca7a7f086cbcbadb41a9
Author: Campbell Barton
Date:   Mon Mar 15 23:29:33 2021 +1100
Branches: master
https://developer.blender.org/rBab6e67767e730309e51fca7a7f086cbcbadb41a9

Comments: notes on sculpt/image undo looping logic

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

M	source/blender/editors/sculpt_paint/sculpt_undo.c
M	source/blender/editors/space_image/image_undo.c

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

diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c
index 4d063099216..b6205db6f45 100644
--- a/source/blender/editors/sculpt_paint/sculpt_undo.c
+++ b/source/blender/editors/sculpt_paint/sculpt_undo.c
@@ -1490,6 +1490,8 @@ static void sculpt_undosys_step_decode_undo(struct bContext *C,
                                             SculptUndoStep *us,
                                             const bool is_final)
 {
+  /* Walk forward over any applied steps of same type,
+   * then walk back in the next loop, un-applying them. */
   SculptUndoStep *us_iter = us;
   while (us_iter->step.next && (us_iter->step.next->type == us_iter->step.type)) {
     if (us_iter->step.next->is_applied == false) {
@@ -1499,6 +1501,7 @@ static void sculpt_undosys_step_decode_undo(struct bContext *C,
   }
 
   while ((us_iter != us) || (!is_final && us_iter == us)) {
+    BLI_assert(us_iter->step.type == us->step.type); /* Previous loop ensures this. */
     sculpt_undosys_step_decode_undo_impl(C, depsgraph, us_iter);
     if (us_iter == us) {
       break;
@@ -1530,6 +1533,7 @@ static void sculpt_undosys_step_decode_redo(struct bContext *C,
 static void sculpt_undosys_step_decode(
     struct bContext *C, struct Main *bmain, UndoStep *us_p, const eUndoStepDir dir, bool is_final)
 {
+  /* NOTE: behavior for undo/redo closely matches image undo. */
   BLI_assert(dir != STEP_INVALID);
 
   Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
diff --git a/source/blender/editors/space_image/image_undo.c b/source/blender/editors/space_image/image_undo.c
index 391c68f4231..feee268c6d3 100644
--- a/source/blender/editors/space_image/image_undo.c
+++ b/source/blender/editors/space_image/image_undo.c
@@ -911,6 +911,8 @@ static void image_undosys_step_decode_redo_impl(ImageUndoStep *us)
 
 static void image_undosys_step_decode_undo(ImageUndoStep *us, bool is_final)
 {
+  /* Walk forward over any applied steps of same type,
+   * then walk back in the next loop, un-applying them. */
   ImageUndoStep *us_iter = us;
   while (us_iter->step.next && (us_iter->step.next->type == us_iter->step.type)) {
     if (us_iter->step.next->is_applied == false) {
@@ -919,7 +921,7 @@ static void image_undosys_step_decode_undo(ImageUndoStep *us, bool is_final)
     us_iter = (ImageUndoStep *)us_iter->step.next;
   }
   while (us_iter != us || (!is_final && us_iter == us)) {
-
+    BLI_assert(us_iter->step.type == us->step.type); /* Previous loop ensures this. */
     image_undosys_step_decode_undo_impl(us_iter, is_final);
     if (us_iter == us) {
       break;
@@ -949,6 +951,7 @@ static void image_undosys_step_decode_redo(ImageUndoStep *us)
 static void image_undosys_step_decode(
     struct bContext *C, struct Main *bmain, UndoStep *us_p, const eUndoStepDir dir, bool is_final)
 {
+  /* NOTE: behavior for undo/redo closely matches sculpt undo. */
   BLI_assert(dir != STEP_INVALID);
 
   ImageUndoStep *us = (ImageUndoStep *)us_p;



More information about the Bf-blender-cvs mailing list