Bug 363311

Summary: Ctrl+Z / Undo doesn't work on big brush strokes
Product: [Applications] krita Reporter: David REVOY <info>
Component: Instant PreviewAssignee: Krita Bugs <krita-bugs-null>
Status: RESOLVED FIXED    
Severity: major CC: halla
Priority: NOR    
Version: git master (please specify the git hash!)   
Target Milestone: ---   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In:
Attachments: [ ^ short 50sec video of the bug ]

Description David REVOY 2016-05-20 07:42:57 UTC
Created attachment 99088 [details]
[ ^ short 50sec video of the bug ]

Hi, in the video in attachement I do the demonstration how big brush strokes are not affected by 'undo' or brush history. The video show how the first three big strokes can't be 'undone' while the fourth ( a little one ) can.
Comment 1 Halla Rempt 2016-05-21 14:03:07 UTC
As discussed yesterday, undo will work, but only after the stroke is calculated. I still think that undo should abort the strokes and lod calculations and undo, but that might be really hard to implement.
Comment 2 Dmitry Kazakov 2016-10-21 11:45:55 UTC
Git commit 1426e045e9cdd653b0ca3c6cbe29703ee57b2c81 by Dmitry Kazakov.
Committed on 21/10/2016 at 11:42.
Pushed by dkazakov into branch 'kazakov/undo-with-instant-preview-T2544'.

Implemented Undo for Instant Preview strokes

Now the user can cancel a stroke without waiting until the main
full-resolution stroke finishes its execution. Just press Ctrl+Z
and the your preview will be (partially) reverted and the corresponding
background stroke will be cancelled.

Technically it is implemented by introducing the second undo store
inside the strokes queue and syncing it with the running strokes
with a set of complicated rules. If the stroke can be cancelled,
it is cancelled, if the stroke has already completed its execution,
it is just undone.
Ref T2544

M  +9    -1    libs/image/kis_image.cc
M  +11   -0    libs/image/kis_image.h
M  +4    -0    libs/image/kis_image_interfaces.cpp
M  +8    -0    libs/image/kis_image_interfaces.h
M  +1    -2    libs/image/kis_processing_applicator.cpp
M  +6    -0    libs/image/kis_stroke.cpp
M  +2    -0    libs/image/kis_stroke.h
M  +10   -10   libs/image/kis_stroke_strategy_undo_command_based.cpp
M  +4    -5    libs/image/kis_stroke_strategy_undo_command_based.h
M  +183  -4    libs/image/kis_strokes_queue.cpp
M  +11   -0    libs/image/kis_strokes_queue.h
C  +9    -11   libs/image/kis_strokes_queue_undo_result.h [from: libs/image/kis_image_interfaces.cpp - 075% similarity]
M  +5    -0    libs/image/kis_undo_stores.cpp
M  +2    -0    libs/image/kis_undo_stores.h
M  +10   -0    libs/image/kis_update_scheduler.cpp
M  +7    -0    libs/image/kis_update_scheduler.h
M  +1    -1    libs/image/tests/kis_stroke_strategy_undo_command_based_test.cpp
M  +189  -14   libs/image/tests/kis_strokes_queue_test.cpp
M  +5    -0    libs/image/tests/kis_strokes_queue_test.h
M  +11   -3    libs/image/tests/scheduler_utils.h
M  +5    -0    libs/ui/KisDocument.cpp
M  +1    -1    libs/ui/actions/kis_selection_action_factories.cpp
M  +0    -3    libs/ui/kis_filter_manager.cc
M  +0    -1    libs/ui/tests/fill_processing_visitor_test.cpp
M  +0    -1    libs/ui/tool/kis_figure_painting_tool_helper.cpp
M  +2    -4    libs/ui/tool/kis_resources_snapshot.cpp
M  +1    -1    libs/ui/tool/kis_resources_snapshot.h
M  +1    -1    libs/ui/tool/kis_tool.cc
M  +1    -2    libs/ui/tool/kis_tool_freehand.cc
M  +0    -4    libs/ui/tool/kis_tool_freehand_helper.cpp
M  +0    -2    libs/ui/tool/kis_tool_freehand_helper.h
M  +0    -1    libs/ui/tool/strokes/freehand_stroke.cpp
M  +0    -1    libs/ui/tool/strokes/kis_filter_stroke_strategy.cpp
M  +0    -19   libs/ui/tool/strokes/kis_painter_based_stroke_strategy.cpp
M  +0    -1    libs/ui/tool/strokes/kis_painter_based_stroke_strategy.h
M  +0    -1    libs/ui/widgets/kis_scratch_pad.cpp
M  +0    -1    plugins/paintops/defaultpaintops/brush/tests/kis_brushop_test.cpp
M  +1    -1    plugins/tools/basictools/kis_tool_fill.cc
M  +1    -1    plugins/tools/basictools/kis_tool_gradient.cc
M  +1    -2    plugins/tools/basictools/kis_tool_line.cc
M  +2    -3    plugins/tools/basictools/kis_tool_line_helper.cpp
M  +1    -2    plugins/tools/basictools/kis_tool_line_helper.h
M  +3    -4    plugins/tools/basictools/kis_tool_move.cc
M  +16   -32   plugins/tools/basictools/strokes/move_selection_stroke_strategy.cpp
M  +2    -4    plugins/tools/basictools/strokes/move_selection_stroke_strategy.h
M  +12   -22   plugins/tools/basictools/strokes/move_stroke_strategy.cpp
M  +2    -3    plugins/tools/basictools/strokes/move_stroke_strategy.h
M  +3    -4    plugins/tools/basictools/tests/move_selection_stroke_test.cpp
M  +1    -1    plugins/tools/basictools/tests/move_stroke_test.cpp
M  +1    -1    plugins/tools/tool_crop/kis_tool_crop.cc
M  +3    -3    plugins/tools/tool_transform2/kis_tool_transform.cc
M  +2    -2    plugins/tools/tool_transform2/strokes/transform_stroke_strategy.cpp
M  +1    -1    plugins/tools/tool_transform2/strokes/transform_stroke_strategy.h
M  +0    -1    sdk/tests/stroke_testing_utils.cpp

http://commits.kde.org/krita/1426e045e9cdd653b0ca3c6cbe29703ee57b2c81