mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-15 01:17:00 +00:00
Added SetNextWindowBgAlpha() helper. (#1567) particularly helpul with the marking of the old 5-parameters version of Begin() as obsolete.
This commit is contained in:
parent
2645ab5f7f
commit
9a76fd30fd
31
imgui.cpp
31
imgui.cpp
@ -4803,8 +4803,10 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Window background, Default Alpha
|
// Window background
|
||||||
ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags));
|
ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags));
|
||||||
|
if (g.NextWindowData.BgAlphaCond != 0)
|
||||||
|
bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(g.NextWindowData.BgAlphaVal) << IM_COL32_A_SHIFT);
|
||||||
window->DrawList->AddRectFilled(window->Pos+ImVec2(0,window->TitleBarHeight()), window->Pos+window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Bot);
|
window->DrawList->AddRectFilled(window->Pos+ImVec2(0,window->TitleBarHeight()), window->Pos+window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Bot);
|
||||||
|
|
||||||
// Title bar
|
// Title bar
|
||||||
@ -5010,22 +5012,12 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
|
|||||||
{
|
{
|
||||||
// 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.
|
// 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)
|
if (size_on_first_use.x != 0.0f || size_on_first_use.y != 0.0f)
|
||||||
SetNextWindowSize(size_on_first_use, ImGuiCond_FirstUseEver);
|
ImGui::SetNextWindowSize(size_on_first_use, ImGuiCond_FirstUseEver);
|
||||||
|
|
||||||
// Old API feature: we could override the window background alpha with a parameter. This is actually tricky to reproduce manually because:
|
// Old API feature: override the window background alpha with a parameter.
|
||||||
// (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.
|
ImGui::SetNextWindowBgAlpha(bg_alpha_override);
|
||||||
// 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.
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
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 = Begin(name, p_open, flags);
|
bool ret = ImGui::Begin(name, p_open, flags);
|
||||||
|
|
||||||
if (bg_alpha_override >= 0.0f)
|
|
||||||
g.Style.Colors[bg_color_idx] = bg_color_backup;
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif // IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
#endif // IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
@ -5803,7 +5795,14 @@ void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiCond cond)
|
|||||||
void ImGui::SetNextWindowFocus()
|
void ImGui::SetNextWindowFocus()
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
g.NextWindowData.FocusCond = ImGuiCond_Always;
|
g.NextWindowData.FocusCond = ImGuiCond_Always; // Using a Cond member for consistency (may transition all of them to single flag set for fast Clear() op)
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui::SetNextWindowBgAlpha(float alpha)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
g.NextWindowData.BgAlphaVal = alpha;
|
||||||
|
g.NextWindowData.BgAlphaCond = ImGuiCond_Always; // Using a Cond member for consistency (may transition all of them to single flag set for fast Clear() op)
|
||||||
}
|
}
|
||||||
|
|
||||||
// In window space (not screen space!)
|
// In window space (not screen space!)
|
||||||
|
1
imgui.h
1
imgui.h
@ -171,6 +171,7 @@ namespace ImGui
|
|||||||
IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin()
|
IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin()
|
||||||
IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin()
|
IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin()
|
||||||
IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin()
|
IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin()
|
||||||
|
IMGUI_API void SetNextWindowBgAlpha(float alpha); // set next window background color alpha. helper to easily modify ImGuiCol_WindowBg/ChildBg/PopupBg.
|
||||||
IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
|
IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
|
||||||
IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
|
IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
|
||||||
IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
|
IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
|
||||||
|
@ -2398,7 +2398,7 @@ static void ShowExampleAppFixedOverlay(bool* p_open)
|
|||||||
ImVec2 window_pos = ImVec2((corner & 1) ? ImGui::GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner & 2) ? ImGui::GetIO().DisplaySize.y - DISTANCE : DISTANCE);
|
ImVec2 window_pos = ImVec2((corner & 1) ? ImGui::GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner & 2) ? ImGui::GetIO().DisplaySize.y - DISTANCE : DISTANCE);
|
||||||
ImVec2 window_pos_pivot = ImVec2((corner & 1) ? 1.0f : 0.0f, (corner & 2) ? 1.0f : 0.0f);
|
ImVec2 window_pos_pivot = ImVec2((corner & 1) ? 1.0f : 0.0f, (corner & 2) ? 1.0f : 0.0f);
|
||||||
ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot);
|
ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot);
|
||||||
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0.0f, 0.0f, 0.0f, 0.3f)); // Transparent background
|
ImGui::SetNextWindowBgAlpha(0.3f); // Transparent background
|
||||||
if (ImGui::Begin("Example: Fixed Overlay", p_open, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoSavedSettings))
|
if (ImGui::Begin("Example: Fixed Overlay", p_open, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoSavedSettings))
|
||||||
{
|
{
|
||||||
ImGui::Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)");
|
ImGui::Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)");
|
||||||
@ -2415,7 +2415,6 @@ static void ShowExampleAppFixedOverlay(bool* p_open)
|
|||||||
}
|
}
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
ImGui::PopStyleColor();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Demonstrate using "##" and "###" in identifiers to manipulate ID generation.
|
// Demonstrate using "##" and "###" in identifiers to manipulate ID generation.
|
||||||
|
@ -467,6 +467,7 @@ struct ImGuiNextWindowData
|
|||||||
ImGuiCond CollapsedCond;
|
ImGuiCond CollapsedCond;
|
||||||
ImGuiCond SizeConstraintCond;
|
ImGuiCond SizeConstraintCond;
|
||||||
ImGuiCond FocusCond;
|
ImGuiCond FocusCond;
|
||||||
|
ImGuiCond BgAlphaCond;
|
||||||
ImVec2 PosVal;
|
ImVec2 PosVal;
|
||||||
ImVec2 PosPivotVal;
|
ImVec2 PosPivotVal;
|
||||||
ImVec2 SizeVal;
|
ImVec2 SizeVal;
|
||||||
@ -475,21 +476,23 @@ struct ImGuiNextWindowData
|
|||||||
ImRect SizeConstraintRect; // Valid if 'SetNextWindowSizeConstraint' is true
|
ImRect SizeConstraintRect; // Valid if 'SetNextWindowSizeConstraint' is true
|
||||||
ImGuiSizeCallback SizeCallback;
|
ImGuiSizeCallback SizeCallback;
|
||||||
void* SizeCallbackUserData;
|
void* SizeCallbackUserData;
|
||||||
|
float BgAlphaVal;
|
||||||
|
|
||||||
ImGuiNextWindowData()
|
ImGuiNextWindowData()
|
||||||
{
|
{
|
||||||
PosCond = SizeCond = ContentSizeCond = CollapsedCond = SizeConstraintCond = FocusCond = 0;
|
PosCond = SizeCond = ContentSizeCond = CollapsedCond = SizeConstraintCond = FocusCond = BgAlphaCond = 0;
|
||||||
PosVal = PosPivotVal = SizeVal = ImVec2(0.0f, 0.0f);
|
PosVal = PosPivotVal = SizeVal = ImVec2(0.0f, 0.0f);
|
||||||
ContentSizeVal = ImVec2(0.0f, 0.0f);
|
ContentSizeVal = ImVec2(0.0f, 0.0f);
|
||||||
CollapsedVal = false;
|
CollapsedVal = false;
|
||||||
SizeConstraintRect = ImRect();
|
SizeConstraintRect = ImRect();
|
||||||
SizeCallback = NULL;
|
SizeCallback = NULL;
|
||||||
SizeCallbackUserData = NULL;
|
SizeCallbackUserData = NULL;
|
||||||
|
BgAlphaVal = FLT_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clear()
|
void Clear()
|
||||||
{
|
{
|
||||||
PosCond = SizeCond = ContentSizeCond = CollapsedCond = SizeConstraintCond = FocusCond = 0;
|
PosCond = SizeCond = ContentSizeCond = CollapsedCond = SizeConstraintCond = FocusCond = BgAlphaCond = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user