Docking: Removed SplitRatio from ImGuiDockNode and ImGuiDockNodeSettings, which we don't need anymore.

This commit is contained in:
omar 2018-09-14 17:51:30 +02:00
parent ba7b68798d
commit 175bab4f5f
2 changed files with 4 additions and 21 deletions

View File

@ -9598,7 +9598,6 @@ struct ImGuiDockNodeSettings
ImGuiID ID; ImGuiID ID;
ImGuiID ParentID; ImGuiID ParentID;
ImGuiID SelectedTabID; ImGuiID SelectedTabID;
float SplitRatio;
char SplitAxis; char SplitAxis;
char Depth; char Depth;
char IsExplicitRoot; char IsExplicitRoot;
@ -9606,7 +9605,7 @@ struct ImGuiDockNodeSettings
ImVec2ih Pos; ImVec2ih Pos;
ImVec2ih Size; ImVec2ih Size;
ImVec2ih LastExplicitSize; ImVec2ih LastExplicitSize;
ImGuiDockNodeSettings() { ID = ParentID = SelectedTabID = 0; SplitRatio = 0.0f; SplitAxis = ImGuiAxis_None; Depth = 0; IsExplicitRoot = IsDocumentRoot = 0; } ImGuiDockNodeSettings() { ID = ParentID = SelectedTabID = 0; SplitAxis = ImGuiAxis_None; Depth = 0; IsExplicitRoot = IsDocumentRoot = 0; }
}; };
struct ImGuiDockContext struct ImGuiDockContext
@ -9921,7 +9920,6 @@ static void ImGui::DockContextBuildNodesFromSettings(ImGuiDockContext* ctx, ImGu
node->ParentNode->ChildNodes[1] = node; node->ParentNode->ChildNodes[1] = node;
node->SelectedTabID = node_settings->SelectedTabID; node->SelectedTabID = node_settings->SelectedTabID;
node->SplitAxis = node_settings->SplitAxis; node->SplitAxis = node_settings->SplitAxis;
node->SplitRatio = node_settings->SplitRatio;
node->IsExplicitRoot = node_settings->IsExplicitRoot != 0; node->IsExplicitRoot = node_settings->IsExplicitRoot != 0;
node->IsDocumentRoot = node_settings->IsDocumentRoot != 0; node->IsDocumentRoot = node_settings->IsDocumentRoot != 0;
} }
@ -10103,7 +10101,6 @@ ImGuiDockNode::ImGuiDockNode(ImGuiID id)
ParentNode = ChildNodes[0] = ChildNodes[1] = NULL; ParentNode = ChildNodes[0] = ChildNodes[1] = NULL;
TabBar = NULL; TabBar = NULL;
SplitAxis = ImGuiAxis_None; SplitAxis = ImGuiAxis_None;
SplitRatio = 0.5f;
HostWindow = VisibleWindow = NULL; HostWindow = VisibleWindow = NULL;
OnlyNodeWithWindows = NULL; OnlyNodeWithWindows = NULL;
LastFrameAlive = LastFrameActive = -1; LastFrameAlive = LastFrameActive = -1;
@ -10240,7 +10237,6 @@ static void ImGui::DockNodeMoveChildNodes(ImGuiDockNode* dst_node, ImGuiDockNode
if (dst_node->ChildNodes[1]) if (dst_node->ChildNodes[1])
dst_node->ChildNodes[1]->ParentNode = dst_node; dst_node->ChildNodes[1]->ParentNode = dst_node;
dst_node->SplitAxis = src_node->SplitAxis; dst_node->SplitAxis = src_node->SplitAxis;
dst_node->SplitRatio = src_node->SplitRatio;
dst_node->LastExplicitSize = src_node->LastExplicitSize; dst_node->LastExplicitSize = src_node->LastExplicitSize;
src_node->ChildNodes[0] = src_node->ChildNodes[1] = NULL; src_node->ChildNodes[0] = src_node->ChildNodes[1] = NULL;
} }
@ -11034,7 +11030,6 @@ void ImGui::DockNodeTreeSplit(ImGuiDockContext* ctx, ImGuiDockNode* parent_node,
parent_node->ChildNodes[1] = child_1; parent_node->ChildNodes[1] = child_1;
parent_node->ChildNodes[split_inheritor_child_idx]->VisibleWindow = parent_node->VisibleWindow; parent_node->ChildNodes[split_inheritor_child_idx]->VisibleWindow = parent_node->VisibleWindow;
parent_node->SplitAxis = split_axis; parent_node->SplitAxis = split_axis;
parent_node->SplitRatio = split_ratio;
parent_node->VisibleWindow = NULL; parent_node->VisibleWindow = NULL;
float size_avail = (parent_node->Size[split_axis] - IMGUI_DOCK_SPLITTER_SIZE); float size_avail = (parent_node->Size[split_axis] - IMGUI_DOCK_SPLITTER_SIZE);
@ -11088,11 +11083,6 @@ void ImGui::DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 si
const ImGuiAxis axis = (ImGuiAxis)node->SplitAxis; const ImGuiAxis axis = (ImGuiAxis)node->SplitAxis;
const float size_avail = ImMax(size[axis] - spacing, 0.0f); const float size_avail = ImMax(size[axis] - spacing, 0.0f);
#if 0
child_0_size[axis] = ImFloor(size_avail * node->SplitRatio);
child_1_size[axis] = size_avail - child_0_size[axis];
child_1_pos[axis] += spacing + child_0_size[axis];
#else
// Size allocation policy // Size allocation policy
// 1) The first 0..WindowMinSize[axis]*2 are allocated evenly to both windows. // 1) The first 0..WindowMinSize[axis]*2 are allocated evenly to both windows.
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
@ -11127,14 +11117,12 @@ void ImGui::DockNodeTreeUpdatePosSize(ImGuiDockNode* node, ImVec2 pos, ImVec2 si
} }
else else
{ {
// 4) Otherwise distribute according to SplitRatio // 4) Otherwise distribute according to the relative ratio of each LastExplicitSize value
//float split_ratio = node->SplitRatio;
float split_ratio = child_0->LastExplicitSize[axis] / (child_0->LastExplicitSize[axis] + child_1->LastExplicitSize[axis]); float split_ratio = child_0->LastExplicitSize[axis] / (child_0->LastExplicitSize[axis] + child_1->LastExplicitSize[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]);
} }
child_1_pos[axis] += spacing + child_0_size[axis]; child_1_pos[axis] += spacing + child_0_size[axis];
#endif
} }
if (child_0->IsVisible) if (child_0->IsVisible)
DockNodeTreeUpdatePosSize(child_0, child_0_pos, child_0_size); DockNodeTreeUpdatePosSize(child_0, child_0_pos, child_0_size);
@ -11225,8 +11213,6 @@ void ImGui::DockNodeTreeUpdateSplitter(ImGuiDockNode* node)
{ {
if (touching_nodes[0].Size > 0 && touching_nodes[1].Size > 0) if (touching_nodes[0].Size > 0 && touching_nodes[1].Size > 0)
{ {
node->SplitRatio = w1 / (w1 + w2);
IM_ASSERT(node->SplitRatio > 0.0f && node->SplitRatio < 1.0f);
child_0->Size[axis] = child_0->LastExplicitSize[axis] = w1; child_0->Size[axis] = child_0->LastExplicitSize[axis] = w1;
child_1->Pos[axis] -= w2 - child_1->Size[axis]; child_1->Pos[axis] -= w2 - child_1->Size[axis];
child_1->Size[axis] = child_1->LastExplicitSize[axis] = w2; child_1->Size[axis] = child_1->LastExplicitSize[axis] = w2;
@ -11611,7 +11597,6 @@ static void* ImGui::DockSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHan
static void ImGui::DockSettingsHandler_ReadLine(ImGuiContext* imgui_ctx, ImGuiSettingsHandler*, void*, const char* line) static void ImGui::DockSettingsHandler_ReadLine(ImGuiContext* imgui_ctx, ImGuiSettingsHandler*, void*, const char* line)
{ {
char c = 0; char c = 0;
float f = 0.0f;
int x = 0, y = 0; int x = 0, y = 0;
int r = 0; int r = 0;
@ -11633,7 +11618,7 @@ static void ImGui::DockSettingsHandler_ReadLine(ImGuiContext* imgui_ctx, ImGuiSe
{ {
if (sscanf(line, " LastExplicitSize=%i,%i%n", &x, &y, &r) == 2) { line += r; node.LastExplicitSize = ImVec2ih((short)x, (short)y); } if (sscanf(line, " LastExplicitSize=%i,%i%n", &x, &y, &r) == 2) { line += r; node.LastExplicitSize = ImVec2ih((short)x, (short)y); }
} }
if (sscanf(line, " Split=%c,%f%n", &c, &f, &r) == 2) { line += r; if (c == 'X') node.SplitAxis = ImGuiAxis_X; else if (c == 'Y') node.SplitAxis = ImGuiAxis_Y; node.SplitRatio = f; } if (sscanf(line, " Split=%c%n", &c, &r) == 1) { line += r; if (c == 'X') node.SplitAxis = ImGuiAxis_X; else if (c == 'Y') node.SplitAxis = ImGuiAxis_Y; }
if (sscanf(line, " ExplicitRoot=%d%n", &x, &r) == 1) { line += r; node.IsExplicitRoot = (x != 0); } if (sscanf(line, " ExplicitRoot=%d%n", &x, &r) == 1) { line += r; node.IsExplicitRoot = (x != 0); }
if (sscanf(line, " DocumentRoot=%d%n", &x, &r) == 1) { line += r; node.IsDocumentRoot = (x != 0); } if (sscanf(line, " DocumentRoot=%d%n", &x, &r) == 1) { line += r; node.IsDocumentRoot = (x != 0); }
if (sscanf(line, " SelectedTab=0x%08X%n", &node.SelectedTabID,&r) == 1) { line += r; } if (sscanf(line, " SelectedTab=0x%08X%n", &node.SelectedTabID,&r) == 1) { line += r; }
@ -11653,7 +11638,6 @@ static void DockSettingsHandler_DockNodeToSettings(ImGuiDockContext* ctx, ImGuiD
node_settings.ID = node->ID; node_settings.ID = node->ID;
node_settings.ParentID = node->ParentNode ? node->ParentNode->ID : 0; node_settings.ParentID = node->ParentNode ? node->ParentNode->ID : 0;
node_settings.SelectedTabID = node->SelectedTabID; node_settings.SelectedTabID = node->SelectedTabID;
node_settings.SplitRatio = node->SplitRatio;
node_settings.SplitAxis = (char)node->SplitAxis; node_settings.SplitAxis = (char)node->SplitAxis;
node_settings.Depth = (char)depth; node_settings.Depth = (char)depth;
node_settings.IsExplicitRoot = (char)node->IsExplicitRoot; node_settings.IsExplicitRoot = (char)node->IsExplicitRoot;
@ -11696,7 +11680,7 @@ static void ImGui::DockSettingsHandler_WriteAll(ImGuiContext* imgui_ctx, ImGuiSe
else else
buf->appendf(" Pos=%d,%d Size=%d,%d", node_settings->Pos.x, node_settings->Pos.y, node_settings->Size.x, node_settings->Size.y); buf->appendf(" Pos=%d,%d Size=%d,%d", node_settings->Pos.x, node_settings->Pos.y, node_settings->Size.x, node_settings->Size.y);
if (node_settings->SplitAxis != ImGuiAxis_None) if (node_settings->SplitAxis != ImGuiAxis_None)
buf->appendf(" Split=%c,%.3f", (node_settings->SplitAxis == ImGuiAxis_X) ? 'X' : 'Y', node_settings->SplitRatio); buf->appendf(" Split=%c", (node_settings->SplitAxis == ImGuiAxis_X) ? 'X' : 'Y');
if (node_settings->IsExplicitRoot) if (node_settings->IsExplicitRoot)
buf->appendf(" ExplicitRoot=%d", node_settings->IsExplicitRoot); buf->appendf(" ExplicitRoot=%d", node_settings->IsExplicitRoot);
if (node_settings->IsDocumentRoot) if (node_settings->IsDocumentRoot)

View File

@ -751,7 +751,6 @@ struct ImGuiDockNode
ImVec2 Pos, Size; // Current position, size. ImVec2 Pos, Size; // Current position, size.
ImVec2 LastExplicitSize; // [Split node only] Last explicit size (overridden when using a splitter affecting the node) ImVec2 LastExplicitSize; // [Split node only] Last explicit size (overridden when using a splitter affecting the node)
int SplitAxis; // [Split node only] Split axis (X or Y) int SplitAxis; // [Split node only] Split axis (X or Y)
float SplitRatio; // [Split node only] Split ratio FIXME-DOCK: This can be obsoleted in favor of LastExplicitSize.
ImGuiWindow* HostWindow; ImGuiWindow* HostWindow;
ImGuiWindow* VisibleWindow; ImGuiWindow* VisibleWindow;