Fix slice transform undo after making a cel empty

This commit is contained in:
Martín Capello 2024-08-01 18:06:36 -03:00 committed by David Capello
parent 2c58669909
commit 23160a9fee
2 changed files with 14 additions and 14 deletions

View File

@ -38,13 +38,13 @@ ClearSlices::ClearSlices(const Site& site,
Doc* doc = static_cast<Doc*>((*layers.begin())->sprite()->document());
for (auto* layer : layers) {
SlicesContent sc;
Cel* cel = layer->cel(frame);
SlicesContent sc(cel);
for (const auto& sk : slicesKeys) {
sc.mask.add(sk.bounds());
}
gfx::Rect maskBounds = sc.mask.bounds();
Cel* cel = layer->cel(frame);
Image* image = cel->image();
assert(image);
if (!image)
@ -67,7 +67,6 @@ ClearSlices::ClearSlices(const Site& site,
cropBounds.offset(-imageBounds.origin());
sc.cel = cel;
sc.cropPos = cropBounds.origin();
sc.bgcolor = bgcolor;
sc.copy.reset(crop_image(image, cropBounds, sc.bgcolor));
@ -100,13 +99,13 @@ void ClearSlices::clear()
continue;
if (sc.cel->layer()->isTilemap() && m_tilemapMode == TilemapMode::Pixels) {
if (sc.cel()->layer()->isTilemap() && m_tilemapMode == TilemapMode::Pixels) {
Doc* doc = static_cast<Doc*>(sc.cel->document());
color_t bgcolor = doc->bgColor(sc.cel->layer());
Doc* doc = static_cast<Doc*>(sc.cel()->document());
color_t bgcolor = doc->bgColor(sc.cel()->layer());
modify_tilemap_cel_region(
&m_seq, sc.cel, nullptr,
&m_seq, sc.cel(), nullptr,
gfx::Region(sc.mask.bounds()),
m_tilesetMode,
[sc, bgcolor](const doc::ImageRef& origTile,
@ -122,13 +121,13 @@ void ClearSlices::clear()
});
}
else {
Grid grid = sc.cel->grid();
Grid grid = sc.cel()->grid();
doc::algorithm::fill_selection(
sc.cel->image(),
sc.cel->bounds(),
sc.cel()->image(),
sc.cel()->bounds(),
&sc.mask,
sc.bgcolor,
(sc.cel->image()->isTilemap() ? &grid: nullptr));
(sc.cel()->image()->isTilemap() ? &grid: nullptr));
}
}
}
@ -139,7 +138,7 @@ void ClearSlices::restore()
if (!sc.copy)
continue;
copy_image(sc.cel->image(),
copy_image(sc.cel()->image(),
sc.copy.get(),
sc.cropPos.x,
sc.cropPos.y);

View File

@ -10,6 +10,7 @@
#include "app/cmd.h"
#include "app/cmd_sequence.h"
#include "app/cmd/with_cel.h"
#include "app/tilemap_mode.h"
#include "app/tileset_mode.h"
#include "doc/cel.h"
@ -49,8 +50,8 @@ namespace cmd {
}
private:
struct SlicesContent {
Cel* cel = nullptr;
struct SlicesContent : public WithCel {
SlicesContent(Cel* cel) : WithCel(cel) {}
// Image having a copy of the content of each selected slice.
ImageRef copy = nullptr;
Mask mask;