mirror of
https://github.com/ocornut/imgui.git
synced 2025-11-03 17:24:24 +00:00
Merge branch 'master' into docking
# Conflicts: # backends/imgui_impl_glfw.cpp # backends/imgui_impl_sdl2.cpp # backends/imgui_impl_sdl3.cpp # backends/imgui_impl_win32.cpp
This commit is contained in:
70
imgui.cpp
70
imgui.cpp
@@ -666,7 +666,7 @@ CODE
|
||||
- 2022/04/05 (1.88) - inputs: renamed ImGuiKeyModFlags to ImGuiModFlags. Kept inline redirection enums (will obsolete). This was never used in public API functions but technically present in imgui.h and ImGuiIO.
|
||||
- 2022/01/20 (1.87) - inputs: reworded gamepad IO.
|
||||
- Backend writing to io.NavInputs[] -> backend should call io.AddKeyEvent()/io.AddKeyAnalogEvent() with ImGuiKey_GamepadXXX values.
|
||||
- 2022/01/19 (1.87) - sliders, drags: removed support for legacy arithmetic operators (+,+-,*,/) when inputing text. This doesn't break any api/code but a feature that used to be accessible by end-users (which seemingly no one used).
|
||||
- 2022/01/19 (1.87) - sliders, drags: removed support for legacy arithmetic operators (+,+-,*,/) when inputting text. This doesn't break any api/code but a feature that used to be accessible by end-users (which seemingly no one used).
|
||||
- 2022/01/17 (1.87) - inputs: reworked mouse IO.
|
||||
- Backend writing to io.MousePos -> backend should call io.AddMousePosEvent()
|
||||
- Backend writing to io.MouseDown[] -> backend should call io.AddMouseButtonEvent()
|
||||
@@ -2046,15 +2046,15 @@ void ImStrncpy(char* dst, const char* src, size_t count)
|
||||
|
||||
char* ImStrdup(const char* str)
|
||||
{
|
||||
size_t len = strlen(str);
|
||||
size_t len = ImStrlen(str);
|
||||
void* buf = IM_ALLOC(len + 1);
|
||||
return (char*)memcpy(buf, (const void*)str, len + 1);
|
||||
}
|
||||
|
||||
char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* src)
|
||||
{
|
||||
size_t dst_buf_size = p_dst_size ? *p_dst_size : strlen(dst) + 1;
|
||||
size_t src_size = strlen(src) + 1;
|
||||
size_t dst_buf_size = p_dst_size ? *p_dst_size : ImStrlen(dst) + 1;
|
||||
size_t src_size = ImStrlen(src) + 1;
|
||||
if (dst_buf_size < src_size)
|
||||
{
|
||||
IM_FREE(dst);
|
||||
@@ -2067,7 +2067,7 @@ char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* src)
|
||||
|
||||
const char* ImStrchrRange(const char* str, const char* str_end, char c)
|
||||
{
|
||||
const char* p = (const char*)memchr(str, (int)c, str_end - str);
|
||||
const char* p = (const char*)ImMemchr(str, (int)c, str_end - str);
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -2082,13 +2082,13 @@ int ImStrlenW(const ImWchar* str)
|
||||
// Find end-of-line. Return pointer will point to either first \n, either str_end.
|
||||
const char* ImStreolRange(const char* str, const char* str_end)
|
||||
{
|
||||
const char* p = (const char*)memchr(str, '\n', str_end - str);
|
||||
const char* p = (const char*)ImMemchr(str, '\n', str_end - str);
|
||||
return p ? p : str_end;
|
||||
}
|
||||
|
||||
const char* ImStrbol(const char* buf_mid_line, const char* buf_begin) // find beginning-of-line
|
||||
{
|
||||
IM_ASSERT_PARANOID(buf_mid_line >= buf_begin && buf_mid_line <= buf_begin + strlen(buf_begin));
|
||||
IM_ASSERT_PARANOID(buf_mid_line >= buf_begin && buf_mid_line <= buf_begin + ImStrlen(buf_begin));
|
||||
while (buf_mid_line > buf_begin && buf_mid_line[-1] != '\n')
|
||||
buf_mid_line--;
|
||||
return buf_mid_line;
|
||||
@@ -2097,7 +2097,7 @@ const char* ImStrbol(const char* buf_mid_line, const char* buf_begin) // find be
|
||||
const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end)
|
||||
{
|
||||
if (!needle_end)
|
||||
needle_end = needle + strlen(needle);
|
||||
needle_end = needle + ImStrlen(needle);
|
||||
|
||||
const char un0 = (char)ImToUpper(*needle);
|
||||
while ((!haystack_end && *haystack) || (haystack_end && haystack < haystack_end))
|
||||
@@ -2218,7 +2218,7 @@ void ImFormatStringToTempBufferV(const char** out_buf, const char** out_buf_end,
|
||||
if (buf == NULL)
|
||||
buf = "(null)";
|
||||
*out_buf = buf;
|
||||
if (out_buf_end) { *out_buf_end = buf + strlen(buf); }
|
||||
if (out_buf_end) { *out_buf_end = buf + ImStrlen(buf); }
|
||||
}
|
||||
else if (fmt[0] == '%' && fmt[1] == '.' && fmt[2] == '*' && fmt[3] == 's' && fmt[4] == 0)
|
||||
{
|
||||
@@ -2627,11 +2627,11 @@ const char* ImTextFindPreviousUtf8Codepoint(const char* in_text_start, const cha
|
||||
int ImTextCountLines(const char* in_text, const char* in_text_end)
|
||||
{
|
||||
if (in_text_end == NULL)
|
||||
in_text_end = in_text + strlen(in_text); // FIXME-OPT: Not optimal approach, discourage use for now.
|
||||
in_text_end = in_text + ImStrlen(in_text); // FIXME-OPT: Not optimal approach, discourage use for now.
|
||||
int count = 0;
|
||||
while (in_text < in_text_end)
|
||||
{
|
||||
const char* line_end = (const char*)memchr(in_text, '\n', in_text_end - in_text);
|
||||
const char* line_end = (const char*)ImMemchr(in_text, '\n', in_text_end - in_text);
|
||||
in_text = line_end ? line_end + 1 : in_text_end;
|
||||
count++;
|
||||
}
|
||||
@@ -2912,7 +2912,7 @@ void ImGuiTextFilter::ImGuiTextRange::split(char separator, ImVector<ImGuiTextRa
|
||||
void ImGuiTextFilter::Build()
|
||||
{
|
||||
Filters.resize(0);
|
||||
ImGuiTextRange input_range(InputBuf, InputBuf + strlen(InputBuf));
|
||||
ImGuiTextRange input_range(InputBuf, InputBuf + ImStrlen(InputBuf));
|
||||
input_range.split(',', &Filters);
|
||||
|
||||
CountGrep = 0;
|
||||
@@ -2980,7 +2980,7 @@ char ImGuiTextBuffer::EmptyString[1] = { 0 };
|
||||
|
||||
void ImGuiTextBuffer::append(const char* str, const char* str_end)
|
||||
{
|
||||
int len = str_end ? (int)(str_end - str) : (int)strlen(str);
|
||||
int len = str_end ? (int)(str_end - str) : (int)ImStrlen(str);
|
||||
|
||||
// Add zero-terminator the first time
|
||||
const int write_off = (Buf.Size != 0) ? Buf.Size : 1;
|
||||
@@ -3039,7 +3039,7 @@ void ImGuiTextIndex::append(const char* base, int old_size, int new_size)
|
||||
if (EndOffset == 0 || base[EndOffset - 1] == '\n')
|
||||
LineOffsets.push_back(EndOffset);
|
||||
const char* base_end = base + new_size;
|
||||
for (const char* p = base + old_size; (p = (const char*)memchr(p, '\n', base_end - p)) != 0; )
|
||||
for (const char* p = base + old_size; (p = (const char*)ImMemchr(p, '\n', base_end - p)) != 0; )
|
||||
if (++p < base_end) // Don't push a trailing offset on last \n
|
||||
LineOffsets.push_back((int)(intptr_t)(p - base));
|
||||
EndOffset = ImMax(EndOffset, new_size);
|
||||
@@ -3671,7 +3671,7 @@ void ImGui::RenderText(ImVec2 pos, const char* text, const char* text_end, bool
|
||||
else
|
||||
{
|
||||
if (!text_end)
|
||||
text_end = text + strlen(text); // FIXME-OPT
|
||||
text_end = text + ImStrlen(text); // FIXME-OPT
|
||||
text_display_end = text_end;
|
||||
}
|
||||
|
||||
@@ -3689,7 +3689,7 @@ void ImGui::RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end
|
||||
ImGuiWindow* window = g.CurrentWindow;
|
||||
|
||||
if (!text_end)
|
||||
text_end = text + strlen(text); // FIXME-OPT
|
||||
text_end = text + ImStrlen(text); // FIXME-OPT
|
||||
|
||||
if (text != text_end)
|
||||
{
|
||||
@@ -4390,7 +4390,7 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* ctx, const char* name) : DrawListInst(NUL
|
||||
memset(this, 0, sizeof(*this));
|
||||
Ctx = ctx;
|
||||
Name = ImStrdup(name);
|
||||
NameBufLen = (int)strlen(name) + 1;
|
||||
NameBufLen = (int)ImStrlen(name) + 1;
|
||||
ID = ImHashStr(name);
|
||||
IDStack.push_back(ID);
|
||||
ViewportAllowPlatformMonitorExtend = -1;
|
||||
@@ -5082,7 +5082,7 @@ void ImGui::StartMouseMovingWindowOrNode(ImGuiWindow* window, ImGuiDockNode* nod
|
||||
|
||||
// Handle mouse moving window
|
||||
// Note: moving window with the navigation keys (Square + d-pad / CTRL+TAB + Arrows) are processed in NavUpdateWindowing()
|
||||
// FIXME: We don't have strong guarantee that g.MovingWindow stay synched with g.ActiveId == g.MovingWindow->MoveId.
|
||||
// FIXME: We don't have strong guarantee that g.MovingWindow stay synced with g.ActiveId == g.MovingWindow->MoveId.
|
||||
// This is currently enforced by the fact that BeginDragDropSource() is setting all g.ActiveIdUsingXXXX flags to inhibit navigation inputs,
|
||||
// but if we should more thoroughly test cases where g.ActiveId or g.MovingWindow gets changed and not the other.
|
||||
void ImGui::UpdateMouseMovingWindowNewFrame()
|
||||
@@ -6878,7 +6878,7 @@ static int ImGui::UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& si
|
||||
{
|
||||
// Auto-fit when double-clicking
|
||||
size_target = CalcWindowSizeAfterConstraint(window, size_auto_fit);
|
||||
ret_auto_fit_mask = 0x03; // Both axises
|
||||
ret_auto_fit_mask = 0x03; // Both axes
|
||||
ClearActiveID();
|
||||
}
|
||||
else if (held)
|
||||
@@ -9388,7 +9388,7 @@ ImGuiKeyData* ImGui::GetKeyData(ImGuiContext* ctx, ImGuiKey key)
|
||||
return &g.IO.KeysData[key - ImGuiKey_NamedKey_BEGIN];
|
||||
}
|
||||
|
||||
// Those names a provided for debugging purpose and are not meant to be saved persistently not compared.
|
||||
// Those names are provided for debugging purpose and are not meant to be saved persistently nor compared.
|
||||
static const char* const GKeyNames[] =
|
||||
{
|
||||
"Tab", "LeftArrow", "RightArrow", "UpArrow", "DownArrow", "PageUp", "PageDown",
|
||||
@@ -9403,7 +9403,7 @@ static const char* const GKeyNames[] =
|
||||
"Pause", "Keypad0", "Keypad1", "Keypad2", "Keypad3", "Keypad4", "Keypad5", "Keypad6",
|
||||
"Keypad7", "Keypad8", "Keypad9", "KeypadDecimal", "KeypadDivide", "KeypadMultiply",
|
||||
"KeypadSubtract", "KeypadAdd", "KeypadEnter", "KeypadEqual",
|
||||
"AppBack", "AppForward",
|
||||
"AppBack", "AppForward", "Oem102",
|
||||
"GamepadStart", "GamepadBack",
|
||||
"GamepadFaceLeft", "GamepadFaceRight", "GamepadFaceUp", "GamepadFaceDown",
|
||||
"GamepadDpadLeft", "GamepadDpadRight", "GamepadDpadUp", "GamepadDpadDown",
|
||||
@@ -9445,7 +9445,7 @@ const char* ImGui::GetKeyChordName(ImGuiKeyChord key_chord)
|
||||
(key != ImGuiKey_None || key_chord == ImGuiKey_None) ? GetKeyName(key) : "");
|
||||
size_t len;
|
||||
if (key == ImGuiKey_None && key_chord != 0)
|
||||
if ((len = strlen(g.TempKeychordName)) != 0) // Remove trailing '+'
|
||||
if ((len = ImStrlen(g.TempKeychordName)) != 0) // Remove trailing '+'
|
||||
g.TempKeychordName[len - 1] = 0;
|
||||
return g.TempKeychordName;
|
||||
}
|
||||
@@ -10322,7 +10322,7 @@ void ImGui::UpdateMouseWheel()
|
||||
if (g.IO.MouseWheelRequestAxisSwap)
|
||||
wheel = ImVec2(wheel.y, 0.0f);
|
||||
|
||||
// Maintain a rough average of moving magnitude on both axises
|
||||
// Maintain a rough average of moving magnitude on both axes
|
||||
// FIXME: should by based on wall clock time rather than frame-counter
|
||||
g.WheelingAxisAvg.x = ImExponentialMovingAverage(g.WheelingAxisAvg.x, ImAbs(wheel.x), 30);
|
||||
g.WheelingAxisAvg.y = ImExponentialMovingAverage(g.WheelingAxisAvg.y, ImAbs(wheel.y), 30);
|
||||
@@ -10335,7 +10335,7 @@ void ImGui::UpdateMouseWheel()
|
||||
|
||||
// Mouse wheel scrolling: find target and apply
|
||||
// - don't renew lock if axis doesn't apply on the window.
|
||||
// - select a main axis when both axises are being moved.
|
||||
// - select a main axis when both axes are being moved.
|
||||
if (ImGuiWindow* window = (g.WheelingWindow ? g.WheelingWindow : FindBestWheelingWindow(wheel)))
|
||||
if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))
|
||||
{
|
||||
@@ -14841,7 +14841,7 @@ bool ImGui::SetDragDropPayload(const char* type, const void* data, size_t data_s
|
||||
cond = ImGuiCond_Always;
|
||||
|
||||
IM_ASSERT(type != NULL);
|
||||
IM_ASSERT(strlen(type) < IM_ARRAYSIZE(payload.DataType) && "Payload type can be at most 32 characters long");
|
||||
IM_ASSERT(ImStrlen(type) < IM_ARRAYSIZE(payload.DataType) && "Payload type can be at most 32 characters long");
|
||||
IM_ASSERT((data != NULL && data_size > 0) || (data == NULL && data_size == 0));
|
||||
IM_ASSERT(cond == ImGuiCond_Always || cond == ImGuiCond_Once);
|
||||
IM_ASSERT(payload.SourceId != 0); // Not called between BeginDragDropSource() and EndDragDropSource()
|
||||
@@ -15085,7 +15085,7 @@ void ImGui::LogRenderedText(const ImVec2* ref_pos, const char* text, const char*
|
||||
}
|
||||
|
||||
if (prefix)
|
||||
LogRenderedText(ref_pos, prefix, prefix + strlen(prefix)); // Calculate end ourself to ensure "##" are included here.
|
||||
LogRenderedText(ref_pos, prefix, prefix + ImStrlen(prefix)); // Calculate end ourself to ensure "##" are included here.
|
||||
|
||||
// Re-adjust padding if we have popped out of our starting depth
|
||||
if (g.LogDepthRef > window->DC.TreeDepth)
|
||||
@@ -15118,7 +15118,7 @@ void ImGui::LogRenderedText(const ImVec2* ref_pos, const char* text, const char*
|
||||
}
|
||||
|
||||
if (suffix)
|
||||
LogRenderedText(ref_pos, suffix, suffix + strlen(suffix));
|
||||
LogRenderedText(ref_pos, suffix, suffix + ImStrlen(suffix));
|
||||
}
|
||||
|
||||
// Start logging/capturing text output
|
||||
@@ -15384,7 +15384,7 @@ void ImGui::LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size)
|
||||
// For user convenience, we allow passing a non zero-terminated string (hence the ini_size parameter).
|
||||
// For our convenience and to make the code simpler, we'll also write zero-terminators within the buffer. So let's create a writable copy..
|
||||
if (ini_size == 0)
|
||||
ini_size = strlen(ini_data);
|
||||
ini_size = ImStrlen(ini_data);
|
||||
g.SettingsIniData.Buf.resize((int)ini_size + 1);
|
||||
char* const buf = g.SettingsIniData.Buf.Data;
|
||||
char* const buf_end = buf + ini_size;
|
||||
@@ -15485,7 +15485,7 @@ ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
|
||||
if (const char* p = strstr(name, "###"))
|
||||
name = p;
|
||||
}
|
||||
const size_t name_len = strlen(name);
|
||||
const size_t name_len = ImStrlen(name);
|
||||
|
||||
// Allocate chunk
|
||||
const size_t chunk_size = sizeof(ImGuiWindowSettings) + name_len + 1;
|
||||
@@ -20703,7 +20703,7 @@ static void Platform_SetClipboardTextFn_DefaultImpl(ImGuiContext*, const char* t
|
||||
if (!main_clipboard)
|
||||
PasteboardCreate(kPasteboardClipboard, &main_clipboard);
|
||||
PasteboardClear(main_clipboard);
|
||||
CFDataRef cf_data = CFDataCreate(kCFAllocatorDefault, (const UInt8*)text, strlen(text));
|
||||
CFDataRef cf_data = CFDataCreate(kCFAllocatorDefault, (const UInt8*)text, ImStrlen(text));
|
||||
if (cf_data)
|
||||
{
|
||||
PasteboardPutItemFlavor(main_clipboard, (PasteboardItemID)1, CFSTR("public.utf8-plain-text"), cf_data, 0);
|
||||
@@ -20757,7 +20757,7 @@ static void Platform_SetClipboardTextFn_DefaultImpl(ImGuiContext* ctx, const cha
|
||||
{
|
||||
ImGuiContext& g = *ctx;
|
||||
g.ClipboardHandlerData.clear();
|
||||
const char* text_end = text + strlen(text);
|
||||
const char* text_end = text + ImStrlen(text);
|
||||
g.ClipboardHandlerData.resize((int)(text_end - text) + 1);
|
||||
memcpy(&g.ClipboardHandlerData[0], text, (size_t)(text_end - text));
|
||||
g.ClipboardHandlerData[(int)(text_end - text)] = 0;
|
||||
@@ -20771,11 +20771,13 @@ static void Platform_SetClipboardTextFn_DefaultImpl(ImGuiContext* ctx, const cha
|
||||
#if defined(__APPLE__) && TARGET_OS_IPHONE
|
||||
#define IMGUI_DISABLE_DEFAULT_SHELL_FUNCTIONS
|
||||
#endif
|
||||
|
||||
#if defined(__3DS__)
|
||||
#define IMGUI_DISABLE_DEFAULT_SHELL_FUNCTIONS
|
||||
#endif
|
||||
#if defined(_WIN32) && defined(IMGUI_DISABLE_WIN32_FUNCTIONS)
|
||||
#define IMGUI_DISABLE_DEFAULT_SHELL_FUNCTIONS
|
||||
#endif
|
||||
#endif
|
||||
#endif // #ifndef IMGUI_DISABLE_DEFAULT_SHELL_FUNCTIONS
|
||||
|
||||
#ifndef IMGUI_DISABLE_DEFAULT_SHELL_FUNCTIONS
|
||||
#ifdef _WIN32
|
||||
@@ -22758,7 +22760,7 @@ void ImGui::DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void* dat
|
||||
ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "%d", (int)(intptr_t)data_id);
|
||||
break;
|
||||
case ImGuiDataType_String:
|
||||
ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "%.*s", data_id_end ? (int)((const char*)data_id_end - (const char*)data_id) : (int)strlen((const char*)data_id), (const char*)data_id);
|
||||
ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "%.*s", data_id_end ? (int)((const char*)data_id_end - (const char*)data_id) : (int)ImStrlen((const char*)data_id), (const char*)data_id);
|
||||
break;
|
||||
case ImGuiDataType_Pointer:
|
||||
ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "(void*)0x%p", data_id);
|
||||
|
||||
Reference in New Issue
Block a user