mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	Merge branch 'master' into navigation
# Conflicts: # imgui.cpp # imgui.h # imgui_draw.cpp
This commit is contained in:
		
							
								
								
									
										52
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -250,6 +250,7 @@ | ||||
|  Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code. | ||||
|  Also read releases logs https://github.com/ocornut/imgui/releases for more details. | ||||
|  | ||||
|  - 2017/11/02 (1.53) - marked IsRootWindowOrAnyChildHovered() as obsolete is favor of using IsWindowHovered(ImGuiHoveredFlags_FlattenChilds); | ||||
|  - 2017/10/24 (1.52) - renamed IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS to IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS for consistency. | ||||
|  - 2017/10/20 (1.52) - changed IsWindowHovered() default parameters behavior to return false if an item is active in another window (e.g. click-dragging item from another window to this window). You can use the newly introduced IsWindowHovered() flags to requests this specific behavior if you need it. | ||||
|  - 2017/10/20 (1.52) - marked IsItemHoveredRect()/IsMouseHoveringWindow() as obsolete, in favor of using the newly introduced flags for IsItemHovered() and IsWindowHovered(). See https://github.com/ocornut/imgui/issues/1382 for details. | ||||
| @@ -2312,6 +2313,8 @@ bool ImGui::IsItemHovered(ImGuiHoveredFlags flags) | ||||
|  | ||||
|     if (!window->DC.LastItemRectHoveredRect) | ||||
|         return false; | ||||
|     IM_ASSERT((flags & ImGuiHoveredFlags_FlattenChilds) == 0);   // Flags not supported by this function | ||||
|  | ||||
|     // [2017/10/16] Reverted commit 344d48be3 and testing RootWindow instead. I believe it is correct to NOT test for RootWindow but this leaves us unable to use IsItemHovered() after EndChild() itself. | ||||
|     // Until a solution is found I believe reverting to the test from 2017/09/27 is safe since this was the test that has been running for a long while. | ||||
|     //if (g.HoveredWindow != window) | ||||
| @@ -3917,6 +3920,7 @@ void ImGui::RenderTriangle(ImVec2 p_min, ImGuiDir dir, float scale) | ||||
|     case ImGuiDir_Left: | ||||
|         r = -r; // ...fall through, no break! | ||||
|     case ImGuiDir_Right: | ||||
|         center.x -= r * 0.25f; | ||||
|         a = ImVec2(1,0) * r; | ||||
|         b = ImVec2(-0.500f,+0.866f) * r; | ||||
|         c = ImVec2(-0.500f,-0.866f) * r; | ||||
| @@ -5090,24 +5094,17 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|         g.SetNextWindowFocus = false; | ||||
|     } | ||||
|  | ||||
|     // Update known root window (if we are a child window, otherwise window == window->RootWindow) | ||||
|     int root_idx, root_non_popup_idx; | ||||
|     for (root_idx = g.CurrentWindowStack.Size - 1; root_idx > 0; root_idx--) | ||||
|         if (!(g.CurrentWindowStack[root_idx]->Flags & ImGuiWindowFlags_ChildWindow)) | ||||
|             break; | ||||
|     for (root_non_popup_idx = root_idx; root_non_popup_idx > 0; root_non_popup_idx--) | ||||
|         if (!(g.CurrentWindowStack[root_non_popup_idx]->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)) || (g.CurrentWindowStack[root_non_popup_idx]->Flags & ImGuiWindowFlags_Modal)) | ||||
|             break; | ||||
|     // When reusing window again multiple times a frame, just append content (don't need to setup again) | ||||
|     if (first_begin_of_the_frame) | ||||
|     { | ||||
|         // Initialize | ||||
|         window->ParentWindow = parent_window; | ||||
|     window->RootWindow = g.CurrentWindowStack[root_idx]; | ||||
|     window->RootNonPopupWindow = g.CurrentWindowStack[root_non_popup_idx];      // Used to display TitleBgActive color and for selecting which window to use for NavWindowing | ||||
|         window->RootWindow = !(flags & ImGuiWindowFlags_ChildWindow) ? window : parent_window->RootWindow; | ||||
|         window->RootNonPopupWindow = !(flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)) || (flags & ImGuiWindowFlags_Modal) ? window : parent_window->RootNonPopupWindow; // Used to display TitleBgActive color and for selecting which window to use for NavWindowing | ||||
|         window->RootNavWindow = window; | ||||
|         //while (window->RootNavWindow->Flags & ImGuiWindowFlags_NavFlattened) | ||||
|         //    window->RootNavWindow = window->RootNavWindow->ParentWindow; | ||||
|  | ||||
|     // When reusing window again multiple times a frame, just append content (don't need to setup again) | ||||
|     if (first_begin_of_the_frame) | ||||
|     { | ||||
|         window->Active = true; | ||||
|         window->OrderWithinParent = 0; | ||||
|         window->BeginCount = 0; | ||||
| @@ -6089,12 +6086,20 @@ bool ImGui::IsWindowHovered(ImGuiHoveredFlags flags) | ||||
| { | ||||
|     IM_ASSERT((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0);   // Flags not supported by this function | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     if (flags & ImGuiHoveredFlags_FlattenChilds) | ||||
|     { | ||||
|         if (g.HoveredRootWindow != g.CurrentWindow->RootWindow) | ||||
|             return false; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         if (g.HoveredWindow != g.CurrentWindow) | ||||
|             return false; | ||||
|     } | ||||
|     if (!IsWindowContentHoverable(g.HoveredRootWindow, flags)) | ||||
|         return false; | ||||
|     if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem)) | ||||
|         if (g.ActiveId != 0 && g.ActiveIdWindow != g.CurrentWindow) | ||||
|         if (g.ActiveId != 0 && !g.ActiveIdAllowOverlap && g.ActiveId != g.HoveredWindow->MoveId) | ||||
|             return false; | ||||
|     return true; | ||||
| } | ||||
| @@ -6120,21 +6125,6 @@ bool ImGui::IsRootWindowOrAnyChildFocused() | ||||
|     return g.NavWindow && g.NavWindow->RootWindow == g.CurrentWindow->RootWindow; | ||||
| } | ||||
|  | ||||
| bool ImGui::IsRootWindowOrAnyChildHovered(ImGuiHoveredFlags flags) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     IM_ASSERT((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0);   // Flags not supported by this function | ||||
|     IM_ASSERT(g.CurrentWindow);                                        // Not inside a Begin()/End() | ||||
|     if (!g.HoveredRootWindow || (g.HoveredRootWindow != g.CurrentWindow->RootWindow)) | ||||
|         return false; | ||||
|     if (!IsWindowContentHoverable(g.HoveredRootWindow, flags)) | ||||
|         return false; | ||||
|     if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem)) | ||||
|         if (g.ActiveId != 0 && g.ActiveIdWindow != g.CurrentWindow) | ||||
|             return false; | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| float ImGui::GetWindowWidth() | ||||
| { | ||||
|     ImGuiWindow* window = GImGui->CurrentWindow; | ||||
| @@ -10234,7 +10224,7 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo | ||||
|             PopStyleColor(); | ||||
|         } | ||||
|         if (selected) | ||||
|             RenderCheckMark(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * (0.20f+0.200f), g.FontSize * 0.134f * 0.5f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize  * 0.866f); | ||||
|             RenderCheckMark(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize  * 0.866f); | ||||
|     } | ||||
|     return pressed; | ||||
| } | ||||
| @@ -10384,7 +10374,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled) | ||||
|         float extra_w = ImMax(0.0f, GetContentRegionAvail().x - w); | ||||
|         pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_Menu | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_DrawFillAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f)); | ||||
|         if (!enabled) PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); | ||||
|         RenderTriangle(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.20f, 0.0f), ImGuiDir_Right); | ||||
|         RenderTriangle(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.30f, 0.0f), ImGuiDir_Right); | ||||
|         if (!enabled) PopStyleColor(); | ||||
|     } | ||||
|  | ||||
|   | ||||
							
								
								
									
										5
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -443,7 +443,6 @@ namespace ImGui | ||||
|     IMGUI_API bool          IsWindowHovered(ImGuiHoveredFlags flags = 0);                       // is current Begin()-ed window hovered (and typically: not blocked by a popup/modal)? | ||||
|     IMGUI_API bool          IsRootWindowFocused();                                              // is current Begin()-ed root window focused (root = top-most parent of a child, otherwise self)? | ||||
|     IMGUI_API bool          IsRootWindowOrAnyChildFocused();                                    // is current Begin()-ed root window or any of its child (including current window) focused? | ||||
|     IMGUI_API bool          IsRootWindowOrAnyChildHovered(ImGuiHoveredFlags flags = 0);         // is current Begin()-ed root window or any of its child (including current window) hovered and hoverable (not blocked by a popup)? | ||||
|     IMGUI_API bool          IsAnyWindowFocused(); | ||||
|     IMGUI_API bool          IsAnyWindowHovered();                                               // is mouse hovering any visible window | ||||
|     IMGUI_API bool          IsRectVisible(const ImVec2& size);                                  // test if rectangle (of given size, starting from cursor position) is visible / not clipped. | ||||
| @@ -594,6 +593,7 @@ enum ImGuiHoveredFlags_ | ||||
|     //ImGuiHoveredFlags_AllowWhenBlockedByModal     = 1 << 1,   // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. | ||||
|     ImGuiHoveredFlags_AllowWhenBlockedByActiveItem  = 1 << 2,   // Return true even if an active item is blocking access to this item/window | ||||
|     ImGuiHoveredFlags_AllowWhenOverlapped           = 1 << 3,   // Return true even if the position is overlapped by another window | ||||
|     ImGuiHoveredFlags_FlattenChilds                 = 1 << 4,   // Treat all child windows as the same window (for IsWindowHovered()) | ||||
|     ImGuiHoveredFlags_RectOnly                      = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped | ||||
| }; | ||||
|  | ||||
| @@ -942,6 +942,7 @@ struct ImGuiIO | ||||
| #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | ||||
| namespace ImGui | ||||
| { | ||||
|     static inline bool      IsRootWindowOrAnyChildHovered(ImGuiHoveredFlags flags = 0) { return IsItemHovered(flags | ImGuiHoveredFlags_FlattenChilds); } // OBSOLETE 1.53+ use flags directly | ||||
|     bool                    Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha_override = -1.0f, ImGuiWindowFlags flags = 0); // OBSOLETE 1.52+. use SetNextWindowSize() instead if you want to set a window size. | ||||
|     static inline void      AlignFirstTextHeightToWidgets() { AlignTextToFramePadding(); }     // OBSOLETE 1.52+ | ||||
|     static inline void      SetNextWindowPosCenter(ImGuiCond cond = 0) { SetNextWindowPos(ImVec2(GetIO().DisplaySize.x * 0.5f, GetIO().DisplaySize.y * 0.5f), cond, ImVec2(0.5f, 0.5f)); } // OBSOLETE 1.52+ | ||||
| @@ -1405,7 +1406,7 @@ struct ImFontConfig | ||||
|     float           SizePixels;                 //          // Size in pixels for rasterizer. | ||||
|     int             OversampleH, OversampleV;   // 3, 1     // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. | ||||
|     bool            PixelSnapH;                 // false    // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. | ||||
|     ImVec2          GlyphExtraSpacing;          // 1, 0     // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. | ||||
|     ImVec2          GlyphExtraSpacing;          // 0, 0     // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. | ||||
|     ImVec2          GlyphOffset;                // 0, 0     // Offset all glyphs from this font input. | ||||
|     const ImWchar*  GlyphRanges;                // NULL     // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. | ||||
|     bool            MergeMode;                  // false    // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights. | ||||
|   | ||||
| @@ -1816,14 +1816,16 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|  | ||||
|         if (ImGui::TreeNode("Hovering")) | ||||
|         { | ||||
|             // Testing IsWindowHovered() function | ||||
|             // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) | ||||
|             ImGui::BulletText( | ||||
|                 "IsWindowHovered() = %d\n" | ||||
|                 "IsWindowHovered(_AllowWhenBlockedByPopup) = %d\n" | ||||
|                 "IsWindowHovered(_AllowWhenBlockedByActiveItem) = %d\n", | ||||
|                 "IsWindowHovered(_AllowWhenBlockedByActiveItem) = %d\n" | ||||
|                 "IsWindowHovered(_FlattenChilds) = %d\n", | ||||
|                 ImGui::IsWindowHovered(), | ||||
|                 ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup), | ||||
|                 ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem)); | ||||
|                 ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem), | ||||
|                 ImGui::IsWindowHovered(ImGuiHoveredFlags_FlattenChilds)); | ||||
|  | ||||
|             // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) | ||||
|             ImGui::Button("ITEM"); | ||||
|   | ||||
| @@ -188,8 +188,8 @@ void ImGui::StyleColorsDark(ImGuiStyle* dst) | ||||
|     colors[ImGuiCol_FrameBgHovered]         = ImVec4(0.26f, 0.59f, 0.98f, 0.40f); | ||||
|     colors[ImGuiCol_FrameBgActive]          = ImVec4(0.26f, 0.59f, 0.98f, 0.67f); | ||||
|     colors[ImGuiCol_TitleBg]                = ImVec4(0.04f, 0.04f, 0.04f, 1.00f); | ||||
|     colors[ImGuiCol_TitleBgCollapsed]       = ImVec4(0.00f, 0.00f, 0.00f, 0.51f); | ||||
|     colors[ImGuiCol_TitleBgActive]          = ImVec4(0.18f, 0.18f, 0.18f, 1.00f); | ||||
|     colors[ImGuiCol_TitleBgCollapsed]       = ImVec4(0.00f, 0.00f, 0.00f, 0.51f); | ||||
|     colors[ImGuiCol_MenuBarBg]              = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); | ||||
|     colors[ImGuiCol_ScrollbarBg]            = ImVec4(0.02f, 0.02f, 0.02f, 0.53f); | ||||
|     colors[ImGuiCol_ScrollbarGrab]          = ImVec4(0.31f, 0.31f, 0.31f, 1.00f); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user