mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Begin: Work toward obsoleting the 5-arguments Begin() overload. Removed bg_alpha from internal BeginEx(). (3)
This commit is contained in:
		
							
								
								
									
										37
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -4025,25 +4025,41 @@ static ImGuiCol GetWindowBgColorIdxFromFlags(ImGuiWindowFlags flags) | ||||
| // Push a new ImGui window to add widgets to. | ||||
| // - A default window called "Debug" is automatically stacked at the beginning of every frame so you can use widgets without explicitly calling a Begin/End pair. | ||||
| // - Begin/End can be called multiple times during the frame with the same window name to append content. | ||||
| // - 'size_on_first_use' for a regular window denote the initial size for first-time creation (no saved data) and isn't that useful. Use SetNextWindowSize() prior to calling Begin() for more flexible window manipulation. | ||||
| // - The window name is used as a unique identifier to preserve window information across frames (and save rudimentary information to the .ini file). | ||||
| //   You can use the "##" or "###" markers to use the same label with different id, or same id with different label. See documentation at the top of this file. | ||||
| // - Return false when window is collapsed, so you can early out in your code. You always need to call ImGui::End() even if false is returned. | ||||
| // - Passing 'bool* p_open' displays a Close button on the upper-right corner of the window, the pointed value will be set to false when the button is pressed. | ||||
| // - Passing non-zero 'size' is roughly equivalent to calling SetNextWindowSize(size, ImGuiCond_FirstUseEver) prior to calling Begin(). | ||||
| bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
| { | ||||
|     return BeginEx(name, p_open, -1.0f, flags); | ||||
|     return BeginEx(name, p_open, flags); | ||||
| } | ||||
|  | ||||
| bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha, ImGuiWindowFlags flags) | ||||
| // FIXME-OBSOLETE: Old Begin() API, avoid calling this version directly! | ||||
| bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha_override, ImGuiWindowFlags flags) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|  | ||||
|     // Old API feature: we could pass the initial window size as a parameter, however this was very misleading because in most cases it would only affect the window when it didn't have storage in the .ini file. | ||||
|     if (size_on_first_use.x != 0.0f || size_on_first_use.y != 0.0f) | ||||
|         SetNextWindowSize(size_on_first_use, ImGuiCond_FirstUseEver); | ||||
|     return BeginEx(name, p_open, bg_alpha, flags); | ||||
|  | ||||
|     // Old API feature: we could override the window background alpha with a parameter. This is actually tricky to reproduce manually because:  | ||||
|     // (1) there are multiple variants of WindowBg (popup, tooltip, etc.) and (2) you can't call PushStyleColor before Begin and PopStyleColor just after Begin() because of how CheckStackSizes() behave. | ||||
|     // The user-side solution is to do backup = GetStyleColorVec4(ImGuiCol_xxxBG), PushStyleColor(ImGuiCol_xxxBg), Begin, PushStyleColor(ImGuiCol_xxxBg, backup), [...], PopStyleColor(), End(); PopStyleColor() - which is super awkward. | ||||
|     // The alpha override was rarely used but for now we'll leave the Begin() variant around for a bit. We may either lift the constraint on CheckStackSizes() either add a SetNextWindowBgAlpha() helper that does it magically. | ||||
|     const ImGuiCol bg_color_idx = GetWindowBgColorIdxFromFlags(flags); | ||||
|     const ImVec4 bg_color_backup = g.Style.Colors[bg_color_idx]; | ||||
|     if (bg_alpha_override >= 0.0f) | ||||
|         g.Style.Colors[bg_color_idx].w = bg_alpha_override; | ||||
|  | ||||
|     bool ret = BeginEx(name, p_open, flags); | ||||
|  | ||||
|     if (bg_alpha_override >= 0.0f) | ||||
|         g.Style.Colors[bg_color_idx] = bg_color_backup; | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| bool ImGui::BeginEx(const char* name, bool* p_open, float bg_alpha, ImGuiWindowFlags flags) | ||||
| bool ImGui::BeginEx(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     const ImGuiStyle& style = g.Style; | ||||
| @@ -4392,13 +4408,8 @@ bool ImGui::BeginEx(const char* name, bool* p_open, float bg_alpha, ImGuiWindowF | ||||
|             window->BorderSize = (flags & ImGuiWindowFlags_ShowBorders) ? 1.0f : 0.0f; | ||||
|  | ||||
|             // Window background, Default Alpha | ||||
|             ImGuiCol bg_color_idx = GetWindowBgColorIdxFromFlags(flags); | ||||
|             ImVec4 bg_color = style.Colors[bg_color_idx]; // We don't use GetColorU32() because bg_alpha is assigned (not multiplied) below | ||||
|             if (bg_alpha >= 0.0f) | ||||
|                 bg_color.w = bg_alpha; | ||||
|             bg_color.w *= style.Alpha; | ||||
|             if (bg_color.w > 0.0f) | ||||
|                 window->DrawList->AddRectFilled(window->Pos+ImVec2(0,window->TitleBarHeight()), window->Pos+window->Size, ColorConvertFloat4ToU32(bg_color), window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImGuiCorner_All : ImGuiCorner_BotLeft|ImGuiCorner_BotRight); | ||||
|             ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags)); | ||||
|             window->DrawList->AddRectFilled(window->Pos+ImVec2(0,window->TitleBarHeight()), window->Pos+window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImGuiCorner_All : ImGuiCorner_BotLeft|ImGuiCorner_BotRight); | ||||
|  | ||||
|             // Title bar | ||||
|             const bool is_focused = g.NavWindow && window->RootNonPopupWindow == g.NavWindow->RootNonPopupWindow; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user