|
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