mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-15 09:27:00 +00:00
parent
1007873d94
commit
897e5c6231
110
imgui.cpp
110
imgui.cpp
@ -2112,9 +2112,9 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name)
|
|||||||
Appearing = false;
|
Appearing = false;
|
||||||
Hidden = false;
|
Hidden = false;
|
||||||
HasCloseButton = false;
|
HasCloseButton = false;
|
||||||
|
BeginCount = 0;
|
||||||
BeginOrderWithinParent = -1;
|
BeginOrderWithinParent = -1;
|
||||||
BeginOrderWithinContext = -1;
|
BeginOrderWithinContext = -1;
|
||||||
BeginCount = 0;
|
|
||||||
PopupId = 0;
|
PopupId = 0;
|
||||||
AutoFitFramesX = AutoFitFramesY = -1;
|
AutoFitFramesX = AutoFitFramesY = -1;
|
||||||
AutoFitOnlyGrows = false;
|
AutoFitOnlyGrows = false;
|
||||||
@ -2757,23 +2757,6 @@ void ImGui::UpdateMouseMovingWindow()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the back-end doesn't set MouseLastHoveredViewport or doesn't honor ImGuiViewportFlags_NoInputs, we do a search ourselves.
|
|
||||||
// A) It won't take account of the possibility that non-imgui windows may be in-between our dragged window and our target window.
|
|
||||||
// B) It requires Platform_GetWindowFocus to be implemented by back-end.
|
|
||||||
static ImGuiViewportP* FindViewportHoveredFromPlatformWindowStack(const ImVec2 mouse_platform_pos)
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
ImGuiViewportP* best_candidate = NULL;
|
|
||||||
for (int n = 0; n < g.Viewports.Size; n++)
|
|
||||||
{
|
|
||||||
ImGuiViewportP* viewport = g.Viewports[n];
|
|
||||||
if (!(viewport->Flags & ImGuiViewportFlags_NoInputs) && viewport->GetRect().Contains(mouse_platform_pos))
|
|
||||||
if (best_candidate == NULL || best_candidate->LastFrontMostStampCount < viewport->LastFrontMostStampCount)
|
|
||||||
best_candidate = viewport;
|
|
||||||
}
|
|
||||||
return best_candidate;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void TranslateWindow(ImGuiWindow* window, const ImVec2& delta)
|
static void TranslateWindow(ImGuiWindow* window, const ImVec2& delta)
|
||||||
{
|
{
|
||||||
window->Pos += delta;
|
window->Pos += delta;
|
||||||
@ -4556,42 +4539,6 @@ static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const ImVec2& co
|
|||||||
*out_size = size_constrained;
|
*out_size = size_constrained;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ImGui::FindPlatformMonitorForPos(const ImVec2& pos)
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
for (int monitor_n = 0; monitor_n < g.PlatformIO.Monitors.Size; monitor_n++)
|
|
||||||
{
|
|
||||||
const ImGuiPlatformMonitor& monitor = g.PlatformIO.Monitors[monitor_n];
|
|
||||||
if (ImRect(monitor.MainPos, monitor.MainPos + monitor.MainSize).Contains(pos))
|
|
||||||
return monitor_n;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Search for the monitor with the largest intersection area with the given rectangle
|
|
||||||
// We generally try to avoid searching loops but the monitor count should be very small here
|
|
||||||
static int ImGui::FindPlatformMonitorForRect(const ImRect& rect)
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
float surface_threshold = rect.GetWidth() * rect.GetHeight() * 0.5f;
|
|
||||||
int best_monitor_n = -1;
|
|
||||||
float best_monitor_surface = 0.001f;
|
|
||||||
for (int monitor_n = 0; monitor_n < g.PlatformIO.Monitors.Size && best_monitor_surface < surface_threshold; monitor_n++)
|
|
||||||
{
|
|
||||||
const ImGuiPlatformMonitor& monitor = g.PlatformIO.Monitors[monitor_n];
|
|
||||||
if (ImRect(monitor.MainPos, monitor.MainPos + monitor.MainSize).Contains(rect))
|
|
||||||
return monitor_n;
|
|
||||||
ImRect overlapping_rect = rect;
|
|
||||||
overlapping_rect.ClipWithFull(ImRect(monitor.MainPos, monitor.MainPos + monitor.MainSize));
|
|
||||||
float overlapping_surface = overlapping_rect.GetWidth() * overlapping_rect.GetHeight();
|
|
||||||
if (overlapping_surface < best_monitor_surface)
|
|
||||||
continue;
|
|
||||||
best_monitor_surface = overlapping_surface;
|
|
||||||
best_monitor_n = monitor_n;
|
|
||||||
}
|
|
||||||
return best_monitor_n;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ImGuiResizeGripDef
|
struct ImGuiResizeGripDef
|
||||||
{
|
{
|
||||||
ImVec2 CornerPos;
|
ImVec2 CornerPos;
|
||||||
@ -7333,6 +7280,23 @@ void ImGui::ScaleWindowsInViewport(ImGuiViewportP* viewport, float scale)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the back-end doesn't set MouseLastHoveredViewport or doesn't honor ImGuiViewportFlags_NoInputs, we do a search ourselves.
|
||||||
|
// A) It won't take account of the possibility that non-imgui windows may be in-between our dragged window and our target window.
|
||||||
|
// B) It requires Platform_GetWindowFocus to be implemented by back-end.
|
||||||
|
static ImGuiViewportP* FindViewportHoveredFromPlatformWindowStack(const ImVec2 mouse_platform_pos)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
ImGuiViewportP* best_candidate = NULL;
|
||||||
|
for (int n = 0; n < g.Viewports.Size; n++)
|
||||||
|
{
|
||||||
|
ImGuiViewportP* viewport = g.Viewports[n];
|
||||||
|
if (!(viewport->Flags & ImGuiViewportFlags_NoInputs) && viewport->GetRect().Contains(mouse_platform_pos))
|
||||||
|
if (best_candidate == NULL || best_candidate->LastFrontMostStampCount < viewport->LastFrontMostStampCount)
|
||||||
|
best_candidate = viewport;
|
||||||
|
}
|
||||||
|
return best_candidate;
|
||||||
|
}
|
||||||
|
|
||||||
static void ImGui::UpdateViewports()
|
static void ImGui::UpdateViewports()
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
@ -7747,6 +7711,42 @@ void ImGui::UpdatePlatformWindows()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ImGui::FindPlatformMonitorForPos(const ImVec2& pos)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
for (int monitor_n = 0; monitor_n < g.PlatformIO.Monitors.Size; monitor_n++)
|
||||||
|
{
|
||||||
|
const ImGuiPlatformMonitor& monitor = g.PlatformIO.Monitors[monitor_n];
|
||||||
|
if (ImRect(monitor.MainPos, monitor.MainPos + monitor.MainSize).Contains(pos))
|
||||||
|
return monitor_n;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search for the monitor with the largest intersection area with the given rectangle
|
||||||
|
// We generally try to avoid searching loops but the monitor count should be very small here
|
||||||
|
static int ImGui::FindPlatformMonitorForRect(const ImRect& rect)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
float surface_threshold = rect.GetWidth() * rect.GetHeight() * 0.5f;
|
||||||
|
int best_monitor_n = -1;
|
||||||
|
float best_monitor_surface = 0.001f;
|
||||||
|
for (int monitor_n = 0; monitor_n < g.PlatformIO.Monitors.Size && best_monitor_surface < surface_threshold; monitor_n++)
|
||||||
|
{
|
||||||
|
const ImGuiPlatformMonitor& monitor = g.PlatformIO.Monitors[monitor_n];
|
||||||
|
if (ImRect(monitor.MainPos, monitor.MainPos + monitor.MainSize).Contains(rect))
|
||||||
|
return monitor_n;
|
||||||
|
ImRect overlapping_rect = rect;
|
||||||
|
overlapping_rect.ClipWithFull(ImRect(monitor.MainPos, monitor.MainPos + monitor.MainSize));
|
||||||
|
float overlapping_surface = overlapping_rect.GetWidth() * overlapping_rect.GetHeight();
|
||||||
|
if (overlapping_surface < best_monitor_surface)
|
||||||
|
continue;
|
||||||
|
best_monitor_surface = overlapping_surface;
|
||||||
|
best_monitor_n = monitor_n;
|
||||||
|
}
|
||||||
|
return best_monitor_n;
|
||||||
|
}
|
||||||
|
|
||||||
// This is a default/basic function for performing the rendering/swap of multiple platform windows.
|
// This is a default/basic function for performing the rendering/swap of multiple platform windows.
|
||||||
// Custom renderers may prefer to not call this function at all, and instead iterate the publicly exposed platform data and handle rendering/sync themselves.
|
// Custom renderers may prefer to not call this function at all, and instead iterate the publicly exposed platform data and handle rendering/sync themselves.
|
||||||
// The Render/Swap functions stored in ImGuiPlatformIO are merely here to allow for this helper to exist, but you can do it yourself:
|
// The Render/Swap functions stored in ImGuiPlatformIO are merely here to allow for this helper to exist, but you can do it yourself:
|
||||||
@ -9894,7 +9894,7 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// HELP, METRICS
|
// METRICS/DEBUG WINDOW
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static void RenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewport, const ImRect& bb)
|
static void RenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewport, const ImRect& bb)
|
||||||
|
@ -1073,9 +1073,9 @@ struct IMGUI_API ImGuiWindow
|
|||||||
bool Appearing; // Set during the frame where the window is appearing (or re-appearing)
|
bool Appearing; // Set during the frame where the window is appearing (or re-appearing)
|
||||||
bool Hidden; // Do not display (== (HiddenFramesForResize > 0) ||
|
bool Hidden; // Do not display (== (HiddenFramesForResize > 0) ||
|
||||||
bool HasCloseButton; // Set when the window has a close button (p_open != NULL)
|
bool HasCloseButton; // Set when the window has a close button (p_open != NULL)
|
||||||
|
int BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
|
||||||
int BeginOrderWithinParent; // Order within immediate parent window, if we are a child window. Otherwise 0.
|
int BeginOrderWithinParent; // Order within immediate parent window, if we are a child window. Otherwise 0.
|
||||||
int BeginOrderWithinContext; // Order within entire imgui context. This is mostly used for debugging submission order related issues.
|
int BeginOrderWithinContext; // Order within entire imgui context. This is mostly used for debugging submission order related issues.
|
||||||
int BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
|
|
||||||
ImGuiID PopupId; // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
|
ImGuiID PopupId; // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
|
||||||
int AutoFitFramesX, AutoFitFramesY;
|
int AutoFitFramesX, AutoFitFramesY;
|
||||||
bool AutoFitOnlyGrows;
|
bool AutoFitOnlyGrows;
|
||||||
|
Loading…
Reference in New Issue
Block a user