Refactor new editor state ownership model

This commit is contained in:
2026-04-19 04:36:52 +08:00
parent 48bfde28e3
commit f45b34a03a
46 changed files with 1979 additions and 217 deletions

View File

@@ -2,6 +2,7 @@
#include "Rendering/Viewport/ViewportHostService.h"
#include "Scene/EditorSceneRuntime.h"
#include "State/EditorCommandFocusService.h"
#include "Composition/EditorPanelIds.h"
#include <XCEditor/Viewport/UIEditorViewportInputBridge.h>
@@ -134,6 +135,11 @@ void SceneViewportController::ResetInteractionState() {
m_legacyGizmo.ResetVisualState();
}
void SceneViewportController::SetCommandFocusService(
EditorCommandFocusService* commandFocusService) {
m_commandFocusService = commandFocusService;
}
void SceneViewportController::Update(
EditorSceneRuntime& sceneRuntime,
ViewportHostService& viewportHostService,
@@ -168,6 +174,18 @@ void SceneViewportController::Update(
? inputState.lastScreenPointerPosition
: inputFrame.screenPointerPosition;
if (m_commandFocusService != nullptr &&
(inputFrame.focused ||
std::any_of(
inputFrame.pointerButtonTransitions.begin(),
inputFrame.pointerButtonTransitions.end(),
[&](const auto& transition) {
return transition.pressed &&
ContainsPoint(slotLayout.inputRect, transition.screenPosition);
}))) {
m_commandFocusService->ClaimFocus(EditorActionRoute::Scene);
}
if (inputFrame.focusLost) {
m_navigationState = {};
m_hoveredToolOverlayIndex = kSceneViewportToolOverlayInvalidIndex;