mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-15 01:17:00 +00:00
Merge branch 'master' into navigation
This commit is contained in:
commit
4c2514dc29
41
imgui.cpp
41
imgui.cpp
@ -3204,7 +3204,8 @@ void ImGui::NewFrame()
|
|||||||
g.HoveredWindow = (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoInputs)) ? g.MovingWindow : FindHoveredWindow(g.IO.MousePos);
|
g.HoveredWindow = (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoInputs)) ? g.MovingWindow : FindHoveredWindow(g.IO.MousePos);
|
||||||
g.HoveredRootWindow = g.HoveredWindow ? g.HoveredWindow->RootWindow : NULL;
|
g.HoveredRootWindow = g.HoveredWindow ? g.HoveredWindow->RootWindow : NULL;
|
||||||
|
|
||||||
if (ImGuiWindow* modal_window = GetFrontMostModalRootWindow())
|
ImGuiWindow* modal_window = GetFrontMostModalRootWindow();
|
||||||
|
if (modal_window != NULL)
|
||||||
{
|
{
|
||||||
g.ModalWindowDarkeningRatio = ImMin(g.ModalWindowDarkeningRatio + g.IO.DeltaTime * 6.0f, 1.0f);
|
g.ModalWindowDarkeningRatio = ImMin(g.ModalWindowDarkeningRatio + g.IO.DeltaTime * 6.0f, 1.0f);
|
||||||
if (g.HoveredRootWindow && !IsWindowChildOf(g.HoveredRootWindow, modal_window))
|
if (g.HoveredRootWindow && !IsWindowChildOf(g.HoveredRootWindow, modal_window))
|
||||||
@ -3233,7 +3234,10 @@ void ImGui::NewFrame()
|
|||||||
g.IO.WantCaptureMouse = (g.WantCaptureMouseNextFrame != 0);
|
g.IO.WantCaptureMouse = (g.WantCaptureMouseNextFrame != 0);
|
||||||
else
|
else
|
||||||
g.IO.WantCaptureMouse = (mouse_avail_to_imgui && (g.HoveredWindow != NULL || mouse_any_down)) || (!g.OpenPopupStack.empty());
|
g.IO.WantCaptureMouse = (mouse_avail_to_imgui && (g.HoveredWindow != NULL || mouse_any_down)) || (!g.OpenPopupStack.empty());
|
||||||
g.IO.WantCaptureKeyboard = (g.WantCaptureKeyboardNextFrame != -1) ? (g.WantCaptureKeyboardNextFrame != 0) : (g.ActiveId != 0);
|
if (g.WantCaptureKeyboardNextFrame != -1)
|
||||||
|
g.IO.WantCaptureKeyboard = (g.WantCaptureKeyboardNextFrame != 0);
|
||||||
|
else
|
||||||
|
g.IO.WantCaptureKeyboard = (g.ActiveId != 0) || (modal_window != NULL);
|
||||||
g.IO.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : 0;
|
g.IO.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : 0;
|
||||||
g.MouseCursor = ImGuiMouseCursor_Arrow;
|
g.MouseCursor = ImGuiMouseCursor_Arrow;
|
||||||
g.WantCaptureMouseNextFrame = g.WantCaptureKeyboardNextFrame = g.WantTextInputNextFrame = -1;
|
g.WantCaptureMouseNextFrame = g.WantCaptureKeyboardNextFrame = g.WantTextInputNextFrame = -1;
|
||||||
@ -4691,15 +4695,13 @@ bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGuiWindowFlags flags = extra_flags|ImGuiWindowFlags_Popup|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings;
|
|
||||||
|
|
||||||
char name[20];
|
char name[20];
|
||||||
if (flags & ImGuiWindowFlags_ChildMenu)
|
if (extra_flags & ImGuiWindowFlags_ChildMenu)
|
||||||
ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.CurrentPopupStack.Size); // Recycle windows based on depth
|
ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.CurrentPopupStack.Size); // Recycle windows based on depth
|
||||||
else
|
else
|
||||||
ImFormatString(name, IM_ARRAYSIZE(name), "##Popup_%08x", id); // Not recycling, so we can close/open during the same frame
|
ImFormatString(name, IM_ARRAYSIZE(name), "##Popup_%08x", id); // Not recycling, so we can close/open during the same frame
|
||||||
|
|
||||||
bool is_open = Begin(name, NULL, flags);
|
bool is_open = Begin(name, NULL, extra_flags | ImGuiWindowFlags_Popup);
|
||||||
if (!is_open) // NB: Begin can return false when the popup is completely clipped (e.g. zero size display)
|
if (!is_open) // NB: Begin can return false when the popup is completely clipped (e.g. zero size display)
|
||||||
EndPopup();
|
EndPopup();
|
||||||
|
|
||||||
@ -4714,7 +4716,7 @@ bool ImGui::BeginPopup(const char* str_id)
|
|||||||
ClearSetNextWindowData(); // We behave like Begin() and need to consume those values
|
ClearSetNextWindowData(); // We behave like Begin() and need to consume those values
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return BeginPopupEx(g.CurrentWindow->GetID(str_id), ImGuiWindowFlags_AlwaysAutoResize);
|
return BeginPopupEx(g.CurrentWindow->GetID(str_id), ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ImGui::IsPopupOpen(ImGuiID id)
|
bool ImGui::IsPopupOpen(ImGuiID id)
|
||||||
@ -4805,7 +4807,7 @@ bool ImGui::BeginPopupContextItem(const char* str_id, int mouse_button)
|
|||||||
if (IsMouseClicked(mouse_button))
|
if (IsMouseClicked(mouse_button))
|
||||||
if (IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
|
if (IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
|
||||||
OpenPopupEx(id, true);
|
OpenPopupEx(id, true);
|
||||||
return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize);
|
return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ImGui::BeginPopupContextWindow(const char* str_id, int mouse_button, bool also_over_items)
|
bool ImGui::BeginPopupContextWindow(const char* str_id, int mouse_button, bool also_over_items)
|
||||||
@ -4817,7 +4819,7 @@ bool ImGui::BeginPopupContextWindow(const char* str_id, int mouse_button, bool a
|
|||||||
if (IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
|
if (IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
|
||||||
if (also_over_items || !IsAnyItemHovered())
|
if (also_over_items || !IsAnyItemHovered())
|
||||||
OpenPopupEx(id, true);
|
OpenPopupEx(id, true);
|
||||||
return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize);
|
return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ImGui::BeginPopupContextVoid(const char* str_id, int mouse_button)
|
bool ImGui::BeginPopupContextVoid(const char* str_id, int mouse_button)
|
||||||
@ -4827,7 +4829,7 @@ bool ImGui::BeginPopupContextVoid(const char* str_id, int mouse_button)
|
|||||||
ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
|
ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
|
||||||
if (!IsAnyWindowHovered() && IsMouseClicked(mouse_button))
|
if (!IsAnyWindowHovered() && IsMouseClicked(mouse_button))
|
||||||
OpenPopupEx(id, true);
|
OpenPopupEx(id, true);
|
||||||
return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize);
|
return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
|
static bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
|
||||||
@ -9501,6 +9503,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
|||||||
const bool is_multiline = (flags & ImGuiInputTextFlags_Multiline) != 0;
|
const bool is_multiline = (flags & ImGuiInputTextFlags_Multiline) != 0;
|
||||||
const bool is_editable = (flags & ImGuiInputTextFlags_ReadOnly) == 0;
|
const bool is_editable = (flags & ImGuiInputTextFlags_ReadOnly) == 0;
|
||||||
const bool is_password = (flags & ImGuiInputTextFlags_Password) != 0;
|
const bool is_password = (flags & ImGuiInputTextFlags_Password) != 0;
|
||||||
|
const bool is_undoable = (flags & ImGuiInputTextFlags_NoUndoRedo) == 0;
|
||||||
|
|
||||||
if (is_multiline) // Open group before calling GetID() because groups tracks id created during their spawn
|
if (is_multiline) // Open group before calling GetID() because groups tracks id created during their spawn
|
||||||
BeginGroup();
|
BeginGroup();
|
||||||
@ -9731,10 +9734,10 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
|||||||
if (InputTextFilterCharacter(&c, flags, callback, user_data))
|
if (InputTextFilterCharacter(&c, flags, callback, user_data))
|
||||||
edit_state.OnKeyPressed((int)c);
|
edit_state.OnKeyPressed((int)c);
|
||||||
}
|
}
|
||||||
else if (IsKeyPressedMap(ImGuiKey_Escape)) { clear_active_id = cancel_edit = true; }
|
else if (IsKeyPressedMap(ImGuiKey_Escape)) { clear_active_id = cancel_edit = true; }
|
||||||
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Z) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_UNDO); edit_state.ClearSelection(); }
|
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Z) && is_editable && is_undoable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_UNDO); edit_state.ClearSelection(); }
|
||||||
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Y) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_REDO); edit_state.ClearSelection(); }
|
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Y) && is_editable && is_undoable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_REDO); edit_state.ClearSelection(); }
|
||||||
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_A)) { edit_state.SelectAll(); edit_state.CursorFollow = true; }
|
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_A)) { edit_state.SelectAll(); edit_state.CursorFollow = true; }
|
||||||
else if (is_shortcut_key_only && !is_password && ((IsKeyPressedMap(ImGuiKey_X) && is_editable) || IsKeyPressedMap(ImGuiKey_C)) && (!is_multiline || edit_state.HasSelection()))
|
else if (is_shortcut_key_only && !is_password && ((IsKeyPressedMap(ImGuiKey_X) && is_editable) || IsKeyPressedMap(ImGuiKey_C)) && (!is_multiline || edit_state.HasSelection()))
|
||||||
{
|
{
|
||||||
// Cut, Copy
|
// Cut, Copy
|
||||||
@ -10920,7 +10923,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
|
|||||||
if (menu_is_open)
|
if (menu_is_open)
|
||||||
{
|
{
|
||||||
SetNextWindowPos(popup_pos, ImGuiCond_Always);
|
SetNextWindowPos(popup_pos, ImGuiCond_Always);
|
||||||
ImGuiWindowFlags flags = ImGuiWindowFlags_AlwaysAutoResize | ((window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu)) ? ImGuiWindowFlags_ChildMenu|ImGuiWindowFlags_ChildWindow : ImGuiWindowFlags_ChildMenu);
|
ImGuiWindowFlags flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings | ((window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu)) ? ImGuiWindowFlags_ChildMenu|ImGuiWindowFlags_ChildWindow : ImGuiWindowFlags_ChildMenu);
|
||||||
menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
|
menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11985,9 +11988,9 @@ void ImGui::NextColumn()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
window->DC.ColumnsOffsetX = 0.0f;
|
window->DC.ColumnsOffsetX = 0.0f;
|
||||||
|
window->DrawList->ChannelsSetCurrent(0);
|
||||||
columns->Current = 0;
|
columns->Current = 0;
|
||||||
columns->CellMinY = columns->CellMaxY;
|
columns->CellMinY = columns->CellMaxY;
|
||||||
window->DrawList->ChannelsSetCurrent(0);
|
|
||||||
}
|
}
|
||||||
window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX);
|
window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX);
|
||||||
window->DC.CursorPos.y = columns->CellMinY;
|
window->DC.CursorPos.y = columns->CellMinY;
|
||||||
@ -12190,7 +12193,7 @@ void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlag
|
|||||||
|
|
||||||
for (int n = 0; n < columns_count + 1; n++)
|
for (int n = 0; n < columns_count + 1; n++)
|
||||||
{
|
{
|
||||||
// Clamp
|
// Clamp position
|
||||||
ImGuiColumnData* column = &columns->Columns[n];
|
ImGuiColumnData* column = &columns->Columns[n];
|
||||||
float t = column->OffsetNorm;
|
float t = column->OffsetNorm;
|
||||||
if (!(columns->Flags & ImGuiColumnsFlags_NoForceWithinWindow))
|
if (!(columns->Flags & ImGuiColumnsFlags_NoForceWithinWindow))
|
||||||
@ -12200,7 +12203,7 @@ void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlag
|
|||||||
if (n == columns_count)
|
if (n == columns_count)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Compute clipping rectangles
|
// Compute clipping rectangle
|
||||||
float clip_x1 = ImFloor(0.5f + window->Pos.x + GetColumnOffset(n) - 1.0f);
|
float clip_x1 = ImFloor(0.5f + window->Pos.x + GetColumnOffset(n) - 1.0f);
|
||||||
float clip_x2 = ImFloor(0.5f + window->Pos.x + GetColumnOffset(n + 1) - 1.0f);
|
float clip_x2 = ImFloor(0.5f + window->Pos.x + GetColumnOffset(n + 1) - 1.0f);
|
||||||
column->ClipRect = ImRect(clip_x1, -FLT_MAX, clip_x2, +FLT_MAX);
|
column->ClipRect = ImRect(clip_x1, -FLT_MAX, clip_x2, +FLT_MAX);
|
||||||
@ -12253,7 +12256,7 @@ void ImGui::EndColumns()
|
|||||||
g.MouseCursor = ImGuiMouseCursor_ResizeEW;
|
g.MouseCursor = ImGuiMouseCursor_ResizeEW;
|
||||||
if (held && g.ActiveIdIsJustActivated)
|
if (held && g.ActiveIdIsJustActivated)
|
||||||
g.ActiveIdClickOffset.x -= column_hw; // Store from center of column line (we used a 8 wide rect for columns clicking). This is used by GetDraggedColumnOffset().
|
g.ActiveIdClickOffset.x -= column_hw; // Store from center of column line (we used a 8 wide rect for columns clicking). This is used by GetDraggedColumnOffset().
|
||||||
if (held)
|
if (held && !(columns->Columns[n].Flags & ImGuiColumnsFlags_NoResize))
|
||||||
dragging_column = n;
|
dragging_column = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
imgui.h
1
imgui.h
@ -574,6 +574,7 @@ enum ImGuiInputTextFlags_
|
|||||||
ImGuiInputTextFlags_AlwaysInsertMode = 1 << 13, // Insert mode
|
ImGuiInputTextFlags_AlwaysInsertMode = 1 << 13, // Insert mode
|
||||||
ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode
|
ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode
|
||||||
ImGuiInputTextFlags_Password = 1 << 15, // Password mode, display all characters as '*'
|
ImGuiInputTextFlags_Password = 1 << 15, // Password mode, display all characters as '*'
|
||||||
|
ImGuiInputTextFlags_NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID().
|
||||||
// [Internal]
|
// [Internal]
|
||||||
ImGuiInputTextFlags_Multiline = 1 << 20 // For internal use by InputTextMultiline()
|
ImGuiInputTextFlags_Multiline = 1 << 20 // For internal use by InputTextMultiline()
|
||||||
};
|
};
|
||||||
|
@ -435,9 +435,10 @@ struct ImGuiColumnData
|
|||||||
{
|
{
|
||||||
float OffsetNorm; // Column start offset, normalized 0.0 (far left) -> 1.0 (far right)
|
float OffsetNorm; // Column start offset, normalized 0.0 (far left) -> 1.0 (far right)
|
||||||
float OffsetNormBeforeResize;
|
float OffsetNormBeforeResize;
|
||||||
|
ImGuiColumnsFlags Flags; // Not exposed
|
||||||
ImRect ClipRect;
|
ImRect ClipRect;
|
||||||
|
|
||||||
ImGuiColumnData() { OffsetNorm = OffsetNormBeforeResize = 0.0f; }
|
ImGuiColumnData() { OffsetNorm = OffsetNormBeforeResize = 0.0f; Flags = 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ImGuiColumnsSet
|
struct ImGuiColumnsSet
|
||||||
|
Loading…
Reference in New Issue
Block a user