fix layer order change
This commit is contained in:
@@ -1295,7 +1295,18 @@ void Canvas::layer_remove(int idx) // m_order index
|
|||||||
}
|
}
|
||||||
void Canvas::layer_order(int idx, int pos) // m_order index
|
void Canvas::layer_order(int idx, int pos) // m_order index
|
||||||
{
|
{
|
||||||
std::swap(m_layers[idx], m_layers[pos]);
|
auto from = m_layers.begin() + idx;
|
||||||
|
auto to = m_layers.begin() + pos;
|
||||||
|
|
||||||
|
if (pos < idx)
|
||||||
|
std::rotate(to, from, from + 1);
|
||||||
|
if (pos > idx)
|
||||||
|
std::rotate(from, from + 1, to + 1);
|
||||||
|
|
||||||
|
if (m_current_layer_idx == idx)
|
||||||
|
m_current_layer_idx = pos;
|
||||||
|
else if (m_current_layer_idx == pos)
|
||||||
|
m_current_layer_idx = idx;
|
||||||
}
|
}
|
||||||
void Canvas::layer_merge(int source_idx, int dest_idx) // m_layer index
|
void Canvas::layer_merge(int source_idx, int dest_idx) // m_layer index
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -146,11 +146,11 @@ void NodePanelLayer::init()
|
|||||||
ActionManager::add(a);
|
ActionManager::add(a);
|
||||||
};
|
};
|
||||||
btn_add->on_click = [this](Node*) {
|
btn_add->on_click = [this](Node*) {
|
||||||
add_layer(true, true);
|
add_layer(true, true, m_layers_container->get_child_index(m_current_layer) + 1);
|
||||||
};
|
};
|
||||||
btn_remove->on_click = [this](Node*) {
|
btn_remove->on_click = [this](Node*) {
|
||||||
if (m_layers.size() == 1)
|
if (m_layers.size() == 1)
|
||||||
return; // dont' delete the last layer
|
return; // don't delete the last layer
|
||||||
remove_layer(m_current_layer);
|
remove_layer(m_current_layer);
|
||||||
};
|
};
|
||||||
btn_up->on_click = [this](Node*) {
|
btn_up->on_click = [this](Node*) {
|
||||||
@@ -251,11 +251,11 @@ NodeLayer* NodePanelLayer::add_layer(const char* name, bool add_history /*= true
|
|||||||
return l.get();
|
return l.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodePanelLayer::add_layer(bool add_history /*= true*/, bool create_events /*= false*/)
|
void NodePanelLayer::add_layer(bool add_history /*= true*/, bool create_events /*= false*/, int index /*= -1*/)
|
||||||
{
|
{
|
||||||
static char s[64];
|
static char s[64];
|
||||||
sprintf(s, "Layer-%d", id_counter++);
|
sprintf(s, "Layer-%d", id_counter++);
|
||||||
add_layer(s, add_history, create_events);
|
add_layer(s, add_history, create_events, nullptr, nullptr, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeLayer* NodePanelLayer::get_layer_at(int index)
|
NodeLayer* NodePanelLayer::get_layer_at(int index)
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public:
|
|||||||
virtual void init() override;
|
virtual void init() override;
|
||||||
virtual kEventResult handle_event(Event* e) override;
|
virtual kEventResult handle_event(Event* e) override;
|
||||||
void merge(int src_index, int dst_index, bool create_history);
|
void merge(int src_index, int dst_index, bool create_history);
|
||||||
void add_layer(bool add_history = true, bool create_events = false);
|
void add_layer(bool add_history = true, bool create_events = false, int index = -1);
|
||||||
NodeLayer* add_layer(const char* name, bool add_history = true, bool create_events = false,
|
NodeLayer* add_layer(const char* name, bool add_history = true, bool create_events = false,
|
||||||
std::shared_ptr<Layer> layer = nullptr, std::shared_ptr<NodeLayer> layer_node = nullptr, int index = -1);
|
std::shared_ptr<Layer> layer = nullptr, std::shared_ptr<NodeLayer> layer_node = nullptr, int index = -1);
|
||||||
NodeLayer* get_layer_at(int index);
|
NodeLayer* get_layer_at(int index);
|
||||||
|
|||||||
Reference in New Issue
Block a user