Bug 363311 - Ctrl+Z / Undo doesn't work on big brush strokes
Summary: Ctrl+Z / Undo doesn't work on big brush strokes
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: Instant Preview (show other bugs)
Version: git master (please specify the git hash!)
Platform: Compiled Sources Linux
: NOR major
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-05-20 07:42 UTC by David REVOY
Modified: 2016-10-21 11:45 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
[ ^ short 50sec video of the bug ] (597.00 KB, video/x-matroska)
2016-05-20 07:42 UTC, David REVOY
Details

Note You need to log in before you can comment on or make changes to this 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