Bug 474138

Summary: Onion skins are not updated properly when auto-keyframe mode is on
Product: [Applications] krita Reporter: Dmitry Kazakov <dimula73>
Component: AnimationAssignee: Krita Bugs <krita-bugs-null>
Status: RESOLVED FIXED    
Severity: normal Keywords: regression, release_blocker
Priority: NOR    
Version: git master (please specify the git hash!)   
Target Milestone: ---   
Platform: Other   
OS: Other   
Latest Commit: Version Fixed In:

Description Dmitry Kazakov 2023-09-04 13:29:49 UTC
STEPS TO REPRODUCE
0. Enable Onion Skins for the layer
1. Enable auto-keyframe feature (any mode)
2. Draw a set of sequential frames. One smaller than the previous.
3. The updates become incorrect with time and the "older" skins will not be updated anymore.

Screenshot: https://pasteboard.co/YuMlWojXgKuS.png

The bug might be related to https://bugs.kde.org/show_bug.cgi?id=473288, but I'm not very sure, because the reporter in 473288 experience persistent corruption of the layer data, not temporary like in this bug.
Comment 1 Bug Janitor Service 2023-09-06 16:16:51 UTC
A possibly relevant merge request was started @ https://invent.kde.org/graphics/krita/-/merge_requests/1932
Comment 2 Dmitry Kazakov 2023-09-07 10:48:42 UTC
Git commit 0b2804491a75f0414f1e3aa386c6fa92daf2f45c by Dmitry Kazakov.
Committed on 07/09/2023 at 12:46.
Pushed by dkazakov into branch 'krita/5.2'.

Fix updates on autokeyframing with onion skins enabled

When we create a new frame, we may change a set of onion skins
that should be displayed on screen. Therefore, we should issue
a set of specific updates for such a case.

The patch adds a set of more granular signals to KisKeyframeChannel,
so that the addition and removal of the keyframes can be tracked
properly.

The patch also fixes the issue with sigRemovingKeyframe() being
emitted **after** the frame was actually removed from the raster
channel.

M  +21   -15   libs/image/kis_keyframe_channel.cpp
M  +21   -8    libs/image/kis_keyframe_channel.h
M  +22   -4    libs/image/kis_node.cpp
M  +6    -1    libs/image/kis_node.h
M  +101  -2    libs/image/kis_onion_skin_compositor.cpp
M  +3    -0    libs/image/kis_onion_skin_compositor.h
M  +67   -5    libs/image/kis_paint_layer.cc
M  +4    -0    libs/image/kis_paint_layer.h
M  +3    -1    libs/image/kis_raster_keyframe_channel.cpp
M  +0    -18   libs/image/kis_scalar_keyframe_channel.cpp
M  +0    -3    libs/image/kis_scalar_keyframe_channel.h
M  +1    -1    libs/image/tests/kis_keyframing_test.cpp
M  +1    -1    plugins/dockers/animation/timeline_node_list_keeper.cpp
M  +1    -1    plugins/tools/tool_transform2/kis_animated_transform_parameters.cpp

https://invent.kde.org/graphics/krita/-/commit/0b2804491a75f0414f1e3aa386c6fa92daf2f45c
Comment 3 Dmitry Kazakov 2023-09-07 11:18:45 UTC
Git commit 5e4b1ab10d1afebff61487e1916f93ee818eec64 by Dmitry Kazakov.
Committed on 07/09/2023 at 12:53.
Pushed by dkazakov into branch 'master'.

Fix updates on autokeyframing with onion skins enabled

When we create a new frame, we may change a set of onion skins
that should be displayed on screen. Therefore, we should issue
a set of specific updates for such a case.

The patch adds a set of more granular signals to KisKeyframeChannel,
so that the addition and removal of the keyframes can be tracked
properly.

The patch also fixes the issue with sigRemovingKeyframe() being
emitted **after** the frame was actually removed from the raster
channel.

M  +21   -15   libs/image/kis_keyframe_channel.cpp
M  +21   -8    libs/image/kis_keyframe_channel.h
M  +22   -4    libs/image/kis_node.cpp
M  +6    -1    libs/image/kis_node.h
M  +101  -2    libs/image/kis_onion_skin_compositor.cpp
M  +3    -0    libs/image/kis_onion_skin_compositor.h
M  +67   -5    libs/image/kis_paint_layer.cc
M  +4    -0    libs/image/kis_paint_layer.h
M  +3    -1    libs/image/kis_raster_keyframe_channel.cpp
M  +0    -18   libs/image/kis_scalar_keyframe_channel.cpp
M  +0    -3    libs/image/kis_scalar_keyframe_channel.h
M  +1    -1    libs/image/tests/kis_keyframing_test.cpp
M  +1    -1    plugins/dockers/animation/timeline_node_list_keeper.cpp
M  +1    -1    plugins/tools/tool_transform2/kis_animated_transform_parameters.cpp

https://invent.kde.org/graphics/krita/-/commit/5e4b1ab10d1afebff61487e1916f93ee818eec64