BeginMainMenuBar(): remove expectation that we don't know menu bar height ahead, allowing up to generalize placement in any direction (will be done in master)

Amend 75de34e281
This commit is contained in:
ocornut 2021-03-25 15:21:19 +01:00
parent 085cff2fe5
commit ca34c81ce9
3 changed files with 7 additions and 9 deletions

View File

@ -943,7 +943,6 @@ static void UpdateViewportsEndFrame();
static void UpdateSelectWindowViewport(ImGuiWindow* window); static void UpdateSelectWindowViewport(ImGuiWindow* window);
static bool UpdateTryMergeWindowIntoHostViewport(ImGuiWindow* window, ImGuiViewportP* host_viewport); static bool UpdateTryMergeWindowIntoHostViewport(ImGuiWindow* window, ImGuiViewportP* host_viewport);
static bool UpdateTryMergeWindowIntoHostViewports(ImGuiWindow* window); static bool UpdateTryMergeWindowIntoHostViewports(ImGuiWindow* window);
static void SetCurrentViewport(ImGuiWindow* window, ImGuiViewportP* viewport);
static bool GetWindowAlwaysWantOwnViewport(ImGuiWindow* window); static bool GetWindowAlwaysWantOwnViewport(ImGuiWindow* window);
static int FindPlatformMonitorForPos(const ImVec2& pos); static int FindPlatformMonitorForPos(const ImVec2& pos);
static int FindPlatformMonitorForRect(const ImRect& r); static int FindPlatformMonitorForRect(const ImRect& r);

View File

@ -2462,6 +2462,7 @@ namespace ImGui
IMGUI_API void TranslateWindowsInViewport(ImGuiViewportP* viewport, const ImVec2& old_pos, const ImVec2& new_pos); IMGUI_API void TranslateWindowsInViewport(ImGuiViewportP* viewport, const ImVec2& old_pos, const ImVec2& new_pos);
IMGUI_API void ScaleWindowsInViewport(ImGuiViewportP* viewport, float scale); IMGUI_API void ScaleWindowsInViewport(ImGuiViewportP* viewport, float scale);
IMGUI_API void DestroyPlatformWindow(ImGuiViewportP* viewport); IMGUI_API void DestroyPlatformWindow(ImGuiViewportP* viewport);
IMGUI_API void SetCurrentViewport(ImGuiWindow* window, ImGuiViewportP* viewport);
const ImGuiPlatformMonitor* GetViewportPlatformMonitor(ImGuiViewport* viewport); const ImGuiPlatformMonitor* GetViewportPlatformMonitor(ImGuiViewport* viewport);
// Settings // Settings

View File

@ -6625,12 +6625,15 @@ bool ImGui::BeginMainMenuBar()
if (menu_bar_window == NULL || menu_bar_window->BeginCount == 0) if (menu_bar_window == NULL || menu_bar_window->BeginCount == 0)
{ {
// Set window position // Set window position
// We don't attempt to calculate our height ahead, as it depends on the per-viewport font size. SetCurrentViewport(NULL, viewport);
// However menu-bar will affect the minimum window size so we'll get the right height. float height = GetFrameHeight();
ImVec2 menu_bar_pos = viewport->Pos + viewport->CurrWorkOffsetMin; ImVec2 menu_bar_pos = viewport->Pos + viewport->CurrWorkOffsetMin;
ImVec2 menu_bar_size = ImVec2(viewport->Size.x - viewport->CurrWorkOffsetMin.x + viewport->CurrWorkOffsetMax.x, 1.0f); ImVec2 menu_bar_size = ImVec2(viewport->Size.x - viewport->CurrWorkOffsetMin.x + viewport->CurrWorkOffsetMax.x, height);
SetNextWindowPos(menu_bar_pos); SetNextWindowPos(menu_bar_pos);
SetNextWindowSize(menu_bar_size); SetNextWindowSize(menu_bar_size);
// Report our size into work area
viewport->CurrWorkOffsetMin.y += height;
} }
// Create window // Create window
@ -6641,11 +6644,6 @@ bool ImGui::BeginMainMenuBar()
bool is_open = Begin("##MainMenuBar", NULL, window_flags) && BeginMenuBar(); bool is_open = Begin("##MainMenuBar", NULL, window_flags) && BeginMenuBar();
PopStyleVar(2); PopStyleVar(2);
// Report our size into work area (for next frame) using actual window size
menu_bar_window = GetCurrentWindow();
if (menu_bar_window->BeginCount == 1)
viewport->CurrWorkOffsetMin.y += menu_bar_window->Size.y;
g.NextWindowData.MenuBarOffsetMinVal = ImVec2(0.0f, 0.0f); g.NextWindowData.MenuBarOffsetMinVal = ImVec2(0.0f, 0.0f);
if (!is_open) if (!is_open)
{ {