mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Merge branch 'master' into navigation
# Conflicts: # imgui.cpp # imgui.h
This commit is contained in:
		
							
								
								
									
										51
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -4970,12 +4970,8 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl | ||||
|     window->Flags = flags; | ||||
|     g.WindowsById.SetVoidPtr(window->ID, window); | ||||
|  | ||||
|     if (flags & ImGuiWindowFlags_NoSavedSettings) | ||||
|     { | ||||
|         // User can disable loading and saving of settings. Tooltip and child windows also don't store settings. | ||||
|         window->Size = window->SizeFull = size; | ||||
|     } | ||||
|     else | ||||
|     // User can disable loading and saving of settings. Tooltip and child windows also don't store settings. | ||||
|     if (!(flags & ImGuiWindowFlags_NoSavedSettings)) | ||||
|     { | ||||
|         // Retrieve settings from .ini file | ||||
|         // Use SetWindowPos() or SetNextWindowPos() with the appropriate condition flag to change the initial position of a window. | ||||
| @@ -4991,8 +4987,8 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl | ||||
|             if (ImLengthSqr(settings->Size) > 0.00001f) | ||||
|                 size = settings->Size; | ||||
|         } | ||||
|         window->Size = window->SizeFull = size; | ||||
|     } | ||||
|     window->Size = window->SizeFull = window->SizeFullAtLastBegin = size; | ||||
|  | ||||
|     if ((flags & ImGuiWindowFlags_AlwaysAutoResize) != 0) | ||||
|     { | ||||
| @@ -5183,6 +5179,20 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|     else | ||||
|         flags = window->Flags; | ||||
|  | ||||
|     // Update the Appearing flag | ||||
|     bool window_just_activated_by_user = (window->LastFrameActive < current_frame - 1);   // Not using !WasActive because the implicit "Debug" window would always toggle off->on | ||||
|     const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFrames == 1); | ||||
|     if (flags & ImGuiWindowFlags_Popup) | ||||
|     { | ||||
|         ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.CurrentPopupStack.Size]; | ||||
|         window_just_activated_by_user |= (window->PopupId != popup_ref.PopupId); // We recycle popups so treat window as activated if popup id changed | ||||
|         window_just_activated_by_user |= (window != popup_ref.Window); | ||||
|     } | ||||
|     window->Appearing = (window_just_activated_by_user || window_just_appearing_after_hidden_for_resize); | ||||
|     window->CloseButton = (p_open != NULL); | ||||
|     if (window->Appearing) | ||||
|         SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, true); | ||||
|  | ||||
|     // Parent window is latched only on the first call to Begin() of the frame, so further append-calls can be done from a different window stack | ||||
|     ImGuiWindow* parent_window = first_begin_of_the_frame ? (!g.CurrentWindowStack.empty() ? g.CurrentWindowStack.back() : NULL) : window->ParentWindow; | ||||
|     IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow)); | ||||
| @@ -5191,27 +5201,18 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|     g.CurrentWindowStack.push_back(window); | ||||
|     SetCurrentWindow(window); | ||||
|     CheckStacksSize(window, true); | ||||
|  | ||||
|     bool window_just_activated_by_user = (window->LastFrameActive < current_frame - 1);   // Not using !WasActive because the implicit "Debug" window would always toggle off->on | ||||
|     if (flags & ImGuiWindowFlags_Popup) | ||||
|     { | ||||
|         ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.CurrentPopupStack.Size]; | ||||
|         window_just_activated_by_user |= (window->PopupId != popup_ref.PopupId); // We recycle popups so treat window as activated if popup id changed | ||||
|         window_just_activated_by_user |= (window != popup_ref.Window); | ||||
|         popup_ref.Window = window; | ||||
|         g.CurrentPopupStack.push_back(popup_ref); | ||||
|         window->PopupId = popup_ref.PopupId; | ||||
|     } | ||||
|  | ||||
|     const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFrames == 1); | ||||
|     if (window_just_appearing_after_hidden_for_resize && !(flags & ImGuiWindowFlags_ChildWindow)) | ||||
|         window->NavLastIds[0] = 0; | ||||
|     window->Appearing = (window_just_activated_by_user || window_just_appearing_after_hidden_for_resize); | ||||
|     window->CloseButton = (p_open != NULL); | ||||
|  | ||||
|     // Process SetNextWindow***() calls | ||||
|     if (window->Appearing) | ||||
|         SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, true); | ||||
|     bool window_pos_set_by_api = false, window_size_set_by_api = false; | ||||
|     if (g.SetNextWindowPosCond) | ||||
|     { | ||||
| @@ -5380,13 +5381,13 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|  | ||||
|         // SCROLLBAR STATUS | ||||
|  | ||||
|         // Update scrollbar status (based on the Size that was effective during last frame or the auto-resized Size). We need to do this before manual resize (below) is effective. | ||||
|         // Update scrollbar status (based on the Size that was effective during last frame or the auto-resized Size).  | ||||
|         if (!window->Collapsed) | ||||
|         { | ||||
|             window->ScrollbarY = (flags & ImGuiWindowFlags_AlwaysVerticalScrollbar) || ((window->SizeContents.y > window->SizeFull.y) && !(flags & ImGuiWindowFlags_NoScrollbar)); | ||||
|             window->ScrollbarX = (flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar) || ((window->SizeContents.x > window->SizeFull.x - (window->ScrollbarY ? style.ScrollbarSize : 0.0f) - window->WindowPadding.x) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar)); | ||||
|             window->ScrollbarY = (flags & ImGuiWindowFlags_AlwaysVerticalScrollbar) || ((window->SizeContents.y > window->SizeFullAtLastBegin.y) && !(flags & ImGuiWindowFlags_NoScrollbar)); | ||||
|             window->ScrollbarX = (flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar) || ((window->SizeContents.x > window->SizeFullAtLastBegin.x - (window->ScrollbarY ? style.ScrollbarSize : 0.0f) - window->WindowPadding.x) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar)); | ||||
|             if (window->ScrollbarX && !window->ScrollbarY) | ||||
|                 window->ScrollbarY = (window->SizeContents.y > window->SizeFull.y + style.ScrollbarSize) && !(flags & ImGuiWindowFlags_NoScrollbar); | ||||
|                 window->ScrollbarY = (window->SizeContents.y > window->SizeFullAtLastBegin.y + style.ScrollbarSize) && !(flags & ImGuiWindowFlags_NoScrollbar); | ||||
|             window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f); | ||||
|         } | ||||
|  | ||||
| @@ -5520,11 +5521,11 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|                     ImRect resize_rect(corner, corner + grip.InnerDir * grip_hover_size); | ||||
|                     resize_rect.FixInverted(); | ||||
|                     bool hovered, held; | ||||
|                     ButtonBehavior(resize_rect, window->GetID((void*)resize_grip_n), &hovered, &held, ImGuiButtonFlags_FlattenChilds|ImGuiButtonFlags_NoNavFocus); | ||||
|                     ButtonBehavior(resize_rect, window->GetID((void*)resize_grip_n), &hovered, &held, ImGuiButtonFlags_FlattenChilds); | ||||
|                     if (hovered || held) | ||||
|                         g.MouseCursor = (resize_grip_n & 1) ? ImGuiMouseCursor_ResizeNESW : ImGuiMouseCursor_ResizeNWSE; | ||||
|  | ||||
|                     if (g.HoveredWindow == window && held && g.IO.MouseDoubleClicked[0]) | ||||
|                     if (g.HoveredWindow == window && held && g.IO.MouseDoubleClicked[0] && resize_grip_n == 0) | ||||
|                     { | ||||
|                         // Manual auto-fit when double-clicking | ||||
|                         size_target = CalcSizeFullWithConstraint(window, size_auto_fit); | ||||
| @@ -5537,6 +5538,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|                         ImVec2 corner_target = g.IO.MousePos - g.ActiveIdClickOffset + resize_rect.GetSize() * grip.CornerPos; // Corner of the window corresponding to our corner grip | ||||
|                         CalcResizePosSizeFromAnyCorner(window, corner_target, grip.CornerPos, &pos_target, &size_target); | ||||
|                     } | ||||
|                 if (resize_grip_n == 0 || held || hovered) | ||||
|                     resize_grip_col[resize_grip_n] = GetColorU32(held ? ImGuiCol_ResizeGripActive : hovered ? ImGuiCol_ResizeGripHovered : ImGuiCol_ResizeGrip); | ||||
|                 } | ||||
|                 for (int border_n = 0; border_n < resize_border_count; border_n++) | ||||
| @@ -5582,6 +5584,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 PopID(); | ||||
|  | ||||
|                 // Apply back modified position/size to window | ||||
|                 if (size_target.x != FLT_MAX) | ||||
| @@ -5594,6 +5597,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|                     window->Pos = window->PosFloat = ImVec2((float)(int)pos_target.x, (float)(int)pos_target.y); | ||||
|                     MarkIniSettingsDirty(window); | ||||
|                 } | ||||
|  | ||||
|                 window->Size = window->SizeFull; | ||||
|                 title_bar_rect = window->TitleBarRect(); | ||||
|             } | ||||
| @@ -5648,6 +5652,9 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|                 window->DrawList->AddLine(title_bar_rect.GetBL()+ImVec2(1,-1), title_bar_rect.GetBR()+ImVec2(-1,-1), GetColorU32(ImGuiCol_Border), style.FrameBorderSize); | ||||
|         } | ||||
|  | ||||
|         // Store a backup of SizeFull which we will use next frame to decide if we need scrollbars.  | ||||
|         window->SizeFullAtLastBegin = window->SizeFull; | ||||
|  | ||||
|         // Update ContentsRegionMax. All the variable it depends on are set above in this function. | ||||
|         window->ContentsRegionRect.Min.x = -window->Scroll.x + window->WindowPadding.x; | ||||
|         window->ContentsRegionRect.Min.y = -window->Scroll.y + window->WindowPadding.y + window->TitleBarHeight() + window->MenuBarHeight(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 omar
					omar