diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 4502520..0f1670f 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -36,18 +36,22 @@ - Added ImGuiConfigFlags_DockingEnable flag to enable Docking. [BETA] Set with `io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;`. - Added BeginTabBar(), EndTabBar(), BeginTabItem(), EndTabItem(), SetTabItemClosed() API. (#261, #351) +- Added ImGuiTabBarFlags flags for BeginTabBar(). +- Added ImGuiTabItemFlags flags for BeginTabItem(). - Added DockSpace() API. (#351) -- Added SetNextWindowDock() API. (#351) -- Added IsWindowDocked() API. (#351) +- Added ImGuiDockNodeFlags flags for DockSpace(). +- Added SetNextWindowDock(), SetNextWindowDockFamily() API. (#351) +- Added GetWindowDockId(), IsWindowDocked() API. (#351) - Added ImGuiWindowFlags_NoDocking window flag to disable the possibility for a window to be docked. Popup, Menu and Child windows always have the ImGuiWindowFlags_NoDocking flag set. (#351) - Added ImGuiWindowFlags_UnsavedDocument window flag to append '*' to title without altering the ID, as a convenience to avoid using the ### operator. -- Added io.ConfigDockingWithKeyMod option to configure docking mode. +- Added io.ConfigDockingWithShift option to configure docking mode. - Style: Added ImGuiCol_DockingPreview, ImGuiCol_DockingBg colors. (#351) - Style: Added ImGuiCol_Tab, ImGuiCol_TabHovered, ImGuiCol_TabActive, ImGuiCol_TabUnfocused, ImGuiCol_TabUnfocusedActive colors. (#261, #351) - Demo: Added Layout->Tabs demo code. (#261, #351) - Demo: Added "Documents" example app showcasing possible use for tabs. (#261, #351) +- Demo: Added "DockSpace" example app showcasing use of explicit dockspace nodes. (#351) ----------------------------------------------------------------------- diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 4502520..0f1670f 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -36,18 +36,22 @@ - Added ImGuiConfigFlags_DockingEnable flag to enable Docking. [BETA] Set with `io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;`. - Added BeginTabBar(), EndTabBar(), BeginTabItem(), EndTabItem(), SetTabItemClosed() API. (#261, #351) +- Added ImGuiTabBarFlags flags for BeginTabBar(). +- Added ImGuiTabItemFlags flags for BeginTabItem(). - Added DockSpace() API. (#351) -- Added SetNextWindowDock() API. (#351) -- Added IsWindowDocked() API. (#351) +- Added ImGuiDockNodeFlags flags for DockSpace(). +- Added SetNextWindowDock(), SetNextWindowDockFamily() API. (#351) +- Added GetWindowDockId(), IsWindowDocked() API. (#351) - Added ImGuiWindowFlags_NoDocking window flag to disable the possibility for a window to be docked. Popup, Menu and Child windows always have the ImGuiWindowFlags_NoDocking flag set. (#351) - Added ImGuiWindowFlags_UnsavedDocument window flag to append '*' to title without altering the ID, as a convenience to avoid using the ### operator. -- Added io.ConfigDockingWithKeyMod option to configure docking mode. +- Added io.ConfigDockingWithShift option to configure docking mode. - Style: Added ImGuiCol_DockingPreview, ImGuiCol_DockingBg colors. (#351) - Style: Added ImGuiCol_Tab, ImGuiCol_TabHovered, ImGuiCol_TabActive, ImGuiCol_TabUnfocused, ImGuiCol_TabUnfocusedActive colors. (#261, #351) - Demo: Added Layout->Tabs demo code. (#261, #351) - Demo: Added "Documents" example app showcasing possible use for tabs. (#261, #351) +- Demo: Added "DockSpace" example app showcasing use of explicit dockspace nodes. (#351) ----------------------------------------------------------------------- diff --git a/docs/TODO.txt b/docs/TODO.txt index 72d9200..31536e2 100644 --- a/docs/TODO.txt +++ b/docs/TODO.txt @@ -123,15 +123,15 @@ - splitter/separator: formalize the splitter idiom into an official api (we want to handle n-way split) (#319) - - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete) + - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete). this is mostly working but the DockBuilderXXX api are not exposed/finished. - dock: A- implicit, invisible per-viewport dockspace to dock to. - - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized - - dock: B~ document root node resizing behavior incorrect + - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized. + - dock: B~ document root node resizing behavior incorrect. - dock: B~ document root node retrieval of ID ? - - dock: B- full rebuild loses viewport of floating dock nodes - - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them + - dock: B- debug full rebuild loses viewport of floating dock nodes. + - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them (doesn't affect the user nor request platform windows to be created, but unnecessary) - dock: B- resize sibling locking behavior may be less desirable if we merged same-axis sibling in a same node level? - - dock: A- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) + - dock: B- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) - dock: B~ SetNextWindowDock() calls (with conditional) -> defer everything to DockContextUpdate (repro: Documents->[X]Windows->Dock 1 elsewhere->Click Redock All - dock: B~ tidy up tab list popup buttons features (available with manual tab-bar, see ImGuiTabBarFlags_NoTabListPopupButton code, not used by docking nodes) - dock: B- DockSpace() border issues diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 4502520..0f1670f 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -36,18 +36,22 @@ - Added ImGuiConfigFlags_DockingEnable flag to enable Docking. [BETA] Set with `io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;`. - Added BeginTabBar(), EndTabBar(), BeginTabItem(), EndTabItem(), SetTabItemClosed() API. (#261, #351) +- Added ImGuiTabBarFlags flags for BeginTabBar(). +- Added ImGuiTabItemFlags flags for BeginTabItem(). - Added DockSpace() API. (#351) -- Added SetNextWindowDock() API. (#351) -- Added IsWindowDocked() API. (#351) +- Added ImGuiDockNodeFlags flags for DockSpace(). +- Added SetNextWindowDock(), SetNextWindowDockFamily() API. (#351) +- Added GetWindowDockId(), IsWindowDocked() API. (#351) - Added ImGuiWindowFlags_NoDocking window flag to disable the possibility for a window to be docked. Popup, Menu and Child windows always have the ImGuiWindowFlags_NoDocking flag set. (#351) - Added ImGuiWindowFlags_UnsavedDocument window flag to append '*' to title without altering the ID, as a convenience to avoid using the ### operator. -- Added io.ConfigDockingWithKeyMod option to configure docking mode. +- Added io.ConfigDockingWithShift option to configure docking mode. - Style: Added ImGuiCol_DockingPreview, ImGuiCol_DockingBg colors. (#351) - Style: Added ImGuiCol_Tab, ImGuiCol_TabHovered, ImGuiCol_TabActive, ImGuiCol_TabUnfocused, ImGuiCol_TabUnfocusedActive colors. (#261, #351) - Demo: Added Layout->Tabs demo code. (#261, #351) - Demo: Added "Documents" example app showcasing possible use for tabs. (#261, #351) +- Demo: Added "DockSpace" example app showcasing use of explicit dockspace nodes. (#351) ----------------------------------------------------------------------- diff --git a/docs/TODO.txt b/docs/TODO.txt index 72d9200..31536e2 100644 --- a/docs/TODO.txt +++ b/docs/TODO.txt @@ -123,15 +123,15 @@ - splitter/separator: formalize the splitter idiom into an official api (we want to handle n-way split) (#319) - - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete) + - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete). this is mostly working but the DockBuilderXXX api are not exposed/finished. - dock: A- implicit, invisible per-viewport dockspace to dock to. - - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized - - dock: B~ document root node resizing behavior incorrect + - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized. + - dock: B~ document root node resizing behavior incorrect. - dock: B~ document root node retrieval of ID ? - - dock: B- full rebuild loses viewport of floating dock nodes - - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them + - dock: B- debug full rebuild loses viewport of floating dock nodes. + - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them (doesn't affect the user nor request platform windows to be created, but unnecessary) - dock: B- resize sibling locking behavior may be less desirable if we merged same-axis sibling in a same node level? - - dock: A- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) + - dock: B- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) - dock: B~ SetNextWindowDock() calls (with conditional) -> defer everything to DockContextUpdate (repro: Documents->[X]Windows->Dock 1 elsewhere->Click Redock All - dock: B~ tidy up tab list popup buttons features (available with manual tab-bar, see ImGuiTabBarFlags_NoTabListPopupButton code, not used by docking nodes) - dock: B- DockSpace() border issues diff --git a/examples/example_win32_directx11/main.cpp b/examples/example_win32_directx11/main.cpp index 16c03ed..5653134 100644 --- a/examples/example_win32_directx11/main.cpp +++ b/examples/example_win32_directx11/main.cpp @@ -142,7 +142,7 @@ io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleFonts; // FIXME-DPI: THIS CURRENTLY DOESN'T WORK AS EXPECTED. DON'T USE IN USER APP! io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleViewports; // FIXME-DPI io.ConfigResizeWindowsFromEdges = true; - io.ConfigDockingWithKeyMod = true; + io.ConfigDockingWithShift = true; ImGui_ImplWin32_Init(hwnd); ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext); diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 4502520..0f1670f 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -36,18 +36,22 @@ - Added ImGuiConfigFlags_DockingEnable flag to enable Docking. [BETA] Set with `io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;`. - Added BeginTabBar(), EndTabBar(), BeginTabItem(), EndTabItem(), SetTabItemClosed() API. (#261, #351) +- Added ImGuiTabBarFlags flags for BeginTabBar(). +- Added ImGuiTabItemFlags flags for BeginTabItem(). - Added DockSpace() API. (#351) -- Added SetNextWindowDock() API. (#351) -- Added IsWindowDocked() API. (#351) +- Added ImGuiDockNodeFlags flags for DockSpace(). +- Added SetNextWindowDock(), SetNextWindowDockFamily() API. (#351) +- Added GetWindowDockId(), IsWindowDocked() API. (#351) - Added ImGuiWindowFlags_NoDocking window flag to disable the possibility for a window to be docked. Popup, Menu and Child windows always have the ImGuiWindowFlags_NoDocking flag set. (#351) - Added ImGuiWindowFlags_UnsavedDocument window flag to append '*' to title without altering the ID, as a convenience to avoid using the ### operator. -- Added io.ConfigDockingWithKeyMod option to configure docking mode. +- Added io.ConfigDockingWithShift option to configure docking mode. - Style: Added ImGuiCol_DockingPreview, ImGuiCol_DockingBg colors. (#351) - Style: Added ImGuiCol_Tab, ImGuiCol_TabHovered, ImGuiCol_TabActive, ImGuiCol_TabUnfocused, ImGuiCol_TabUnfocusedActive colors. (#261, #351) - Demo: Added Layout->Tabs demo code. (#261, #351) - Demo: Added "Documents" example app showcasing possible use for tabs. (#261, #351) +- Demo: Added "DockSpace" example app showcasing use of explicit dockspace nodes. (#351) ----------------------------------------------------------------------- diff --git a/docs/TODO.txt b/docs/TODO.txt index 72d9200..31536e2 100644 --- a/docs/TODO.txt +++ b/docs/TODO.txt @@ -123,15 +123,15 @@ - splitter/separator: formalize the splitter idiom into an official api (we want to handle n-way split) (#319) - - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete) + - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete). this is mostly working but the DockBuilderXXX api are not exposed/finished. - dock: A- implicit, invisible per-viewport dockspace to dock to. - - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized - - dock: B~ document root node resizing behavior incorrect + - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized. + - dock: B~ document root node resizing behavior incorrect. - dock: B~ document root node retrieval of ID ? - - dock: B- full rebuild loses viewport of floating dock nodes - - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them + - dock: B- debug full rebuild loses viewport of floating dock nodes. + - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them (doesn't affect the user nor request platform windows to be created, but unnecessary) - dock: B- resize sibling locking behavior may be less desirable if we merged same-axis sibling in a same node level? - - dock: A- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) + - dock: B- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) - dock: B~ SetNextWindowDock() calls (with conditional) -> defer everything to DockContextUpdate (repro: Documents->[X]Windows->Dock 1 elsewhere->Click Redock All - dock: B~ tidy up tab list popup buttons features (available with manual tab-bar, see ImGuiTabBarFlags_NoTabListPopupButton code, not used by docking nodes) - dock: B- DockSpace() border issues diff --git a/examples/example_win32_directx11/main.cpp b/examples/example_win32_directx11/main.cpp index 16c03ed..5653134 100644 --- a/examples/example_win32_directx11/main.cpp +++ b/examples/example_win32_directx11/main.cpp @@ -142,7 +142,7 @@ io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleFonts; // FIXME-DPI: THIS CURRENTLY DOESN'T WORK AS EXPECTED. DON'T USE IN USER APP! io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleViewports; // FIXME-DPI io.ConfigResizeWindowsFromEdges = true; - io.ConfigDockingWithKeyMod = true; + io.ConfigDockingWithShift = true; ImGui_ImplWin32_Init(hwnd); ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext); diff --git a/imgui.cpp b/imgui.cpp index 1b6748c..cea99d5 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -1090,7 +1090,7 @@ DisplayFramebufferScale = ImVec2(1.0f, 1.0f); // Miscellaneous configuration options - ConfigDockingWithKeyMod = true; + ConfigDockingWithShift = false; #ifdef __APPLE__ ConfigMacOSXBehaviors = true; // Set Mac OS X style defaults based on __APPLE__ compile time flag #else @@ -5519,7 +5519,7 @@ { // Docking: Dragging a dockable window (or any of its child) turns it into a drag and drop source. // We need to do this _before_ we overwrite window->DC.LastItemId below because BeginAsDockableDragDropSource() also overwrites it. - if ((g.ActiveId == window->MoveId) && ((g.IO.ConfigDockingWithKeyMod && g.IO.KeyShift) || (!g.IO.ConfigDockingWithKeyMod))) + if ((g.ActiveId == window->MoveId) && ((g.IO.ConfigDockingWithShift && g.IO.KeyShift) || (!g.IO.ConfigDockingWithShift))) if ((window->RootWindow->Flags & (ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDocking)) == 0) BeginAsDockableDragDropSource(window); @@ -11062,7 +11062,7 @@ // When docking without holding Shift, we only allow and preview docking when hovering over a drop rect or over the title bar data->IsDropAllowed = (data->SplitDir != ImGuiDir_None) || (data->IsCenterAvailable); - if (!is_explicit_target && !data->IsSplitDirExplicit && !g.IO.ConfigDockingWithKeyMod) + if (!is_explicit_target && !data->IsSplitDirExplicit && !g.IO.ConfigDockingWithShift) data->IsDropAllowed = false; // Calculate split area @@ -12005,7 +12005,7 @@ window->DC.LastItemId = window->MoveId; window = window->RootWindow; IM_ASSERT((window->Flags & ImGuiWindowFlags_NoDocking) == 0); - bool is_drag_docking = (g.IO.ConfigDockingWithKeyMod) || ImRect(0, 0, window->SizeFull.x, GetFrameHeight()).Contains(g.ActiveIdClickOffset); + bool is_drag_docking = (g.IO.ConfigDockingWithShift) || ImRect(0, 0, window->SizeFull.x, GetFrameHeight()).Contains(g.ActiveIdClickOffset); if (is_drag_docking && BeginDragDropSource(ImGuiDragDropFlags_SourceNoPreviewTooltip | ImGuiDragDropFlags_SourceNoHoldToOpenOthers | ImGuiDragDropFlags_SourceAutoExpirePayload)) { SetDragDropPayload(IMGUI_PAYLOAD_TYPE_WINDOW, &window, sizeof(window)); @@ -12047,7 +12047,7 @@ allow_null_target_node = true; // Dock into a regular window const ImRect explicit_target_rect = (target_node && target_node->TabBar) ? target_node->TabBar->BarRect : ImRect(window->Pos, window->Pos + ImVec2(window->Size.x, GetFrameHeight())); - const bool is_explicit_target = g.IO.ConfigDockingWithKeyMod || IsMouseHoveringRect(explicit_target_rect.Min, explicit_target_rect.Max); + const bool is_explicit_target = g.IO.ConfigDockingWithShift || IsMouseHoveringRect(explicit_target_rect.Min, explicit_target_rect.Max); // Preview docking request and find out split direction/ratio //const bool do_preview = true; // Ignore testing for payload->IsPreview() which removes one frame of delay, but breaks overlapping drop targets within the same window. diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 4502520..0f1670f 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -36,18 +36,22 @@ - Added ImGuiConfigFlags_DockingEnable flag to enable Docking. [BETA] Set with `io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;`. - Added BeginTabBar(), EndTabBar(), BeginTabItem(), EndTabItem(), SetTabItemClosed() API. (#261, #351) +- Added ImGuiTabBarFlags flags for BeginTabBar(). +- Added ImGuiTabItemFlags flags for BeginTabItem(). - Added DockSpace() API. (#351) -- Added SetNextWindowDock() API. (#351) -- Added IsWindowDocked() API. (#351) +- Added ImGuiDockNodeFlags flags for DockSpace(). +- Added SetNextWindowDock(), SetNextWindowDockFamily() API. (#351) +- Added GetWindowDockId(), IsWindowDocked() API. (#351) - Added ImGuiWindowFlags_NoDocking window flag to disable the possibility for a window to be docked. Popup, Menu and Child windows always have the ImGuiWindowFlags_NoDocking flag set. (#351) - Added ImGuiWindowFlags_UnsavedDocument window flag to append '*' to title without altering the ID, as a convenience to avoid using the ### operator. -- Added io.ConfigDockingWithKeyMod option to configure docking mode. +- Added io.ConfigDockingWithShift option to configure docking mode. - Style: Added ImGuiCol_DockingPreview, ImGuiCol_DockingBg colors. (#351) - Style: Added ImGuiCol_Tab, ImGuiCol_TabHovered, ImGuiCol_TabActive, ImGuiCol_TabUnfocused, ImGuiCol_TabUnfocusedActive colors. (#261, #351) - Demo: Added Layout->Tabs demo code. (#261, #351) - Demo: Added "Documents" example app showcasing possible use for tabs. (#261, #351) +- Demo: Added "DockSpace" example app showcasing use of explicit dockspace nodes. (#351) ----------------------------------------------------------------------- diff --git a/docs/TODO.txt b/docs/TODO.txt index 72d9200..31536e2 100644 --- a/docs/TODO.txt +++ b/docs/TODO.txt @@ -123,15 +123,15 @@ - splitter/separator: formalize the splitter idiom into an official api (we want to handle n-way split) (#319) - - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete) + - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete). this is mostly working but the DockBuilderXXX api are not exposed/finished. - dock: A- implicit, invisible per-viewport dockspace to dock to. - - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized - - dock: B~ document root node resizing behavior incorrect + - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized. + - dock: B~ document root node resizing behavior incorrect. - dock: B~ document root node retrieval of ID ? - - dock: B- full rebuild loses viewport of floating dock nodes - - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them + - dock: B- debug full rebuild loses viewport of floating dock nodes. + - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them (doesn't affect the user nor request platform windows to be created, but unnecessary) - dock: B- resize sibling locking behavior may be less desirable if we merged same-axis sibling in a same node level? - - dock: A- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) + - dock: B- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) - dock: B~ SetNextWindowDock() calls (with conditional) -> defer everything to DockContextUpdate (repro: Documents->[X]Windows->Dock 1 elsewhere->Click Redock All - dock: B~ tidy up tab list popup buttons features (available with manual tab-bar, see ImGuiTabBarFlags_NoTabListPopupButton code, not used by docking nodes) - dock: B- DockSpace() border issues diff --git a/examples/example_win32_directx11/main.cpp b/examples/example_win32_directx11/main.cpp index 16c03ed..5653134 100644 --- a/examples/example_win32_directx11/main.cpp +++ b/examples/example_win32_directx11/main.cpp @@ -142,7 +142,7 @@ io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleFonts; // FIXME-DPI: THIS CURRENTLY DOESN'T WORK AS EXPECTED. DON'T USE IN USER APP! io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleViewports; // FIXME-DPI io.ConfigResizeWindowsFromEdges = true; - io.ConfigDockingWithKeyMod = true; + io.ConfigDockingWithShift = true; ImGui_ImplWin32_Init(hwnd); ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext); diff --git a/imgui.cpp b/imgui.cpp index 1b6748c..cea99d5 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -1090,7 +1090,7 @@ DisplayFramebufferScale = ImVec2(1.0f, 1.0f); // Miscellaneous configuration options - ConfigDockingWithKeyMod = true; + ConfigDockingWithShift = false; #ifdef __APPLE__ ConfigMacOSXBehaviors = true; // Set Mac OS X style defaults based on __APPLE__ compile time flag #else @@ -5519,7 +5519,7 @@ { // Docking: Dragging a dockable window (or any of its child) turns it into a drag and drop source. // We need to do this _before_ we overwrite window->DC.LastItemId below because BeginAsDockableDragDropSource() also overwrites it. - if ((g.ActiveId == window->MoveId) && ((g.IO.ConfigDockingWithKeyMod && g.IO.KeyShift) || (!g.IO.ConfigDockingWithKeyMod))) + if ((g.ActiveId == window->MoveId) && ((g.IO.ConfigDockingWithShift && g.IO.KeyShift) || (!g.IO.ConfigDockingWithShift))) if ((window->RootWindow->Flags & (ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDocking)) == 0) BeginAsDockableDragDropSource(window); @@ -11062,7 +11062,7 @@ // When docking without holding Shift, we only allow and preview docking when hovering over a drop rect or over the title bar data->IsDropAllowed = (data->SplitDir != ImGuiDir_None) || (data->IsCenterAvailable); - if (!is_explicit_target && !data->IsSplitDirExplicit && !g.IO.ConfigDockingWithKeyMod) + if (!is_explicit_target && !data->IsSplitDirExplicit && !g.IO.ConfigDockingWithShift) data->IsDropAllowed = false; // Calculate split area @@ -12005,7 +12005,7 @@ window->DC.LastItemId = window->MoveId; window = window->RootWindow; IM_ASSERT((window->Flags & ImGuiWindowFlags_NoDocking) == 0); - bool is_drag_docking = (g.IO.ConfigDockingWithKeyMod) || ImRect(0, 0, window->SizeFull.x, GetFrameHeight()).Contains(g.ActiveIdClickOffset); + bool is_drag_docking = (g.IO.ConfigDockingWithShift) || ImRect(0, 0, window->SizeFull.x, GetFrameHeight()).Contains(g.ActiveIdClickOffset); if (is_drag_docking && BeginDragDropSource(ImGuiDragDropFlags_SourceNoPreviewTooltip | ImGuiDragDropFlags_SourceNoHoldToOpenOthers | ImGuiDragDropFlags_SourceAutoExpirePayload)) { SetDragDropPayload(IMGUI_PAYLOAD_TYPE_WINDOW, &window, sizeof(window)); @@ -12047,7 +12047,7 @@ allow_null_target_node = true; // Dock into a regular window const ImRect explicit_target_rect = (target_node && target_node->TabBar) ? target_node->TabBar->BarRect : ImRect(window->Pos, window->Pos + ImVec2(window->Size.x, GetFrameHeight())); - const bool is_explicit_target = g.IO.ConfigDockingWithKeyMod || IsMouseHoveringRect(explicit_target_rect.Min, explicit_target_rect.Max); + const bool is_explicit_target = g.IO.ConfigDockingWithShift || IsMouseHoveringRect(explicit_target_rect.Min, explicit_target_rect.Max); // Preview docking request and find out split direction/ratio //const bool do_preview = true; // Ignore testing for payload->IsPreview() which removes one frame of delay, but breaks overlapping drop targets within the same window. diff --git a/imgui.h b/imgui.h index c800b7a..c89aca7 100644 --- a/imgui.h +++ b/imgui.h @@ -525,7 +525,7 @@ // Docking // [BETA API] Enable with io.ConfigFlags |= ImGuiConfigFlags_DockingEnable. // Note: you DO NOT need to call DockSpace() to use most Docking facilities! - // To dock windows: hold SHIFT anywhere while moving windows (if io.ConfigDockingWithKeyMod == true) or drag windows from their title bar (if io.ConfigDockingWithKeyMod = false) + // To dock windows: hold SHIFT anywhere while moving windows (if io.ConfigDockingWithShift == true) or drag windows from their title bar (if io.ConfigDockingWithShift = false) // Use DockSpace() to create an explicit dock node _within_ an existing window. See Docking demo for details. IMGUI_API void DockSpace(ImGuiID id, const ImVec2& size = ImVec2(0, 0), ImGuiDockNodeFlags flags = 0, const ImGuiDockFamily* dock_family = NULL); IMGUI_API void SetNextWindowDockId(ImGuiID dock_id, ImGuiCond cond = 0); // set next window dock id (FIXME-DOCK) @@ -945,7 +945,7 @@ ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, // Instruct back-end to not alter mouse cursor shape and visibility. Use if the back-end cursor changes are interfering with yours and you don't want to use SetMouseCursor() to change mouse cursor. You may want to honor requests from imgui by reading GetMouseCursor() yourself instead. // [BETA] Docking - ImGuiConfigFlags_DockingEnable = 1 << 6, // Docking enable flags. Use SHIFT to dock window into another (or without SHIFT if io.ConfigDockingWithKeyMod = false). + ImGuiConfigFlags_DockingEnable = 1 << 6, // Docking enable flags. Use SHIFT to dock window into another (or without SHIFT if io.ConfigDockingWithShift = false). // [BETA] Viewports ImGuiConfigFlags_ViewportsEnable = 1 << 10, // Viewport enable flags (require both ImGuiConfigFlags_PlatformHasViewports + ImGuiConfigFlags_RendererHasViewports set by the respective back-ends) @@ -1214,7 +1214,7 @@ // Miscellaneous configuration options bool MouseDrawCursor; // = false // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by back-end implementations. - bool ConfigDockingWithKeyMod; // = true // Enable docking with holding Shift key (reduce visual noise, allows dropping in wider space) + bool ConfigDockingWithShift; // = true // Enable docking with holding Shift key (reduce visual noise, allows dropping in wider space) bool ConfigMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl (was called io.OptMacOSXBehaviors prior to 1.63) bool ConfigInputTextCursorBlink; // = true // Set to false to disable blinking cursor, for users who consider it distracting. (was called: io.OptCursorBlink prior to 1.63) bool ConfigResizeWindowsFromEdges; // = true // [BETA] Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be the ImGuiWindowFlags_ResizeFromAnySide flag) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 4502520..0f1670f 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -36,18 +36,22 @@ - Added ImGuiConfigFlags_DockingEnable flag to enable Docking. [BETA] Set with `io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;`. - Added BeginTabBar(), EndTabBar(), BeginTabItem(), EndTabItem(), SetTabItemClosed() API. (#261, #351) +- Added ImGuiTabBarFlags flags for BeginTabBar(). +- Added ImGuiTabItemFlags flags for BeginTabItem(). - Added DockSpace() API. (#351) -- Added SetNextWindowDock() API. (#351) -- Added IsWindowDocked() API. (#351) +- Added ImGuiDockNodeFlags flags for DockSpace(). +- Added SetNextWindowDock(), SetNextWindowDockFamily() API. (#351) +- Added GetWindowDockId(), IsWindowDocked() API. (#351) - Added ImGuiWindowFlags_NoDocking window flag to disable the possibility for a window to be docked. Popup, Menu and Child windows always have the ImGuiWindowFlags_NoDocking flag set. (#351) - Added ImGuiWindowFlags_UnsavedDocument window flag to append '*' to title without altering the ID, as a convenience to avoid using the ### operator. -- Added io.ConfigDockingWithKeyMod option to configure docking mode. +- Added io.ConfigDockingWithShift option to configure docking mode. - Style: Added ImGuiCol_DockingPreview, ImGuiCol_DockingBg colors. (#351) - Style: Added ImGuiCol_Tab, ImGuiCol_TabHovered, ImGuiCol_TabActive, ImGuiCol_TabUnfocused, ImGuiCol_TabUnfocusedActive colors. (#261, #351) - Demo: Added Layout->Tabs demo code. (#261, #351) - Demo: Added "Documents" example app showcasing possible use for tabs. (#261, #351) +- Demo: Added "DockSpace" example app showcasing use of explicit dockspace nodes. (#351) ----------------------------------------------------------------------- diff --git a/docs/TODO.txt b/docs/TODO.txt index 72d9200..31536e2 100644 --- a/docs/TODO.txt +++ b/docs/TODO.txt @@ -123,15 +123,15 @@ - splitter/separator: formalize the splitter idiom into an official api (we want to handle n-way split) (#319) - - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete) + - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete). this is mostly working but the DockBuilderXXX api are not exposed/finished. - dock: A- implicit, invisible per-viewport dockspace to dock to. - - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized - - dock: B~ document root node resizing behavior incorrect + - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized. + - dock: B~ document root node resizing behavior incorrect. - dock: B~ document root node retrieval of ID ? - - dock: B- full rebuild loses viewport of floating dock nodes - - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them + - dock: B- debug full rebuild loses viewport of floating dock nodes. + - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them (doesn't affect the user nor request platform windows to be created, but unnecessary) - dock: B- resize sibling locking behavior may be less desirable if we merged same-axis sibling in a same node level? - - dock: A- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) + - dock: B- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) - dock: B~ SetNextWindowDock() calls (with conditional) -> defer everything to DockContextUpdate (repro: Documents->[X]Windows->Dock 1 elsewhere->Click Redock All - dock: B~ tidy up tab list popup buttons features (available with manual tab-bar, see ImGuiTabBarFlags_NoTabListPopupButton code, not used by docking nodes) - dock: B- DockSpace() border issues diff --git a/examples/example_win32_directx11/main.cpp b/examples/example_win32_directx11/main.cpp index 16c03ed..5653134 100644 --- a/examples/example_win32_directx11/main.cpp +++ b/examples/example_win32_directx11/main.cpp @@ -142,7 +142,7 @@ io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleFonts; // FIXME-DPI: THIS CURRENTLY DOESN'T WORK AS EXPECTED. DON'T USE IN USER APP! io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleViewports; // FIXME-DPI io.ConfigResizeWindowsFromEdges = true; - io.ConfigDockingWithKeyMod = true; + io.ConfigDockingWithShift = true; ImGui_ImplWin32_Init(hwnd); ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext); diff --git a/imgui.cpp b/imgui.cpp index 1b6748c..cea99d5 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -1090,7 +1090,7 @@ DisplayFramebufferScale = ImVec2(1.0f, 1.0f); // Miscellaneous configuration options - ConfigDockingWithKeyMod = true; + ConfigDockingWithShift = false; #ifdef __APPLE__ ConfigMacOSXBehaviors = true; // Set Mac OS X style defaults based on __APPLE__ compile time flag #else @@ -5519,7 +5519,7 @@ { // Docking: Dragging a dockable window (or any of its child) turns it into a drag and drop source. // We need to do this _before_ we overwrite window->DC.LastItemId below because BeginAsDockableDragDropSource() also overwrites it. - if ((g.ActiveId == window->MoveId) && ((g.IO.ConfigDockingWithKeyMod && g.IO.KeyShift) || (!g.IO.ConfigDockingWithKeyMod))) + if ((g.ActiveId == window->MoveId) && ((g.IO.ConfigDockingWithShift && g.IO.KeyShift) || (!g.IO.ConfigDockingWithShift))) if ((window->RootWindow->Flags & (ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDocking)) == 0) BeginAsDockableDragDropSource(window); @@ -11062,7 +11062,7 @@ // When docking without holding Shift, we only allow and preview docking when hovering over a drop rect or over the title bar data->IsDropAllowed = (data->SplitDir != ImGuiDir_None) || (data->IsCenterAvailable); - if (!is_explicit_target && !data->IsSplitDirExplicit && !g.IO.ConfigDockingWithKeyMod) + if (!is_explicit_target && !data->IsSplitDirExplicit && !g.IO.ConfigDockingWithShift) data->IsDropAllowed = false; // Calculate split area @@ -12005,7 +12005,7 @@ window->DC.LastItemId = window->MoveId; window = window->RootWindow; IM_ASSERT((window->Flags & ImGuiWindowFlags_NoDocking) == 0); - bool is_drag_docking = (g.IO.ConfigDockingWithKeyMod) || ImRect(0, 0, window->SizeFull.x, GetFrameHeight()).Contains(g.ActiveIdClickOffset); + bool is_drag_docking = (g.IO.ConfigDockingWithShift) || ImRect(0, 0, window->SizeFull.x, GetFrameHeight()).Contains(g.ActiveIdClickOffset); if (is_drag_docking && BeginDragDropSource(ImGuiDragDropFlags_SourceNoPreviewTooltip | ImGuiDragDropFlags_SourceNoHoldToOpenOthers | ImGuiDragDropFlags_SourceAutoExpirePayload)) { SetDragDropPayload(IMGUI_PAYLOAD_TYPE_WINDOW, &window, sizeof(window)); @@ -12047,7 +12047,7 @@ allow_null_target_node = true; // Dock into a regular window const ImRect explicit_target_rect = (target_node && target_node->TabBar) ? target_node->TabBar->BarRect : ImRect(window->Pos, window->Pos + ImVec2(window->Size.x, GetFrameHeight())); - const bool is_explicit_target = g.IO.ConfigDockingWithKeyMod || IsMouseHoveringRect(explicit_target_rect.Min, explicit_target_rect.Max); + const bool is_explicit_target = g.IO.ConfigDockingWithShift || IsMouseHoveringRect(explicit_target_rect.Min, explicit_target_rect.Max); // Preview docking request and find out split direction/ratio //const bool do_preview = true; // Ignore testing for payload->IsPreview() which removes one frame of delay, but breaks overlapping drop targets within the same window. diff --git a/imgui.h b/imgui.h index c800b7a..c89aca7 100644 --- a/imgui.h +++ b/imgui.h @@ -525,7 +525,7 @@ // Docking // [BETA API] Enable with io.ConfigFlags |= ImGuiConfigFlags_DockingEnable. // Note: you DO NOT need to call DockSpace() to use most Docking facilities! - // To dock windows: hold SHIFT anywhere while moving windows (if io.ConfigDockingWithKeyMod == true) or drag windows from their title bar (if io.ConfigDockingWithKeyMod = false) + // To dock windows: hold SHIFT anywhere while moving windows (if io.ConfigDockingWithShift == true) or drag windows from their title bar (if io.ConfigDockingWithShift = false) // Use DockSpace() to create an explicit dock node _within_ an existing window. See Docking demo for details. IMGUI_API void DockSpace(ImGuiID id, const ImVec2& size = ImVec2(0, 0), ImGuiDockNodeFlags flags = 0, const ImGuiDockFamily* dock_family = NULL); IMGUI_API void SetNextWindowDockId(ImGuiID dock_id, ImGuiCond cond = 0); // set next window dock id (FIXME-DOCK) @@ -945,7 +945,7 @@ ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, // Instruct back-end to not alter mouse cursor shape and visibility. Use if the back-end cursor changes are interfering with yours and you don't want to use SetMouseCursor() to change mouse cursor. You may want to honor requests from imgui by reading GetMouseCursor() yourself instead. // [BETA] Docking - ImGuiConfigFlags_DockingEnable = 1 << 6, // Docking enable flags. Use SHIFT to dock window into another (or without SHIFT if io.ConfigDockingWithKeyMod = false). + ImGuiConfigFlags_DockingEnable = 1 << 6, // Docking enable flags. Use SHIFT to dock window into another (or without SHIFT if io.ConfigDockingWithShift = false). // [BETA] Viewports ImGuiConfigFlags_ViewportsEnable = 1 << 10, // Viewport enable flags (require both ImGuiConfigFlags_PlatformHasViewports + ImGuiConfigFlags_RendererHasViewports set by the respective back-ends) @@ -1214,7 +1214,7 @@ // Miscellaneous configuration options bool MouseDrawCursor; // = false // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by back-end implementations. - bool ConfigDockingWithKeyMod; // = true // Enable docking with holding Shift key (reduce visual noise, allows dropping in wider space) + bool ConfigDockingWithShift; // = true // Enable docking with holding Shift key (reduce visual noise, allows dropping in wider space) bool ConfigMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl (was called io.OptMacOSXBehaviors prior to 1.63) bool ConfigInputTextCursorBlink; // = true // Set to false to disable blinking cursor, for users who consider it distracting. (was called: io.OptCursorBlink prior to 1.63) bool ConfigResizeWindowsFromEdges; // = true // [BETA] Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be the ImGuiWindowFlags_ResizeFromAnySide flag) diff --git a/imgui_demo.cpp b/imgui_demo.cpp index 41e759c..27c87c0 100644 --- a/imgui_demo.cpp +++ b/imgui_demo.cpp @@ -334,7 +334,7 @@ ImGui::SameLine(); ShowHelpMarker("Instruct back-end to not alter mouse cursor shape and visibility."); ImGui::CheckboxFlags("io.ConfigFlags: DockingEnable", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_DockingEnable); - ImGui::SameLine(); ShowHelpMarker("Use SHIFT to dock window into another (or without SHIFT if io.ConfigDockingWithKeyMod == false)"); + ImGui::SameLine(); ShowHelpMarker("Use SHIFT to dock window into another (or without SHIFT if io.ConfigDockingWithShift == false)"); ImGui::CheckboxFlags("io.ConfigFlags: ViewportsEnable", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_ViewportsEnable); ImGui::SameLine(); ShowHelpMarker("Toggling this at runtime is normally unsupported (it will offset your windows)."); @@ -343,7 +343,7 @@ ImGui::CheckboxFlags("io.ConfigFlags: ViewportsNoMerge", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_ViewportsNoMerge); ImGui::SameLine(); ShowHelpMarker("All floating windows will always create their own viewport and platform window."); - ImGui::Checkbox("io.ConfigDockingWithKeyMod", &io.ConfigDockingWithKeyMod); + ImGui::Checkbox("io.ConfigDockingWithShift", &io.ConfigDockingWithShift); ImGui::SameLine(); ShowHelpMarker("Enable docking when holding Shift only (allows to drop in wider space, reduce visual noise)"); ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink); ImGui::SameLine(); ShowHelpMarker("Set to false to disable blinking cursor, for users who consider it distracting"); diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 4502520..0f1670f 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -36,18 +36,22 @@ - Added ImGuiConfigFlags_DockingEnable flag to enable Docking. [BETA] Set with `io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;`. - Added BeginTabBar(), EndTabBar(), BeginTabItem(), EndTabItem(), SetTabItemClosed() API. (#261, #351) +- Added ImGuiTabBarFlags flags for BeginTabBar(). +- Added ImGuiTabItemFlags flags for BeginTabItem(). - Added DockSpace() API. (#351) -- Added SetNextWindowDock() API. (#351) -- Added IsWindowDocked() API. (#351) +- Added ImGuiDockNodeFlags flags for DockSpace(). +- Added SetNextWindowDock(), SetNextWindowDockFamily() API. (#351) +- Added GetWindowDockId(), IsWindowDocked() API. (#351) - Added ImGuiWindowFlags_NoDocking window flag to disable the possibility for a window to be docked. Popup, Menu and Child windows always have the ImGuiWindowFlags_NoDocking flag set. (#351) - Added ImGuiWindowFlags_UnsavedDocument window flag to append '*' to title without altering the ID, as a convenience to avoid using the ### operator. -- Added io.ConfigDockingWithKeyMod option to configure docking mode. +- Added io.ConfigDockingWithShift option to configure docking mode. - Style: Added ImGuiCol_DockingPreview, ImGuiCol_DockingBg colors. (#351) - Style: Added ImGuiCol_Tab, ImGuiCol_TabHovered, ImGuiCol_TabActive, ImGuiCol_TabUnfocused, ImGuiCol_TabUnfocusedActive colors. (#261, #351) - Demo: Added Layout->Tabs demo code. (#261, #351) - Demo: Added "Documents" example app showcasing possible use for tabs. (#261, #351) +- Demo: Added "DockSpace" example app showcasing use of explicit dockspace nodes. (#351) ----------------------------------------------------------------------- diff --git a/docs/TODO.txt b/docs/TODO.txt index 72d9200..31536e2 100644 --- a/docs/TODO.txt +++ b/docs/TODO.txt @@ -123,15 +123,15 @@ - splitter/separator: formalize the splitter idiom into an official api (we want to handle n-way split) (#319) - - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete) + - dock: A~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete). this is mostly working but the DockBuilderXXX api are not exposed/finished. - dock: A- implicit, invisible per-viewport dockspace to dock to. - - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized - - dock: B~ document root node resizing behavior incorrect + - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized. + - dock: B~ document root node resizing behavior incorrect. - dock: B~ document root node retrieval of ID ? - - dock: B- full rebuild loses viewport of floating dock nodes - - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them + - dock: B- debug full rebuild loses viewport of floating dock nodes. + - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them (doesn't affect the user nor request platform windows to be created, but unnecessary) - dock: B- resize sibling locking behavior may be less desirable if we merged same-axis sibling in a same node level? - - dock: A- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) + - dock: B- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) - dock: B~ SetNextWindowDock() calls (with conditional) -> defer everything to DockContextUpdate (repro: Documents->[X]Windows->Dock 1 elsewhere->Click Redock All - dock: B~ tidy up tab list popup buttons features (available with manual tab-bar, see ImGuiTabBarFlags_NoTabListPopupButton code, not used by docking nodes) - dock: B- DockSpace() border issues diff --git a/examples/example_win32_directx11/main.cpp b/examples/example_win32_directx11/main.cpp index 16c03ed..5653134 100644 --- a/examples/example_win32_directx11/main.cpp +++ b/examples/example_win32_directx11/main.cpp @@ -142,7 +142,7 @@ io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleFonts; // FIXME-DPI: THIS CURRENTLY DOESN'T WORK AS EXPECTED. DON'T USE IN USER APP! io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleViewports; // FIXME-DPI io.ConfigResizeWindowsFromEdges = true; - io.ConfigDockingWithKeyMod = true; + io.ConfigDockingWithShift = true; ImGui_ImplWin32_Init(hwnd); ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext); diff --git a/imgui.cpp b/imgui.cpp index 1b6748c..cea99d5 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -1090,7 +1090,7 @@ DisplayFramebufferScale = ImVec2(1.0f, 1.0f); // Miscellaneous configuration options - ConfigDockingWithKeyMod = true; + ConfigDockingWithShift = false; #ifdef __APPLE__ ConfigMacOSXBehaviors = true; // Set Mac OS X style defaults based on __APPLE__ compile time flag #else @@ -5519,7 +5519,7 @@ { // Docking: Dragging a dockable window (or any of its child) turns it into a drag and drop source. // We need to do this _before_ we overwrite window->DC.LastItemId below because BeginAsDockableDragDropSource() also overwrites it. - if ((g.ActiveId == window->MoveId) && ((g.IO.ConfigDockingWithKeyMod && g.IO.KeyShift) || (!g.IO.ConfigDockingWithKeyMod))) + if ((g.ActiveId == window->MoveId) && ((g.IO.ConfigDockingWithShift && g.IO.KeyShift) || (!g.IO.ConfigDockingWithShift))) if ((window->RootWindow->Flags & (ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDocking)) == 0) BeginAsDockableDragDropSource(window); @@ -11062,7 +11062,7 @@ // When docking without holding Shift, we only allow and preview docking when hovering over a drop rect or over the title bar data->IsDropAllowed = (data->SplitDir != ImGuiDir_None) || (data->IsCenterAvailable); - if (!is_explicit_target && !data->IsSplitDirExplicit && !g.IO.ConfigDockingWithKeyMod) + if (!is_explicit_target && !data->IsSplitDirExplicit && !g.IO.ConfigDockingWithShift) data->IsDropAllowed = false; // Calculate split area @@ -12005,7 +12005,7 @@ window->DC.LastItemId = window->MoveId; window = window->RootWindow; IM_ASSERT((window->Flags & ImGuiWindowFlags_NoDocking) == 0); - bool is_drag_docking = (g.IO.ConfigDockingWithKeyMod) || ImRect(0, 0, window->SizeFull.x, GetFrameHeight()).Contains(g.ActiveIdClickOffset); + bool is_drag_docking = (g.IO.ConfigDockingWithShift) || ImRect(0, 0, window->SizeFull.x, GetFrameHeight()).Contains(g.ActiveIdClickOffset); if (is_drag_docking && BeginDragDropSource(ImGuiDragDropFlags_SourceNoPreviewTooltip | ImGuiDragDropFlags_SourceNoHoldToOpenOthers | ImGuiDragDropFlags_SourceAutoExpirePayload)) { SetDragDropPayload(IMGUI_PAYLOAD_TYPE_WINDOW, &window, sizeof(window)); @@ -12047,7 +12047,7 @@ allow_null_target_node = true; // Dock into a regular window const ImRect explicit_target_rect = (target_node && target_node->TabBar) ? target_node->TabBar->BarRect : ImRect(window->Pos, window->Pos + ImVec2(window->Size.x, GetFrameHeight())); - const bool is_explicit_target = g.IO.ConfigDockingWithKeyMod || IsMouseHoveringRect(explicit_target_rect.Min, explicit_target_rect.Max); + const bool is_explicit_target = g.IO.ConfigDockingWithShift || IsMouseHoveringRect(explicit_target_rect.Min, explicit_target_rect.Max); // Preview docking request and find out split direction/ratio //const bool do_preview = true; // Ignore testing for payload->IsPreview() which removes one frame of delay, but breaks overlapping drop targets within the same window. diff --git a/imgui.h b/imgui.h index c800b7a..c89aca7 100644 --- a/imgui.h +++ b/imgui.h @@ -525,7 +525,7 @@ // Docking // [BETA API] Enable with io.ConfigFlags |= ImGuiConfigFlags_DockingEnable. // Note: you DO NOT need to call DockSpace() to use most Docking facilities! - // To dock windows: hold SHIFT anywhere while moving windows (if io.ConfigDockingWithKeyMod == true) or drag windows from their title bar (if io.ConfigDockingWithKeyMod = false) + // To dock windows: hold SHIFT anywhere while moving windows (if io.ConfigDockingWithShift == true) or drag windows from their title bar (if io.ConfigDockingWithShift = false) // Use DockSpace() to create an explicit dock node _within_ an existing window. See Docking demo for details. IMGUI_API void DockSpace(ImGuiID id, const ImVec2& size = ImVec2(0, 0), ImGuiDockNodeFlags flags = 0, const ImGuiDockFamily* dock_family = NULL); IMGUI_API void SetNextWindowDockId(ImGuiID dock_id, ImGuiCond cond = 0); // set next window dock id (FIXME-DOCK) @@ -945,7 +945,7 @@ ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, // Instruct back-end to not alter mouse cursor shape and visibility. Use if the back-end cursor changes are interfering with yours and you don't want to use SetMouseCursor() to change mouse cursor. You may want to honor requests from imgui by reading GetMouseCursor() yourself instead. // [BETA] Docking - ImGuiConfigFlags_DockingEnable = 1 << 6, // Docking enable flags. Use SHIFT to dock window into another (or without SHIFT if io.ConfigDockingWithKeyMod = false). + ImGuiConfigFlags_DockingEnable = 1 << 6, // Docking enable flags. Use SHIFT to dock window into another (or without SHIFT if io.ConfigDockingWithShift = false). // [BETA] Viewports ImGuiConfigFlags_ViewportsEnable = 1 << 10, // Viewport enable flags (require both ImGuiConfigFlags_PlatformHasViewports + ImGuiConfigFlags_RendererHasViewports set by the respective back-ends) @@ -1214,7 +1214,7 @@ // Miscellaneous configuration options bool MouseDrawCursor; // = false // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by back-end implementations. - bool ConfigDockingWithKeyMod; // = true // Enable docking with holding Shift key (reduce visual noise, allows dropping in wider space) + bool ConfigDockingWithShift; // = true // Enable docking with holding Shift key (reduce visual noise, allows dropping in wider space) bool ConfigMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl (was called io.OptMacOSXBehaviors prior to 1.63) bool ConfigInputTextCursorBlink; // = true // Set to false to disable blinking cursor, for users who consider it distracting. (was called: io.OptCursorBlink prior to 1.63) bool ConfigResizeWindowsFromEdges; // = true // [BETA] Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be the ImGuiWindowFlags_ResizeFromAnySide flag) diff --git a/imgui_demo.cpp b/imgui_demo.cpp index 41e759c..27c87c0 100644 --- a/imgui_demo.cpp +++ b/imgui_demo.cpp @@ -334,7 +334,7 @@ ImGui::SameLine(); ShowHelpMarker("Instruct back-end to not alter mouse cursor shape and visibility."); ImGui::CheckboxFlags("io.ConfigFlags: DockingEnable", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_DockingEnable); - ImGui::SameLine(); ShowHelpMarker("Use SHIFT to dock window into another (or without SHIFT if io.ConfigDockingWithKeyMod == false)"); + ImGui::SameLine(); ShowHelpMarker("Use SHIFT to dock window into another (or without SHIFT if io.ConfigDockingWithShift == false)"); ImGui::CheckboxFlags("io.ConfigFlags: ViewportsEnable", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_ViewportsEnable); ImGui::SameLine(); ShowHelpMarker("Toggling this at runtime is normally unsupported (it will offset your windows)."); @@ -343,7 +343,7 @@ ImGui::CheckboxFlags("io.ConfigFlags: ViewportsNoMerge", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_ViewportsNoMerge); ImGui::SameLine(); ShowHelpMarker("All floating windows will always create their own viewport and platform window."); - ImGui::Checkbox("io.ConfigDockingWithKeyMod", &io.ConfigDockingWithKeyMod); + ImGui::Checkbox("io.ConfigDockingWithShift", &io.ConfigDockingWithShift); ImGui::SameLine(); ShowHelpMarker("Enable docking when holding Shift only (allows to drop in wider space, reduce visual noise)"); ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink); ImGui::SameLine(); ShowHelpMarker("Set to false to disable blinking cursor, for users who consider it distracting"); diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp index e942575..7053d44 100644 --- a/imgui_widgets.cpp +++ b/imgui_widgets.cpp @@ -6455,10 +6455,10 @@ bool undocking_tab = (g.DragDropActive && g.DragDropPayload.SourceId == id); if (!undocking_tab && held)// && (drag_delta.x != 0.0f || drag_delta.y != 0.0f)) { - //if (!g.IO.ConfigDockingWithKeyMod || g.IO.KeyShift) + //if (!g.IO.ConfigDockingWithShift || g.IO.KeyShift) { float threshold_base = g.FontSize; - //float threshold_base = g.IO.ConfigDockingWithKeyMod ? g.FontSize * 0.5f : g.FontSize; + //float threshold_base = g.IO.ConfigDockingWithShift ? g.FontSize * 0.5f : g.FontSize; float threshold_x = (threshold_base * 2.2f); float threshold_y = (threshold_base * 1.5f) + ImClamp((ImFabs(g.IO.MouseDragMaxDistanceAbs[0].x) - threshold_base * 2.0f) * 0.20f, 0.0f, threshold_base * 4.0f); //GetOverlayDrawList(window)->AddRect(ImVec2(bb.Min.x - threshold_x, bb.Min.y - threshold_y), ImVec2(bb.Max.x + threshold_x, bb.Max.y + threshold_y), IM_COL32_WHITE); // [DEBUG]