Fix: Inconsistent layer number if we change from background layer to layer

This patch fixes https://github.com/aseprite/aseprite/issues/4084.

Currently if we set layer to background and then back to layer, last
used name isn't preserved. This patch makes layer save last used layer name before
it gets converted to background so it won't get lost.
This commit is contained in:
tetektoza 2023-10-06 21:10:58 +02:00
parent 27ec013f8b
commit afc52695eb
3 changed files with 18 additions and 4 deletions

View File

@ -25,8 +25,13 @@ ConfigureBackground::ConfigureBackground(Layer* layer)
LayerFlags newFlags = LayerFlags(int(layer->flags())
| int(LayerFlags::BackgroundLayerFlags));
// save previous layer name so it will be the same
// if user changes layer from background to layer once again
layer->setLayerPrevName(layer->name());
add(new cmd::SetLayerFlags(layer, newFlags));
add(new cmd::SetLayerName(layer, "Background"));
add(new cmd::SetLayerName(layer, layer->prevBgName().empty() ?
"Background" : layer->prevBgName()));
if (layer->isImage() &&
static_cast<LayerImage*>(layer)->opacity() < 255) {

View File

@ -9,7 +9,6 @@
#endif
#include "app/cmd/layer_from_background.h"
#include "app/cmd/set_layer_flags.h"
#include "app/cmd/set_layer_name.h"
#include "doc/layer.h"
@ -32,8 +31,12 @@ LayerFromBackground::LayerFromBackground(Layer* layer)
LayerFlags newFlags = LayerFlags(int(layer->flags())
& ~int(LayerFlags::BackgroundLayerFlags));
layer->setBgPrevName(layer->name());
add(new cmd::SetLayerFlags(layer, newFlags));
add(new cmd::SetLayerName(layer, "Layer 0"));
// set previous set layer name before layer got changed to background
add(new cmd::SetLayerName(layer, layer->prevName()));
}
} // namespace cmd

View File

@ -59,6 +59,10 @@ namespace doc {
const std::string& name() const { return m_name; }
void setName(const std::string& name) { m_name = name; }
void setLayerPrevName(const std::string& name) { m_prev_name = name; }
void setBgPrevName(const std::string& name) { m_prev_bg_name = name; }
const std::string& prevName() const { return m_prev_name; }
const std::string& prevBgName() const { return m_prev_bg_name; }
Sprite* sprite() const { return m_sprite; }
LayerGroup* parent() const { return m_parent; }
@ -129,8 +133,10 @@ namespace doc {
private:
std::string m_name; // layer name
std::string m_prev_name; // previous layer name (before conversion to bg)
std::string m_prev_bg_name; // previous background layer name (before conversion to layer)
Sprite* m_sprite; // owner of the layer
LayerGroup* m_parent; // parent layer
LayerGroup* m_parent; // parent layer
LayerFlags m_flags; // stack order cannot be changed
// Disable assigment