Bug 437886 - When transforming a group that combines vector layers and paint layers, the vector layers are no longer visible
Summary: When transforming a group that combines vector layers and paint layers, the v...
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: Layers/Vector (show other bugs)
Version: 4.4.3
Platform: Microsoft Windows Microsoft Windows
: NOR normal
Target Milestone: ---
Assignee: Dmitry Kazakov
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-05-31 01:57 UTC by aivanjou84
Modified: 2021-07-16 07:35 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description aivanjou84 2021-05-31 01:57:12 UTC
SUMMARY
 until you switch off its visualization and switch on again.

STEPS TO REPRODUCE
1. Create a vector layer and create an object on it
2. Create a coat of paint and paint something
3. Group them
4. Transform the group (increasing or rotating)

OBSERVED RESULT
vector layer is no longer visible until its display (the eye icon) is turned off and back on.
If any paint layer inherits the alpha it is also no longer visible.

EXPECTED RESULT
both the vector layer and the paint layer must be visible when the transformation is performed

SOFTWARE/OS VERSIONS
Windows: 10 Pro
macOS: 
Linux/KDE Plasma: 
(available in About System)
KDE Plasma Version: 
KDE Frameworks Version: 
Qt Version: 

ADDITIONAL INFORMATION
Comment 1 aivanjou84 2021-05-31 02:12:51 UTC
SUMMARY
When transforming a group that combines vector layers and paint layers, the vector layers are no longer visible until you switch off its visualization and switch on again.
Comment 2 aivanjou84 2021-05-31 02:20:09 UTC
STEPS TO REPRODUCE
1. Create a vector layer and create an object on it
2. Create a paint layer and paint something on it
3. Group them
4. Transform the group (resizing or rotating)

(some translator mistakes in first comment. I'm sorry)
Comment 3 vanyossi 2021-05-31 05:09:32 UTC
This is happening as described in the bug report on 4.4.3, but on master is a little different, is seems the setDirty area is set to the last bounding box of the contents and if the vector shape position is outside the original position it dissapears... but only in the overview Docker. 

In the main canvas it sometimes draws the vector partially with an empty space vertically or horizontally, specially after rotation + scaling.

This is all with Free transform, the other transformation ignore the vector layers (as patched afair). 

This issues does not happen if a transformation mask is used.
Comment 4 Dmitry Kazakov 2021-06-04 08:35:51 UTC
Git commit d54daf5d509a44c985dfa1dad2d38d5e18451145 by Dmitry Kazakov.
Committed on 04/06/2021 at 08:35.
Pushed by dkazakov into branch 'krita/4.3'.

Fix failing update when transforming a shape layer with a Transform Tool

That was actually a race condition, so it was rather difficult
to reproduce.

M  +14   -7    plugins/tools/tool_transform2/strokes/transform_stroke_strategy.cpp

https://invent.kde.org/graphics/krita/commit/d54daf5d509a44c985dfa1dad2d38d5e18451145
Comment 5 Dmitry Kazakov 2021-06-04 08:47:01 UTC
Git commit d67d92925cb67a43e091733329a8053e6585cae7 by Dmitry Kazakov.
Committed on 04/06/2021 at 08:43.
Pushed by dkazakov into branch 'master'.

Fix failing update when transforming a shape layer with a Transform Tool

That was actually a race condition, so it was rather difficult
to reproduce.

M  +14   -7    plugins/tools/tool_transform2/strokes/transform_stroke_strategy.cpp

https://invent.kde.org/graphics/krita/commit/d67d92925cb67a43e091733329a8053e6585cae7
Comment 6 Dmitry Kazakov 2021-06-04 11:44:31 UTC
Git commit 813ba5eb2eded3987e1292219dfa57dc267792fa by Dmitry Kazakov.
Committed on 04/06/2021 at 11:44.
Pushed by dkazakov into branch 'master'.

Fix update artifacts when transforming vector layers

There were two problems caused by asynchronous nature of vector
layer transformations:

1) Shape layer transformation happens in the GUI thread asynchronously,
   therefore just ask for layer's extent() right after the transformation
   is not enough, this data is not yet ready.

2) Even when requesting shapeLayer->extent() for fetching oldDirtyRect,
   there is a race condition possible. If resetCache() has been called
   quite recently, then the extent will be null. Therefore the patch adds
   a special KisExternalLayer::theoreticalBoundingRect() that is supposed
   to overcome this limitation.

M  +5    -0    libs/image/kis_external_layer_iface.cc
M  +7    -1    libs/image/kis_external_layer_iface.h
M  +5    -0    libs/ui/flake/kis_shape_layer.cc
M  +2    -0    libs/ui/flake/kis_shape_layer.h
M  +15   -2    plugins/tools/tool_transform2/strokes/inplace_transform_stroke_strategy.cpp

https://invent.kde.org/graphics/krita/commit/813ba5eb2eded3987e1292219dfa57dc267792fa
Comment 7 Dmitry Kazakov 2021-07-16 07:35:09 UTC
Git commit 1ad3c805898a6d9ed00813310254d156ba17b852 by Dmitry Kazakov.
Committed on 16/07/2021 at 07:34.
Pushed by dkazakov into branch 'master'.

Properly fix updates of shape layers on applying legacy transformation

Two issues:

1) We need to explicitly ask shape layers to regenerate their projection
   and wait for that using a barrier.

2) It should happen inside the blocked-setdirty-calls block to make
   sure no intermediate results are visible to the user.

M  +15   -7    plugins/tools/tool_transform2/strokes/transform_stroke_strategy.cpp

https://invent.kde.org/graphics/krita/commit/1ad3c805898a6d9ed00813310254d156ba17b852
Comment 8 Dmitry Kazakov 2021-07-16 07:35:17 UTC
Git commit 81d9f9c9e7ecb5cd2b677e5e35c4452f681f3f1c by Dmitry Kazakov.
Committed on 16/07/2021 at 07:34.
Pushed by dkazakov into branch 'master'.

Revert "Fix failing update when transforming a shape layer with a Transform Tool"

This patch creates flickering on applying a transform to
a shape layer.

This reverts commit d67d92925cb67a43e091733329a8053e6585cae7.

M  +7    -14   plugins/tools/tool_transform2/strokes/transform_stroke_strategy.cpp

https://invent.kde.org/graphics/krita/commit/81d9f9c9e7ecb5cd2b677e5e35c4452f681f3f1c