65 lines
1.8 KiB
C++
65 lines
1.8 KiB
C++
#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
|