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