Formalize scene viewport chrome and presentation helpers
This commit is contained in:
88
editor/src/Viewport/SceneViewportChrome.h
Normal file
88
editor/src/Viewport/SceneViewportChrome.h
Normal file
@@ -0,0 +1,88 @@
|
||||
#pragma once
|
||||
|
||||
#include "Core/IUndoManager.h"
|
||||
#include "SceneViewportMoveGizmo.h"
|
||||
#include "SceneViewportNavigation.h"
|
||||
#include "SceneViewportRotateGizmo.h"
|
||||
#include "SceneViewportScaleGizmo.h"
|
||||
#include "panels/ViewportPanelContent.h"
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Editor {
|
||||
|
||||
struct SceneViewportToolOverlayResult {
|
||||
bool hovered = false;
|
||||
bool clicked = false;
|
||||
SceneViewportToolMode clickedTool = SceneViewportToolMode::Move;
|
||||
};
|
||||
|
||||
struct SceneViewportToolCommand {
|
||||
SceneViewportToolMode targetTool = SceneViewportToolMode::Move;
|
||||
bool triggered = false;
|
||||
bool cancelMoveGizmo = false;
|
||||
bool cancelRotateGizmo = false;
|
||||
bool cancelScaleGizmo = false;
|
||||
|
||||
bool HasAction() const {
|
||||
return triggered;
|
||||
}
|
||||
};
|
||||
|
||||
void RenderSceneViewportTopBar(
|
||||
SceneViewportPivotMode& pivotMode,
|
||||
SceneViewportTransformSpaceMode& transformSpaceMode);
|
||||
|
||||
SceneViewportToolOverlayResult RenderSceneViewportToolOverlay(
|
||||
const ViewportPanelContentResult& content,
|
||||
SceneViewportToolMode activeTool);
|
||||
|
||||
inline SceneViewportToolCommand BuildSceneViewportToolCommand(
|
||||
const SceneViewportToolOverlayResult& overlayResult,
|
||||
const SceneViewportToolShortcutAction& shortcutAction) {
|
||||
SceneViewportToolCommand command = {};
|
||||
|
||||
if (overlayResult.clicked) {
|
||||
command.targetTool = overlayResult.clickedTool;
|
||||
command.triggered = true;
|
||||
command.cancelMoveGizmo = true;
|
||||
command.cancelRotateGizmo = true;
|
||||
command.cancelScaleGizmo = true;
|
||||
}
|
||||
|
||||
if (shortcutAction.HasAction()) {
|
||||
command.targetTool = shortcutAction.targetTool;
|
||||
command.triggered = true;
|
||||
command.cancelMoveGizmo = command.cancelMoveGizmo || shortcutAction.cancelMoveGizmo;
|
||||
command.cancelRotateGizmo = command.cancelRotateGizmo || shortcutAction.cancelRotateGizmo;
|
||||
command.cancelScaleGizmo = command.cancelScaleGizmo || shortcutAction.cancelScaleGizmo;
|
||||
}
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
inline void ExecuteSceneViewportToolCommand(
|
||||
const SceneViewportToolCommand& command,
|
||||
IUndoManager& undoManager,
|
||||
SceneViewportMoveGizmo& moveGizmo,
|
||||
SceneViewportRotateGizmo& rotateGizmo,
|
||||
SceneViewportScaleGizmo& scaleGizmo,
|
||||
SceneViewportToolMode& toolMode) {
|
||||
if (!command.HasAction()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (command.cancelMoveGizmo && moveGizmo.IsActive()) {
|
||||
moveGizmo.CancelDrag(&undoManager);
|
||||
}
|
||||
if (command.cancelRotateGizmo && rotateGizmo.IsActive()) {
|
||||
rotateGizmo.CancelDrag(&undoManager);
|
||||
}
|
||||
if (command.cancelScaleGizmo && scaleGizmo.IsActive()) {
|
||||
scaleGizmo.CancelDrag(&undoManager);
|
||||
}
|
||||
|
||||
toolMode = command.targetTool;
|
||||
}
|
||||
|
||||
} // namespace Editor
|
||||
} // namespace XCEngine
|
||||
Reference in New Issue
Block a user