Updated ImGui.
This commit is contained in:
parent
65e6222ab5
commit
52086830e1
113
3rdparty/dear-imgui/imgui.cpp
vendored
113
3rdparty/dear-imgui/imgui.cpp
vendored
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.87 WIP
|
// dear imgui, 1.88 WIP
|
||||||
// (main code and documentation)
|
// (main code and documentation)
|
||||||
|
|
||||||
// Help:
|
// Help:
|
||||||
@ -1182,7 +1182,7 @@ void ImGuiIO::AddInputCharacter(unsigned int c)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
ImGuiInputEvent e;
|
ImGuiInputEvent e;
|
||||||
e.Type = ImGuiInputEventType_Char;
|
e.Type = ImGuiInputEventType_Text;
|
||||||
e.Source = ImGuiInputSource_Keyboard;
|
e.Source = ImGuiInputSource_Keyboard;
|
||||||
e.Text.Char = c;
|
e.Text.Char = c;
|
||||||
g.InputEventsQueue.push_back(e);
|
g.InputEventsQueue.push_back(e);
|
||||||
@ -3195,6 +3195,32 @@ void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImGui::RenderMouseCursor(ImVec2 base_pos, float base_scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
IM_ASSERT(mouse_cursor > ImGuiMouseCursor_None && mouse_cursor < ImGuiMouseCursor_COUNT);
|
||||||
|
for (int n = 0; n < g.Viewports.Size; n++)
|
||||||
|
{
|
||||||
|
ImGuiViewportP* viewport = g.Viewports[n];
|
||||||
|
ImDrawList* draw_list = GetForegroundDrawList(viewport);
|
||||||
|
ImFontAtlas* font_atlas = draw_list->_Data->Font->ContainerAtlas;
|
||||||
|
ImVec2 offset, size, uv[4];
|
||||||
|
if (font_atlas->GetMouseCursorTexData(mouse_cursor, &offset, &size, &uv[0], &uv[2]))
|
||||||
|
{
|
||||||
|
const ImVec2 pos = base_pos - offset;
|
||||||
|
const float scale = base_scale;
|
||||||
|
ImTextureID tex_id = font_atlas->TexID;
|
||||||
|
draw_list->PushTextureID(tex_id);
|
||||||
|
draw_list->AddImage(tex_id, pos + ImVec2(1, 0) * scale, pos + (ImVec2(1, 0) + size) * scale, uv[2], uv[3], col_shadow);
|
||||||
|
draw_list->AddImage(tex_id, pos + ImVec2(2, 0) * scale, pos + (ImVec2(2, 0) + size) * scale, uv[2], uv[3], col_shadow);
|
||||||
|
draw_list->AddImage(tex_id, pos, pos + size * scale, uv[2], uv[3], col_border);
|
||||||
|
draw_list->AddImage(tex_id, pos, pos + size * scale, uv[0], uv[1], col_fill);
|
||||||
|
draw_list->PopTextureID();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
|
// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -4890,6 +4916,10 @@ void ImGui::Render()
|
|||||||
if (windows_to_render_top_most[n] && IsWindowActiveAndVisible(windows_to_render_top_most[n])) // NavWindowingTarget is always temporarily displayed as the top-most window
|
if (windows_to_render_top_most[n] && IsWindowActiveAndVisible(windows_to_render_top_most[n])) // NavWindowingTarget is always temporarily displayed as the top-most window
|
||||||
AddRootWindowToDrawData(windows_to_render_top_most[n]);
|
AddRootWindowToDrawData(windows_to_render_top_most[n]);
|
||||||
|
|
||||||
|
// Draw software mouse cursor if requested by io.MouseDrawCursor flag
|
||||||
|
if (g.IO.MouseDrawCursor && first_render_of_frame && g.MouseCursor != ImGuiMouseCursor_None)
|
||||||
|
RenderMouseCursor(g.IO.MousePos, g.Style.MouseCursorScale, g.MouseCursor, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32(0, 0, 0, 48));
|
||||||
|
|
||||||
// Setup ImDrawData structures for end-user
|
// Setup ImDrawData structures for end-user
|
||||||
g.IO.MetricsRenderVertices = g.IO.MetricsRenderIndices = 0;
|
g.IO.MetricsRenderVertices = g.IO.MetricsRenderIndices = 0;
|
||||||
for (int n = 0; n < g.Viewports.Size; n++)
|
for (int n = 0; n < g.Viewports.Size; n++)
|
||||||
@ -4897,10 +4927,6 @@ void ImGui::Render()
|
|||||||
ImGuiViewportP* viewport = g.Viewports[n];
|
ImGuiViewportP* viewport = g.Viewports[n];
|
||||||
viewport->DrawDataBuilder.FlattenIntoSingleLayer();
|
viewport->DrawDataBuilder.FlattenIntoSingleLayer();
|
||||||
|
|
||||||
// Draw software mouse cursor if requested by io.MouseDrawCursor flag
|
|
||||||
if (g.IO.MouseDrawCursor && first_render_of_frame)
|
|
||||||
RenderMouseCursor(GetForegroundDrawList(viewport), g.IO.MousePos, g.Style.MouseCursorScale, g.MouseCursor, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32(0, 0, 0, 48));
|
|
||||||
|
|
||||||
// Add foreground ImDrawList (for each active viewport)
|
// Add foreground ImDrawList (for each active viewport)
|
||||||
if (viewport->DrawLists[1] != NULL)
|
if (viewport->DrawLists[1] != NULL)
|
||||||
AddDrawListToDrawData(&viewport->DrawDataBuilder.Layers[0], GetForegroundDrawList(viewport));
|
AddDrawListToDrawData(&viewport->DrawDataBuilder.Layers[0], GetForegroundDrawList(viewport));
|
||||||
@ -7858,7 +7884,7 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (e->Type == ImGuiInputEventType_Char)
|
else if (e->Type == ImGuiInputEventType_Text)
|
||||||
{
|
{
|
||||||
// Trickling Rule: Stop processing queued events if keys/mouse have been interacted with
|
// Trickling Rule: Stop processing queued events if keys/mouse have been interacted with
|
||||||
if (trickle_fast_inputs && (key_changed || mouse_button_changed != 0 || mouse_moved || mouse_wheeled))
|
if (trickle_fast_inputs && (key_changed || mouse_button_changed != 0 || mouse_moved || mouse_wheeled))
|
||||||
@ -13002,27 +13028,44 @@ void ImGui::DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void* dat
|
|||||||
ImGuiStackLevelInfo* info = &tool->Results[tool->StackLevel];
|
ImGuiStackLevelInfo* info = &tool->Results[tool->StackLevel];
|
||||||
IM_ASSERT(info->ID == id && info->QueryFrameCount > 0);
|
IM_ASSERT(info->ID == id && info->QueryFrameCount > 0);
|
||||||
|
|
||||||
int data_len;
|
|
||||||
switch (data_type)
|
switch (data_type)
|
||||||
{
|
{
|
||||||
case ImGuiDataType_S32:
|
case ImGuiDataType_S32:
|
||||||
ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "%d", (int)(intptr_t)data_id);
|
ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "%d", (int)(intptr_t)data_id);
|
||||||
break;
|
break;
|
||||||
case ImGuiDataType_String:
|
case ImGuiDataType_String:
|
||||||
data_len = data_id_end ? (int)((const char*)data_id_end - (const char*)data_id) : (int)strlen((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)strlen((const char*)data_id), (const char*)data_id);
|
||||||
ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "\"%.*s\"", data_len, (const char*)data_id);
|
|
||||||
break;
|
break;
|
||||||
case ImGuiDataType_Pointer:
|
case ImGuiDataType_Pointer:
|
||||||
ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "(void*)0x%p", data_id);
|
ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "(void*)0x%p", data_id);
|
||||||
break;
|
break;
|
||||||
case ImGuiDataType_ID:
|
case ImGuiDataType_ID:
|
||||||
if (info->Desc[0] == 0) // PushOverrideID() is often used to avoid hashing twice, which would lead to 2 calls to DebugHookIdInfo(). We prioritize the first one.
|
if (info->Desc[0] != 0) // PushOverrideID() is often used to avoid hashing twice, which would lead to 2 calls to DebugHookIdInfo(). We prioritize the first one.
|
||||||
ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "0x%08X [override]", id);
|
return;
|
||||||
|
ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "0x%08X [override]", id);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
IM_ASSERT(0);
|
IM_ASSERT(0);
|
||||||
}
|
}
|
||||||
info->QuerySuccess = true;
|
info->QuerySuccess = true;
|
||||||
|
info->DataType = data_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int StackToolFormatLevelInfo(ImGuiStackTool* tool, int n, bool format_for_ui, char* buf, size_t buf_size)
|
||||||
|
{
|
||||||
|
ImGuiStackLevelInfo* info = &tool->Results[n];
|
||||||
|
ImGuiWindow* window = (info->Desc[0] == 0 && n == 0) ? ImGui::FindWindowByID(info->ID) : NULL;
|
||||||
|
if (window) // Source: window name (because the root ID don't call GetID() and so doesn't get hooked)
|
||||||
|
return ImFormatString(buf, buf_size, format_for_ui ? "\"%s\" [window]" : "%s", window->Name);
|
||||||
|
if (info->QuerySuccess) // Source: GetID() hooks (prioritize over ItemInfo() because we frequently use patterns like: PushID(str), Button("") where they both have same id)
|
||||||
|
return ImFormatString(buf, buf_size, (format_for_ui && info->DataType == ImGuiDataType_String) ? "\"%s\"" : "%s", info->Desc);
|
||||||
|
if (tool->StackLevel < tool->Results.Size) // Only start using fallback below when all queries are done, so during queries we don't flickering ??? markers.
|
||||||
|
return (*buf = 0);
|
||||||
|
#ifdef IMGUI_ENABLE_TEST_ENGINE
|
||||||
|
if (const char* label = ImGuiTestEngine_FindItemDebugLabel(GImGui, info->ID)) // Source: ImGuiTestEngine's ItemInfo()
|
||||||
|
return ImFormatString(buf, buf_size, format_for_ui ? "??? \"%s\"" : "%s", label);
|
||||||
|
#endif
|
||||||
|
return ImFormatString(buf, buf_size, "???");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stack Tool: Display UI
|
// Stack Tool: Display UI
|
||||||
@ -13038,6 +13081,7 @@ void ImGui::ShowStackToolWindow(bool* p_open)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Display hovered/active status
|
// Display hovered/active status
|
||||||
|
ImGuiStackTool* tool = &g.DebugStackTool;
|
||||||
const ImGuiID hovered_id = g.HoveredIdPreviousFrame;
|
const ImGuiID hovered_id = g.HoveredIdPreviousFrame;
|
||||||
const ImGuiID active_id = g.ActiveId;
|
const ImGuiID active_id = g.ActiveId;
|
||||||
#ifdef IMGUI_ENABLE_TEST_ENGINE
|
#ifdef IMGUI_ENABLE_TEST_ENGINE
|
||||||
@ -13048,8 +13092,33 @@ void ImGui::ShowStackToolWindow(bool* p_open)
|
|||||||
SameLine();
|
SameLine();
|
||||||
MetricsHelpMarker("Hover an item with the mouse to display elements of the ID Stack leading to the item's final ID.\nEach level of the stack correspond to a PushID() call.\nAll levels of the stack are hashed together to make the final ID of a widget (ID displayed at the bottom level of the stack).\nRead FAQ entry about the ID stack for details.");
|
MetricsHelpMarker("Hover an item with the mouse to display elements of the ID Stack leading to the item's final ID.\nEach level of the stack correspond to a PushID() call.\nAll levels of the stack are hashed together to make the final ID of a widget (ID displayed at the bottom level of the stack).\nRead FAQ entry about the ID stack for details.");
|
||||||
|
|
||||||
|
// CTRL+C to copy path
|
||||||
|
const float time_since_copy = (float)g.Time - tool->CopyToClipboardLastTime;
|
||||||
|
Checkbox("Ctrl+C: copy path to clipboard", &tool->CopyToClipboardOnCtrlC);
|
||||||
|
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*");
|
||||||
|
if (tool->CopyToClipboardOnCtrlC && IsKeyDown(ImGuiKey_ModCtrl) && IsKeyPressed(ImGuiKey_C))
|
||||||
|
{
|
||||||
|
tool->CopyToClipboardLastTime = (float)g.Time;
|
||||||
|
char* p = g.TempBuffer;
|
||||||
|
char* p_end = p + IM_ARRAYSIZE(g.TempBuffer);
|
||||||
|
for (int stack_n = 0; stack_n < tool->Results.Size && p + 3 < p_end; stack_n++)
|
||||||
|
{
|
||||||
|
*p++ = '/';
|
||||||
|
char level_desc[256];
|
||||||
|
StackToolFormatLevelInfo(tool, stack_n, false, level_desc, IM_ARRAYSIZE(level_desc));
|
||||||
|
for (int n = 0; level_desc[n] && p + 2 < p_end; n++)
|
||||||
|
{
|
||||||
|
if (level_desc[n] == '/')
|
||||||
|
*p++ = '\\';
|
||||||
|
*p++ = level_desc[n];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*p = '\0';
|
||||||
|
SetClipboardText(g.TempBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
// Display decorated stack
|
// Display decorated stack
|
||||||
ImGuiStackTool* tool = &g.DebugStackTool;
|
|
||||||
tool->LastActiveFrame = g.FrameCount;
|
tool->LastActiveFrame = g.FrameCount;
|
||||||
if (tool->Results.Size > 0 && BeginTable("##table", 3, ImGuiTableFlags_Borders))
|
if (tool->Results.Size > 0 && BeginTable("##table", 3, ImGuiTableFlags_Borders))
|
||||||
{
|
{
|
||||||
@ -13063,23 +13132,9 @@ void ImGui::ShowStackToolWindow(bool* p_open)
|
|||||||
ImGuiStackLevelInfo* info = &tool->Results[n];
|
ImGuiStackLevelInfo* info = &tool->Results[n];
|
||||||
TableNextColumn();
|
TableNextColumn();
|
||||||
Text("0x%08X", (n > 0) ? tool->Results[n - 1].ID : 0);
|
Text("0x%08X", (n > 0) ? tool->Results[n - 1].ID : 0);
|
||||||
|
|
||||||
TableNextColumn();
|
TableNextColumn();
|
||||||
ImGuiWindow* window = (info->Desc[0] == 0 && n == 0) ? FindWindowByID(info->ID) : NULL;
|
StackToolFormatLevelInfo(tool, n, true, g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer));
|
||||||
if (window) // Source: window name (because the root ID don't call GetID() and so doesn't get hooked)
|
TextUnformatted(g.TempBuffer);
|
||||||
Text("\"%s\" [window]", window->Name);
|
|
||||||
else if (info->QuerySuccess) // Source: GetID() hooks (prioritize over ItemInfo() because we frequently use patterns like: PushID(str), Button("") where they both have same id)
|
|
||||||
TextUnformatted(info->Desc);
|
|
||||||
else if (tool->StackLevel >= tool->Results.Size) // Only start using fallback below when all queries are done, so during queries we don't flickering ??? markers.
|
|
||||||
{
|
|
||||||
#ifdef IMGUI_ENABLE_TEST_ENGINE
|
|
||||||
if (const char* label = ImGuiTestEngine_FindItemDebugLabel(&g, info->ID)) // Source: ImGuiTestEngine's ItemInfo()
|
|
||||||
Text("??? \"%s\"", label);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
TextUnformatted("???");
|
|
||||||
}
|
|
||||||
|
|
||||||
TableNextColumn();
|
TableNextColumn();
|
||||||
Text("0x%08X", info->ID);
|
Text("0x%08X", info->ID);
|
||||||
if (n == tool->Results.Size - 1)
|
if (n == tool->Results.Size - 1)
|
||||||
|
16
3rdparty/dear-imgui/imgui.h
vendored
16
3rdparty/dear-imgui/imgui.h
vendored
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.87 WIP
|
// dear imgui, v1.88 WIP
|
||||||
// (headers)
|
// (headers)
|
||||||
|
|
||||||
// Help:
|
// Help:
|
||||||
@ -64,8 +64,8 @@ Index of this file:
|
|||||||
|
|
||||||
// Version
|
// Version
|
||||||
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
|
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
|
||||||
#define IMGUI_VERSION "1.87 WIP"
|
#define IMGUI_VERSION "1.88 WIP"
|
||||||
#define IMGUI_VERSION_NUM 18616
|
#define IMGUI_VERSION_NUM 18703
|
||||||
#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
|
#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
|
||||||
#define IMGUI_HAS_TABLE
|
#define IMGUI_HAS_TABLE
|
||||||
|
|
||||||
@ -249,8 +249,8 @@ IM_MSVC_RUNTIME_CHECKS_OFF
|
|||||||
struct ImVec2
|
struct ImVec2
|
||||||
{
|
{
|
||||||
float x, y;
|
float x, y;
|
||||||
ImVec2() { x = y = 0.0f; }
|
constexpr ImVec2() : x(0.0f), y(0.0f) { }
|
||||||
ImVec2(float _x, float _y) { x = _x; y = _y; }
|
constexpr ImVec2(float _x, float _y) : x(_x), y(_y) { }
|
||||||
float operator[] (size_t idx) const { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine.
|
float operator[] (size_t idx) const { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine.
|
||||||
float& operator[] (size_t idx) { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine.
|
float& operator[] (size_t idx) { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine.
|
||||||
#ifdef IM_VEC2_CLASS_EXTRA
|
#ifdef IM_VEC2_CLASS_EXTRA
|
||||||
@ -261,9 +261,9 @@ struct ImVec2
|
|||||||
// ImVec4: 4D vector used to store clipping rectangles, colors etc. [Compile-time configurable type]
|
// ImVec4: 4D vector used to store clipping rectangles, colors etc. [Compile-time configurable type]
|
||||||
struct ImVec4
|
struct ImVec4
|
||||||
{
|
{
|
||||||
float x, y, z, w;
|
float x, y, z, w;
|
||||||
ImVec4() { x = y = z = w = 0.0f; }
|
constexpr ImVec4() : x(0.0f), y(0.0f), z(0.0f), w(0.0f) { }
|
||||||
ImVec4(float _x, float _y, float _z, float _w) { x = _x; y = _y; z = _z; w = _w; }
|
constexpr ImVec4(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w) { }
|
||||||
#ifdef IM_VEC4_CLASS_EXTRA
|
#ifdef IM_VEC4_CLASS_EXTRA
|
||||||
IM_VEC4_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec4.
|
IM_VEC4_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec4.
|
||||||
#endif
|
#endif
|
||||||
|
2
3rdparty/dear-imgui/imgui_demo.cpp
vendored
2
3rdparty/dear-imgui/imgui_demo.cpp
vendored
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.87 WIP
|
// dear imgui, v1.88 WIP
|
||||||
// (demo code)
|
// (demo code)
|
||||||
|
|
||||||
// Help:
|
// Help:
|
||||||
|
28
3rdparty/dear-imgui/imgui_draw.cpp
vendored
28
3rdparty/dear-imgui/imgui_draw.cpp
vendored
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.87 WIP
|
// dear imgui, v1.88 WIP
|
||||||
// (drawing and font code)
|
// (drawing and font code)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1206,8 +1206,8 @@ void ImDrawList::PathArcTo(const ImVec2& center, float radius, float a_min, floa
|
|||||||
|
|
||||||
const float a_min_segment_angle = a_min_sample * IM_PI * 2.0f / IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
|
const float a_min_segment_angle = a_min_sample * IM_PI * 2.0f / IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
|
||||||
const float a_max_segment_angle = a_max_sample * IM_PI * 2.0f / IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
|
const float a_max_segment_angle = a_max_sample * IM_PI * 2.0f / IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
|
||||||
const bool a_emit_start = (a_min_segment_angle - a_min) != 0.0f;
|
const bool a_emit_start = ImAbs(a_min_segment_angle - a_min) >= 1e-5f;
|
||||||
const bool a_emit_end = (a_max - a_max_segment_angle) != 0.0f;
|
const bool a_emit_end = ImAbs(a_max - a_max_segment_angle) >= 1e-5f;
|
||||||
|
|
||||||
_Path.reserve(_Path.Size + (a_mid_samples + 1 + (a_emit_start ? 1 : 0) + (a_emit_end ? 1 : 0)));
|
_Path.reserve(_Path.Size + (a_mid_samples + 1 + (a_emit_start ? 1 : 0) + (a_emit_end ? 1 : 0)));
|
||||||
if (a_emit_start)
|
if (a_emit_start)
|
||||||
@ -3736,7 +3736,6 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col
|
|||||||
// - RenderArrow()
|
// - RenderArrow()
|
||||||
// - RenderBullet()
|
// - RenderBullet()
|
||||||
// - RenderCheckMark()
|
// - RenderCheckMark()
|
||||||
// - RenderMouseCursor()
|
|
||||||
// - RenderArrowPointingAt()
|
// - RenderArrowPointingAt()
|
||||||
// - RenderRectFilledRangeH()
|
// - RenderRectFilledRangeH()
|
||||||
// - RenderRectFilledWithHole()
|
// - RenderRectFilledWithHole()
|
||||||
@ -3797,27 +3796,6 @@ void ImGui::RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float
|
|||||||
draw_list->PathStroke(col, 0, thickness);
|
draw_list->PathStroke(col, 0, thickness);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow)
|
|
||||||
{
|
|
||||||
if (mouse_cursor == ImGuiMouseCursor_None)
|
|
||||||
return;
|
|
||||||
IM_ASSERT(mouse_cursor > ImGuiMouseCursor_None && mouse_cursor < ImGuiMouseCursor_COUNT);
|
|
||||||
|
|
||||||
ImFontAtlas* font_atlas = draw_list->_Data->Font->ContainerAtlas;
|
|
||||||
ImVec2 offset, size, uv[4];
|
|
||||||
if (font_atlas->GetMouseCursorTexData(mouse_cursor, &offset, &size, &uv[0], &uv[2]))
|
|
||||||
{
|
|
||||||
pos -= offset;
|
|
||||||
ImTextureID tex_id = font_atlas->TexID;
|
|
||||||
draw_list->PushTextureID(tex_id);
|
|
||||||
draw_list->AddImage(tex_id, pos + ImVec2(1, 0) * scale, pos + (ImVec2(1, 0) + size) * scale, uv[2], uv[3], col_shadow);
|
|
||||||
draw_list->AddImage(tex_id, pos + ImVec2(2, 0) * scale, pos + (ImVec2(2, 0) + size) * scale, uv[2], uv[3], col_shadow);
|
|
||||||
draw_list->AddImage(tex_id, pos, pos + size * scale, uv[2], uv[3], col_border);
|
|
||||||
draw_list->AddImage(tex_id, pos, pos + size * scale, uv[0], uv[1], col_fill);
|
|
||||||
draw_list->PopTextureID();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side.
|
// Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side.
|
||||||
void ImGui::RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col)
|
void ImGui::RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col)
|
||||||
{
|
{
|
||||||
|
31
3rdparty/dear-imgui/imgui_internal.h
vendored
31
3rdparty/dear-imgui/imgui_internal.h
vendored
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.87 WIP
|
// dear imgui, v1.88 WIP
|
||||||
// (internal structures/api)
|
// (internal structures/api)
|
||||||
|
|
||||||
// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
|
// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
|
||||||
@ -469,17 +469,17 @@ IM_MSVC_RUNTIME_CHECKS_OFF
|
|||||||
struct ImVec1
|
struct ImVec1
|
||||||
{
|
{
|
||||||
float x;
|
float x;
|
||||||
ImVec1() { x = 0.0f; }
|
constexpr ImVec1() : x(0.0f) { }
|
||||||
ImVec1(float _x) { x = _x; }
|
constexpr ImVec1(float _x) : x(_x) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Helper: ImVec2ih (2D vector, half-size integer, for long-term packed storage)
|
// Helper: ImVec2ih (2D vector, half-size integer, for long-term packed storage)
|
||||||
struct ImVec2ih
|
struct ImVec2ih
|
||||||
{
|
{
|
||||||
short x, y;
|
short x, y;
|
||||||
ImVec2ih() { x = y = 0; }
|
constexpr ImVec2ih() : x(0), y(0) {}
|
||||||
ImVec2ih(short _x, short _y) { x = _x; y = _y; }
|
constexpr ImVec2ih(short _x, short _y) : x(_x), y(_y) {}
|
||||||
explicit ImVec2ih(const ImVec2& rhs) { x = (short)rhs.x; y = (short)rhs.y; }
|
constexpr explicit ImVec2ih(const ImVec2& rhs) : x((short)rhs.x), y((short)rhs.y) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Helper: ImRect (2D axis aligned bounding-box)
|
// Helper: ImRect (2D axis aligned bounding-box)
|
||||||
@ -489,10 +489,10 @@ struct IMGUI_API ImRect
|
|||||||
ImVec2 Min; // Upper-left
|
ImVec2 Min; // Upper-left
|
||||||
ImVec2 Max; // Lower-right
|
ImVec2 Max; // Lower-right
|
||||||
|
|
||||||
ImRect() : Min(0.0f, 0.0f), Max(0.0f, 0.0f) {}
|
constexpr ImRect() : Min(0.0f, 0.0f), Max(0.0f, 0.0f) {}
|
||||||
ImRect(const ImVec2& min, const ImVec2& max) : Min(min), Max(max) {}
|
constexpr ImRect(const ImVec2& min, const ImVec2& max) : Min(min), Max(max) {}
|
||||||
ImRect(const ImVec4& v) : Min(v.x, v.y), Max(v.z, v.w) {}
|
constexpr ImRect(const ImVec4& v) : Min(v.x, v.y), Max(v.z, v.w) {}
|
||||||
ImRect(float x1, float y1, float x2, float y2) : Min(x1, y1), Max(x2, y2) {}
|
constexpr ImRect(float x1, float y1, float x2, float y2) : Min(x1, y1), Max(x2, y2) {}
|
||||||
|
|
||||||
ImVec2 GetCenter() const { return ImVec2((Min.x + Max.x) * 0.5f, (Min.y + Max.y) * 0.5f); }
|
ImVec2 GetCenter() const { return ImVec2((Min.x + Max.x) * 0.5f, (Min.y + Max.y) * 0.5f); }
|
||||||
ImVec2 GetSize() const { return ImVec2(Max.x - Min.x, Max.y - Min.y); }
|
ImVec2 GetSize() const { return ImVec2(Max.x - Min.x, Max.y - Min.y); }
|
||||||
@ -1171,7 +1171,7 @@ enum ImGuiInputEventType
|
|||||||
ImGuiInputEventType_MouseWheel,
|
ImGuiInputEventType_MouseWheel,
|
||||||
ImGuiInputEventType_MouseButton,
|
ImGuiInputEventType_MouseButton,
|
||||||
ImGuiInputEventType_Key,
|
ImGuiInputEventType_Key,
|
||||||
ImGuiInputEventType_Char,
|
ImGuiInputEventType_Text,
|
||||||
ImGuiInputEventType_Focus,
|
ImGuiInputEventType_Focus,
|
||||||
ImGuiInputEventType_COUNT
|
ImGuiInputEventType_COUNT
|
||||||
};
|
};
|
||||||
@ -1510,7 +1510,8 @@ struct ImGuiStackLevelInfo
|
|||||||
ImGuiID ID;
|
ImGuiID ID;
|
||||||
ImS8 QueryFrameCount; // >= 1: Query in progress
|
ImS8 QueryFrameCount; // >= 1: Query in progress
|
||||||
bool QuerySuccess; // Obtained result from DebugHookIdInfo()
|
bool QuerySuccess; // Obtained result from DebugHookIdInfo()
|
||||||
char Desc[58]; // Arbitrarily sized buffer to hold a result (FIXME: could replace Results[] with a chunk stream?)
|
ImGuiDataType DataType : 8;
|
||||||
|
char Desc[57]; // Arbitrarily sized buffer to hold a result (FIXME: could replace Results[] with a chunk stream?) FIXME: Now that we added CTRL+C this should be fixed.
|
||||||
|
|
||||||
ImGuiStackLevelInfo() { memset(this, 0, sizeof(*this)); }
|
ImGuiStackLevelInfo() { memset(this, 0, sizeof(*this)); }
|
||||||
};
|
};
|
||||||
@ -1522,8 +1523,10 @@ struct ImGuiStackTool
|
|||||||
int StackLevel; // -1: query stack and resize Results, >= 0: individual stack level
|
int StackLevel; // -1: query stack and resize Results, >= 0: individual stack level
|
||||||
ImGuiID QueryId; // ID to query details for
|
ImGuiID QueryId; // ID to query details for
|
||||||
ImVector<ImGuiStackLevelInfo> Results;
|
ImVector<ImGuiStackLevelInfo> Results;
|
||||||
|
bool CopyToClipboardOnCtrlC;
|
||||||
|
float CopyToClipboardLastTime;
|
||||||
|
|
||||||
ImGuiStackTool() { memset(this, 0, sizeof(*this)); }
|
ImGuiStackTool() { memset(this, 0, sizeof(*this)); CopyToClipboardLastTime = -FLT_MAX; }
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -2760,12 +2763,12 @@ namespace ImGui
|
|||||||
IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, ImDrawFlags flags = 0);
|
IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, ImDrawFlags flags = 0);
|
||||||
IMGUI_API void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight
|
IMGUI_API void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight
|
||||||
IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
|
IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
|
||||||
|
IMGUI_API void RenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow);
|
||||||
|
|
||||||
// Render helpers (those functions don't access any ImGui state!)
|
// Render helpers (those functions don't access any ImGui state!)
|
||||||
IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
|
IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
|
||||||
IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
|
IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
|
||||||
IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz);
|
IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz);
|
||||||
IMGUI_API void RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow);
|
|
||||||
IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col);
|
IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col);
|
||||||
IMGUI_API void RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding);
|
IMGUI_API void RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding);
|
||||||
IMGUI_API void RenderRectFilledWithHole(ImDrawList* draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding);
|
IMGUI_API void RenderRectFilledWithHole(ImDrawList* draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding);
|
||||||
|
2
3rdparty/dear-imgui/imgui_tables.cpp
vendored
2
3rdparty/dear-imgui/imgui_tables.cpp
vendored
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.87 WIP
|
// dear imgui, v1.88 WIP
|
||||||
// (tables and columns code)
|
// (tables and columns code)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
3
3rdparty/dear-imgui/imgui_widgets.cpp
vendored
3
3rdparty/dear-imgui/imgui_widgets.cpp
vendored
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.87 WIP
|
// dear imgui, v1.88 WIP
|
||||||
// (widgets code)
|
// (widgets code)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -82,6 +82,7 @@ Index of this file:
|
|||||||
#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
|
#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
|
||||||
#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked
|
#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked
|
||||||
#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
|
#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
|
||||||
|
#pragma GCC diagnostic ignored "-Wdeprecated-enum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user