From 78484c53a42f182663ca9e2968fb73d799faa343 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Tue, 22 Aug 2017 01:48:42 +0100 Subject: [PATCH] fix indices bug --- engine/app_layout.cpp | 2 +- engine/canvas.cpp | 13 +++++++------ engine/node_panel_layer.cpp | 3 ++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/engine/app_layout.cpp b/engine/app_layout.cpp index 836a63b..ee86265 100644 --- a/engine/app_layout.cpp +++ b/engine/app_layout.cpp @@ -415,7 +415,7 @@ void App::init_menu_layer() { 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_remove(canvas->m_canvas->m_current_layer_idx); + canvas->m_canvas->layer_remove(current_idx_order); layers->clear(); for (auto& i : canvas->m_canvas->m_order) layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str()); diff --git a/engine/canvas.cpp b/engine/canvas.cpp index 34e75a0..b75b157 100644 --- a/engine/canvas.cpp +++ b/engine/canvas.cpp @@ -571,20 +571,21 @@ void ui::Canvas::layer_add(std::string name) m_order.push_back(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) - if (i > m_order[idx]) + if (i > n) i--; - m_layers.erase(m_layers.begin() + idx); + m_layers.erase(m_layers.begin() + n); m_order.erase(m_order.begin() + idx); - m_current_layer_idx = std::max(m_layers.size() - 1, idx); + m_current_layer_idx = m_order[std::min(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]); } -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; diff --git a/engine/node_panel_layer.cpp b/engine/node_panel_layer.cpp index d4854b0..e07413a 100644 --- a/engine/node_panel_layer.cpp +++ b/engine/node_panel_layer.cpp @@ -197,13 +197,14 @@ void NodePanelLayer::remove_layer(NodeLayer* 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); + int old_idx = (int)std::distance(m_layers.begin(), it); m_layers_container->remove_child(m_current_layer); m_layers.erase(it); i = std::min(i, (int)m_layers.size() - 1); m_current_layer = m_layers[i]; m_current_layer->m_selected = true; 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) on_layer_change(this, -1, i); }