@ -438,6 +438,9 @@ CODE
- likewise io . MousePos and GetMousePos ( ) will use OS coordinates .
If you query mouse positions to interact with non - imgui coordinates you will need to offset them , e . g . subtract GetWindowViewport ( ) - > Pos .
- 2024 / 05 / 21 ( 1.90 .7 ) - docking : changed signature of DockSpaceOverViewport ( ) to add explicit dockspace id if desired . pass 0 to use old behavior . ( # 7611 )
- old : DockSpaceOverViewport ( const ImGuiViewport * viewport = NULL , ImGuiDockNodeFlags flags = 0 , . . . ) ;
- new : DockSpaceOverViewport ( ImGuiID dockspace_id = 0 , const ImGuiViewport * viewport = NULL , ImGuiDockNodeFlags flags = 0 , . . . ) ;
- 2024 / 05 / 16 ( 1.90 .7 ) - inputs : on macOS X , Cmd and Ctrl keys are now automatically swapped by io . AddKeyEvent ( ) as this naturally align with how macOS X uses those keys .
- it shouldn ' t really affect you unless you had custom shortcut swapping in place for macOS X apps .
- removed ImGuiMod_Shortcut which was previously dynamically remapping to Ctrl or Cmd / Super . It is now unnecessary to specific cross - platform idiomatic shortcuts . ( # 2343 , # 4084 , # 5923 , # 456 )
@ -18488,7 +18491,7 @@ void ImGui::SetWindowDock(ImGuiWindow* window, ImGuiID dock_id, ImGuiCond cond)
// The Central Node is always displayed even when empty and shrink/extend according to the requested size of its neighbors.
// DockSpace() needs to be submitted _before_ any window they can host. If you use a dockspace, submit it early in your app.
// When ImGuiDockNodeFlags_KeepAliveOnly is set, nothing is submitted in the current window (function may be called from any location).
ImGuiID ImGui : : DockSpace ( ImGuiID id , const ImVec2 & size_arg , ImGuiDockNodeFlags flags , const ImGuiWindowClass * window_class )
ImGuiID ImGui : : DockSpace ( ImGuiID dockspace_ id, const ImVec2 & size_arg , ImGuiDockNodeFlags flags , const ImGuiWindowClass * window_class )
{
ImGuiContext & g = * GImGui ;
ImGuiWindow * window = GetCurrentWindowRead ( ) ;
@ -18504,16 +18507,16 @@ ImGuiID ImGui::DockSpace(ImGuiID id, const ImVec2& size_arg, ImGuiDockNodeFlags
window = GetCurrentWindow ( ) ; // call to set window->WriteAccessed = true;
IM_ASSERT ( ( flags & ImGuiDockNodeFlags_DockSpace ) = = 0 ) ;
IM_ASSERT ( id ! = 0 ) ;
ImGuiDockNode * node = DockContextFindNodeByID ( & g , id ) ;
if ( ! node )
IM_ASSERT ( dockspace_ id ! = 0 ) ;
ImGuiDockNode * node = DockContextFindNodeByID ( & g , dockspace_ id) ;
if ( node = = NULL )
{
IMGUI_DEBUG_LOG_DOCKING ( " [docking] DockSpace: dockspace node 0x%08X created \n " , id ) ;
node = DockContextAddNode ( & g , id ) ;
IMGUI_DEBUG_LOG_DOCKING ( " [docking] DockSpace: dockspace node 0x%08X created \n " , dockspace_ id) ;
node = DockContextAddNode ( & g , dockspace_ id) ;
node - > SetLocalFlags ( ImGuiDockNodeFlags_CentralNode ) ;
}
if ( window_class & & window_class - > ClassId ! = node - > WindowClass . ClassId )
IMGUI_DEBUG_LOG_DOCKING ( " [docking] DockSpace: dockspace node 0x%08X: setup WindowClass 0x%08X -> 0x%08X \n " , id , node - > WindowClass . ClassId , window_class - > ClassId ) ;
IMGUI_DEBUG_LOG_DOCKING ( " [docking] DockSpace: dockspace node 0x%08X: setup WindowClass 0x%08X -> 0x%08X \n " , dockspace_ id, node - > WindowClass . ClassId , window_class - > ClassId ) ;
node - > SharedFlags = flags ;
node - > WindowClass = window_class ? * window_class : ImGuiWindowClass ( ) ;
@ -18523,7 +18526,7 @@ ImGuiID ImGui::DockSpace(ImGuiID id, const ImVec2& size_arg, ImGuiDockNodeFlags
{
IM_ASSERT ( node - > IsDockSpace ( ) = = false & & " Cannot call DockSpace() twice a frame with the same ID " ) ;
node - > SetLocalFlags ( node - > LocalFlags | ImGuiDockNodeFlags_DockSpace ) ;
return id ;
return dockspace_ id;
}
node - > SetLocalFlags ( node - > LocalFlags | ImGuiDockNodeFlags_DockSpace ) ;
@ -18531,7 +18534,7 @@ ImGuiID ImGui::DockSpace(ImGuiID id, const ImVec2& size_arg, ImGuiDockNodeFlags
if ( flags & ImGuiDockNodeFlags_KeepAliveOnly )
{
node - > LastFrameAlive = g . FrameCount ;
return id ;
return dockspace_ id;
}
const ImVec2 content_avail = GetContentRegionAvail ( ) ;
@ -18556,7 +18559,7 @@ ImGuiID ImGui::DockSpace(ImGuiID id, const ImVec2& size_arg, ImGuiDockNodeFlags
window_flags | = ImGuiWindowFlags_NoBackground ;
char title [ 256 ] ;
ImFormatString ( title , IM_ARRAYSIZE ( title ) , " %s/DockSpace_%08X " , window - > Name , id ) ;
ImFormatString ( title , IM_ARRAYSIZE ( title ) , " %s/DockSpace_%08X " , window - > Name , dockspace_ id) ;
PushStyleVar ( ImGuiStyleVar_ChildBorderSize , 0.0f ) ;
Begin ( title , NULL , window_flags ) ;
@ -18585,22 +18588,23 @@ ImGuiID ImGui::DockSpace(ImGuiID id, const ImVec2& size_arg, ImGuiDockNodeFlags
ImRect bb ( node - > Pos , node - > Pos + size ) ;
ItemSize ( size ) ;
ItemAdd ( bb , id , NULL , ImGuiItemFlags_NoNav ) ; // Not a nav point (could be, would need to draw the nav rect and replicate/refactor activation from BeginChild(), but seems like CTRL+Tab works better here?)
ItemAdd ( bb , dockspace_ id, NULL , ImGuiItemFlags_NoNav ) ; // Not a nav point (could be, would need to draw the nav rect and replicate/refactor activation from BeginChild(), but seems like CTRL+Tab works better here?)
if ( ( g . LastItemData . StatusFlags & ImGuiItemStatusFlags_HoveredRect ) & & IsWindowChildOf ( g . HoveredWindow , host_window , false , true ) ) // To fullfill IsItemHovered(), similar to EndChild()
g . LastItemData . StatusFlags | = ImGuiItemStatusFlags_HoveredWindow ;
return id ;
return dockspace_ id;
}
// Tips: Use with ImGuiDockNodeFlags_PassthruCentralNode!
// The limitation with this call is that your window won't have a menu bar.
// The limitation with this call is that your window won't have a local menu bar, but you can also use BeginMainMenuBar() .
// Even though we could pass window flags, it would also require the user to be able to call BeginMenuBar() somehow meaning we can't Begin/End in a single function.
// But you can also use BeginMainMenuBar(). If you really want a menu bar inside the same window as the one hosting the dockspace, you will need to copy this code somewhere and tweak it.
ImGuiID ImGui : : DockSpaceOverViewport ( const ImGuiViewport * viewport , ImGuiDockNodeFlags dockspace_flags , const ImGuiWindowClass * window_class )
// If you really want a menu bar inside the same window as the one hosting the dockspace, you will need to copy this code somewhere and tweak it.
ImGuiID ImGui : : DockSpaceOverViewport ( ImGuiID dockspace_id , const ImGuiViewport * viewport , ImGuiDockNodeFlags dockspace_flags , const ImGuiWindowClass * window_class )
{
if ( viewport = = NULL )
viewport = GetMainViewport ( ) ;
// Submit a window filling the entire viewport
SetNextWindowPos ( viewport - > WorkPos ) ;
SetNextWindowSize ( viewport - > WorkSize ) ;
SetNextWindowViewport ( viewport - > ID ) ;
@ -18612,7 +18616,7 @@ ImGuiID ImGui::DockSpaceOverViewport(const ImGuiViewport* viewport, ImGuiDockNod
host_window_flags | = ImGuiWindowFlags_NoBackground ;
char label [ 32 ] ;
ImFormatString ( label , IM_ARRAYSIZE ( label ) , " DockSpace Viewport_%08X" , viewport - > ID ) ;
ImFormatString ( label , IM_ARRAYSIZE ( label ) , " WindowOver Viewport_%08X" , viewport - > ID ) ;
PushStyleVar ( ImGuiStyleVar_WindowRounding , 0.0f ) ;
PushStyleVar ( ImGuiStyleVar_WindowBorderSize , 0.0f ) ;
@ -18620,8 +18624,11 @@ ImGuiID ImGui::DockSpaceOverViewport(const ImGuiViewport* viewport, ImGuiDockNod
Begin ( label , NULL , host_window_flags ) ;
PopStyleVar ( 3 ) ;
ImGuiID dockspace_id = GetID ( " DockSpace " ) ;
// Submit the dockspace
if ( dockspace_id = = 0 )
dockspace_id = GetID ( " DockSpace " ) ;
DockSpace ( dockspace_id , ImVec2 ( 0.0f , 0.0f ) , dockspace_flags , window_class ) ;
End ( ) ;
return dockspace_id ;