Formalize scene viewport HUD overlay
This commit is contained in:
64
editor/src/Viewport/SceneViewportHudOverlay.cpp
Normal file
64
editor/src/Viewport/SceneViewportHudOverlay.cpp
Normal file
@@ -0,0 +1,64 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user