mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-04 09:44:29 +00:00 
			
		
		
		
	Added DisplaySafeAreaPadding to MainMenuBar height and fixed starting x position. Fixes main menu bar problems with TVs. (#1439)
This commit is contained in:
		
							
								
								
									
										17
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -6017,6 +6017,8 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
 | 
				
			|||||||
            // Menu bar
 | 
					            // Menu bar
 | 
				
			||||||
            if (flags & ImGuiWindowFlags_MenuBar)
 | 
					            if (flags & ImGuiWindowFlags_MenuBar)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                if (flags & ImGuiWindowFlags_MainMenuBar)
 | 
				
			||||||
 | 
					                    window->DC.MenuBarOffset.y = g.Style.DisplaySafeAreaPadding.y;
 | 
				
			||||||
                ImRect menu_bar_rect = window->MenuBarRect();
 | 
					                ImRect menu_bar_rect = window->MenuBarRect();
 | 
				
			||||||
                menu_bar_rect.ClipWith(window->Rect());  // Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them.
 | 
					                menu_bar_rect.ClipWith(window->Rect());  // Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them.
 | 
				
			||||||
                window->DrawList->AddRectFilled(menu_bar_rect.Min, menu_bar_rect.Max, GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImDrawCornerFlags_Top);
 | 
					                window->DrawList->AddRectFilled(menu_bar_rect.Min, menu_bar_rect.Max, GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImDrawCornerFlags_Top);
 | 
				
			||||||
@@ -6095,7 +6097,9 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
 | 
				
			|||||||
        window->DC.NavLayerActiveMask = window->DC.NavLayerActiveMaskNext;
 | 
					        window->DC.NavLayerActiveMask = window->DC.NavLayerActiveMaskNext;
 | 
				
			||||||
        window->DC.NavLayerActiveMaskNext = 0x00;
 | 
					        window->DC.NavLayerActiveMaskNext = 0x00;
 | 
				
			||||||
        window->DC.MenuBarAppending = false;
 | 
					        window->DC.MenuBarAppending = false;
 | 
				
			||||||
        window->DC.MenuBarOffsetX = ImMax(window->WindowPadding.x, style.ItemSpacing.x);
 | 
					        window->DC.MenuBarOffset = ImVec2( ImMax(window->WindowPadding.x, style.ItemSpacing.x), 0.0f );
 | 
				
			||||||
 | 
							if (flags & ImGuiWindowFlags_MainMenuBar)
 | 
				
			||||||
 | 
								window->DC.MenuBarOffset += g.Style.DisplaySafeAreaPadding;
 | 
				
			||||||
        window->DC.LogLinePosY = window->DC.CursorPos.y - 9999.0f;
 | 
					        window->DC.LogLinePosY = window->DC.CursorPos.y - 9999.0f;
 | 
				
			||||||
        window->DC.ChildWindows.resize(0);
 | 
					        window->DC.ChildWindows.resize(0);
 | 
				
			||||||
        window->DC.LayoutType = ImGuiLayoutType_Vertical;
 | 
					        window->DC.LayoutType = ImGuiLayoutType_Vertical;
 | 
				
			||||||
@@ -11142,17 +11146,16 @@ bool ImGui::BeginMainMenuBar()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    SetNextWindowPos(ImVec2(0.0f, 0.0f));
 | 
					    SetNextWindowPos(ImVec2(0.0f, 0.0f));
 | 
				
			||||||
    SetNextWindowSize(ImVec2(g.IO.DisplaySize.x, g.FontBaseSize + g.Style.FramePadding.y * 2.0f));
 | 
					    SetNextWindowSize(ImVec2(g.IO.DisplaySize.x, g.Style.DisplaySafeAreaPadding.y + g.FontBaseSize + g.Style.FramePadding.y * 2.0f));
 | 
				
			||||||
    PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
 | 
					    PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
 | 
				
			||||||
    PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0,0));
 | 
					    PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0,0));
 | 
				
			||||||
    if (!Begin("##MainMenuBar", NULL, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_MenuBar)
 | 
						bool haveWindow = Begin("##MainMenuBar", NULL, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_MenuBar|ImGuiWindowFlags_MainMenuBar);
 | 
				
			||||||
        || !BeginMenuBar())
 | 
					    if (!haveWindow || !BeginMenuBar())
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        End();
 | 
					        End();
 | 
				
			||||||
        PopStyleVar(2);
 | 
					        PopStyleVar(2);
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    g.CurrentWindow->DC.MenuBarOffsetX += g.Style.DisplaySafeAreaPadding.x;
 | 
					 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -11188,7 +11191,7 @@ bool ImGui::BeginMenuBar()
 | 
				
			|||||||
    clip_rect.ClipWith(window->WindowRectClipped);
 | 
					    clip_rect.ClipWith(window->WindowRectClipped);
 | 
				
			||||||
    PushClipRect(clip_rect.Min, clip_rect.Max, false);
 | 
					    PushClipRect(clip_rect.Min, clip_rect.Max, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    window->DC.CursorPos = ImVec2(bar_rect.Min.x + window->DC.MenuBarOffsetX, bar_rect.Min.y);// + g.Style.FramePadding.y);
 | 
					    window->DC.CursorPos = ImVec2(bar_rect.Min.x + window->DC.MenuBarOffset.x, bar_rect.Min.y + window->DC.MenuBarOffset.y);// + g.Style.FramePadding.y);
 | 
				
			||||||
    window->DC.LayoutType = ImGuiLayoutType_Horizontal;
 | 
					    window->DC.LayoutType = ImGuiLayoutType_Horizontal;
 | 
				
			||||||
    window->DC.NavLayerCurrent++;
 | 
					    window->DC.NavLayerCurrent++;
 | 
				
			||||||
    window->DC.NavLayerCurrentMask <<= 1;
 | 
					    window->DC.NavLayerCurrentMask <<= 1;
 | 
				
			||||||
@@ -11228,7 +11231,7 @@ void ImGui::EndMenuBar()
 | 
				
			|||||||
    IM_ASSERT(window->DC.MenuBarAppending);
 | 
					    IM_ASSERT(window->DC.MenuBarAppending);
 | 
				
			||||||
    PopClipRect();
 | 
					    PopClipRect();
 | 
				
			||||||
    PopID();
 | 
					    PopID();
 | 
				
			||||||
    window->DC.MenuBarOffsetX = window->DC.CursorPos.x - window->MenuBarRect().Min.x;
 | 
					    window->DC.MenuBarOffset = ImVec2( window->DC.CursorPos.x - window->MenuBarRect().Min.x, 0.0f );
 | 
				
			||||||
    window->DC.GroupStack.back().AdvanceCursor = false;
 | 
					    window->DC.GroupStack.back().AdvanceCursor = false;
 | 
				
			||||||
    EndGroup();
 | 
					    EndGroup();
 | 
				
			||||||
    window->DC.LayoutType = ImGuiLayoutType_Vertical;
 | 
					    window->DC.LayoutType = ImGuiLayoutType_Vertical;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							@@ -581,7 +581,8 @@ enum ImGuiWindowFlags_
 | 
				
			|||||||
    ImGuiWindowFlags_Tooltip                = 1 << 25,  // Don't use! For internal use by BeginTooltip()
 | 
					    ImGuiWindowFlags_Tooltip                = 1 << 25,  // Don't use! For internal use by BeginTooltip()
 | 
				
			||||||
    ImGuiWindowFlags_Popup                  = 1 << 26,  // Don't use! For internal use by BeginPopup()
 | 
					    ImGuiWindowFlags_Popup                  = 1 << 26,  // Don't use! For internal use by BeginPopup()
 | 
				
			||||||
    ImGuiWindowFlags_Modal                  = 1 << 27,  // Don't use! For internal use by BeginPopupModal()
 | 
					    ImGuiWindowFlags_Modal                  = 1 << 27,  // Don't use! For internal use by BeginPopupModal()
 | 
				
			||||||
    ImGuiWindowFlags_ChildMenu              = 1 << 28   // Don't use! For internal use by BeginMenu()
 | 
					    ImGuiWindowFlags_ChildMenu              = 1 << 28,  // Don't use! For internal use by BeginMenu()
 | 
				
			||||||
 | 
					    ImGuiWindowFlags_MainMenuBar            = 1 << 29   // Don't use! For internal use by BeginMainMenuBar()
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Flags for ImGui::InputText()
 | 
					// Flags for ImGui::InputText()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -832,7 +832,7 @@ struct IMGUI_API ImGuiDrawContext
 | 
				
			|||||||
    int                     NavLayerActiveMask;     // Which layer have been written to (result from previous frame)
 | 
					    int                     NavLayerActiveMask;     // Which layer have been written to (result from previous frame)
 | 
				
			||||||
    int                     NavLayerActiveMaskNext; // Which layer have been written to (buffer for current frame)
 | 
					    int                     NavLayerActiveMaskNext; // Which layer have been written to (buffer for current frame)
 | 
				
			||||||
    bool                    MenuBarAppending;       // FIXME: Remove this
 | 
					    bool                    MenuBarAppending;       // FIXME: Remove this
 | 
				
			||||||
    float                   MenuBarOffsetX;
 | 
					    ImVec2                  MenuBarOffset;
 | 
				
			||||||
    ImVector<ImGuiWindow*>  ChildWindows;
 | 
					    ImVector<ImGuiWindow*>  ChildWindows;
 | 
				
			||||||
    ImGuiStorage*           StateStorage;
 | 
					    ImGuiStorage*           StateStorage;
 | 
				
			||||||
    ImGuiLayoutType         LayoutType;
 | 
					    ImGuiLayoutType         LayoutType;
 | 
				
			||||||
@@ -870,7 +870,7 @@ struct IMGUI_API ImGuiDrawContext
 | 
				
			|||||||
        NavLayerCurrent = 0;
 | 
					        NavLayerCurrent = 0;
 | 
				
			||||||
        NavLayerCurrentMask = 1 << 0;
 | 
					        NavLayerCurrentMask = 1 << 0;
 | 
				
			||||||
        MenuBarAppending = false;
 | 
					        MenuBarAppending = false;
 | 
				
			||||||
        MenuBarOffsetX = 0.0f;
 | 
					        MenuBarOffset = ImVec2(0.0f, 0.0f);
 | 
				
			||||||
        StateStorage = NULL;
 | 
					        StateStorage = NULL;
 | 
				
			||||||
        LayoutType = ParentLayoutType = ImGuiLayoutType_Vertical;
 | 
					        LayoutType = ParentLayoutType = ImGuiLayoutType_Vertical;
 | 
				
			||||||
        ItemWidth = 0.0f;
 | 
					        ItemWidth = 0.0f;
 | 
				
			||||||
@@ -978,7 +978,7 @@ public:
 | 
				
			|||||||
    float       CalcFontSize() const                    { return GImGui->FontBaseSize * FontWindowScale; }
 | 
					    float       CalcFontSize() const                    { return GImGui->FontBaseSize * FontWindowScale; }
 | 
				
			||||||
    float       TitleBarHeight() const                  { return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + GImGui->Style.FramePadding.y * 2.0f; }
 | 
					    float       TitleBarHeight() const                  { return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + GImGui->Style.FramePadding.y * 2.0f; }
 | 
				
			||||||
    ImRect      TitleBarRect() const                    { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); }
 | 
					    ImRect      TitleBarRect() const                    { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); }
 | 
				
			||||||
    float       MenuBarHeight() const                   { return (Flags & ImGuiWindowFlags_MenuBar) ? CalcFontSize() + GImGui->Style.FramePadding.y * 2.0f : 0.0f; }
 | 
					    float       MenuBarHeight() const                   { return (Flags & ImGuiWindowFlags_MenuBar) ? DC.MenuBarOffset.y + CalcFontSize() + GImGui->Style.FramePadding.y * 2.0f : 0.0f; }
 | 
				
			||||||
    ImRect      MenuBarRect() const                     { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); }
 | 
					    ImRect      MenuBarRect() const                     { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user