From 8aca5ab3b3770ade693bef38186725eb4d4b1936 Mon Sep 17 00:00:00 2001 From: Andreas Krohn Date: Fri, 26 Aug 2022 00:03:22 +0200 Subject: PixelPaint: Cropping to content with moved layers was broken When cropping to content with a layer not positioned at 0,0 the moved layers content disappeared and the layers position was not updated according to the crop offset. There's probably an easier/more efficient way, but for my testcase this improves the behavior. --- Userland/Applications/PixelPaint/Image.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'Userland') diff --git a/Userland/Applications/PixelPaint/Image.cpp b/Userland/Applications/PixelPaint/Image.cpp index ed1d2dce5b..b0d4139bb0 100644 --- a/Userland/Applications/PixelPaint/Image.cpp +++ b/Userland/Applications/PixelPaint/Image.cpp @@ -528,7 +528,14 @@ void Image::rotate(Gfx::RotationDirection direction) void Image::crop(Gfx::IntRect const& cropped_rect) { for (auto& layer : m_layers) { - layer.crop(cropped_rect); + auto layer_location = layer.location(); + auto layer_local_crop_rect = layer.relative_rect().intersected(cropped_rect).translated(-layer_location.x(), -layer_location.y()); + layer.crop(layer_local_crop_rect); + + auto new_layer_x = max(0, layer_location.x() - cropped_rect.x()); + auto new_layer_y = max(0, layer_location.y() - cropped_rect.y()); + + layer.set_location({ new_layer_x, new_layer_y }); } m_size = { cropped_rect.width(), cropped_rect.height() }; -- cgit v1.2.3