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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Latest Commit|https://invent.kde.org/grap |https://invent.kde.org/grap
                   |hics/krita/-/commit/0dd3c7b |hics/krita/-/commit/2c57b94
                   |f03ac7eddb59a84d0c67849c357 |8e4e8810934147ceb0c90ed8a5d
                   |1ae76b                      |5d5645

--- Comment #4 from Dmitry Kazakov <dimul...@gmail.com> ---
Git commit 2c57b948e4e8810934147ceb0c90ed8a5d5d5645 by Dmitry Kazakov.
Committed on 12/09/2024 at 14:25.
Pushed by dkazakov into branch 'krita/5.2'.

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/2c57b948e4e8810934147ceb0c90ed8a5d5d5645

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

Reply via email to