InputText: moved all ImGuiInputTextState functions to not be inline.
diff --git a/imgui.h b/imgui.h
index 0394967..18efaff 100644
--- a/imgui.h
+++ b/imgui.h
@@ -29,7 +29,7 @@
// Library Version
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345')
#define IMGUI_VERSION "1.91.2 WIP"
-#define IMGUI_VERSION_NUM 19111
+#define IMGUI_VERSION_NUM 19112
#define IMGUI_HAS_TABLE
/*
diff --git a/imgui_internal.h b/imgui_internal.h
index ab7cbc1..7748f07 100644
--- a/imgui_internal.h
+++ b/imgui_internal.h
@@ -1127,7 +1127,6 @@
bool TextAIsValid; // temporary UTF8 buffer is not initially valid before we make the widget active (until then we pull the data from user argument)
int BufCapacityA; // end-user buffer capacity
ImVec2 Scroll; // horizontal offset (managed manually) + vertical scrolling (pulled from child window's own Scroll.y)
-
float CursorAnim; // timer for cursor blink, reset on every user action so the cursor reappears immediately
bool CursorFollow; // set when we want scrolling to follow the current cursor position (not always!)
bool SelectedAllMouseLock; // after a double-click to select all, we ignore further mouse drags to update selection
@@ -1144,24 +1143,23 @@
void OnKeyPressed(int key); // Cannot be inline because we call in code in stb_textedit.h implementation
// Cursor & Selection
- void CursorAnimReset() { CursorAnim = -0.30f; } // After a user-input the cursor stays on for a while without blinking
- void CursorClamp() { Stb->cursor = ImMin(Stb->cursor, CurLenW); Stb->select_start = ImMin(Stb->select_start, CurLenW); Stb->select_end = ImMin(Stb->select_end, CurLenW); }
- bool HasSelection() const { return Stb->select_start != Stb->select_end; }
- void ClearSelection() { Stb->select_start = Stb->select_end = Stb->cursor; }
- int GetCursorPos() const { return Stb->cursor; }
- int GetSelectionStart() const { return Stb->select_start; }
- int GetSelectionEnd() const { return Stb->select_end; }
- void SelectAll() { Stb->select_start = 0; Stb->cursor = Stb->select_end = CurLenW; Stb->has_preferred_x = 0; }
+ void CursorAnimReset();
+ void CursorClamp();
+ bool HasSelection() const;
+ void ClearSelection();
+ int GetCursorPos() const;
+ int GetSelectionStart() const;
+ int GetSelectionEnd() const;
+ void SelectAll();
// Reload user buf (WIP #2890)
// If you modify underlying user-passed const char* while active you need to call this (InputText V2 may lift this)
// strcpy(my_buf, "hello");
// if (ImGuiInputTextState* state = ImGui::GetInputTextState(id)) // id may be ImGui::GetItemID() is last item
// state->ReloadUserBufAndSelectAll();
- void ReloadUserBufAndSelectAll() { ReloadUserBuf = true; ReloadSelectionStart = 0; ReloadSelectionEnd = INT_MAX; }
- void ReloadUserBufAndKeepSelection() { ReloadUserBuf = true; ReloadSelectionStart = Stb->select_start; ReloadSelectionEnd = Stb->select_end; }
- void ReloadUserBufAndMoveToEnd() { ReloadUserBuf = true; ReloadSelectionStart = ReloadSelectionEnd = INT_MAX; }
-
+ void ReloadUserBufAndSelectAll();
+ void ReloadUserBufAndKeepSelection();
+ void ReloadUserBufAndMoveToEnd();
};
enum ImGuiWindowRefreshFlags_
diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp
index f359277..877dbd1 100644
--- a/imgui_widgets.cpp
+++ b/imgui_widgets.cpp
@@ -4048,6 +4048,19 @@
CursorAnimReset();
}
+// Those functions are not inlined in imgui_internal.h, allowing us to hide ImStbTexteditState from that header.
+void ImGuiInputTextState::CursorAnimReset() { CursorAnim = -0.30f; } // After a user-input the cursor stays on for a while without blinking
+void ImGuiInputTextState::CursorClamp() { Stb->cursor = ImMin(Stb->cursor, CurLenW); Stb->select_start = ImMin(Stb->select_start, CurLenW); Stb->select_end = ImMin(Stb->select_end, CurLenW); }
+bool ImGuiInputTextState::HasSelection() const { return Stb->select_start != Stb->select_end; }
+void ImGuiInputTextState::ClearSelection() { Stb->select_start = Stb->select_end = Stb->cursor; }
+int ImGuiInputTextState::GetCursorPos() const { return Stb->cursor; }
+int ImGuiInputTextState::GetSelectionStart() const { return Stb->select_start; }
+int ImGuiInputTextState::GetSelectionEnd() const { return Stb->select_end; }
+void ImGuiInputTextState::SelectAll() { Stb->select_start = 0; Stb->cursor = Stb->select_end = CurLenW; Stb->has_preferred_x = 0; }
+void ImGuiInputTextState::ReloadUserBufAndSelectAll() { ReloadUserBuf = true; ReloadSelectionStart = 0; ReloadSelectionEnd = INT_MAX; }
+void ImGuiInputTextState::ReloadUserBufAndKeepSelection() { ReloadUserBuf = true; ReloadSelectionStart = Stb->select_start; ReloadSelectionEnd = Stb->select_end; }
+void ImGuiInputTextState::ReloadUserBufAndMoveToEnd() { ReloadUserBuf = true; ReloadSelectionStart = ReloadSelectionEnd = INT_MAX; }
+
ImGuiInputTextCallbackData::ImGuiInputTextCallbackData()
{
memset(this, 0, sizeof(*this));