diff --git a/src/DevTools.hpp b/src/DevTools.hpp index 9de54a4..f6a808a 100644 --- a/src/DevTools.hpp +++ b/src/DevTools.hpp @@ -62,7 +62,7 @@ class DevTools { void setupPlatform(); void drawTree(); - void drawTreeBranch(CCNode* node, size_t index, bool drag); + void drawTreeBranch(CCNode* node, size_t index, bool drag, bool visible); void drawSettings(); void drawAdvancedSettings(); void drawNodeAttributes(CCNode* node); diff --git a/src/pages/Tree.cpp b/src/pages/Tree.cpp index 2a00366..37182ef 100644 --- a/src/pages/Tree.cpp +++ b/src/pages/Tree.cpp @@ -35,11 +35,13 @@ bool isNodeParentOf(CCNode* parent, CCNode* child) { return false; } -void DevTools::drawTreeBranch(CCNode* node, size_t index, bool drag) { +void DevTools::drawTreeBranch(CCNode* node, size_t index, bool drag, bool visible) { if (!this->searchBranch(node)) { return; } + visible = node->isVisible() && visible; + auto selected = DevTools::get()->getSelectedNode() == node; ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_None; @@ -103,11 +105,22 @@ void DevTools::drawTreeBranch(CCNode* node, size_t index, bool drag) { ImGui::SetNextItemOpen(true); } + auto alpha = ImGui::GetStyle().DisabledAlpha; + ImGui::GetStyle().DisabledAlpha = node->isVisible() ? alpha + 0.15f : alpha; + + ImGui::BeginDisabled(!visible); + ImGui::PushItemFlag(ImGuiItemFlags_Disabled, false); // Bypass iteract blocking in imgui + const auto name = formatNodeName(node, index); // The order here is unusual due to imgui weirdness; see the second-to-last paragraph in https://kahwei.dev/2022/06/20/imgui-tree-node/ bool expanded = ImGui::TreeNodeEx(node, flags, "%s", name.c_str()); float height = ImGui::GetItemRectSize().y; + + ImGui::GetStyle().DisabledAlpha = alpha; + ImGui::PopItemFlag(); //ImGuiItemFlags_Disabled + ImGui::EndDisabled(); + if (ImGui::IsItemClicked()) { DevTools::get()->selectNode(node); selected = true; @@ -152,7 +165,7 @@ void DevTools::drawTreeBranch(CCNode* node, size_t index, bool drag) { } size_t i = 0; for (auto& child : CCArrayExt(node->getChildren())) { - this->drawTreeBranch(child, i++, drag || isDrag); + this->drawTreeBranch(child, i++, drag || isDrag, visible); } ImGui::TreePop(); } @@ -177,7 +190,7 @@ void DevTools::drawTree() { m_searchQuery.clear(); } - this->drawTreeBranch(CCDirector::get()->getRunningScene(), 0, false); + this->drawTreeBranch(CCDirector::get()->getRunningScene(), 0, false, true); if (auto* dragged = this->getDraggedNode()) { const auto name = formatNodeName(dragged, 0); @@ -217,4 +230,5 @@ bool DevTools::searchBranch(CCNode* node) { } } return false; -} \ No newline at end of file + +}