fix indices bug
This commit is contained in:
@@ -415,7 +415,7 @@ void App::init_menu_layer()
|
|||||||
{
|
{
|
||||||
int dest_layer_idx = order[current_idx_order - 1];
|
int dest_layer_idx = order[current_idx_order - 1];
|
||||||
canvas->m_canvas->layer_merge(canvas->m_canvas->m_current_layer_idx, dest_layer_idx);
|
canvas->m_canvas->layer_merge(canvas->m_canvas->m_current_layer_idx, dest_layer_idx);
|
||||||
canvas->m_canvas->layer_remove(canvas->m_canvas->m_current_layer_idx);
|
canvas->m_canvas->layer_remove(current_idx_order);
|
||||||
layers->clear();
|
layers->clear();
|
||||||
for (auto& i : canvas->m_canvas->m_order)
|
for (auto& i : canvas->m_canvas->m_order)
|
||||||
layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str());
|
layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str());
|
||||||
|
|||||||
@@ -571,20 +571,21 @@ void ui::Canvas::layer_add(std::string name)
|
|||||||
m_order.push_back(idx);
|
m_order.push_back(idx);
|
||||||
m_current_layer_idx = idx;
|
m_current_layer_idx = idx;
|
||||||
}
|
}
|
||||||
void ui::Canvas::layer_remove(int idx)
|
void ui::Canvas::layer_remove(int idx) // m_order index
|
||||||
{
|
{
|
||||||
|
int n = m_order[idx];
|
||||||
for (auto& i : m_order)
|
for (auto& i : m_order)
|
||||||
if (i > m_order[idx])
|
if (i > n)
|
||||||
i--;
|
i--;
|
||||||
m_layers.erase(m_layers.begin() + idx);
|
m_layers.erase(m_layers.begin() + n);
|
||||||
m_order.erase(m_order.begin() + idx);
|
m_order.erase(m_order.begin() + idx);
|
||||||
m_current_layer_idx = std::max<int>(m_layers.size() - 1, idx);
|
m_current_layer_idx = m_order[std::min<int>(m_layers.size() - 1, idx)];
|
||||||
}
|
}
|
||||||
void ui::Canvas::layer_order(int idx, int pos)
|
void ui::Canvas::layer_order(int idx, int pos) // m_order index
|
||||||
{
|
{
|
||||||
std::swap(m_order[idx], m_order[pos]);
|
std::swap(m_order[idx], m_order[pos]);
|
||||||
}
|
}
|
||||||
void ui::Canvas::layer_merge(int source_idx, int dest_idx)
|
void ui::Canvas::layer_merge(int source_idx, int dest_idx) // m_layer index
|
||||||
{
|
{
|
||||||
m_dirty = false;
|
m_dirty = false;
|
||||||
|
|
||||||
|
|||||||
@@ -197,13 +197,14 @@ void NodePanelLayer::remove_layer(NodeLayer* layer)
|
|||||||
{
|
{
|
||||||
auto it = std::find(m_layers.begin(), m_layers.end(), m_current_layer);
|
auto it = std::find(m_layers.begin(), m_layers.end(), m_current_layer);
|
||||||
auto i = m_layers_container->get_child_index(m_current_layer);
|
auto i = m_layers_container->get_child_index(m_current_layer);
|
||||||
|
int old_idx = (int)std::distance(m_layers.begin(), it);
|
||||||
m_layers_container->remove_child(m_current_layer);
|
m_layers_container->remove_child(m_current_layer);
|
||||||
m_layers.erase(it);
|
m_layers.erase(it);
|
||||||
i = std::min<int>(i, (int)m_layers.size() - 1);
|
i = std::min<int>(i, (int)m_layers.size() - 1);
|
||||||
m_current_layer = m_layers[i];
|
m_current_layer = m_layers[i];
|
||||||
m_current_layer->m_selected = true;
|
m_current_layer->m_selected = true;
|
||||||
if (on_layer_delete)
|
if (on_layer_delete)
|
||||||
on_layer_delete(this, (int)std::distance(m_layers.begin(), it));
|
on_layer_delete(this, old_idx);
|
||||||
if (on_layer_change)
|
if (on_layer_change)
|
||||||
on_layer_change(this, -1, i);
|
on_layer_change(this, -1, i);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user