|
@@ -1,4 +1,4 @@
|
|
|
-// dear imgui, v1.90.2
|
|
|
|
|
|
|
+// dear imgui, v1.90.4
|
|
|
// (main code and documentation)
|
|
// (main code and documentation)
|
|
|
|
|
|
|
|
// Help:
|
|
// Help:
|
|
@@ -917,7 +917,7 @@ CODE
|
|
|
Q: How can I easily use icons in my application?
|
|
Q: How can I easily use icons in my application?
|
|
|
Q: How can I load multiple fonts?
|
|
Q: How can I load multiple fonts?
|
|
|
Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic?
|
|
Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic?
|
|
|
- >> See https://www.dearimgui.com/faq and https://github.com/ocornut/imgui/edit/master/docs/FONTS.md
|
|
|
|
|
|
|
+ >> See https://www.dearimgui.com/faq and https://github.com/ocornut/imgui/blob/master/docs/FONTS.md
|
|
|
|
|
|
|
|
Q&A: Concerns
|
|
Q&A: Concerns
|
|
|
=============
|
|
=============
|
|
@@ -2065,12 +2065,18 @@ ImFileHandle ImFileOpen(const char* filename, const char* mode)
|
|
|
// Previously we used ImTextCountCharsFromUtf8/ImTextStrFromUtf8 here but we now need to support ImWchar16 and ImWchar32!
|
|
// Previously we used ImTextCountCharsFromUtf8/ImTextStrFromUtf8 here but we now need to support ImWchar16 and ImWchar32!
|
|
|
const int filename_wsize = ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, NULL, 0);
|
|
const int filename_wsize = ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, NULL, 0);
|
|
|
const int mode_wsize = ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, NULL, 0);
|
|
const int mode_wsize = ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, NULL, 0);
|
|
|
- ImGuiContext& g = *GImGui;
|
|
|
|
|
- g.TempBuffer.reserve((filename_wsize + mode_wsize) * sizeof(wchar_t));
|
|
|
|
|
- wchar_t* buf = (wchar_t*)(void*)g.TempBuffer.Data;
|
|
|
|
|
- ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, (wchar_t*)&buf[0], filename_wsize);
|
|
|
|
|
- ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, (wchar_t*)&buf[filename_wsize], mode_wsize);
|
|
|
|
|
- return ::_wfopen((const wchar_t*)&buf[0], (const wchar_t*)&buf[filename_wsize]);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // Use stack buffer if possible, otherwise heap buffer. Sizes include zero terminator.
|
|
|
|
|
+ // We don't rely on current ImGuiContext as this is implied to be a helper function which doesn't depend on it (see #7314).
|
|
|
|
|
+ wchar_t local_temp_stack[FILENAME_MAX];
|
|
|
|
|
+ ImVector<wchar_t> local_temp_heap;
|
|
|
|
|
+ if (filename_wsize + mode_wsize > IM_ARRAYSIZE(local_temp_stack))
|
|
|
|
|
+ local_temp_heap.resize(filename_wsize + mode_wsize);
|
|
|
|
|
+ wchar_t* filename_wbuf = local_temp_heap.Data ? local_temp_heap.Data : local_temp_stack;
|
|
|
|
|
+ wchar_t* mode_wbuf = filename_wbuf + filename_wsize;
|
|
|
|
|
+ ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, filename_wbuf, filename_wsize);
|
|
|
|
|
+ ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, mode_wbuf, mode_wsize);
|
|
|
|
|
+ return ::_wfopen(filename_wbuf, mode_wbuf);
|
|
|
#else
|
|
#else
|
|
|
return fopen(filename, mode);
|
|
return fopen(filename, mode);
|
|
|
#endif
|
|
#endif
|
|
@@ -3043,13 +3049,14 @@ const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
|
|
|
return style.Colors[idx];
|
|
return style.Colors[idx];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-ImU32 ImGui::GetColorU32(ImU32 col)
|
|
|
|
|
|
|
+ImU32 ImGui::GetColorU32(ImU32 col, float alpha_mul)
|
|
|
{
|
|
{
|
|
|
ImGuiStyle& style = GImGui->Style;
|
|
ImGuiStyle& style = GImGui->Style;
|
|
|
- if (style.Alpha >= 1.0f)
|
|
|
|
|
|
|
+ alpha_mul *= style.Alpha;
|
|
|
|
|
+ if (alpha_mul >= 1.0f)
|
|
|
return col;
|
|
return col;
|
|
|
ImU32 a = (col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT;
|
|
ImU32 a = (col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT;
|
|
|
- a = (ImU32)(a * style.Alpha); // We don't need to clamp 0..255 because Style.Alpha is in 0..1 range.
|
|
|
|
|
|
|
+ a = (ImU32)(a * alpha_mul); // We don't need to clamp 0..255 because alpha is in 0..1 range.
|
|
|
return (col & ~IM_COL32_A_MASK) | (a << IM_COL32_A_SHIFT);
|
|
return (col & ~IM_COL32_A_MASK) | (a << IM_COL32_A_SHIFT);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -4998,7 +5005,7 @@ static void ImGui::RenderDimmedBackgrounds()
|
|
|
{
|
|
{
|
|
|
// Draw dimming behind modal or a begin stack child, whichever comes first in draw order.
|
|
// Draw dimming behind modal or a begin stack child, whichever comes first in draw order.
|
|
|
ImGuiWindow* dim_behind_window = FindBottomMostVisibleWindowWithinBeginStack(modal_window);
|
|
ImGuiWindow* dim_behind_window = FindBottomMostVisibleWindowWithinBeginStack(modal_window);
|
|
|
- RenderDimmedBackgroundBehindWindow(dim_behind_window, GetColorU32(ImGuiCol_ModalWindowDimBg, g.DimBgRatio));
|
|
|
|
|
|
|
+ RenderDimmedBackgroundBehindWindow(dim_behind_window, GetColorU32(modal_window->DC.ModalDimBgColor, g.DimBgRatio));
|
|
|
}
|
|
}
|
|
|
else if (dim_bg_for_window_list)
|
|
else if (dim_bg_for_window_list)
|
|
|
{
|
|
{
|
|
@@ -5672,22 +5679,25 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags)
|
|
|
|
|
|
|
|
static inline ImVec2 CalcWindowMinSize(ImGuiWindow* window)
|
|
static inline ImVec2 CalcWindowMinSize(ImGuiWindow* window)
|
|
|
{
|
|
{
|
|
|
- // Popups, menus and childs bypass style.WindowMinSize by default, but we give then a non-zero minimum size to facilitate understanding problematic cases (e.g. empty popups)
|
|
|
|
|
- // FIXME: the if/else could probably be removed, "reduce artifacts" section for all windows.
|
|
|
|
|
|
|
+ // We give windows non-zero minimum size to facilitate understanding problematic cases (e.g. empty popups)
|
|
|
|
|
+ // FIXME: Essentially we want to restrict manual resizing to WindowMinSize+Decoration, and allow api resizing to be smaller.
|
|
|
|
|
+ // Perhaps should tend further a neater test for this.
|
|
|
ImGuiContext& g = *GImGui;
|
|
ImGuiContext& g = *GImGui;
|
|
|
ImVec2 size_min;
|
|
ImVec2 size_min;
|
|
|
- if (window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_ChildWindow))
|
|
|
|
|
|
|
+ if ((window->Flags & ImGuiWindowFlags_ChildWindow) && !(window->Flags & ImGuiWindowFlags_Popup))
|
|
|
{
|
|
{
|
|
|
size_min.x = (window->ChildFlags & ImGuiChildFlags_ResizeX) ? g.Style.WindowMinSize.x : 4.0f;
|
|
size_min.x = (window->ChildFlags & ImGuiChildFlags_ResizeX) ? g.Style.WindowMinSize.x : 4.0f;
|
|
|
size_min.y = (window->ChildFlags & ImGuiChildFlags_ResizeY) ? g.Style.WindowMinSize.y : 4.0f;
|
|
size_min.y = (window->ChildFlags & ImGuiChildFlags_ResizeY) ? g.Style.WindowMinSize.y : 4.0f;
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- ImGuiWindow* window_for_height = window;
|
|
|
|
|
size_min.x = ((window->Flags & ImGuiWindowFlags_AlwaysAutoResize) == 0) ? g.Style.WindowMinSize.x : 4.0f;
|
|
size_min.x = ((window->Flags & ImGuiWindowFlags_AlwaysAutoResize) == 0) ? g.Style.WindowMinSize.x : 4.0f;
|
|
|
size_min.y = ((window->Flags & ImGuiWindowFlags_AlwaysAutoResize) == 0) ? g.Style.WindowMinSize.y : 4.0f;
|
|
size_min.y = ((window->Flags & ImGuiWindowFlags_AlwaysAutoResize) == 0) ? g.Style.WindowMinSize.y : 4.0f;
|
|
|
- size_min.y = ImMax(size_min.y, window_for_height->TitleBarHeight() + window_for_height->MenuBarHeight() + ImMax(0.0f, g.Style.WindowRounding - 1.0f)); // Reduce artifacts with very small windows
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // Reduce artifacts with very small windows
|
|
|
|
|
+ ImGuiWindow* window_for_height = window;
|
|
|
|
|
+ size_min.y = ImMax(size_min.y, window_for_height->TitleBarHeight() + window_for_height->MenuBarHeight() + ImMax(0.0f, g.Style.WindowRounding - 1.0f));
|
|
|
return size_min;
|
|
return size_min;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -5757,7 +5767,7 @@ static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& size_cont
|
|
|
{
|
|
{
|
|
|
// Maximum window size is determined by the viewport size or monitor size
|
|
// Maximum window size is determined by the viewport size or monitor size
|
|
|
ImVec2 size_min = CalcWindowMinSize(window);
|
|
ImVec2 size_min = CalcWindowMinSize(window);
|
|
|
- ImVec2 size_max = (window->Flags & ImGuiWindowFlags_ChildWindow) ? ImVec2(FLT_MAX, FLT_MAX) : ImGui::GetMainViewport()->WorkSize - style.DisplaySafeAreaPadding * 2.0f;
|
|
|
|
|
|
|
+ ImVec2 size_max = ((window->Flags & ImGuiWindowFlags_ChildWindow) && !(window->Flags & ImGuiWindowFlags_Popup)) ? ImVec2(FLT_MAX, FLT_MAX) : ImGui::GetMainViewport()->WorkSize - style.DisplaySafeAreaPadding * 2.0f;
|
|
|
ImVec2 size_auto_fit = ImClamp(size_desired, size_min, size_max);
|
|
ImVec2 size_auto_fit = ImClamp(size_desired, size_min, size_max);
|
|
|
|
|
|
|
|
// When the window cannot fit all contents (either because of constraints, either because screen is too small),
|
|
// When the window cannot fit all contents (either because of constraints, either because screen is too small),
|
|
@@ -6753,7 +6763,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|
|
// Handle manual resize: Resize Grips, Borders, Gamepad
|
|
// Handle manual resize: Resize Grips, Borders, Gamepad
|
|
|
int border_hovered = -1, border_held = -1;
|
|
int border_hovered = -1, border_held = -1;
|
|
|
ImU32 resize_grip_col[4] = {};
|
|
ImU32 resize_grip_col[4] = {};
|
|
|
- const int resize_grip_count = (window->Flags & ImGuiWindowFlags_ChildWindow) ? 0 : g.IO.ConfigWindowsResizeFromEdges ? 2 : 1; // Allow resize from lower-left if we have the mouse cursor feedback for it.
|
|
|
|
|
|
|
+ const int resize_grip_count = ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup)) ? 0 : g.IO.ConfigWindowsResizeFromEdges ? 2 : 1; // Allow resize from lower-left if we have the mouse cursor feedback for it.
|
|
|
const float resize_grip_draw_size = IM_TRUNC(ImMax(g.FontSize * 1.10f, window->WindowRounding + 1.0f + g.FontSize * 0.2f));
|
|
const float resize_grip_draw_size = IM_TRUNC(ImMax(g.FontSize * 1.10f, window->WindowRounding + 1.0f + g.FontSize * 0.2f));
|
|
|
if (!window->Collapsed)
|
|
if (!window->Collapsed)
|
|
|
if (int auto_fit_mask = UpdateWindowManualResize(window, size_auto_fit, &border_hovered, &border_held, resize_grip_count, &resize_grip_col[0], visibility_rect))
|
|
if (int auto_fit_mask = UpdateWindowManualResize(window, size_auto_fit, &border_hovered, &border_held, resize_grip_count, &resize_grip_col[0], visibility_rect))
|
|
@@ -6953,6 +6963,8 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|
|
window->DC.TextWrapPos = -1.0f; // disabled
|
|
window->DC.TextWrapPos = -1.0f; // disabled
|
|
|
window->DC.ItemWidthStack.resize(0);
|
|
window->DC.ItemWidthStack.resize(0);
|
|
|
window->DC.TextWrapPosStack.resize(0);
|
|
window->DC.TextWrapPosStack.resize(0);
|
|
|
|
|
+ if (flags & ImGuiWindowFlags_Modal)
|
|
|
|
|
+ window->DC.ModalDimBgColor = ColorConvertFloat4ToU32(GetStyleColorVec4(ImGuiCol_ModalWindowDimBg));
|
|
|
|
|
|
|
|
if (window->AutoFitFramesX > 0)
|
|
if (window->AutoFitFramesX > 0)
|
|
|
window->AutoFitFramesX--;
|
|
window->AutoFitFramesX--;
|
|
@@ -10793,7 +10805,7 @@ void ImGui::OpenPopupEx(ImGuiID id, ImGuiPopupFlags popup_flags)
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
// Reopen: close child popups if any, then flag popup for open/reopen (set position, focus, init navigation)
|
|
// Reopen: close child popups if any, then flag popup for open/reopen (set position, focus, init navigation)
|
|
|
- ClosePopupToLevel(current_stack_size, false);
|
|
|
|
|
|
|
+ ClosePopupToLevel(current_stack_size, true);
|
|
|
g.OpenPopupStack.push_back(popup_ref);
|
|
g.OpenPopupStack.push_back(popup_ref);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -11514,25 +11526,28 @@ static void ImGui::NavProcessItem()
|
|
|
|
|
|
|
|
// Process Move Request (scoring for navigation)
|
|
// Process Move Request (scoring for navigation)
|
|
|
// FIXME-NAV: Consider policy for double scoring (scoring from NavScoringRect + scoring from a rect wrapped according to current wrapping policy)
|
|
// FIXME-NAV: Consider policy for double scoring (scoring from NavScoringRect + scoring from a rect wrapped according to current wrapping policy)
|
|
|
- if (g.NavMoveScoringItems && (item_flags & ImGuiItemFlags_Disabled) == 0 && (window->Flags & ImGuiWindowFlags_NoNavInputs) == 0)
|
|
|
|
|
|
|
+ if (g.NavMoveScoringItems && (item_flags & ImGuiItemFlags_Disabled) == 0)
|
|
|
{
|
|
{
|
|
|
- const bool is_tabbing = (g.NavMoveFlags & ImGuiNavMoveFlags_IsTabbing) != 0;
|
|
|
|
|
- if (is_tabbing)
|
|
|
|
|
|
|
+ if ((g.NavMoveFlags & ImGuiNavMoveFlags_FocusApi) || (window->Flags & ImGuiWindowFlags_NoNavInputs) == 0)
|
|
|
{
|
|
{
|
|
|
- NavProcessItemForTabbingRequest(id, item_flags, g.NavMoveFlags);
|
|
|
|
|
- }
|
|
|
|
|
- else if (g.NavId != id || (g.NavMoveFlags & ImGuiNavMoveFlags_AllowCurrentNavId))
|
|
|
|
|
- {
|
|
|
|
|
- ImGuiNavItemData* result = (window == g.NavWindow) ? &g.NavMoveResultLocal : &g.NavMoveResultOther;
|
|
|
|
|
- if (NavScoreItem(result))
|
|
|
|
|
- NavApplyItemToResult(result);
|
|
|
|
|
-
|
|
|
|
|
- // Features like PageUp/PageDown need to maintain a separate score for the visible set of items.
|
|
|
|
|
- const float VISIBLE_RATIO = 0.70f;
|
|
|
|
|
- if ((g.NavMoveFlags & ImGuiNavMoveFlags_AlsoScoreVisibleSet) && window->ClipRect.Overlaps(nav_bb))
|
|
|
|
|
- if (ImClamp(nav_bb.Max.y, window->ClipRect.Min.y, window->ClipRect.Max.y) - ImClamp(nav_bb.Min.y, window->ClipRect.Min.y, window->ClipRect.Max.y) >= (nav_bb.Max.y - nav_bb.Min.y) * VISIBLE_RATIO)
|
|
|
|
|
- if (NavScoreItem(&g.NavMoveResultLocalVisible))
|
|
|
|
|
- NavApplyItemToResult(&g.NavMoveResultLocalVisible);
|
|
|
|
|
|
|
+ const bool is_tabbing = (g.NavMoveFlags & ImGuiNavMoveFlags_IsTabbing) != 0;
|
|
|
|
|
+ if (is_tabbing)
|
|
|
|
|
+ {
|
|
|
|
|
+ NavProcessItemForTabbingRequest(id, item_flags, g.NavMoveFlags);
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (g.NavId != id || (g.NavMoveFlags & ImGuiNavMoveFlags_AllowCurrentNavId))
|
|
|
|
|
+ {
|
|
|
|
|
+ ImGuiNavItemData* result = (window == g.NavWindow) ? &g.NavMoveResultLocal : &g.NavMoveResultOther;
|
|
|
|
|
+ if (NavScoreItem(result))
|
|
|
|
|
+ NavApplyItemToResult(result);
|
|
|
|
|
+
|
|
|
|
|
+ // Features like PageUp/PageDown need to maintain a separate score for the visible set of items.
|
|
|
|
|
+ const float VISIBLE_RATIO = 0.70f;
|
|
|
|
|
+ if ((g.NavMoveFlags & ImGuiNavMoveFlags_AlsoScoreVisibleSet) && window->ClipRect.Overlaps(nav_bb))
|
|
|
|
|
+ if (ImClamp(nav_bb.Max.y, window->ClipRect.Min.y, window->ClipRect.Max.y) - ImClamp(nav_bb.Min.y, window->ClipRect.Min.y, window->ClipRect.Max.y) >= (nav_bb.Max.y - nav_bb.Min.y) * VISIBLE_RATIO)
|
|
|
|
|
+ if (NavScoreItem(&g.NavMoveResultLocalVisible))
|
|
|
|
|
+ NavApplyItemToResult(&g.NavMoveResultLocalVisible);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -14996,7 +15011,7 @@ void ImGui::DebugNodeFont(ImFont* font)
|
|
|
SetNextItemWidth(GetFontSize() * 8);
|
|
SetNextItemWidth(GetFontSize() * 8);
|
|
|
DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f");
|
|
DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f");
|
|
|
SameLine(); MetricsHelpMarker(
|
|
SameLine(); MetricsHelpMarker(
|
|
|
- "Note than the default embedded font is NOT meant to be scaled.\n\n"
|
|
|
|
|
|
|
+ "Note that the default embedded font is NOT meant to be scaled.\n\n"
|
|
|
"Font are currently rendered into bitmaps at a given size at the time of building the atlas. "
|
|
"Font are currently rendered into bitmaps at a given size at the time of building the atlas. "
|
|
|
"You may oversample them to get some flexibility with scaling. "
|
|
"You may oversample them to get some flexibility with scaling. "
|
|
|
"You can also render at multiple sizes and select which one to use at runtime.\n\n"
|
|
"You can also render at multiple sizes and select which one to use at runtime.\n\n"
|
|
@@ -15455,6 +15470,12 @@ void ImGui::DebugLocateItemResolveWithLastItem()
|
|
|
draw_list->AddLine(p1, p2, DEBUG_LOCATE_ITEM_COLOR);
|
|
draw_list->AddLine(p1, p2, DEBUG_LOCATE_ITEM_COLOR);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void ImGui::DebugStartItemPicker()
|
|
|
|
|
+{
|
|
|
|
|
+ ImGuiContext& g = *GImGui;
|
|
|
|
|
+ g.DebugItemPickerActive = true;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack.
|
|
// [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack.
|
|
|
void ImGui::UpdateDebugToolItemPicker()
|
|
void ImGui::UpdateDebugToolItemPicker()
|
|
|
{
|
|
{
|
|
@@ -15623,7 +15644,7 @@ void ImGui::ShowIDStackToolWindow(bool* p_open)
|
|
|
Checkbox("Ctrl+C: copy path to clipboard", &tool->CopyToClipboardOnCtrlC);
|
|
Checkbox("Ctrl+C: copy path to clipboard", &tool->CopyToClipboardOnCtrlC);
|
|
|
SameLine();
|
|
SameLine();
|
|
|
TextColored((time_since_copy >= 0.0f && time_since_copy < 0.75f && ImFmod(time_since_copy, 0.25f) < 0.25f * 0.5f) ? ImVec4(1.f, 1.f, 0.3f, 1.f) : ImVec4(), "*COPIED*");
|
|
TextColored((time_since_copy >= 0.0f && time_since_copy < 0.75f && ImFmod(time_since_copy, 0.25f) < 0.25f * 0.5f) ? ImVec4(1.f, 1.f, 0.3f, 1.f) : ImVec4(), "*COPIED*");
|
|
|
- if (tool->CopyToClipboardOnCtrlC && IsKeyDown(ImGuiMod_Ctrl) && IsKeyPressed(ImGuiKey_C))
|
|
|
|
|
|
|
+ if (tool->CopyToClipboardOnCtrlC && Shortcut(ImGuiMod_Ctrl | ImGuiKey_C, 0, ImGuiInputFlags_RouteGlobal))
|
|
|
{
|
|
{
|
|
|
tool->CopyToClipboardLastTime = (float)g.Time;
|
|
tool->CopyToClipboardLastTime = (float)g.Time;
|
|
|
char* p = g.TempBuffer.Data;
|
|
char* p = g.TempBuffer.Data;
|
|
@@ -15690,6 +15711,7 @@ void ImGui::DebugLog(const char*, ...) {}
|
|
|
void ImGui::DebugLogV(const char*, va_list) {}
|
|
void ImGui::DebugLogV(const char*, va_list) {}
|
|
|
void ImGui::ShowDebugLogWindow(bool*) {}
|
|
void ImGui::ShowDebugLogWindow(bool*) {}
|
|
|
void ImGui::ShowIDStackToolWindow(bool*) {}
|
|
void ImGui::ShowIDStackToolWindow(bool*) {}
|
|
|
|
|
+void ImGui::DebugStartItemPicker() {}
|
|
|
void ImGui::DebugHookIdInfo(ImGuiID, ImGuiDataType, const void*, const void*) {}
|
|
void ImGui::DebugHookIdInfo(ImGuiID, ImGuiDataType, const void*, const void*) {}
|
|
|
|
|
|
|
|
#endif // #ifndef IMGUI_DISABLE_DEBUG_TOOLS
|
|
#endif // #ifndef IMGUI_DISABLE_DEBUG_TOOLS
|