mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 09:07:35 +00:00
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.
This commit is contained in:
parent
6c6af8ae4e
commit
92a0a7e3fa
1 changed files with 20 additions and 18 deletions
|
@ -663,31 +663,33 @@ ErrorOr<void> Image::resize(Gfx::IntSize new_size, Gfx::Painter::ScalingMode sca
|
||||||
scale_y = new_size.height() / static_cast<float>(size().height());
|
scale_y = new_size.height() / static_cast<float>(size().height());
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<NonnullRefPtr<Layer>> resized_layers;
|
if (scaling_mode != Gfx::Painter::ScalingMode::None) {
|
||||||
TRY(resized_layers.try_ensure_capacity(m_layers.size()));
|
Vector<NonnullRefPtr<Layer>> 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;
|
size_t selected_layer_index = 0;
|
||||||
for (size_t i = 0; i < m_layers.size(); ++i) {
|
for (size_t i = 0; i < m_layers.size(); ++i) {
|
||||||
auto& layer = m_layers[i];
|
auto& layer = m_layers[i];
|
||||||
auto new_layer = TRY(Layer::create_snapshot(*this, layer));
|
auto new_layer = TRY(Layer::create_snapshot(*this, layer));
|
||||||
|
|
||||||
if (layer->is_selected())
|
if (layer->is_selected())
|
||||||
selected_layer_index = i;
|
selected_layer_index = i;
|
||||||
|
|
||||||
Gfx::IntPoint new_location(scale_x * new_layer->location().x(), scale_y * new_layer->location().y());
|
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));
|
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() };
|
m_size = { new_size.width(), new_size.height() };
|
||||||
did_change_rect();
|
did_change_rect();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue