https://bugs.kde.org/show_bug.cgi?id=484353

Dmitry Kazakov <dimul...@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|CONFIRMED                   |RESOLVED
         Resolution|---                         |FIXED
      Latest Commit|                            |https://invent.kde.org/grap
                   |                            |hics/krita/-/commit/0dd3c7b
                   |                            |f03ac7eddb59a84d0c67849c357
                   |                            |1ae76b

--- Comment #3 from Dmitry Kazakov <dimul...@gmail.com> ---
Git commit 0dd3c7bf03ac7eddb59a84d0c67849c3571ae76b by Dmitry Kazakov.
Committed on 12/09/2024 at 13:07.
Pushed by dkazakov into branch 'master'.

Fix clone layers resetting the animation cache

KisLayer::updateClones() used to emit an update signal that used
to reset the animation cache. The resetting happened in a three-fold
way:

1) In LoD mode, KisSuspendProjectionUpdatesStrokeStrategy compressed the
   clone's update and issued it after the the actual stroke is finished.
   That caused the clone update to happen outside the frames lock and
   reset the cache.

2) When switching time KisRegenerateFrameStrokeStrategy used to issue
   an update under a lock, but the request leaked in LoD mode.

3) KisRecalculateTransformMaskJob::run() used to request projection
   update with the frames locked. But this lock didn't cover the updates
   issued for clones.

The actual solution of this patch is to forward the "don't invalidate frames"
flag down to the merge walkers, so that they could forward this flag to
the clones and make sure that clones don't reset frames.

TODO: we still need to properly split the walkers to avoid that nasty
      virtual inheritance and double-setting of the flags in the
      constructor.

A  +35   -0    libs/image/KisProjectionUpdateFlags.h     [License: GPL(v2.0+)]
M  +2    -2    libs/image/commands/kis_image_layer_move_command.cpp
M  +17   -4    libs/image/kis_base_rects_walker.h
M  +6    -2    libs/image/kis_clone_layer.cpp
M  +1    -1    libs/image/kis_clone_layer.h
M  +1    -1    libs/image/kis_full_refresh_walker.h
M  +24   -69   libs/image/kis_image.cc
M  +9    -27   libs/image/kis_image.h
M  +19   -0    libs/image/kis_image_interfaces.cpp
M  +5    -12   libs/image/kis_image_interfaces.h
M  +4    -4    libs/image/kis_layer.cc
M  +1    -1    libs/image/kis_layer.h
M  +4    -3    libs/image/kis_merge_walker.cc
M  +6    -2    libs/image/kis_merge_walker.h
M  +2    -2    libs/image/kis_node.cpp
M  +1    -1    libs/image/kis_node_graph_listener.cpp
M  +2    -1    libs/image/kis_node_graph_listener.h
M  +3    -13   libs/image/kis_projection_updates_filter.cpp
M  +4    -6    libs/image/kis_projection_updates_filter.h
M  +5    -2    libs/image/kis_recalculate_transform_mask_job.cpp
M  +3    -1    libs/image/kis_refresh_subtree_walker.h
M  +1    -1    libs/image/kis_regenerate_frame_stroke_strategy.cpp
M  +55   -31   libs/image/kis_simple_update_queue.cpp
M  +11   -8    libs/image/kis_simple_update_queue.h
M  +37   -110  libs/image/kis_suspend_projection_updates_stroke_strategy.cpp
M  +0    -10   libs/image/kis_suspend_projection_updates_stroke_strategy.h
M  +8    -22   libs/image/kis_update_scheduler.cpp
M  +10   -5    libs/image/kis_update_scheduler.h
M  +14   -6    libs/image/tests/kis_simple_update_queue_test.cpp
M  +2    -2    libs/ui/kis_node_juggler_compressed.cpp
M  +2    -2    libs/ui/widgets/kis_scratch_pad.cpp

https://invent.kde.org/graphics/krita/-/commit/0dd3c7bf03ac7eddb59a84d0c67849c3571ae76b

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to