|
@@ -1,4 +1,4 @@
|
|
|
-// dear imgui, v1.89.9
|
|
|
+// dear imgui, v1.90 WIP
|
|
|
// (internal structures/api)
|
|
|
|
|
|
// You may use this file to debug, understand or extend Dear ImGui features but we don't provide any guarantee of forward compatibility.
|
|
@@ -23,6 +23,7 @@ Index of this file:
|
|
|
// [SECTION] Inputs support
|
|
|
// [SECTION] Clipper support
|
|
|
// [SECTION] Navigation support
|
|
|
+// [SECTION] Typing-select support
|
|
|
// [SECTION] Columns support
|
|
|
// [SECTION] Multi-select support
|
|
|
// [SECTION] Docking support
|
|
@@ -157,6 +158,8 @@ struct ImGuiTableInstanceData; // Storage for one instance of a same table
|
|
|
struct ImGuiTableTempData; // Temporary storage for one table (one per table in the stack), shared between tables.
|
|
|
struct ImGuiTableSettings; // Storage for a table .ini settings
|
|
|
struct ImGuiTableColumnsSettings; // Storage for a column .ini settings
|
|
|
+struct ImGuiTypingSelectData; // Storage for GetTypingSelectRequest()
|
|
|
+struct ImGuiTypingSelectRequest; // Storage for GetTypingSelectRequest() (aimed to be public)
|
|
|
struct ImGuiWindow; // Storage for one window
|
|
|
struct ImGuiWindowTempData; // Temporary storage for one window (that's the data which in theory we could ditch at the end of the frame, in practice we currently keep it for each window)
|
|
|
struct ImGuiWindowSettings; // Storage for a window .ini settings (we keep one of those even if the actual window wasn't instanced during this session)
|
|
@@ -183,6 +186,7 @@ typedef int ImGuiScrollFlags; // -> enum ImGuiScrollFlags_ // F
|
|
|
typedef int ImGuiSeparatorFlags; // -> enum ImGuiSeparatorFlags_ // Flags: for SeparatorEx()
|
|
|
typedef int ImGuiTextFlags; // -> enum ImGuiTextFlags_ // Flags: for TextEx()
|
|
|
typedef int ImGuiTooltipFlags; // -> enum ImGuiTooltipFlags_ // Flags: for BeginTooltipEx()
|
|
|
+typedef int ImGuiTypingSelectFlags; // -> enum ImGuiTypingSelectFlags_ // Flags: for GetTypingSelectRequest()
|
|
|
|
|
|
typedef void (*ImGuiErrorLogCallback)(void* user_data, const char* fmt, ...);
|
|
|
|
|
@@ -358,18 +362,18 @@ static inline bool ImIsPowerOfTwo(ImU64 v) { return v != 0 && (v &
|
|
|
static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; }
|
|
|
|
|
|
// Helpers: String
|
|
|
-IMGUI_API int ImStricmp(const char* str1, const char* str2);
|
|
|
-IMGUI_API int ImStrnicmp(const char* str1, const char* str2, size_t count);
|
|
|
-IMGUI_API void ImStrncpy(char* dst, const char* src, size_t count);
|
|
|
-IMGUI_API char* ImStrdup(const char* str);
|
|
|
-IMGUI_API char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* str);
|
|
|
-IMGUI_API const char* ImStrchrRange(const char* str_begin, const char* str_end, char c);
|
|
|
-IMGUI_API int ImStrlenW(const ImWchar* str);
|
|
|
+IMGUI_API int ImStricmp(const char* str1, const char* str2); // Case insensitive compare.
|
|
|
+IMGUI_API int ImStrnicmp(const char* str1, const char* str2, size_t count); // Case insensitive compare to a certain count.
|
|
|
+IMGUI_API void ImStrncpy(char* dst, const char* src, size_t count); // Copy to a certain count and always zero terminate (strncpy doesn't).
|
|
|
+IMGUI_API char* ImStrdup(const char* str); // Duplicate a string.
|
|
|
+IMGUI_API char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* str); // Copy in provided buffer, recreate buffer if needed.
|
|
|
+IMGUI_API const char* ImStrchrRange(const char* str_begin, const char* str_end, char c); // Find first occurrence of 'c' in string range.
|
|
|
IMGUI_API const char* ImStreolRange(const char* str, const char* str_end); // End end-of-line
|
|
|
-IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin); // Find beginning-of-line
|
|
|
-IMGUI_API const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end);
|
|
|
-IMGUI_API void ImStrTrimBlanks(char* str);
|
|
|
-IMGUI_API const char* ImStrSkipBlank(const char* str);
|
|
|
+IMGUI_API const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end); // Find a substring in a string range.
|
|
|
+IMGUI_API void ImStrTrimBlanks(char* str); // Remove leading and trailing blanks from a buffer.
|
|
|
+IMGUI_API const char* ImStrSkipBlank(const char* str); // Find first non-blank character.
|
|
|
+IMGUI_API int ImStrlenW(const ImWchar* str); // Computer string length (ImWchar string)
|
|
|
+IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin); // Find beginning-of-line (ImWchar string)
|
|
|
IM_MSVC_RUNTIME_CHECKS_OFF
|
|
|
static inline char ImToUpper(char c) { return (c >= 'a' && c <= 'z') ? c &= ~32 : c; }
|
|
|
static inline bool ImCharIsBlankA(char c) { return c == ' ' || c == '\t'; }
|
|
@@ -396,6 +400,7 @@ IMGUI_API int ImTextStrFromUtf8(ImWchar* out_buf, int out_buf_size, co
|
|
|
IMGUI_API int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end); // return number of UTF-8 code-points (NOT bytes count)
|
|
|
IMGUI_API int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end); // return number of bytes to express one char in UTF-8
|
|
|
IMGUI_API int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end); // return number of bytes to express string in UTF-8
|
|
|
+IMGUI_API const char* ImTextFindPreviousUtf8Codepoint(const char* in_text_start, const char* in_text_curr); // return previous UTF-8 code-point.
|
|
|
|
|
|
// Helpers: File System
|
|
|
#ifdef IMGUI_DISABLE_FILE_FUNCTIONS
|
|
@@ -1552,6 +1557,39 @@ struct ImGuiNavItemData
|
|
|
void Clear() { Window = NULL; ID = FocusScopeId = 0; InFlags = 0; DistBox = DistCenter = DistAxial = FLT_MAX; }
|
|
|
};
|
|
|
|
|
|
+//-----------------------------------------------------------------------------
|
|
|
+// [SECTION] Typing-select support
|
|
|
+//-----------------------------------------------------------------------------
|
|
|
+
|
|
|
+// Flags for GetTypingSelectRequest()
|
|
|
+enum ImGuiTypingSelectFlags_
|
|
|
+{
|
|
|
+ ImGuiTypingSelectFlags_None = 0,
|
|
|
+ ImGuiTypingSelectFlags_AllowBackspace = 1 << 0, // Backspace to delete character inputs. If using: ensure GetTypingSelectRequest() is not called more than once per frame (filter by e.g. focus state)
|
|
|
+};
|
|
|
+
|
|
|
+// Returned by GetTypingSelectRequest(), designed to eventually be public.
|
|
|
+struct IMGUI_API ImGuiTypingSelectRequest
|
|
|
+{
|
|
|
+ const char* SearchBuffer;
|
|
|
+ int SearchBufferLen;
|
|
|
+ bool SelectRequest; // Set when buffer was modified this frame, requesting a selection.
|
|
|
+ bool RepeatCharMode; // Notify when buffer contains same character repeated, to implement special mode.
|
|
|
+ ImS8 RepeatCharSize; // Length in bytes of first letter codepoint (1 for ascii, 2-4 for UTF-8). If (SearchBufferLen==RepeatCharSize) only 1 letter has been input.
|
|
|
+};
|
|
|
+
|
|
|
+// Storage for GetTypingSelectRequest()
|
|
|
+struct IMGUI_API ImGuiTypingSelectData
|
|
|
+{
|
|
|
+ ImGuiTypingSelectRequest Request; // User-facing data
|
|
|
+ char SearchBuffer[64]; // Search buffer: no need to make dynamic as this search is very transient.
|
|
|
+ ImGuiID FocusScope;
|
|
|
+ int LastRequestFrame = 0;
|
|
|
+ float LastRequestTime = 0.0f;
|
|
|
+
|
|
|
+ ImGuiTypingSelectData() { memset(this, 0, sizeof(*this)); }
|
|
|
+};
|
|
|
+
|
|
|
//-----------------------------------------------------------------------------
|
|
|
// [SECTION] Columns support
|
|
|
//-----------------------------------------------------------------------------
|
|
@@ -2054,14 +2092,14 @@ struct ImGuiContext
|
|
|
ImGuiNextWindowData NextWindowData; // Storage for SetNextWindow** functions
|
|
|
|
|
|
// Shared stacks
|
|
|
- ImVector<ImGuiColorMod> ColorStack; // Stack for PushStyleColor()/PopStyleColor() - inherited by Begin()
|
|
|
- ImVector<ImGuiStyleMod> StyleVarStack; // Stack for PushStyleVar()/PopStyleVar() - inherited by Begin()
|
|
|
- ImVector<ImFont*> FontStack; // Stack for PushFont()/PopFont() - inherited by Begin()
|
|
|
- ImVector<ImGuiID> FocusScopeStack; // Stack for PushFocusScope()/PopFocusScope() - inherited by BeginChild(), pushed into by Begin()
|
|
|
- ImVector<ImGuiItemFlags>ItemFlagsStack; // Stack for PushItemFlag()/PopItemFlag() - inherited by Begin()
|
|
|
- ImVector<ImGuiGroupData>GroupStack; // Stack for BeginGroup()/EndGroup() - not inherited by Begin()
|
|
|
- ImVector<ImGuiPopupData>OpenPopupStack; // Which popups are open (persistent)
|
|
|
- ImVector<ImGuiPopupData>BeginPopupStack; // Which level of BeginPopup() we are in (reset every frame)
|
|
|
+ ImVector<ImGuiColorMod> ColorStack; // Stack for PushStyleColor()/PopStyleColor() - inherited by Begin()
|
|
|
+ ImVector<ImGuiStyleMod> StyleVarStack; // Stack for PushStyleVar()/PopStyleVar() - inherited by Begin()
|
|
|
+ ImVector<ImFont*> FontStack; // Stack for PushFont()/PopFont() - inherited by Begin()
|
|
|
+ ImVector<ImGuiID> FocusScopeStack; // Stack for PushFocusScope()/PopFocusScope() - inherited by BeginChild(), pushed into by Begin()
|
|
|
+ ImVector<ImGuiItemFlags> ItemFlagsStack; // Stack for PushItemFlag()/PopItemFlag() - inherited by Begin()
|
|
|
+ ImVector<ImGuiGroupData> GroupStack; // Stack for BeginGroup()/EndGroup() - not inherited by Begin()
|
|
|
+ ImVector<ImGuiPopupData> OpenPopupStack; // Which popups are open (persistent)
|
|
|
+ ImVector<ImGuiPopupData> BeginPopupStack; // Which level of BeginPopup() we are in (reset every frame)
|
|
|
ImVector<ImGuiNavTreeNodeData> NavTreeNodeStack; // Stack for TreeNode() when a NavLeft requested is emitted.
|
|
|
|
|
|
int BeginMenuCount;
|
|
@@ -2213,6 +2251,7 @@ struct ImGuiContext
|
|
|
short TooltipOverrideCount;
|
|
|
ImVector<char> ClipboardHandlerData; // If no custom clipboard handler is defined
|
|
|
ImVector<ImGuiID> MenusIdSubmittedThisFrame; // A list of menu IDs that were rendered at least once
|
|
|
+ ImGuiTypingSelectData TypingSelectData;
|
|
|
|
|
|
// Platform support
|
|
|
ImGuiPlatformImeData PlatformImeData; // Data updated by current frame
|
|
@@ -3356,6 +3395,9 @@ namespace ImGui
|
|
|
IMGUI_API bool IsDragDropPayloadBeingAccepted();
|
|
|
IMGUI_API void RenderDragDropTargetRect(const ImRect& bb);
|
|
|
|
|
|
+ // Typing-Select API
|
|
|
+ IMGUI_API const ImGuiTypingSelectRequest* GetTypingSelectRequest(ImGuiTypingSelectFlags flags = ImGuiTypingSelectFlags_None);
|
|
|
+
|
|
|
// Internal Columns API (this is not exposed because we will encourage transitioning to the Tables API)
|
|
|
IMGUI_API void SetWindowClipRectBeforeSetChannel(ImGuiWindow* window, const ImRect& clip_rect);
|
|
|
IMGUI_API void BeginColumns(const char* str_id, int count, ImGuiOldColumnFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
|