mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 06:27:45 +00:00
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.
This commit is contained in:
parent
6e006be9e6
commit
8aca5ab3b3
1 changed files with 8 additions and 1 deletions
|
@ -528,7 +528,14 @@ void Image::rotate(Gfx::RotationDirection direction)
|
||||||
void Image::crop(Gfx::IntRect const& cropped_rect)
|
void Image::crop(Gfx::IntRect const& cropped_rect)
|
||||||
{
|
{
|
||||||
for (auto& layer : m_layers) {
|
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() };
|
m_size = { cropped_rect.width(), cropped_rect.height() };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue