#include "SceneViewportHudOverlay.h" #include "SceneViewportOrientationGizmo.h" namespace XCEngine { namespace Editor { namespace { bool IsViewportRectValid(const ImVec2& viewportMin, const ImVec2& viewportMax) { return viewportMax.x - viewportMin.x > 1.0f && viewportMax.y - viewportMin.y > 1.0f; } } // namespace void DrawSceneViewportHudOverlay( ImDrawList* drawList, const SceneViewportHudOverlayData& overlay, const ImVec2& viewportMin, const ImVec2& viewportMax) { if (drawList == nullptr || !overlay.HasVisibleElements() || !IsViewportRectValid(viewportMin, viewportMax)) { return; } drawList->PushClipRect(viewportMin, viewportMax, true); if (overlay.showOrientationGizmo) { DrawSceneViewportOrientationGizmo( drawList, overlay.sceneOverlay, viewportMin, viewportMax); } drawList->PopClipRect(); } SceneViewportHudOverlayHitResult HitTestSceneViewportHudOverlay( const SceneViewportHudOverlayData& overlay, const ImVec2& viewportMin, const ImVec2& viewportMax, const ImVec2& mousePosition) { SceneViewportHudOverlayHitResult result = {}; if (!overlay.HasVisibleElements() || !IsViewportRectValid(viewportMin, viewportMax)) { return result; } if (overlay.showOrientationGizmo) { const SceneViewportOrientationAxis axis = HitTestSceneViewportOrientationGizmo( overlay.sceneOverlay, viewportMin, viewportMax, mousePosition); if (axis != SceneViewportOrientationAxis::None) { result.kind = SceneViewportHudOverlayHitKind::OrientationAxis; result.orientationAxis = axis; } } return result; } } // namespace Editor } // namespace XCEngine