|
27 | 27 | static constexpr bool value = (sizeof(yes_type) == sizeof(test<mixin>(0))); \ |
28 | 28 | } |
29 | 29 |
|
| 30 | +// Special sentinel value. This needs to be unique, so allow it to be overridden in the user's ImGui config |
| 31 | +# ifndef ImDrawCallback_ImCanvas |
| 32 | +# define ImDrawCallback_ImCanvas (ImDrawCallback)(-2) |
| 33 | +# endif |
| 34 | + |
30 | 35 | namespace ImCanvasDetails { |
31 | 36 |
|
32 | 37 | DECLARE_HAS_MEMBER(HasFringeScale, _FringeScale); |
@@ -68,12 +73,6 @@ struct VtxCurrentOffsetRef |
68 | 73 | } |
69 | 74 | }; |
70 | 75 |
|
71 | | -static void SentinelDrawCallback(const ImDrawList* parent_list, const ImDrawCmd* cmd) |
72 | | -{ |
73 | | - // This is a sentinel draw callback, it's only purpose is to mark draw list command. |
74 | | - IM_ASSERT(false && "This draw callback should never be called."); |
75 | | -} |
76 | | - |
77 | 76 | } // namespace ImCanvasDetails |
78 | 77 |
|
79 | 78 | // Returns a reference to _FringeScale extension to ImDrawList |
@@ -444,7 +443,7 @@ void ImGuiEx::Canvas::EnterLocalSpace() |
444 | 443 | // |
445 | 444 | // More investigation is needed. To get to the bottom of this. |
446 | 445 | if ((!m_DrawList->CmdBuffer.empty() && m_DrawList->CmdBuffer.back().ElemCount > 0) || m_DrawList->_Splitter._Count > 1) |
447 | | - m_DrawList->AddCallback(&ImCanvasDetails::SentinelDrawCallback, nullptr); |
| 446 | + m_DrawList->AddCallback(ImDrawCallback_ImCanvas, nullptr); |
448 | 447 |
|
449 | 448 | # if defined(IMGUI_HAS_VIEWPORT) |
450 | 449 | auto window = ImGui::GetCurrentWindow(); |
@@ -556,9 +555,9 @@ void ImGuiEx::Canvas::LeaveLocalSpace() |
556 | 555 | // Remove sentinel draw command if present |
557 | 556 | if (m_DrawListCommadBufferSize > 0) |
558 | 557 | { |
559 | | - if (m_DrawList->CmdBuffer.size() > m_DrawListCommadBufferSize && m_DrawList->CmdBuffer[m_DrawListCommadBufferSize].UserCallback == &ImCanvasDetails::SentinelDrawCallback) |
| 558 | + if (m_DrawList->CmdBuffer.size() > m_DrawListCommadBufferSize && m_DrawList->CmdBuffer[m_DrawListCommadBufferSize].UserCallback == ImDrawCallback_ImCanvas) |
560 | 559 | m_DrawList->CmdBuffer.erase(m_DrawList->CmdBuffer.Data + m_DrawListCommadBufferSize); |
561 | | - else if (m_DrawList->CmdBuffer.size() >= m_DrawListCommadBufferSize && m_DrawList->CmdBuffer[m_DrawListCommadBufferSize - 1].UserCallback == &ImCanvasDetails::SentinelDrawCallback) |
| 560 | + else if (m_DrawList->CmdBuffer.size() >= m_DrawListCommadBufferSize && m_DrawList->CmdBuffer[m_DrawListCommadBufferSize - 1].UserCallback == ImDrawCallback_ImCanvas) |
562 | 561 | m_DrawList->CmdBuffer.erase(m_DrawList->CmdBuffer.Data + m_DrawListCommadBufferSize - 1); |
563 | 562 | } |
564 | 563 |
|
|
0 commit comments