From 92a0a7e3fa4f23aee67ec341f69334287b4d422d Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Mon, 13 Mar 2023 18:31:15 +0000 Subject: [PATCH] PixelPaint: Don't resize layers when resizing the canvas Calling Image::resize() with ScalingMode::None now resizes the canvas without changing the size or position of any layers. --- Userland/Applications/PixelPaint/Image.cpp | 38 ++++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/Userland/Applications/PixelPaint/Image.cpp b/Userland/Applications/PixelPaint/Image.cpp index 77a4a692f0..2d476d685f 100644 --- a/Userland/Applications/PixelPaint/Image.cpp +++ b/Userland/Applications/PixelPaint/Image.cpp @@ -663,31 +663,33 @@ ErrorOr Image::resize(Gfx::IntSize new_size, Gfx::Painter::ScalingMode sca scale_y = new_size.height() / static_cast(size().height()); } - Vector> resized_layers; - TRY(resized_layers.try_ensure_capacity(m_layers.size())); + if (scaling_mode != Gfx::Painter::ScalingMode::None) { + Vector> resized_layers; + TRY(resized_layers.try_ensure_capacity(m_layers.size())); - VERIFY(m_layers.size() > 0); + VERIFY(m_layers.size() > 0); - size_t selected_layer_index = 0; - for (size_t i = 0; i < m_layers.size(); ++i) { - auto& layer = m_layers[i]; - auto new_layer = TRY(Layer::create_snapshot(*this, layer)); + size_t selected_layer_index = 0; + for (size_t i = 0; i < m_layers.size(); ++i) { + auto& layer = m_layers[i]; + auto new_layer = TRY(Layer::create_snapshot(*this, layer)); - if (layer->is_selected()) - selected_layer_index = i; + if (layer->is_selected()) + selected_layer_index = i; - Gfx::IntPoint new_location(scale_x * new_layer->location().x(), scale_y * new_layer->location().y()); - TRY(new_layer->resize(new_size, new_location, scaling_mode, Layer::NotifyClients::No)); + Gfx::IntPoint new_location(scale_x * new_layer->location().x(), scale_y * new_layer->location().y()); + TRY(new_layer->resize(new_size, new_location, scaling_mode, Layer::NotifyClients::No)); - resized_layers.unchecked_append(new_layer); + resized_layers.unchecked_append(new_layer); + } + + m_layers = move(resized_layers); + for (auto& layer : m_layers) + layer->did_modify_bitmap({}, Layer::NotifyClients::Yes); + + select_layer(m_layers[selected_layer_index]); } - m_layers = move(resized_layers); - for (auto& layer : m_layers) - layer->did_modify_bitmap({}, Layer::NotifyClients::Yes); - - select_layer(m_layers[selected_layer_index]); - m_size = { new_size.width(), new_size.height() }; did_change_rect();