GUI: short circuit evaluation paranoia

issue #2327
This commit is contained in:
tildearrow 2025-01-17 03:01:30 -05:00
parent cfcad1e689
commit 304a8b8722

View file

@ -71,47 +71,51 @@ const char* sampleNote[12]={
} }
#define SIMPLE_DRAG_SOURCE(_c,_toMoveVar) \ #define SIMPLE_DRAG_SOURCE(_c,_toMoveVar) \
if (settings.draggableDataView && ImGui::BeginDragDropSource()) { \ if (settings.draggableDataView) { \
_toMoveVar=i; \ if (ImGui::BeginDragDropSource()) { \
ImGui::SetDragDropPayload(_c,NULL,0,ImGuiCond_Once); \ _toMoveVar=i; \
ImGui::Button(ICON_FA_ARROWS "##AssetDrag"); \ ImGui::SetDragDropPayload(_c,NULL,0,ImGuiCond_Once); \
ImGui::EndDragDropSource(); \ ImGui::Button(ICON_FA_ARROWS "##AssetDrag"); \
ImGui::EndDragDropSource(); \
} \
} }
#define SIMPLE_DRAG_TARGET(_c,_toMoveVar,_curVar,_swapFn,_moveUpFn,_moveDownFn) \ #define SIMPLE_DRAG_TARGET(_c,_toMoveVar,_curVar,_swapFn,_moveUpFn,_moveDownFn) \
if (settings.draggableDataView && ImGui::BeginDragDropTarget()) { \ if (settings.draggableDataView) { \
const ImGuiPayload* payload=ImGui::AcceptDragDropPayload(_c); \ if (ImGui::BeginDragDropTarget()) { \
if (payload!=NULL) { \ const ImGuiPayload* payload=ImGui::AcceptDragDropPayload(_c); \
int target=i; \ if (payload!=NULL) { \
bool markModified=false; \ int target=i; \
if (_toMoveVar!=target) { \ bool markModified=false; \
if (ImGui::IsKeyDown(ImGuiKey_ModCtrl)) { \ if (_toMoveVar!=target) { \
markModified=_swapFn(_toMoveVar,target); \ if (ImGui::IsKeyDown(ImGuiKey_ModCtrl)) { \
} else { \ markModified=_swapFn(_toMoveVar,target); \
while (_toMoveVar>target) { \ } else { \
if (_moveUpFn(_toMoveVar)) { \ while (_toMoveVar>target) { \
_toMoveVar--; \ if (_moveUpFn(_toMoveVar)) { \
markModified=true; \ _toMoveVar--; \
} else { \ markModified=true; \
break; \ } else { \
} \ break; \
} \ } \
while (_toMoveVar<target) { \ } \
if (_moveDownFn(_toMoveVar)) { \ while (_toMoveVar<target) { \
_toMoveVar++; \ if (_moveDownFn(_toMoveVar)) { \
markModified=true; \ _toMoveVar++; \
} else { \ markModified=true; \
break; \ } else { \
break; \
} \
} \ } \
} \ } \
_curVar=target; \
} \ } \
_curVar=target; \ if (markModified) { \
MARK_MODIFIED; \
} \
_toMoveVar=-1; \
ImGui::EndDragDropTarget(); \
} \ } \
if (markModified) { \
MARK_MODIFIED; \
} \
_toMoveVar=-1; \
ImGui::EndDragDropTarget(); \
} \ } \
} }