1
- // dear imgui, v1.91.1 WIP
1
+ // dear imgui, v1.91.4
2
2
// (drawing and font code)
3
3
4
4
/*
@@ -230,7 +230,7 @@ void ImGui::StyleColorsDark(ImGuiStyle* dst)
230
230
colors[ImGuiCol_TextLink] = colors[ImGuiCol_HeaderActive];
231
231
colors[ImGuiCol_TextSelectedBg] = ImVec4 (0 .26f , 0 .59f , 0 .98f , 0 .35f );
232
232
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 );
234
234
colors[ImGuiCol_NavWindowingHighlight] = ImVec4 (1 .00f , 1 .00f , 1 .00f , 0 .70f );
235
235
colors[ImGuiCol_NavWindowingDimBg] = ImVec4 (0 .80f , 0 .80f , 0 .80f , 0 .20f );
236
236
colors[ImGuiCol_ModalWindowDimBg] = ImVec4 (0 .80f , 0 .80f , 0 .80f , 0 .35f );
@@ -293,7 +293,7 @@ void ImGui::StyleColorsClassic(ImGuiStyle* dst)
293
293
colors[ImGuiCol_TextLink] = colors[ImGuiCol_HeaderActive];
294
294
colors[ImGuiCol_TextSelectedBg] = ImVec4 (0 .00f , 0 .00f , 1 .00f , 0 .35f );
295
295
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];
297
297
colors[ImGuiCol_NavWindowingHighlight] = ImVec4 (1 .00f , 1 .00f , 1 .00f , 0 .70f );
298
298
colors[ImGuiCol_NavWindowingDimBg] = ImVec4 (0 .80f , 0 .80f , 0 .80f , 0 .20f );
299
299
colors[ImGuiCol_ModalWindowDimBg] = ImVec4 (0 .20f , 0 .20f , 0 .20f , 0 .35f );
@@ -357,7 +357,7 @@ void ImGui::StyleColorsLight(ImGuiStyle* dst)
357
357
colors[ImGuiCol_TextLink] = colors[ImGuiCol_HeaderActive];
358
358
colors[ImGuiCol_TextSelectedBg] = ImVec4 (0 .26f , 0 .59f , 0 .98f , 0 .35f );
359
359
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];
361
361
colors[ImGuiCol_NavWindowingHighlight] = ImVec4 (0 .70f , 0 .70f , 0 .70f , 0 .70f );
362
362
colors[ImGuiCol_NavWindowingDimBg] = ImVec4 (0 .20f , 0 .20f , 0 .20f , 0 .20f );
363
363
colors[ImGuiCol_ModalWindowDimBg] = ImVec4 (0 .20f , 0 .20f , 0 .20f , 0 .35f );
@@ -414,6 +414,7 @@ void ImDrawList::_ResetForNewFrame()
414
414
_IdxWritePtr = NULL ;
415
415
_ClipRectStack.resize (0 );
416
416
_TextureIdStack.resize (0 );
417
+ _CallbacksDataBuf.resize (0 );
417
418
_Path.resize (0 );
418
419
_Splitter.Clear ();
419
420
CmdBuffer.push_back (ImDrawCmd ());
@@ -431,6 +432,7 @@ void ImDrawList::_ClearFreeMemory()
431
432
_IdxWritePtr = NULL ;
432
433
_ClipRectStack.clear ();
433
434
_TextureIdStack.clear ();
435
+ _CallbacksDataBuf.clear ();
434
436
_Path.clear ();
435
437
_Splitter.ClearFreeMemory ();
436
438
}
@@ -470,7 +472,7 @@ void ImDrawList::_PopUnusedDrawCmd()
470
472
}
471
473
}
472
474
473
- void ImDrawList::AddCallback (ImDrawCallback callback, void * callback_data )
475
+ void ImDrawList::AddCallback (ImDrawCallback callback, void * userdata, size_t userdata_size )
474
476
{
475
477
IM_ASSERT_PARANOID (CmdBuffer.Size > 0 );
476
478
ImDrawCmd* curr_cmd = &CmdBuffer.Data [CmdBuffer.Size - 1 ];
@@ -480,8 +482,26 @@ void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data)
480
482
AddDrawCmd ();
481
483
curr_cmd = &CmdBuffer.Data [CmdBuffer.Size - 1 ];
482
484
}
485
+
483
486
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
+ }
485
505
486
506
AddDrawCmd (); // Force a new command after us (see comment below)
487
507
}
@@ -2222,6 +2242,12 @@ void ImGui::AddDrawListToDrawDataEx(ImDrawData* draw_data, ImVector<ImDrawList*>
2222
2242
if (sizeof (ImDrawIdx) == 2 )
2223
2243
IM_ASSERT (draw_list->_VtxCurrentIdx < (1 << 16 ) && " Too many vertices in ImDrawList using 16-bit indices. Read comment above" );
2224
2244
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
+
2225
2251
// Add to output list + records state in ImDrawData
2226
2252
out_list->push_back (draw_list);
2227
2253
draw_data->CmdListsCount ++;
@@ -2499,13 +2525,14 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
2499
2525
{
2500
2526
IM_ASSERT (!Locked && " Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!" );
2501
2527
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?" );
2503
2530
2504
2531
// Create new font
2505
2532
if (!font_cfg->MergeMode )
2506
2533
Fonts.push_back (IM_NEW (ImFont));
2507
2534
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.
2509
2536
2510
2537
ConfigData.push_back (*font_cfg);
2511
2538
ImFontConfig& new_font_cfg = ConfigData.back ();
0 commit comments