Refactor new editor boundaries and test ownership

This commit is contained in:
2026-04-19 15:52:28 +08:00
parent dc13b56cf3
commit 93f06e84ed
279 changed files with 6349 additions and 3238 deletions

View File

@@ -1,6 +1,6 @@
#include "Features/Scene/SceneViewportController.h"
#include "Rendering/Viewport/ViewportHostService.h"
#include "Rendering/Viewport/ViewportObjectPickerService.h"
#include "Scene/EditorSceneRuntime.h"
#include "State/EditorCommandFocusService.h"
@@ -106,12 +106,12 @@ bool TryResolveToolModeShortcut(
void ApplySceneToolMode(
SceneToolMode mode,
EditorSceneRuntime& sceneRuntime,
LegacySceneViewportGizmo& legacyGizmo) {
SceneViewportTransformGizmo& transformGizmo) {
if (sceneRuntime.GetToolMode() == mode) {
return;
}
legacyGizmo.CancelDrag(sceneRuntime);
transformGizmo.CancelDrag(sceneRuntime);
sceneRuntime.SetToolMode(mode);
}
@@ -119,12 +119,12 @@ void ApplySceneToolMode(
void SceneViewportController::Initialize(
const std::filesystem::path& repoRoot,
Host::TextureHost& renderer) {
Ports::TexturePort& renderer) {
m_toolOverlay.Initialize(repoRoot, renderer);
ResetInteractionState();
}
void SceneViewportController::Shutdown(Host::TextureHost& renderer) {
void SceneViewportController::Shutdown(Ports::TexturePort& renderer) {
m_toolOverlay.Shutdown(renderer);
ResetInteractionState();
}
@@ -132,7 +132,7 @@ void SceneViewportController::Shutdown(Host::TextureHost& renderer) {
void SceneViewportController::ResetInteractionState() {
ResetFrameState();
m_toolOverlay.ResetFrame();
m_legacyGizmo.ResetVisualState();
m_transformGizmo.ResetVisualState();
}
void SceneViewportController::SetCommandFocusService(
@@ -142,7 +142,7 @@ void SceneViewportController::SetCommandFocusService(
void SceneViewportController::Update(
EditorSceneRuntime& sceneRuntime,
ViewportHostService& viewportHostService,
const IViewportObjectPickerService& viewportObjectPicker,
const UIEditorWorkspaceComposeState& composeState,
const UIEditorWorkspaceComposeFrame& composeFrame) {
const UIEditorWorkspaceViewportComposeFrame* viewportFrame =
@@ -150,8 +150,8 @@ void SceneViewportController::Update(
const UIEditorWorkspacePanelPresentationState* panelState =
FindUIEditorWorkspacePanelPresentationState(composeState, kScenePanelId);
if (viewportFrame == nullptr || panelState == nullptr) {
if (m_legacyGizmo.IsActive()) {
m_legacyGizmo.CancelDrag(sceneRuntime);
if (m_transformGizmo.IsActive()) {
m_transformGizmo.CancelDrag(sceneRuntime);
}
sceneRuntime.SetHoveredToolHandle(SceneToolHandle::None);
ResetInteractionState();
@@ -190,8 +190,8 @@ void SceneViewportController::Update(
m_navigationState = {};
m_hoveredToolOverlayIndex = kSceneViewportToolOverlayInvalidIndex;
m_activeToolOverlayIndex = kSceneViewportToolOverlayInvalidIndex;
if (m_legacyGizmo.IsActive()) {
m_legacyGizmo.CancelDrag(sceneRuntime);
if (m_transformGizmo.IsActive()) {
m_transformGizmo.CancelDrag(sceneRuntime);
}
}
@@ -218,13 +218,13 @@ void SceneViewportController::Update(
if (transition.pressed &&
transitionHoveredToolOverlayIndex !=
kSceneViewportToolOverlayInvalidIndex &&
!m_legacyGizmo.IsActive()) {
!m_transformGizmo.IsActive()) {
m_activeToolOverlayIndex = transitionHoveredToolOverlayIndex;
if (m_activeToolOverlayIndex < m_toolOverlay.GetFrame().buttons.size()) {
ApplySceneToolMode(
m_toolOverlay.GetFrame().buttons[m_activeToolOverlayIndex].mode,
sceneRuntime,
m_legacyGizmo);
m_transformGizmo);
}
continue;
}
@@ -247,7 +247,7 @@ void SceneViewportController::Update(
const bool usingViewMoveTool = IsViewMoveTool(sceneRuntime.GetToolMode());
if (!m_legacyGizmo.IsActive()) {
if (!m_transformGizmo.IsActive()) {
for (const auto& transition : inputFrame.pointerButtonTransitions) {
if (!transition.pressed ||
!ContainsPoint(slotLayout.inputRect, transition.screenPosition) ||
@@ -289,34 +289,34 @@ void SceneViewportController::Update(
!m_navigationState.lookDragging &&
!m_navigationState.panDragging;
if (!m_legacyGizmo.IsActive() &&
if (!m_transformGizmo.IsActive() &&
!toolOverlayInteractionActive &&
inputFrame.focused &&
!m_navigationState.lookDragging &&
!m_navigationState.panDragging) {
SceneToolMode shortcutMode = SceneToolMode::View;
if (TryResolveToolModeShortcut(inputFrame, shortcutMode)) {
ApplySceneToolMode(shortcutMode, sceneRuntime, m_legacyGizmo);
ApplySceneToolMode(shortcutMode, sceneRuntime, m_transformGizmo);
}
}
if (inputFrame.focused &&
!m_legacyGizmo.IsActive() &&
!m_transformGizmo.IsActive() &&
WasKeyPressed(inputFrame, KeyCode::F)) {
sceneRuntime.FocusSceneSelection();
}
m_legacyGizmo.Refresh(
m_transformGizmo.Refresh(
sceneRuntime,
slotLayout.inputRect,
pointerScreen,
viewportHoverEligible);
sceneRuntime.SetHoveredToolHandle(SceneToolHandle::None);
if (m_legacyGizmo.IsActive()) {
if (m_transformGizmo.IsActive()) {
if (WasKeyPressed(inputFrame, KeyCode::Escape)) {
m_legacyGizmo.CancelDrag(sceneRuntime);
m_legacyGizmo.Refresh(
m_transformGizmo.CancelDrag(sceneRuntime);
m_transformGizmo.Refresh(
sceneRuntime,
slotLayout.inputRect,
pointerScreen,
@@ -325,8 +325,8 @@ void SceneViewportController::Update(
}
if (!leftMouseDown) {
m_legacyGizmo.EndDrag(sceneRuntime);
m_legacyGizmo.Refresh(
m_transformGizmo.EndDrag(sceneRuntime);
m_transformGizmo.Refresh(
sceneRuntime,
slotLayout.inputRect,
pointerScreen,
@@ -334,8 +334,8 @@ void SceneViewportController::Update(
return;
}
m_legacyGizmo.UpdateDrag(sceneRuntime);
m_legacyGizmo.Refresh(
m_transformGizmo.UpdateDrag(sceneRuntime);
m_transformGizmo.Refresh(
sceneRuntime,
slotLayout.inputRect,
pointerScreen,
@@ -352,15 +352,15 @@ void SceneViewportController::Update(
continue;
}
m_legacyGizmo.Refresh(
m_transformGizmo.Refresh(
sceneRuntime,
slotLayout.inputRect,
transition.screenPosition,
true);
if (m_legacyGizmo.IsHoveringHandle() &&
m_legacyGizmo.TryBeginDrag(sceneRuntime)) {
if (m_transformGizmo.IsHoveringHandle() &&
m_transformGizmo.TryBeginDrag(sceneRuntime)) {
m_navigationState = {};
m_legacyGizmo.Refresh(
m_transformGizmo.Refresh(
sceneRuntime,
slotLayout.inputRect,
pointerScreen,
@@ -369,7 +369,7 @@ void SceneViewportController::Update(
}
const ViewportObjectIdPickResult pickResult =
viewportHostService.PickSceneViewportObject(
viewportObjectPicker.PickObject(
viewportFrame->viewportShellFrame.requestedViewportSize,
transition.localPointerPosition);
if (pickResult.status == ViewportObjectIdPickStatus::Success) {
@@ -380,7 +380,7 @@ void SceneViewportController::Update(
}
}
m_legacyGizmo.Refresh(
m_transformGizmo.Refresh(
sceneRuntime,
slotLayout.inputRect,
pointerScreen,
@@ -420,7 +420,7 @@ void SceneViewportController::Update(
if (HasCameraInput(input)) {
sceneRuntime.ApplySceneViewportCameraInput(input);
m_legacyGizmo.Refresh(
m_transformGizmo.Refresh(
sceneRuntime,
slotLayout.inputRect,
pointerScreen,
@@ -429,7 +429,7 @@ void SceneViewportController::Update(
}
void SceneViewportController::Append(::XCEngine::UI::UIDrawList& drawList) const {
AppendLegacySceneViewportGizmo(drawList, m_legacyGizmo.GetFrame());
AppendSceneViewportTransformGizmo(drawList, m_transformGizmo.GetFrame());
AppendSceneViewportToolOverlay(drawList, m_toolOverlay.GetFrame());
}