mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-15 09:27:00 +00:00
Docking: bits.
This commit is contained in:
parent
5d95e7eef9
commit
8dfb52245b
86
imgui.cpp
86
imgui.cpp
@ -12493,7 +12493,7 @@ void ImGui::DestroyPlatformWindows()
|
|||||||
// | - DockContextProcessDock() - process one docking request
|
// | - DockContextProcessDock() - process one docking request
|
||||||
// | - DockNodeUpdate()
|
// | - DockNodeUpdate()
|
||||||
// | - DockNodeUpdateForRootNode()
|
// | - DockNodeUpdateForRootNode()
|
||||||
// | - DockNodeUpdateVisibleFlagAndInactiveChilds()
|
// | - DockNodeUpdateFlagsAndCollapse()
|
||||||
// | - DockNodeFindInfo()
|
// | - DockNodeFindInfo()
|
||||||
// | - destroy unused node or tab bar
|
// | - destroy unused node or tab bar
|
||||||
// | - create dock node host window
|
// | - create dock node host window
|
||||||
@ -12626,7 +12626,7 @@ namespace ImGui
|
|||||||
static void DockNodeHideHostWindow(ImGuiDockNode* node);
|
static void DockNodeHideHostWindow(ImGuiDockNode* node);
|
||||||
static void DockNodeUpdate(ImGuiDockNode* node);
|
static void DockNodeUpdate(ImGuiDockNode* node);
|
||||||
static void DockNodeUpdateForRootNode(ImGuiDockNode* node);
|
static void DockNodeUpdateForRootNode(ImGuiDockNode* node);
|
||||||
static void DockNodeUpdateVisibleFlagAndInactiveChilds(ImGuiDockNode* node);
|
static void DockNodeUpdateFlagsAndCollapse(ImGuiDockNode* node);
|
||||||
static void DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_window);
|
static void DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_window);
|
||||||
static void DockNodeAddTabBar(ImGuiDockNode* node);
|
static void DockNodeAddTabBar(ImGuiDockNode* node);
|
||||||
static void DockNodeRemoveTabBar(ImGuiDockNode* node);
|
static void DockNodeRemoveTabBar(ImGuiDockNode* node);
|
||||||
@ -13300,7 +13300,7 @@ bool ImGui::DockContextCalcDropPosForDocking(ImGuiWindow* target, ImGuiDockNode*
|
|||||||
// - ImGuiDockNodeFindInfoResults
|
// - ImGuiDockNodeFindInfoResults
|
||||||
// - DockNodeFindInfo()
|
// - DockNodeFindInfo()
|
||||||
// - DockNodeFindWindowByID()
|
// - DockNodeFindWindowByID()
|
||||||
// - DockNodeUpdateVisibleFlagAndInactiveChilds()
|
// - DockNodeUpdateFlagsAndCollapse()
|
||||||
// - DockNodeUpdateVisibleFlag()
|
// - DockNodeUpdateVisibleFlag()
|
||||||
// - DockNodeStartMouseMovingWindow()
|
// - DockNodeStartMouseMovingWindow()
|
||||||
// - DockNodeUpdate()
|
// - DockNodeUpdate()
|
||||||
@ -13568,36 +13568,36 @@ static void ImGui::DockNodeHideHostWindow(ImGuiDockNode* node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Search function called once by root node in DockNodeUpdate()
|
// Search function called once by root node in DockNodeUpdate()
|
||||||
struct ImGuiDockNodeFindInfoResults
|
struct ImGuiDockNodeTreeInfo
|
||||||
{
|
{
|
||||||
ImGuiDockNode* CentralNode;
|
ImGuiDockNode* CentralNode;
|
||||||
ImGuiDockNode* FirstNodeWithWindows;
|
ImGuiDockNode* FirstNodeWithWindows;
|
||||||
int CountNodesWithWindows;
|
int CountNodesWithWindows;
|
||||||
//ImGuiWindowClass WindowClassForMerges;
|
//ImGuiWindowClass WindowClassForMerges;
|
||||||
|
|
||||||
ImGuiDockNodeFindInfoResults() { CentralNode = FirstNodeWithWindows = NULL; CountNodesWithWindows = 0; }
|
ImGuiDockNodeTreeInfo() { memset(this, 0, sizeof(*this)); }
|
||||||
};
|
};
|
||||||
|
|
||||||
static void DockNodeFindInfo(ImGuiDockNode* node, ImGuiDockNodeFindInfoResults* results)
|
static void DockNodeFindInfo(ImGuiDockNode* node, ImGuiDockNodeTreeInfo* info)
|
||||||
{
|
{
|
||||||
if (node->Windows.Size > 0)
|
if (node->Windows.Size > 0)
|
||||||
{
|
{
|
||||||
if (results->FirstNodeWithWindows == NULL)
|
if (info->FirstNodeWithWindows == NULL)
|
||||||
results->FirstNodeWithWindows = node;
|
info->FirstNodeWithWindows = node;
|
||||||
results->CountNodesWithWindows++;
|
info->CountNodesWithWindows++;
|
||||||
}
|
}
|
||||||
if (node->IsCentralNode())
|
if (node->IsCentralNode())
|
||||||
{
|
{
|
||||||
IM_ASSERT(results->CentralNode == NULL); // Should be only one
|
IM_ASSERT(info->CentralNode == NULL); // Should be only one
|
||||||
IM_ASSERT(node->IsLeafNode() && "If you get this assert: please submit .ini file + repro of actions leading to this.");
|
IM_ASSERT(node->IsLeafNode() && "If you get this assert: please submit .ini file + repro of actions leading to this.");
|
||||||
results->CentralNode = node;
|
info->CentralNode = node;
|
||||||
}
|
}
|
||||||
if (results->CountNodesWithWindows > 1 && results->CentralNode != NULL)
|
if (info->CountNodesWithWindows > 1 && info->CentralNode != NULL)
|
||||||
return;
|
return;
|
||||||
if (node->ChildNodes[0])
|
if (node->ChildNodes[0])
|
||||||
DockNodeFindInfo(node->ChildNodes[0], results);
|
DockNodeFindInfo(node->ChildNodes[0], info);
|
||||||
if (node->ChildNodes[1])
|
if (node->ChildNodes[1])
|
||||||
DockNodeFindInfo(node->ChildNodes[1], results);
|
DockNodeFindInfo(node->ChildNodes[1], info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ImGuiWindow* ImGui::DockNodeFindWindowByID(ImGuiDockNode* node, ImGuiID id)
|
static ImGuiWindow* ImGui::DockNodeFindWindowByID(ImGuiDockNode* node, ImGuiID id)
|
||||||
@ -13611,7 +13611,7 @@ static ImGuiWindow* ImGui::DockNodeFindWindowByID(ImGuiDockNode* node, ImGuiID i
|
|||||||
|
|
||||||
// - Remove inactive windows/nodes.
|
// - Remove inactive windows/nodes.
|
||||||
// - Update visibility flag.
|
// - Update visibility flag.
|
||||||
static void ImGui::DockNodeUpdateVisibleFlagAndInactiveChilds(ImGuiDockNode* node)
|
static void ImGui::DockNodeUpdateFlagsAndCollapse(ImGuiDockNode* node)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
IM_ASSERT(node->ParentNode == NULL || node->ParentNode->ChildNodes[0] == node || node->ParentNode->ChildNodes[1] == node);
|
IM_ASSERT(node->ParentNode == NULL || node->ParentNode->ChildNodes[0] == node || node->ParentNode->ChildNodes[1] == node);
|
||||||
@ -13625,11 +13625,11 @@ static void ImGui::DockNodeUpdateVisibleFlagAndInactiveChilds(ImGuiDockNode* nod
|
|||||||
// If 'node->ChildNode[0]' delete itself, then 'node->ChildNode[1]->Windows' will be moved into 'node'
|
// If 'node->ChildNode[0]' delete itself, then 'node->ChildNode[1]->Windows' will be moved into 'node'
|
||||||
// If 'node->ChildNode[1]' delete itself, then 'node->ChildNode[0]->Windows' will be moved into 'node' and the "remove inactive windows" loop will have run twice on those windows (harmless)
|
// If 'node->ChildNode[1]' delete itself, then 'node->ChildNode[0]->Windows' will be moved into 'node' and the "remove inactive windows" loop will have run twice on those windows (harmless)
|
||||||
if (node->ChildNodes[0])
|
if (node->ChildNodes[0])
|
||||||
DockNodeUpdateVisibleFlagAndInactiveChilds(node->ChildNodes[0]);
|
DockNodeUpdateFlagsAndCollapse(node->ChildNodes[0]);
|
||||||
if (node->ChildNodes[1])
|
if (node->ChildNodes[1])
|
||||||
DockNodeUpdateVisibleFlagAndInactiveChilds(node->ChildNodes[1]);
|
DockNodeUpdateFlagsAndCollapse(node->ChildNodes[1]);
|
||||||
|
|
||||||
// Remove inactive windows
|
// Remove inactive windows, collapse nodes
|
||||||
// Merge node flags overrides stored in windows
|
// Merge node flags overrides stored in windows
|
||||||
node->LocalFlagsInWindows = ImGuiDockNodeFlags_None;
|
node->LocalFlagsInWindows = ImGuiDockNodeFlags_None;
|
||||||
for (int window_n = 0; window_n < node->Windows.Size; window_n++)
|
for (int window_n = 0; window_n < node->Windows.Size; window_n++)
|
||||||
@ -13654,14 +13654,13 @@ static void ImGui::DockNodeUpdateVisibleFlagAndInactiveChilds(ImGuiDockNode* nod
|
|||||||
}
|
}
|
||||||
DockNodeRemoveWindow(node, window, node->ID);
|
DockNodeRemoveWindow(node, window, node->ID);
|
||||||
window_n--;
|
window_n--;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// FIXME-DOCKING: Missing policies for conflict resolution, hence the "Experimental" tag on this.
|
// FIXME-DOCKING: Missing policies for conflict resolution, hence the "Experimental" tag on this.
|
||||||
//node->LocalFlagsInWindow &= ~window->WindowClass.DockNodeFlagsOverrideClear;
|
//node->LocalFlagsInWindow &= ~window->WindowClass.DockNodeFlagsOverrideClear;
|
||||||
node->LocalFlagsInWindows |= window->WindowClass.DockNodeFlagsOverrideSet;
|
node->LocalFlagsInWindows |= window->WindowClass.DockNodeFlagsOverrideSet;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
node->UpdateMergedFlags();
|
node->UpdateMergedFlags();
|
||||||
|
|
||||||
// Auto-hide tab bar option
|
// Auto-hide tab bar option
|
||||||
@ -13707,22 +13706,22 @@ static void ImGui::DockNodeStartMouseMovingWindow(ImGuiDockNode* node, ImGuiWind
|
|||||||
// Update CentralNode, OnlyNodeWithWindows, LastFocusedNodeID. Copy window class.
|
// Update CentralNode, OnlyNodeWithWindows, LastFocusedNodeID. Copy window class.
|
||||||
static void ImGui::DockNodeUpdateForRootNode(ImGuiDockNode* node)
|
static void ImGui::DockNodeUpdateForRootNode(ImGuiDockNode* node)
|
||||||
{
|
{
|
||||||
DockNodeUpdateVisibleFlagAndInactiveChilds(node);
|
DockNodeUpdateFlagsAndCollapse(node);
|
||||||
|
|
||||||
// FIXME-DOCK: Merge this scan into the one above.
|
|
||||||
// - Setup central node pointers
|
// - Setup central node pointers
|
||||||
// - Find if there's only a single visible window in the hierarchy (in which case we need to display a regular title bar -> FIXME-DOCK: that last part is not done yet!)
|
// - Find if there's only a single visible window in the hierarchy (in which case we need to display a regular title bar -> FIXME-DOCK: that last part is not done yet!)
|
||||||
ImGuiDockNodeFindInfoResults results;
|
// Cannot merge this with DockNodeUpdateFlagsAndCollapse() because FirstNodeWithWindows is found after window removal and child collapsing
|
||||||
DockNodeFindInfo(node, &results);
|
ImGuiDockNodeTreeInfo info;
|
||||||
node->CentralNode = results.CentralNode;
|
DockNodeFindInfo(node, &info);
|
||||||
node->OnlyNodeWithWindows = (results.CountNodesWithWindows == 1) ? results.FirstNodeWithWindows : NULL;
|
node->CentralNode = info.CentralNode;
|
||||||
if (node->LastFocusedNodeId == 0 && results.FirstNodeWithWindows != NULL)
|
node->OnlyNodeWithWindows = (info.CountNodesWithWindows == 1) ? info.FirstNodeWithWindows : NULL;
|
||||||
node->LastFocusedNodeId = results.FirstNodeWithWindows->ID;
|
if (node->LastFocusedNodeId == 0 && info.FirstNodeWithWindows != NULL)
|
||||||
|
node->LastFocusedNodeId = info.FirstNodeWithWindows->ID;
|
||||||
|
|
||||||
// Copy the window class from of our first window so it can be used for proper dock filtering.
|
// Copy the window class from of our first window so it can be used for proper dock filtering.
|
||||||
// When node has mixed windows, prioritize the class with the most constraint (DockingAllowUnclassed = false) as the reference to copy.
|
// When node has mixed windows, prioritize the class with the most constraint (DockingAllowUnclassed = false) as the reference to copy.
|
||||||
// FIXME-DOCK: We don't recurse properly, this code could be reworked to work from DockNodeUpdateScanRec.
|
// FIXME-DOCK: We don't recurse properly, this code could be reworked to work from DockNodeUpdateScanRec.
|
||||||
if (ImGuiDockNode* first_node_with_windows = results.FirstNodeWithWindows)
|
if (ImGuiDockNode* first_node_with_windows = info.FirstNodeWithWindows)
|
||||||
{
|
{
|
||||||
node->WindowClass = first_node_with_windows->Windows[0]->WindowClass;
|
node->WindowClass = first_node_with_windows->Windows[0]->WindowClass;
|
||||||
for (int n = 1; n < first_node_with_windows->Windows.Size; n++)
|
for (int n = 1; n < first_node_with_windows->Windows.Size; n++)
|
||||||
@ -14850,6 +14849,7 @@ void ImGui::DockNodeTreeMerge(ImGuiContext* ctx, ImGuiDockNode* parent_node, ImG
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update Pos/Size for a node hierarchy (don't affect child Windows yet)
|
// Update Pos/Size for a node hierarchy (don't affect child Windows yet)
|
||||||
|
// (Depth-first, Pre-Order)
|
||||||
void ImGui::DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 size, bool only_write_to_marked_nodes)
|
void ImGui::DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 size, bool only_write_to_marked_nodes)
|
||||||
{
|
{
|
||||||
// During the regular dock node update we write to all nodes.
|
// During the regular dock node update we write to all nodes.
|
||||||
@ -14879,6 +14879,10 @@ void ImGui::DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 si
|
|||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
const float size_min_each = ImFloor(ImMin(size_avail, g.Style.WindowMinSize[axis] * 2.0f) * 0.5f);
|
const float size_min_each = ImFloor(ImMin(size_avail, g.Style.WindowMinSize[axis] * 2.0f) * 0.5f);
|
||||||
|
|
||||||
|
// FIXME: Blocks 2) and 3) are essentially doing nearly the same thing.
|
||||||
|
// Difference are: write-back to SizeRef; application of a minimum size; rounding before ImFloor()
|
||||||
|
// Clarify and rework differences between Size & SizeRef and purpose of WantLockSizeOnce
|
||||||
|
|
||||||
// 2) Process locked absolute size (during a splitter resize we preserve the child of nodes not touching the splitter edge)
|
// 2) Process locked absolute size (during a splitter resize we preserve the child of nodes not touching the splitter edge)
|
||||||
if (child_0->WantLockSizeOnce && !child_1->WantLockSizeOnce)
|
if (child_0->WantLockSizeOnce && !child_1->WantLockSizeOnce)
|
||||||
{
|
{
|
||||||
@ -14896,19 +14900,19 @@ void ImGui::DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 si
|
|||||||
{
|
{
|
||||||
// FIXME-DOCK: We cannot honor the requested size, so apply ratio.
|
// FIXME-DOCK: We cannot honor the requested size, so apply ratio.
|
||||||
// Currently this path will only be taken if code programmatically sets WantLockSizeOnce
|
// Currently this path will only be taken if code programmatically sets WantLockSizeOnce
|
||||||
float ratio_0 = child_0_size[axis] / (child_0_size[axis] + child_1_size[axis]);
|
float split_ratio = child_0_size[axis] / (child_0_size[axis] + child_1_size[axis]);
|
||||||
child_0_size[axis] = child_0->SizeRef[axis] = ImFloor(size_avail * ratio_0);
|
child_0_size[axis] = child_0->SizeRef[axis] = ImFloor(size_avail * split_ratio);
|
||||||
child_1_size[axis] = child_1->SizeRef[axis] = (size_avail - child_0_size[axis]);
|
child_1_size[axis] = child_1->SizeRef[axis] = (size_avail - child_0_size[axis]);
|
||||||
IM_ASSERT(child_0->SizeRef[axis] > 0.0f && child_1->SizeRef[axis] > 0.0f);
|
IM_ASSERT(child_0->SizeRef[axis] > 0.0f && child_1->SizeRef[axis] > 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3) If one window is the central node (~ use remaining space, should be made explicit!), use explicit size from the other, and remainder for the central node
|
// 3) If one window is the central node (~ use remaining space, should be made explicit!), use explicit size from the other, and remainder for the central node
|
||||||
else if (child_1->IsCentralNode() && child_0->SizeRef[axis] != 0.0f)
|
else if (child_0->SizeRef[axis] != 0.0f && child_1->IsCentralNode())
|
||||||
{
|
{
|
||||||
child_0_size[axis] = ImMin(size_avail - size_min_each, child_0->SizeRef[axis]);
|
child_0_size[axis] = ImMin(size_avail - size_min_each, child_0->SizeRef[axis]);
|
||||||
child_1_size[axis] = (size_avail - child_0_size[axis]);
|
child_1_size[axis] = (size_avail - child_0_size[axis]);
|
||||||
}
|
}
|
||||||
else if (child_0->IsCentralNode() && child_1->SizeRef[axis] != 0.0f)
|
else if (child_1->SizeRef[axis] != 0.0f && child_0->IsCentralNode())
|
||||||
{
|
{
|
||||||
child_1_size[axis] = ImMin(size_avail - size_min_each, child_1->SizeRef[axis]);
|
child_1_size[axis] = ImMin(size_avail - size_min_each, child_1->SizeRef[axis]);
|
||||||
child_0_size[axis] = (size_avail - child_1_size[axis]);
|
child_0_size[axis] = (size_avail - child_1_size[axis]);
|
||||||
@ -14917,7 +14921,7 @@ void ImGui::DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 si
|
|||||||
{
|
{
|
||||||
// 4) Otherwise distribute according to the relative ratio of each SizeRef value
|
// 4) Otherwise distribute according to the relative ratio of each SizeRef value
|
||||||
float split_ratio = child_0->SizeRef[axis] / (child_0->SizeRef[axis] + child_1->SizeRef[axis]);
|
float split_ratio = child_0->SizeRef[axis] / (child_0->SizeRef[axis] + child_1->SizeRef[axis]);
|
||||||
child_0_size[axis] = ImMax(size_min_each, ImFloor(size_avail * split_ratio + 0.5F));
|
child_0_size[axis] = ImMax(size_min_each, ImFloor(size_avail * split_ratio + 0.5f));
|
||||||
child_1_size[axis] = (size_avail - child_0_size[axis]);
|
child_1_size[axis] = (size_avail - child_0_size[axis]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -14946,6 +14950,7 @@ static void DockNodeTreeUpdateSplitterFindTouchingNode(ImGuiDockNode* node, ImGu
|
|||||||
DockNodeTreeUpdateSplitterFindTouchingNode(node->ChildNodes[1], axis, side, touching_nodes);
|
DockNodeTreeUpdateSplitterFindTouchingNode(node->ChildNodes[1], axis, side, touching_nodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// (Depth-First, Pre-Order)
|
||||||
void ImGui::DockNodeTreeUpdateSplitter(ImGuiDockNode* node)
|
void ImGui::DockNodeTreeUpdateSplitter(ImGuiDockNode* node)
|
||||||
{
|
{
|
||||||
if (node->IsLeafNode())
|
if (node->IsLeafNode())
|
||||||
@ -14980,7 +14985,7 @@ void ImGui::DockNodeTreeUpdateSplitter(ImGuiDockNode* node)
|
|||||||
//bb.Max[axis] -= 1;
|
//bb.Max[axis] -= 1;
|
||||||
PushID(node->ID);
|
PushID(node->ID);
|
||||||
|
|
||||||
// Gather list of nodes that are touching the splitter line. Find resizing limits based on those nodes.
|
// Find resizing limits by gathering list of nodes that are touching the splitter line.
|
||||||
ImVector<ImGuiDockNode*> touching_nodes[2];
|
ImVector<ImGuiDockNode*> touching_nodes[2];
|
||||||
float min_size = g.Style.WindowMinSize[axis];
|
float min_size = g.Style.WindowMinSize[axis];
|
||||||
float resize_limits[2];
|
float resize_limits[2];
|
||||||
@ -14988,9 +14993,8 @@ void ImGui::DockNodeTreeUpdateSplitter(ImGuiDockNode* node)
|
|||||||
resize_limits[1] = node->ChildNodes[1]->Pos[axis] + node->ChildNodes[1]->Size[axis] - min_size;
|
resize_limits[1] = node->ChildNodes[1]->Pos[axis] + node->ChildNodes[1]->Size[axis] - min_size;
|
||||||
|
|
||||||
ImGuiID splitter_id = GetID("##Splitter");
|
ImGuiID splitter_id = GetID("##Splitter");
|
||||||
if (g.ActiveId == splitter_id)
|
if (g.ActiveId == splitter_id) // Only process when splitter is active
|
||||||
{
|
{
|
||||||
// Only process when splitter is active
|
|
||||||
DockNodeTreeUpdateSplitterFindTouchingNode(child_0, axis, 1, &touching_nodes[0]);
|
DockNodeTreeUpdateSplitterFindTouchingNode(child_0, axis, 1, &touching_nodes[0]);
|
||||||
DockNodeTreeUpdateSplitterFindTouchingNode(child_1, axis, 0, &touching_nodes[1]);
|
DockNodeTreeUpdateSplitterFindTouchingNode(child_1, axis, 0, &touching_nodes[1]);
|
||||||
for (int touching_node_n = 0; touching_node_n < touching_nodes[0].Size; touching_node_n++)
|
for (int touching_node_n = 0; touching_node_n < touching_nodes[0].Size; touching_node_n++)
|
||||||
@ -14998,14 +15002,18 @@ void ImGui::DockNodeTreeUpdateSplitter(ImGuiDockNode* node)
|
|||||||
for (int touching_node_n = 0; touching_node_n < touching_nodes[1].Size; touching_node_n++)
|
for (int touching_node_n = 0; touching_node_n < touching_nodes[1].Size; touching_node_n++)
|
||||||
resize_limits[1] = ImMin(resize_limits[1], touching_nodes[1][touching_node_n]->Rect().Max[axis] - min_size);
|
resize_limits[1] = ImMin(resize_limits[1], touching_nodes[1][touching_node_n]->Rect().Max[axis] - min_size);
|
||||||
|
|
||||||
|
// [DEBUG] Render touching nodes & limits
|
||||||
/*
|
/*
|
||||||
// [DEBUG] Render limits
|
|
||||||
ImDrawList* draw_list = node->HostWindow ? GetForegroundDrawList(node->HostWindow) : GetForegroundDrawList(GetMainViewport());
|
ImDrawList* draw_list = node->HostWindow ? GetForegroundDrawList(node->HostWindow) : GetForegroundDrawList(GetMainViewport());
|
||||||
for (int n = 0; n < 2; n++)
|
for (int n = 0; n < 2; n++)
|
||||||
|
{
|
||||||
|
for (int touching_node_n = 0; touching_node_n < touching_nodes[n].Size; touching_node_n++)
|
||||||
|
draw_list->AddRect(touching_nodes[n][touching_node_n]->Pos, touching_nodes[n][touching_node_n]->Pos + touching_nodes[n][touching_node_n]->Size, IM_COL32(0, 255, 0, 255));
|
||||||
if (axis == ImGuiAxis_X)
|
if (axis == ImGuiAxis_X)
|
||||||
draw_list->AddLine(ImVec2(resize_limits[n], node->ChildNodes[n]->Pos.y), ImVec2(resize_limits[n], node->ChildNodes[n]->Pos.y + node->ChildNodes[n]->Size.y), IM_COL32(255, 0, 255, 255), 3.0f);
|
draw_list->AddLine(ImVec2(resize_limits[n], node->ChildNodes[n]->Pos.y), ImVec2(resize_limits[n], node->ChildNodes[n]->Pos.y + node->ChildNodes[n]->Size.y), IM_COL32(255, 0, 255, 255), 3.0f);
|
||||||
else
|
else
|
||||||
draw_list->AddLine(ImVec2(node->ChildNodes[n]->Pos.x, resize_limits[n]), ImVec2(node->ChildNodes[n]->Pos.x + node->ChildNodes[n]->Size.x, resize_limits[n]), IM_COL32(255, 0, 255, 255), 3.0f);
|
draw_list->AddLine(ImVec2(node->ChildNodes[n]->Pos.x, resize_limits[n]), ImVec2(node->ChildNodes[n]->Pos.x + node->ChildNodes[n]->Size.x, resize_limits[n]), IM_COL32(255, 0, 255, 255), 3.0f);
|
||||||
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user