mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-24 13:49:01 +08:00
Merge branch 'master' into navigation
# Conflicts: # imgui.cpp
This commit is contained in:
commit
68b26b4867
65
imgui.cpp
65
imgui.cpp
@ -4630,13 +4630,12 @@ static void NavProcessMoveRequestWrapAround(ImGuiWindow* window)
|
|||||||
|
|
||||||
void ImGui::EndPopup()
|
void ImGui::EndPopup()
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui; (void)g;
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
IM_ASSERT(g.CurrentWindow->Flags & ImGuiWindowFlags_Popup); // Mismatched BeginPopup()/EndPopup() calls
|
||||||
IM_ASSERT(window->Flags & ImGuiWindowFlags_Popup); // Mismatched BeginPopup()/EndPopup() calls
|
|
||||||
IM_ASSERT(g.CurrentPopupStack.Size > 0);
|
IM_ASSERT(g.CurrentPopupStack.Size > 0);
|
||||||
|
|
||||||
// Make all menus and popups wrap around for now, may need to expose that policy.
|
// Make all menus and popups wrap around for now, may need to expose that policy.
|
||||||
NavProcessMoveRequestWrapAround(window);
|
NavProcessMoveRequestWrapAround(g.CurrentWindow);
|
||||||
|
|
||||||
End();
|
End();
|
||||||
}
|
}
|
||||||
@ -5183,13 +5182,12 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lock window padding so that altering the border sizes for children doesn't have side-effects.
|
// Lock window rounding, border size and rounding so that altering the border sizes for children doesn't have side-effects.
|
||||||
window->WindowPadding = style.WindowPadding;
|
|
||||||
if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & (ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_ComboBox | ImGuiWindowFlags_Popup)) && style.WindowBorderSize == 0.0f)
|
|
||||||
window->WindowPadding = ImVec2(0.0f, (flags & ImGuiWindowFlags_MenuBar) ? style.WindowPadding.y : 0.0f);
|
|
||||||
window->WindowRounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding;
|
window->WindowRounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding;
|
||||||
window->WindowBorderSize = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildBorderSize : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupBorderSize : style.WindowBorderSize;
|
window->WindowBorderSize = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildBorderSize : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupBorderSize : style.WindowBorderSize;
|
||||||
const ImVec2 window_padding = window->WindowPadding;
|
window->WindowPadding = style.WindowPadding;
|
||||||
|
if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & (ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_ComboBox | ImGuiWindowFlags_Popup)) && window->WindowBorderSize == 0.0f)
|
||||||
|
window->WindowPadding = ImVec2(0.0f, (flags & ImGuiWindowFlags_MenuBar) ? style.WindowPadding.y : 0.0f);
|
||||||
const float window_rounding = window->WindowRounding;
|
const float window_rounding = window->WindowRounding;
|
||||||
const float window_border_size = window->WindowBorderSize;
|
const float window_border_size = window->WindowBorderSize;
|
||||||
|
|
||||||
@ -11370,6 +11368,55 @@ void ImGui::VerticalSeparator()
|
|||||||
LogText(" |");
|
LogText(" |");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ImGui::SplitterBehavior(ImGuiID id, const ImRect& bb, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
ImGuiWindow* window = g.CurrentWindow;
|
||||||
|
|
||||||
|
const ImGuiItemFlags item_flags_backup = window->DC.ItemFlags;
|
||||||
|
#ifdef IMGUI_HAS_NAV
|
||||||
|
window->DC.ItemFlags |= ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus;
|
||||||
|
#endif
|
||||||
|
bool add = ItemAdd(bb, id);
|
||||||
|
window->DC.ItemFlags = item_flags_backup;
|
||||||
|
if (!add)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool hovered, held;
|
||||||
|
ImRect bb_interact = bb;
|
||||||
|
bb_interact.Expand(axis == ImGuiAxis_Y ? ImVec2(0.0f, hover_extend) : ImVec2(hover_extend, 0.0f));
|
||||||
|
ButtonBehavior(bb_interact, id, &hovered, &held, ImGuiButtonFlags_FlattenChilds | ImGuiButtonFlags_AllowOverlapMode);
|
||||||
|
if (g.ActiveId != id)
|
||||||
|
SetItemAllowOverlap();
|
||||||
|
|
||||||
|
if (held || (g.HoveredId == id && g.HoveredIdPreviousFrame == id))
|
||||||
|
SetMouseCursor(axis == ImGuiAxis_Y ? ImGuiMouseCursor_ResizeNS : ImGuiMouseCursor_ResizeEW);
|
||||||
|
|
||||||
|
ImRect bb_render = bb;
|
||||||
|
if (held)
|
||||||
|
{
|
||||||
|
ImVec2 mouse_delta_2d = g.IO.MousePos - g.ActiveIdClickOffset - bb_interact.Min;
|
||||||
|
float mouse_delta = (axis == ImGuiAxis_Y) ? mouse_delta_2d.y : mouse_delta_2d.x;
|
||||||
|
|
||||||
|
// Minimum pane size
|
||||||
|
if (mouse_delta < min_size1 - *size1)
|
||||||
|
mouse_delta = min_size1 - *size1;
|
||||||
|
if (mouse_delta > *size2 - min_size2)
|
||||||
|
mouse_delta = *size2 - min_size2;
|
||||||
|
|
||||||
|
// Apply resize
|
||||||
|
*size1 += mouse_delta;
|
||||||
|
*size2 -= mouse_delta;
|
||||||
|
bb_render.Translate((axis == ImGuiAxis_X) ? ImVec2(mouse_delta, 0.0f) : ImVec2(0.0f, mouse_delta));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Render
|
||||||
|
const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : hovered ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);
|
||||||
|
RenderFrame(bb_render.Min, bb_render.Max, col, true, g.Style.FrameRounding);
|
||||||
|
|
||||||
|
return held;
|
||||||
|
}
|
||||||
|
|
||||||
void ImGui::Spacing()
|
void ImGui::Spacing()
|
||||||
{
|
{
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
|
@ -225,6 +225,13 @@ enum ImGuiLayoutType_
|
|||||||
ImGuiLayoutType_Horizontal
|
ImGuiLayoutType_Horizontal
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum ImGuiAxis
|
||||||
|
{
|
||||||
|
ImGuiAxis_None = -1,
|
||||||
|
ImGuiAxis_X = 0,
|
||||||
|
ImGuiAxis_Y = 1,
|
||||||
|
};
|
||||||
|
|
||||||
enum ImGuiPlotType
|
enum ImGuiPlotType
|
||||||
{
|
{
|
||||||
ImGuiPlotType_Lines,
|
ImGuiPlotType_Lines,
|
||||||
@ -910,6 +917,7 @@ namespace ImGui
|
|||||||
|
|
||||||
IMGUI_API void Scrollbar(ImGuiLayoutType direction);
|
IMGUI_API void Scrollbar(ImGuiLayoutType direction);
|
||||||
IMGUI_API void VerticalSeparator(); // Vertical separator, for menu bars (use current line height). not exposed because it is misleading what it doesn't have an effect on regular layout.
|
IMGUI_API void VerticalSeparator(); // Vertical separator, for menu bars (use current line height). not exposed because it is misleading what it doesn't have an effect on regular layout.
|
||||||
|
IMGUI_API bool SplitterBehavior(ImGuiID id, const ImRect& bb, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f);
|
||||||
|
|
||||||
// FIXME-WIP: New Columns API
|
// FIXME-WIP: New Columns API
|
||||||
IMGUI_API void BeginColumns(const char* id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
|
IMGUI_API void BeginColumns(const char* id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
|
||||||
|
Loading…
Reference in New Issue
Block a user