Made it guaranteed by API that after calling Begin() the last Item represent the title bar. (#823)
This commit is contained in:
parent
64e79035d5
commit
27fd1b913b
@ -4589,6 +4589,11 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
window->InnerRect.Max.x = window->Pos.x + window->Size.x - window->ScrollbarSizes.x;
|
window->InnerRect.Max.x = window->Pos.x + window->Size.x - window->ScrollbarSizes.x;
|
||||||
window->InnerRect.Max.y = window->Pos.y + window->Size.y - window->ScrollbarSizes.y;
|
window->InnerRect.Max.y = window->Pos.y + window->Size.y - window->ScrollbarSizes.y;
|
||||||
//window->DrawList->AddRect(window->InnerRect.Min, window->InnerRect.Max, IM_COL32_WHITE);
|
//window->DrawList->AddRect(window->InnerRect.Min, window->InnerRect.Max, IM_COL32_WHITE);
|
||||||
|
|
||||||
|
// After Begin() we fill the last item / hovered data using the title bar data. Make that a standard behavior (to allow usage of context menus on title bar only, etc.).
|
||||||
|
window->DC.LastItemId = window->MoveId;
|
||||||
|
window->DC.LastItemRect = title_bar_rect;
|
||||||
|
window->DC.LastItemRectHoveredRect = IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inner clipping rectangle
|
// Inner clipping rectangle
|
||||||
|
@ -2406,6 +2406,15 @@ struct ExampleAppConsole
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar.
|
||||||
|
// Here we create a context menu only available from the title bar.
|
||||||
|
if (ImGui::BeginPopupContextItem())
|
||||||
|
{
|
||||||
|
if (ImGui::MenuItem("Close"))
|
||||||
|
*p_open = false;
|
||||||
|
ImGui::EndPopup();
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc.");
|
ImGui::TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc.");
|
||||||
ImGui::TextWrapped("Enter 'HELP' for help, press TAB to use text completion.");
|
ImGui::TextWrapped("Enter 'HELP' for help, press TAB to use text completion.");
|
||||||
|
|
||||||
@ -2850,7 +2859,7 @@ static void ShowExampleAppLongText(bool* p_open)
|
|||||||
static ImGuiTextBuffer log;
|
static ImGuiTextBuffer log;
|
||||||
static int lines = 0;
|
static int lines = 0;
|
||||||
ImGui::Text("Printing unusually long amount of text.");
|
ImGui::Text("Printing unusually long amount of text.");
|
||||||
ImGui::Combo("Test type", &test_type, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped\0");
|
ImGui::Combo("Test type", &test_type, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0");
|
||||||
ImGui::Text("Buffer contents: %d lines, %d bytes", lines, log.size());
|
ImGui::Text("Buffer contents: %d lines, %d bytes", lines, log.size());
|
||||||
if (ImGui::Button("Clear")) { log.clear(); lines = 0; }
|
if (ImGui::Button("Clear")) { log.clear(); lines = 0; }
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
Loading…
Reference in New Issue
Block a user