mirror of
https://github.com/ocornut/imgui.git
synced 2026-01-31 03:20:05 +00:00
Merge remote-tracking branch 'upstream/docking' into docking
This commit is contained in:
commit
af97ab5983
11 changed files with 196 additions and 91 deletions
96
imgui.cpp
96
imgui.cpp
|
|
@ -143,7 +143,8 @@ CODE
|
|||
- CTRL+Shift+Left/Right: Select words.
|
||||
- CTRL+A or Double-Click: Select All.
|
||||
- CTRL+X, CTRL+C, CTRL+V: Use OS clipboard.
|
||||
- CTRL+Z, CTRL+Y: Undo, Redo.
|
||||
- CTRL+Z Undo.
|
||||
- CTRL+Y or CTRL+Shift+Z: Redo.
|
||||
- ESCAPE: Revert text to its original value.
|
||||
- On OSX, controls are automatically adjusted to match standard OSX text editing 2ts and behaviors.
|
||||
|
||||
|
|
@ -1363,7 +1364,8 @@ ImGuiStyle::ImGuiStyle()
|
|||
LogSliderDeadzone = 4.0f; // The size in pixels of the dead-zone around zero on logarithmic sliders that cross zero.
|
||||
TabRounding = 5.0f; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
|
||||
TabBorderSize = 0.0f; // Thickness of border around tabs.
|
||||
TabMinWidthForCloseButton = 0.0f; // Minimum width for close button to appear on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close button unless selected.
|
||||
TabCloseButtonMinWidthSelected = -1.0f; // -1: always visible. 0.0f: visible when hovered. >0.0f: visible when hovered if minimum width.
|
||||
TabCloseButtonMinWidthUnselected = 0.0f; // -1: always visible. 0.0f: visible when hovered. >0.0f: visible when hovered if minimum width. FLT_MAX: never show close button when unselected.
|
||||
TabBarBorderSize = 1.0f; // Thickness of tab-bar separator, which takes on the tab active color to denote focus.
|
||||
TabBarOverlineSize = 1.0f; // Thickness of tab-bar overline, which highlights the selected tab-bar.
|
||||
TableAngledHeadersAngle = 35.0f * (IM_PI / 180.0f); // Angle of angled headers (supported values range from -50 degrees to +50 degrees).
|
||||
|
|
@ -1419,7 +1421,8 @@ void ImGuiStyle::ScaleAllSizes(float scale_factor)
|
|||
GrabRounding = ImTrunc(GrabRounding * scale_factor);
|
||||
LogSliderDeadzone = ImTrunc(LogSliderDeadzone * scale_factor);
|
||||
TabRounding = ImTrunc(TabRounding * scale_factor);
|
||||
TabMinWidthForCloseButton = (TabMinWidthForCloseButton != FLT_MAX) ? ImTrunc(TabMinWidthForCloseButton * scale_factor) : FLT_MAX;
|
||||
TabCloseButtonMinWidthSelected = (TabCloseButtonMinWidthSelected > 0.0f && TabCloseButtonMinWidthSelected != FLT_MAX) ? ImTrunc(TabCloseButtonMinWidthSelected * scale_factor) : TabCloseButtonMinWidthSelected;
|
||||
TabCloseButtonMinWidthUnselected = (TabCloseButtonMinWidthUnselected > 0.0f && TabCloseButtonMinWidthUnselected != FLT_MAX) ? ImTrunc(TabCloseButtonMinWidthUnselected * scale_factor) : TabCloseButtonMinWidthUnselected;
|
||||
TabBarOverlineSize = ImTrunc(TabBarOverlineSize * scale_factor);
|
||||
SeparatorTextPadding = ImTrunc(SeparatorTextPadding * scale_factor);
|
||||
DockingSeparatorSize = ImTrunc(DockingSeparatorSize * scale_factor);
|
||||
|
|
@ -2459,7 +2462,7 @@ int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char*
|
|||
int e = 0;
|
||||
e = (*out_char < mins[len]) << 6; // non-canonical encoding
|
||||
e |= ((*out_char >> 11) == 0x1b) << 7; // surrogate half?
|
||||
e |= (*out_char > IM_UNICODE_CODEPOINT_MAX) << 8; // out of range?
|
||||
e |= (*out_char > IM_UNICODE_CODEPOINT_MAX) << 8; // out of range we can store in ImWchar (FIXME: May evolve)
|
||||
e |= (s[1] & 0xc0) >> 2;
|
||||
e |= (s[2] & 0xc0) >> 4;
|
||||
e |= (s[3] ) >> 6;
|
||||
|
|
@ -3975,6 +3978,7 @@ ImGuiContext::ImGuiContext(ImFontAtlas* shared_font_atlas)
|
|||
InputEventsNextEventId = 1;
|
||||
|
||||
WindowsActiveCount = 0;
|
||||
WindowsBorderHoverPadding = 0.0f;
|
||||
CurrentWindow = NULL;
|
||||
HoveredWindow = NULL;
|
||||
HoveredWindowUnderMovingWindow = NULL;
|
||||
|
|
@ -6341,7 +6345,7 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, I
|
|||
// A SetNextWindowSize() call always has priority (#8020)
|
||||
// (since the code in Begin() never supported SizeVal==0.0f aka auto-resize via SetNextWindowSize() call, we don't support it here for now)
|
||||
// FIXME: We only support ImGuiCond_Always in this path. Supporting other paths would requires to obtain window pointer.
|
||||
if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize) != 0 && (g.NextWindowData.SizeCond & ImGuiCond_Always) != 0)
|
||||
if ((g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasSize) != 0 && (g.NextWindowData.SizeCond & ImGuiCond_Always) != 0)
|
||||
{
|
||||
if (g.NextWindowData.SizeVal.x > 0.0f)
|
||||
{
|
||||
|
|
@ -6357,11 +6361,11 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, I
|
|||
SetNextWindowSize(size);
|
||||
|
||||
// Forward child flags (we allow prior settings to merge but it'll only work for adding flags)
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasChildFlags)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasChildFlags)
|
||||
g.NextWindowData.ChildFlags |= child_flags;
|
||||
else
|
||||
g.NextWindowData.ChildFlags = child_flags;
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasChildFlags;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasChildFlags;
|
||||
|
||||
// Build up name. If you need to append to a same child from multiple location in the ID stack, use BeginChild(ImGuiID id) with a stable value.
|
||||
// FIXME: 2023/11/14: commented out shorted version. We had an issue with multiple ### in child window path names, which the trailing hash helped workaround.
|
||||
|
|
@ -6596,7 +6600,7 @@ static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, const ImVec2& s
|
|||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
ImVec2 new_size = size_desired;
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasSizeConstraint)
|
||||
{
|
||||
// See comments in SetNextWindowSizeConstraints() for details about setting size_min an size_max.
|
||||
ImRect cr = g.NextWindowData.SizeConstraintRect;
|
||||
|
|
@ -7113,7 +7117,7 @@ void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar
|
|||
// Adjust alpha. For docking
|
||||
bool override_alpha = false;
|
||||
float alpha = 1.0f;
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasBgAlpha)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasBgAlpha)
|
||||
{
|
||||
alpha = g.NextWindowData.BgAlphaVal;
|
||||
override_alpha = true;
|
||||
|
|
@ -7356,7 +7360,7 @@ void ImGui::UpdateWindowSkipRefresh(ImGuiWindow* window)
|
|||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
window->SkipRefresh = false;
|
||||
if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasRefreshPolicy) == 0)
|
||||
if ((g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasRefreshPolicy) == 0)
|
||||
return;
|
||||
if (g.NextWindowData.RefreshFlagsVal & ImGuiWindowRefreshFlags_TryToAvoidRefresh)
|
||||
{
|
||||
|
|
@ -7439,7 +7443,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||
SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, true);
|
||||
window->FlagsPreviousFrame = window->Flags;
|
||||
window->Flags = (ImGuiWindowFlags)flags;
|
||||
window->ChildFlags = (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasChildFlags) ? g.NextWindowData.ChildFlags : 0;
|
||||
window->ChildFlags = (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasChildFlags) ? g.NextWindowData.ChildFlags : 0;
|
||||
window->LastFrameActive = current_frame;
|
||||
window->LastTimeActive = (float)g.Time;
|
||||
window->BeginOrderWithinParent = 0;
|
||||
|
|
@ -7453,7 +7457,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||
// Docking
|
||||
// (NB: during the frame dock nodes are created, it is possible that (window->DockIsActive == false) even though (window->DockNode->Windows.Size > 1)
|
||||
IM_ASSERT(window->DockNode == NULL || window->DockNodeAsHost == NULL); // Cannot be both
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasDock)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasDock)
|
||||
SetWindowDock(window, g.NextWindowData.DockId, g.NextWindowData.DockCond);
|
||||
if (first_begin_of_the_frame)
|
||||
{
|
||||
|
|
@ -7468,7 +7472,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||
if (window->DockIsActive)
|
||||
{
|
||||
IM_ASSERT(window->DockNode != NULL);
|
||||
g.NextWindowData.Flags &= ~ImGuiNextWindowDataFlags_HasSizeConstraint; // Docking currently override constraints
|
||||
g.NextWindowData.HasFlags &= ~ImGuiNextWindowDataFlags_HasSizeConstraint; // Docking currently override constraints
|
||||
}
|
||||
|
||||
// Amend the Appearing flag
|
||||
|
|
@ -7548,7 +7552,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||
// (FIXME: Consider splitting the HasXXX flags into X/Y components
|
||||
bool window_pos_set_by_api = false;
|
||||
bool window_size_x_set_by_api = false, window_size_y_set_by_api = false;
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasPos)
|
||||
{
|
||||
window_pos_set_by_api = (window->SetWindowPosAllowFlags & g.NextWindowData.PosCond) != 0;
|
||||
if (window_pos_set_by_api && ImLengthSqr(g.NextWindowData.PosPivotVal) > 0.00001f)
|
||||
|
|
@ -7564,7 +7568,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||
SetWindowPos(window, g.NextWindowData.PosVal, g.NextWindowData.PosCond);
|
||||
}
|
||||
}
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasSize)
|
||||
{
|
||||
window_size_x_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.x > 0.0f);
|
||||
window_size_y_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.y > 0.0f);
|
||||
|
|
@ -7574,7 +7578,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||
g.NextWindowData.SizeVal.y = window->SizeFull.y;
|
||||
SetWindowSize(window, g.NextWindowData.SizeVal, g.NextWindowData.SizeCond);
|
||||
}
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasScroll)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasScroll)
|
||||
{
|
||||
if (g.NextWindowData.ScrollVal.x >= 0.0f)
|
||||
{
|
||||
|
|
@ -7587,15 +7591,15 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||
window->ScrollTargetCenterRatio.y = 0.0f;
|
||||
}
|
||||
}
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasContentSize)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasContentSize)
|
||||
window->ContentSizeExplicit = g.NextWindowData.ContentSizeVal;
|
||||
else if (first_begin_of_the_frame)
|
||||
window->ContentSizeExplicit = ImVec2(0.0f, 0.0f);
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasWindowClass)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasWindowClass)
|
||||
window->WindowClass = g.NextWindowData.WindowClass;
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasCollapsed)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasCollapsed)
|
||||
SetWindowCollapsed(window, g.NextWindowData.CollapsedVal, g.NextWindowData.CollapsedCond);
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasFocus)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasFocus)
|
||||
FocusWindow(window);
|
||||
if (window->Appearing)
|
||||
SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, false);
|
||||
|
|
@ -8274,7 +8278,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||
// Hide along with parent or if parent is collapsed
|
||||
if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCanSkipItems > 0))
|
||||
window->HiddenFramesCanSkipItems = 1;
|
||||
if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCannotSkipItems > 0))
|
||||
if (parent_window && parent_window->HiddenFramesCannotSkipItems > 0)
|
||||
window->HiddenFramesCannotSkipItems = 1;
|
||||
}
|
||||
|
||||
|
|
@ -8858,7 +8862,7 @@ void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiCond cond, const ImVec2& pi
|
|||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasPos;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasPos;
|
||||
g.NextWindowData.PosVal = pos;
|
||||
g.NextWindowData.PosPivotVal = pivot;
|
||||
g.NextWindowData.PosCond = cond ? cond : ImGuiCond_Always;
|
||||
|
|
@ -8869,7 +8873,7 @@ void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond)
|
|||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSize;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasSize;
|
||||
g.NextWindowData.SizeVal = size;
|
||||
g.NextWindowData.SizeCond = cond ? cond : ImGuiCond_Always;
|
||||
}
|
||||
|
|
@ -8881,7 +8885,7 @@ void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond)
|
|||
void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback, void* custom_callback_user_data)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSizeConstraint;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasSizeConstraint;
|
||||
g.NextWindowData.SizeConstraintRect = ImRect(size_min, size_max);
|
||||
g.NextWindowData.SizeCallback = custom_callback;
|
||||
g.NextWindowData.SizeCallbackUserData = custom_callback_user_data;
|
||||
|
|
@ -8892,14 +8896,14 @@ void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& s
|
|||
void ImGui::SetNextWindowContentSize(const ImVec2& size)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasContentSize;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasContentSize;
|
||||
g.NextWindowData.ContentSizeVal = ImTrunc(size);
|
||||
}
|
||||
|
||||
void ImGui::SetNextWindowScroll(const ImVec2& scroll)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasScroll;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasScroll;
|
||||
g.NextWindowData.ScrollVal = scroll;
|
||||
}
|
||||
|
||||
|
|
@ -8907,7 +8911,7 @@ void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiCond cond)
|
|||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasCollapsed;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasCollapsed;
|
||||
g.NextWindowData.CollapsedVal = collapsed;
|
||||
g.NextWindowData.CollapsedCond = cond ? cond : ImGuiCond_Always;
|
||||
}
|
||||
|
|
@ -8915,21 +8919,21 @@ void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiCond cond)
|
|||
void ImGui::SetNextWindowBgAlpha(float alpha)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasBgAlpha;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasBgAlpha;
|
||||
g.NextWindowData.BgAlphaVal = alpha;
|
||||
}
|
||||
|
||||
void ImGui::SetNextWindowViewport(ImGuiID id)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasViewport;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasViewport;
|
||||
g.NextWindowData.ViewportId = id;
|
||||
}
|
||||
|
||||
void ImGui::SetNextWindowDockID(ImGuiID id, ImGuiCond cond)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasDock;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasDock;
|
||||
g.NextWindowData.DockCond = cond ? cond : ImGuiCond_Always;
|
||||
g.NextWindowData.DockId = id;
|
||||
}
|
||||
|
|
@ -8938,7 +8942,7 @@ void ImGui::SetNextWindowClass(const ImGuiWindowClass* window_class)
|
|||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
IM_ASSERT((window_class->ViewportFlagsOverrideSet & window_class->ViewportFlagsOverrideClear) == 0); // Cannot set both set and clear for the same bit
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasWindowClass;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasWindowClass;
|
||||
g.NextWindowData.WindowClass = *window_class;
|
||||
}
|
||||
|
||||
|
|
@ -8946,7 +8950,7 @@ void ImGui::SetNextWindowClass(const ImGuiWindowClass* window_class)
|
|||
void ImGui::SetNextWindowRefreshPolicy(ImGuiWindowRefreshFlags flags)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasRefreshPolicy;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasRefreshPolicy;
|
||||
g.NextWindowData.RefreshFlagsVal = flags;
|
||||
}
|
||||
|
||||
|
|
@ -12022,7 +12026,7 @@ bool ImGui::BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags ext
|
|||
// See FindBestWindowPosForPopup() for positionning logic of other tooltips (not drag and drop ones).
|
||||
//ImVec2 tooltip_pos = g.IO.MousePos - g.ActiveIdClickOffset - g.Style.WindowPadding;
|
||||
const bool is_touchscreen = (g.IO.MouseSource == ImGuiMouseSource_TouchScreen);
|
||||
if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos) == 0)
|
||||
if ((g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasPos) == 0)
|
||||
{
|
||||
ImVec2 tooltip_pos = is_touchscreen ? (g.IO.MousePos + TOOLTIP_DEFAULT_OFFSET_TOUCH * g.Style.MouseCursorScale) : (g.IO.MousePos + TOOLTIP_DEFAULT_OFFSET_MOUSE * g.Style.MouseCursorScale);
|
||||
ImVec2 tooltip_pivot = is_touchscreen ? TOOLTIP_DEFAULT_PIVOT_TOUCH : ImVec2(0.0f, 0.0f);
|
||||
|
|
@ -12447,7 +12451,7 @@ bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags fla
|
|||
// Center modal windows by default for increased visibility
|
||||
// (this won't really last as settings will kick in, and is mostly for backward compatibility. user may do the same themselves)
|
||||
// FIXME: Should test for (PosCond & window->SetWindowPosAllowFlags) with the upcoming window.
|
||||
if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos) == 0)
|
||||
if ((g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasPos) == 0)
|
||||
{
|
||||
const ImGuiViewport* viewport = window->WasActive ? window->Viewport : GetMainViewport(); // FIXME-VIEWPORT: What may be our reference viewport?
|
||||
SetNextWindowPos(viewport->GetCenter(), ImGuiCond_FirstUseEver, ImVec2(0.5f, 0.5f));
|
||||
|
|
@ -12750,7 +12754,7 @@ void ImGui::SetWindowFocus(const char* name)
|
|||
void ImGui::SetNextWindowFocus()
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasFocus;
|
||||
g.NextWindowData.HasFlags |= ImGuiNextWindowDataFlags_HasFocus;
|
||||
}
|
||||
|
||||
// Similar to IsWindowHovered()
|
||||
|
|
@ -16169,6 +16173,8 @@ ImGuiViewportP* ImGui::AddUpdateViewport(ImGuiWindow* window, ImGuiID id, const
|
|||
// This is so we can select an appropriate font size on the first frame of our window lifetime
|
||||
if (viewport->PlatformMonitor != -1)
|
||||
viewport->DpiScale = g.PlatformIO.Monitors[viewport->PlatformMonitor].DpiScale;
|
||||
else
|
||||
viewport->DpiScale = 1.0f;
|
||||
}
|
||||
|
||||
viewport->Window = window;
|
||||
|
|
@ -16228,7 +16234,7 @@ static void ImGui::WindowSelectViewport(ImGuiWindow* window)
|
|||
window->ViewportId = 0;
|
||||
}
|
||||
|
||||
if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasViewport) == 0)
|
||||
if ((g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasViewport) == 0)
|
||||
{
|
||||
// By default inherit from parent window
|
||||
if (window->Viewport == NULL && window->ParentWindow && (!window->ParentWindow->IsFallbackWindow || window->ParentWindow->WasActive))
|
||||
|
|
@ -16244,7 +16250,7 @@ static void ImGui::WindowSelectViewport(ImGuiWindow* window)
|
|||
}
|
||||
|
||||
bool lock_viewport = false;
|
||||
if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasViewport)
|
||||
if (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasViewport)
|
||||
{
|
||||
// Code explicitly request a viewport
|
||||
window->Viewport = (ImGuiViewportP*)FindViewportByID(g.NextWindowData.ViewportId);
|
||||
|
|
@ -16594,7 +16600,7 @@ static int ImGui::FindPlatformMonitorForRect(const ImRect& rect)
|
|||
// Use a minimum threshold of 1.0f so a zero-sized rect won't false positive, and will still find the correct monitor given its position.
|
||||
// This is necessary for tooltips which always resize down to zero at first.
|
||||
const float surface_threshold = ImMax(rect.GetWidth() * rect.GetHeight() * 0.5f, 1.0f);
|
||||
int best_monitor_n = -1;
|
||||
int best_monitor_n = 0; // Default to the first monitor as fallback
|
||||
float best_monitor_surface = 0.001f;
|
||||
|
||||
for (int monitor_n = 0; monitor_n < g.PlatformIO.Monitors.Size && best_monitor_surface < surface_threshold; monitor_n++)
|
||||
|
|
@ -20181,7 +20187,7 @@ void ImGui::BeginDocked(ImGuiWindow* window, bool* p_open)
|
|||
// Calling SetNextWindowPos() undock windows by default (by setting PosUndock)
|
||||
bool want_undock = false;
|
||||
want_undock |= (window->Flags & ImGuiWindowFlags_NoDocking) != 0;
|
||||
want_undock |= (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos) && (window->SetWindowPosAllowFlags & g.NextWindowData.PosCond) && g.NextWindowData.PosUndock;
|
||||
want_undock |= (g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasPos) && (window->SetWindowPosAllowFlags & g.NextWindowData.PosCond) && g.NextWindowData.PosUndock;
|
||||
if (want_undock)
|
||||
{
|
||||
DockContextProcessUndockWindow(&g, window);
|
||||
|
|
@ -20299,7 +20305,7 @@ void ImGui::BeginDockableDragDropSource(ImGuiWindow* window)
|
|||
// When ConfigDockingWithShift is set, display a tooltip to increase UI affordance.
|
||||
// We cannot set for HoveredWindowUnderMovingWindow != NULL here, as it is only valid/useful when drag and drop is already active
|
||||
// (because of the 'is_mouse_dragging_with_an_expected_destination' logic in UpdateViewportsNewFrame() function)
|
||||
IM_ASSERT(g.NextWindowData.Flags == 0);
|
||||
IM_ASSERT(g.NextWindowData.HasFlags == 0);
|
||||
if (g.IO.ConfigDockingWithShift && g.MouseStationaryTimer >= 1.0f && g.ActiveId >= 1.0f)
|
||||
SetTooltip("%s", LocalizeGetMsg(ImGuiLocKey_DockingHoldShiftToDock));
|
||||
return;
|
||||
|
|
@ -20779,7 +20785,11 @@ static void Platform_SetClipboardTextFn_DefaultImpl(ImGuiContext* ctx, const cha
|
|||
#endif
|
||||
static bool Platform_OpenInShellFn_DefaultImpl(ImGuiContext*, const char* path)
|
||||
{
|
||||
return (INT_PTR)::ShellExecuteA(NULL, "open", path, NULL, NULL, SW_SHOWDEFAULT) > 32;
|
||||
const int path_wsize = ::MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0);
|
||||
ImVector<wchar_t> path_wbuf;
|
||||
path_wbuf.resize(path_wsize);
|
||||
::MultiByteToWideChar(CP_UTF8, 0, path, -1, path_wbuf.Data, path_wsize);
|
||||
return (INT_PTR)::ShellExecuteW(NULL, L"open", path_wbuf.Data, NULL, NULL, SW_SHOWDEFAULT) > 32;
|
||||
}
|
||||
#else
|
||||
#include <sys/wait.h>
|
||||
|
|
@ -22466,7 +22476,7 @@ static void ShowDebugLogFlag(const char* name, ImGuiDebugLogFlags flags)
|
|||
void ImGui::ShowDebugLogWindow(bool* p_open)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize) == 0)
|
||||
if ((g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasSize) == 0)
|
||||
SetNextWindowSize(ImVec2(0.0f, GetFontSize() * 12.0f), ImGuiCond_FirstUseEver);
|
||||
if (!Begin("Dear ImGui Debug Log", p_open) || GetCurrentWindow()->BeginCount > 1)
|
||||
{
|
||||
|
|
@ -22788,7 +22798,7 @@ static int StackToolFormatLevelInfo(ImGuiIDStackTool* tool, int n, bool format_f
|
|||
void ImGui::ShowIDStackToolWindow(bool* p_open)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize) == 0)
|
||||
if ((g.NextWindowData.HasFlags & ImGuiNextWindowDataFlags_HasSize) == 0)
|
||||
SetNextWindowSize(ImVec2(0.0f, GetFontSize() * 8.0f), ImGuiCond_FirstUseEver);
|
||||
if (!Begin("Dear ImGui ID Stack Tool", p_open) || GetCurrentWindow()->BeginCount > 1)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue