Formalize scene viewport chrome and presentation helpers
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "Core/IEditorContext.h"
|
||||
#include "SceneViewportNavigation.h"
|
||||
#include "IViewportHostService.h"
|
||||
#include "SceneViewportEditorModes.h"
|
||||
#include "SceneViewportHudOverlay.h"
|
||||
#include "SceneViewportInteractionActions.h"
|
||||
#include "SceneViewportInteractionResolver.h"
|
||||
#include "SceneViewportTransformGizmoCoordinator.h"
|
||||
|
||||
@@ -128,5 +130,62 @@ inline SceneViewportInteractionResolveRequest BuildSceneViewportInteractionResol
|
||||
return request;
|
||||
}
|
||||
|
||||
inline bool ShouldFocusSceneViewportAfterInteraction(
|
||||
bool toolCommandTriggered,
|
||||
const SceneViewportInteractionActions& interactionActions,
|
||||
const SceneViewportNavigationUpdate& navigationUpdate) {
|
||||
return toolCommandTriggered ||
|
||||
interactionActions.HasClickAction() ||
|
||||
navigationUpdate.beginLookDrag ||
|
||||
navigationUpdate.beginPanDrag;
|
||||
}
|
||||
|
||||
struct SceneViewportPresentationRequest {
|
||||
IEditorContext* context = nullptr;
|
||||
IViewportHostService* viewportHostService = nullptr;
|
||||
bool hasInteractiveViewport = false;
|
||||
SceneViewportFrameGeometry geometry = {};
|
||||
SceneViewportTransformGizmoFrameOptions gizmoFrameOptions = {};
|
||||
SceneViewportMoveGizmo* moveGizmo = nullptr;
|
||||
SceneViewportRotateGizmo* rotateGizmo = nullptr;
|
||||
SceneViewportScaleGizmo* scaleGizmo = nullptr;
|
||||
ImDrawList* drawList = nullptr;
|
||||
ImVec2 viewportMin = ImVec2(0.0f, 0.0f);
|
||||
ImVec2 viewportMax = ImVec2(0.0f, 0.0f);
|
||||
|
||||
bool IsValid() const {
|
||||
return context != nullptr &&
|
||||
viewportHostService != nullptr &&
|
||||
moveGizmo != nullptr &&
|
||||
rotateGizmo != nullptr &&
|
||||
scaleGizmo != nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
inline void RefreshAndDrawSceneViewportPresentation(const SceneViewportPresentationRequest& request) {
|
||||
if (!request.IsValid() || !request.hasInteractiveViewport) {
|
||||
return;
|
||||
}
|
||||
|
||||
const SceneViewportOverlayData overlay = request.viewportHostService->GetSceneViewOverlayData();
|
||||
RefreshAndSubmitSceneViewportTransformGizmoFrame(
|
||||
*request.viewportHostService,
|
||||
BuildSceneViewportTransformGizmoRefreshRequest(
|
||||
*request.context,
|
||||
overlay,
|
||||
request.geometry.viewportSize,
|
||||
request.geometry.localMousePosition,
|
||||
request.gizmoFrameOptions),
|
||||
*request.moveGizmo,
|
||||
*request.rotateGizmo,
|
||||
*request.scaleGizmo);
|
||||
|
||||
DrawSceneViewportHudOverlay(
|
||||
request.drawList,
|
||||
BuildSceneViewportHudOverlayData(overlay),
|
||||
request.viewportMin,
|
||||
request.viewportMax);
|
||||
}
|
||||
|
||||
} // namespace Editor
|
||||
} // namespace XCEngine
|
||||
|
||||
Reference in New Issue
Block a user