Skip to content

Commit a183cf2

Browse files
committed
Updated ImGui.
1 parent 423a2b5 commit a183cf2

File tree

10 files changed

+2189
-1397
lines changed

10 files changed

+2189
-1397
lines changed

3rdparty/dear-imgui/imgui.cpp

Lines changed: 860 additions & 311 deletions
Large diffs are not rendered by default.

3rdparty/dear-imgui/imgui.h

Lines changed: 114 additions & 53 deletions
Large diffs are not rendered by default.

3rdparty/dear-imgui/imgui_demo.cpp

Lines changed: 87 additions & 16 deletions
Large diffs are not rendered by default.

3rdparty/dear-imgui/imgui_draw.cpp

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// dear imgui, v1.91.1 WIP
1+
// dear imgui, v1.91.4
22
// (drawing and font code)
33

44
/*
@@ -230,7 +230,7 @@ void ImGui::StyleColorsDark(ImGuiStyle* dst)
230230
colors[ImGuiCol_TextLink] = colors[ImGuiCol_HeaderActive];
231231
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
232232
colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
233-
colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
233+
colors[ImGuiCol_NavCursor] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
234234
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
235235
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
236236
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);
@@ -293,7 +293,7 @@ void ImGui::StyleColorsClassic(ImGuiStyle* dst)
293293
colors[ImGuiCol_TextLink] = colors[ImGuiCol_HeaderActive];
294294
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.00f, 0.00f, 1.00f, 0.35f);
295295
colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
296-
colors[ImGuiCol_NavHighlight] = colors[ImGuiCol_HeaderHovered];
296+
colors[ImGuiCol_NavCursor] = colors[ImGuiCol_HeaderHovered];
297297
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
298298
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
299299
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
@@ -357,7 +357,7 @@ void ImGui::StyleColorsLight(ImGuiStyle* dst)
357357
colors[ImGuiCol_TextLink] = colors[ImGuiCol_HeaderActive];
358358
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
359359
colors[ImGuiCol_DragDropTarget] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
360-
colors[ImGuiCol_NavHighlight] = colors[ImGuiCol_HeaderHovered];
360+
colors[ImGuiCol_NavCursor] = colors[ImGuiCol_HeaderHovered];
361361
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(0.70f, 0.70f, 0.70f, 0.70f);
362362
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.20f);
363363
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
@@ -414,6 +414,7 @@ void ImDrawList::_ResetForNewFrame()
414414
_IdxWritePtr = NULL;
415415
_ClipRectStack.resize(0);
416416
_TextureIdStack.resize(0);
417+
_CallbacksDataBuf.resize(0);
417418
_Path.resize(0);
418419
_Splitter.Clear();
419420
CmdBuffer.push_back(ImDrawCmd());
@@ -431,6 +432,7 @@ void ImDrawList::_ClearFreeMemory()
431432
_IdxWritePtr = NULL;
432433
_ClipRectStack.clear();
433434
_TextureIdStack.clear();
435+
_CallbacksDataBuf.clear();
434436
_Path.clear();
435437
_Splitter.ClearFreeMemory();
436438
}
@@ -470,7 +472,7 @@ void ImDrawList::_PopUnusedDrawCmd()
470472
}
471473
}
472474

473-
void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data)
475+
void ImDrawList::AddCallback(ImDrawCallback callback, void* userdata, size_t userdata_size)
474476
{
475477
IM_ASSERT_PARANOID(CmdBuffer.Size > 0);
476478
ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
@@ -480,8 +482,26 @@ void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data)
480482
AddDrawCmd();
481483
curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
482484
}
485+
483486
curr_cmd->UserCallback = callback;
484-
curr_cmd->UserCallbackData = callback_data;
487+
if (userdata_size == 0)
488+
{
489+
// Store user data directly in command (no indirection)
490+
curr_cmd->UserCallbackData = userdata;
491+
curr_cmd->UserCallbackDataSize = 0;
492+
curr_cmd->UserCallbackDataOffset = -1;
493+
}
494+
else
495+
{
496+
// Copy and store user data in a buffer
497+
IM_ASSERT(userdata != NULL);
498+
IM_ASSERT(userdata_size < (1u << 31));
499+
curr_cmd->UserCallbackData = NULL; // Will be resolved during Render()
500+
curr_cmd->UserCallbackDataSize = (int)userdata_size;
501+
curr_cmd->UserCallbackDataOffset = _CallbacksDataBuf.Size;
502+
_CallbacksDataBuf.resize(_CallbacksDataBuf.Size + (int)userdata_size);
503+
memcpy(_CallbacksDataBuf.Data + (size_t)curr_cmd->UserCallbackDataOffset, userdata, userdata_size);
504+
}
485505

486506
AddDrawCmd(); // Force a new command after us (see comment below)
487507
}
@@ -2222,6 +2242,12 @@ void ImGui::AddDrawListToDrawDataEx(ImDrawData* draw_data, ImVector<ImDrawList*>
22222242
if (sizeof(ImDrawIdx) == 2)
22232243
IM_ASSERT(draw_list->_VtxCurrentIdx < (1 << 16) && "Too many vertices in ImDrawList using 16-bit indices. Read comment above");
22242244

2245+
// Resolve callback data pointers
2246+
if (draw_list->_CallbacksDataBuf.Size > 0)
2247+
for (ImDrawCmd& cmd : draw_list->CmdBuffer)
2248+
if (cmd.UserCallback != NULL && cmd.UserCallbackDataOffset != -1 && cmd.UserCallbackDataSize > 0)
2249+
cmd.UserCallbackData = draw_list->_CallbacksDataBuf.Data + cmd.UserCallbackDataOffset;
2250+
22252251
// Add to output list + records state in ImDrawData
22262252
out_list->push_back(draw_list);
22272253
draw_data->CmdListsCount++;
@@ -2499,13 +2525,14 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
24992525
{
25002526
IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
25012527
IM_ASSERT(font_cfg->FontData != NULL && font_cfg->FontDataSize > 0);
2502-
IM_ASSERT(font_cfg->SizePixels > 0.0f);
2528+
IM_ASSERT(font_cfg->SizePixels > 0.0f && "Is ImFontConfig struct correctly initialized?");
2529+
IM_ASSERT(font_cfg->OversampleH > 0 && font_cfg->OversampleV > 0 && "Is ImFontConfig struct correctly initialized?");
25032530

25042531
// Create new font
25052532
if (!font_cfg->MergeMode)
25062533
Fonts.push_back(IM_NEW(ImFont));
25072534
else
2508-
IM_ASSERT(!Fonts.empty() && "Cannot use MergeMode for the first font"); // When using MergeMode make sure that a font has already been added before. You can use ImGui::GetIO().Fonts->AddFontDefault() to add the default imgui font.
2535+
IM_ASSERT(Fonts.Size > 0 && "Cannot use MergeMode for the first font"); // When using MergeMode make sure that a font has already been added before. You can use ImGui::GetIO().Fonts->AddFontDefault() to add the default imgui font.
25092536

25102537
ConfigData.push_back(*font_cfg);
25112538
ImFontConfig& new_font_cfg = ConfigData.back();

0 commit comments

Comments
 (0)