mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-26 05:27:01 +00:00
Internals: Added SplitterBehavior(). (#319)
This commit is contained in:
parent
195abc3d17
commit
302757447a
49
imgui.cpp
49
imgui.cpp
@ -10184,6 +10184,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();
|
||||||
|
@ -221,6 +221,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,
|
||||||
@ -807,6 +814,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