Created attachment 121704 [details] the png used for the file layer SUMMARY STEPS TO REPRODUCE 0. Create a 1000*2000 file 1. Add a file layer with a png image (attached) 2. Add a transform mask to that layer 3. Move the layer OBSERVED RESULT The green box surrounding the layer when moving the layer is randomly placed and it's size does not correspond to the size of the layer EXPECTED RESULT The green box's size should match the layer's size and position SOFTWARE/OS VERSIONS Arch linux: latest macOS: Linux/KDE Plasma: (available in About System) KDE Plasma Version: KDE Frameworks Version: Qt Version: ADDITIONAL INFORMATION
Created attachment 121705 [details] the result
I forgot a step, sorry. The transform mask needs to be scaled down. But it seems that every transformation is giving a different green box rendering
This one is quite tricky, the long and short of it is that in KisLayer::layerExtentImpl(bool needExactBounds) for some reason the transforms of transform layers is not applied. Right now it is getting this data from node->exactBounds(); in KisToolMove::initHandles, node->exactBounds() calls exactbounds in the given node, which most of the case ends up within KisLayer. I'm going to check what I can do, but if I cannot figure it out someone smarter will need to take over.
Nope, too tricky. Things I tried: 1. Using the bounds of the paint device. This didn't make a difference. 2. using the bounds of the projection of the node. This lead to a weird offset, probably because the masks themselves also get 'moved'. 3. Tried to add an extend to transformation masks, but of course, that function only exists for colorize masks. I think this'll need someone who actually understands the transform masks.
Git commit e37f64c44483170ae33154c02c079e56ac78f9ca by Dmitry Kazakov. Committed on 19/11/2019 at 13:36. Pushed by dkazakov into branch 'master'. Fix outline in Move Tool, when a layer has a Transform Mask We need to take layer's masks' change rect into account. We cannot use normal changeRect() call, because it never shrinks the update rect and adds projection device bounds (obviously, because it is supposed to render stuff and not just shwo a decoration). That is why the patch introduces KisLayer::tightUserVisibleBounds(), which calculates tight bounding rect of the layer, taking all the masks into account. M +5 -0 libs/image/kis_abstract_projection_plane.cpp M +8 -1 libs/image/kis_abstract_projection_plane.h M +15 -0 libs/image/kis_layer.cc M +8 -0 libs/image/kis_layer.h M +5 -0 libs/image/kis_layer_projection_plane.cpp M +1 -0 libs/image/kis_layer_projection_plane.h M +2 -2 libs/image/kis_layer_utils.cpp M +1 -1 libs/image/kis_layer_utils.h M +5 -0 libs/image/kis_mask_projection_plane.cpp M +1 -0 libs/image/kis_mask_projection_plane.h M +10 -0 libs/image/layerstyles/kis_layer_style_filter_projection_plane.cpp M +1 -0 libs/image/layerstyles/kis_layer_style_filter_projection_plane.h M +12 -0 libs/image/layerstyles/kis_layer_style_projection_plane.cpp M +1 -0 libs/image/layerstyles/kis_layer_style_projection_plane.h M +1 -1 libs/ui/tool/strokes/move_stroke_strategy.cpp M +1 -1 plugins/tools/basictools/KisMoveBoundsCalculationJob.cpp https://invent.kde.org/kde/krita/commit/e37f64c44483170ae33154c02c079e56ac78f9ca