Hey! I'm trying to have a window docked to the center of the screen, but I cannot figure out how to do it properly. I'd like for the "Center" window to take up all the remaining space. I cannot even resize it manually by dragging the window corners, it refuses to go beyond that point. The gap marked with red should be taken up by the "Center" window.
#ImGui center docking
14 messages · Page 1 of 1 (latest)
When your question is answered use !solved to mark the question as resolved.
Remember to ask specific questions, provide necessary details, and reduce your question to its simplest form. For tips on how to ask a good question use !howto ask.
void DockspaceBuild( ImGuiID dockspaceID, bool& bDockspaceBuilt )
{
bDockspaceBuilt = true;
ImGuiViewport* pViewport = ImGui::GetMainViewport();
ImGui::DockBuilderRemoveNode( dockspaceID );
ImGui::DockBuilderAddNode( dockspaceID, ImGuiDockNodeFlags_DockSpace );
ImGui::DockBuilderSetNodeSize( dockspaceID, pViewport->Size );
ImGuiID dock_id_main = dockspaceID;
ImGuiID dock_id_top = ImGui::DockBuilderSplitNode( dockspaceID, ImGuiDir_Up, 0.15f, NULL, &dock_id_main );
ImGuiID dock_id_left = ImGui::DockBuilderSplitNode( dock_id_main, ImGuiDir_Left, 0.15f, NULL, &dock_id_main );
ImGuiID dock_id_right = ImGui::DockBuilderSplitNode( dock_id_main, ImGuiDir_Right, 0.25f, NULL, &dock_id_main );
ImGuiID dock_id_rightBottom = ImGui::DockBuilderSplitNode( dock_id_right, ImGuiDir_Down, 0.20f, NULL, &dock_id_right );
ImGuiID dock_id_bottom = ImGui::DockBuilderSplitNode( dock_id_main, ImGuiDir_Down, 0.25f, NULL, &dock_id_main );
ImGuiID dock_id_bottomC = ImGui::DockBuilderSplitNode( dock_id_bottom, ImGuiDir_Down, 0.45f, NULL, &dock_id_bottom );
ImGuiID dock_id_center = ImGui::DockBuilderSplitNode( dock_id_main, ImGuiDir_Down, 1.0f, NULL, &dock_id_main );
ImGui::DockBuilderDockWindow( "Top", dock_id_top );
ImGui::DockBuilderDockWindow( "Left", dock_id_left );
ImGui::DockBuilderDockWindow( "Right", dock_id_right );
ImGui::DockBuilderDockWindow( "Bottom Right", dock_id_rightBottom );
ImGui::DockBuilderDockWindow( "Bottom", dock_id_bottom );
ImGui::DockBuilderDockWindow( "Console", dock_id_bottomC );
ImGui::DockBuilderDockWindow( "Center", dock_id_center );
ImGui::DockBuilderFinish( dockspaceID );
}
void DockspaceDraw()
{
static ImGuiID dockspaceID = 0;
static bool bDockSpaceBuilt = false;
ImGuiWindowFlags windowFlags = 0;
windowFlags |= ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove;
windowFlags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus | ImGuiWindowFlags_NoResize;
dockspaceID = ImGui::GetID( "MyDockspace" );
ImGuiViewport* pViewport = ImGui::GetMainViewport();
ImGui::SetNextWindowPos( pViewport->Pos );
ImGui::SetNextWindowSize( pViewport->Size );
ImGui::SetNextWindowViewport( pViewport->ID );
if ( !bDockSpaceBuilt ) {
DockspaceBuild( dockspaceID, bDockSpaceBuilt );
}
ImGui::Begin( "Dockspace", nullptr, windowFlags );
ImGui::DockSpace( dockspaceID, ImVec2( 0, 0 ), ImGuiDockNodeFlags_None );
ImGui::End();
}
....
DockspaceDraw();
ImGui::Begin( "Center", nullptr );
ImGui::End();
ImGui::Begin( "Left", nullptr );
ImGui::End();
ImGui::Begin( "Right", nullptr );
ImGui::End();
ImGui::Begin( "Top", nullptr );
ImGui::End();
ImGui::Begin( "Bottom Right", nullptr );
ImGui::End();
ImGui::Begin( "Bottom", nullptr );
ImGui::End();
ImGui::Begin( "Console", nullptr );
ImGui::End();
I think you just split one time too many
that last split is splitting the center area into center and the red bit becomes main
(also idk what splitting with a ratio of 1.0 is meant to do :P)