mirror of https://github.com/ocornut/imgui
Tidying up Begin()
This commit is contained in:
parent
3f7f256752
commit
46f55fe6f6
21
imgui.cpp
21
imgui.cpp
|
@ -3148,16 +3148,17 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_
|
|||
// When reusing window again multiple times a frame, just append content (don't need to setup again)
|
||||
const int current_frame = ImGui::GetFrameCount();
|
||||
const bool first_begin_of_the_frame = (window->LastFrameDrawn != current_frame);
|
||||
const bool window_was_visible = (window->LastFrameDrawn == current_frame - 1);
|
||||
if (first_begin_of_the_frame)
|
||||
{
|
||||
window->Visible = true;
|
||||
window->DrawList->Clear();
|
||||
window->ClipRectStack.resize(0);
|
||||
window->LastFrameDrawn = current_frame;
|
||||
}
|
||||
|
||||
// Setup texture
|
||||
// Setup texture, outer clipping rectangle
|
||||
window->DrawList->PushTextureID(g.Font->ContainerAtlas->TexID);
|
||||
|
||||
// Setup outer clipping rectangle
|
||||
if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_ComboBox))
|
||||
PushClipRect(parent_window->ClipRectStack.back());
|
||||
else
|
||||
|
@ -3165,30 +3166,25 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_
|
|||
|
||||
if (first_begin_of_the_frame)
|
||||
{
|
||||
window->Visible = true;
|
||||
|
||||
// New windows appears in front
|
||||
if (!(flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Tooltip))
|
||||
if (!window_was_visible)
|
||||
{
|
||||
if (window->LastFrameDrawn < current_frame - 1)
|
||||
if (!(flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Tooltip))
|
||||
{
|
||||
FocusWindow(window);
|
||||
|
||||
// Popup position themselves when they first appear
|
||||
if (flags & ImGuiWindowFlags_Popup)
|
||||
{
|
||||
if (!window_pos_set_by_api)
|
||||
window->PosFloat = g.IO.MousePos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window->LastFrameDrawn = current_frame;
|
||||
|
||||
// Reset contents size for auto-fitting
|
||||
window->SizeContents = window_is_new ? ImVec2(0.0f, 0.0f) : window->DC.CursorMaxPos - window->Pos;
|
||||
window->SizeContents.y += window->ScrollY;
|
||||
|
||||
// Child position follows drawing cursor
|
||||
if (flags & ImGuiWindowFlags_ChildWindow)
|
||||
{
|
||||
parent_window->DC.ChildWindows.push_back(window);
|
||||
|
@ -3259,8 +3255,6 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_
|
|||
window->FocusIdxAllCounter = window->FocusIdxTabCounter = -1;
|
||||
window->FocusIdxAllRequestNext = window->FocusIdxTabRequestNext = IM_INT_MAX;
|
||||
|
||||
ImRect title_bar_rect = window->TitleBarRect();
|
||||
|
||||
// Apply scrolling
|
||||
window->ScrollY = window->NextScrollY;
|
||||
window->ScrollY = ImMax(window->ScrollY, 0.0f);
|
||||
|
@ -3270,6 +3264,7 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_
|
|||
|
||||
// At this point we don't have a clipping rectangle setup yet, so we can test and draw in title bar
|
||||
// Collapse window by double-clicking on title bar
|
||||
ImRect title_bar_rect = window->TitleBarRect();
|
||||
if (!(window->Flags & ImGuiWindowFlags_NoTitleBar))
|
||||
{
|
||||
if (!(window->Flags & ImGuiWindowFlags_NoCollapse) && g.HoveredWindow == window && IsMouseHoveringRect(title_bar_rect) && g.IO.MouseDoubleClicked[0])
|
||||
|
|
Loading…
Reference in New Issue