refactor(new_editor): tighten app dependency boundaries

This commit is contained in:
2026-04-19 02:48:41 +08:00
parent 7429f22fb1
commit c59cd83c38
86 changed files with 1754 additions and 1077 deletions

View File

@@ -1,5 +1,6 @@
#include "Platform/Win32/EditorWindow.h"
#include "Platform/Win32/EditorWindowConstants.h"
#include "Platform/Win32/EditorWindowInternalState.h"
#include <algorithm>
@@ -10,13 +11,13 @@ namespace XCEngine::UI::Editor::App {
using namespace EditorWindowInternal;
bool EditorWindow::UpdateBorderlessWindowChromeHover(LPARAM lParam) {
if (m_chrome.runtime.GetHoveredBorderlessResizeEdge() !=
if (m_state->chrome.runtime.GetHoveredBorderlessResizeEdge() !=
Host::BorderlessWindowResizeEdge::None ||
m_chrome.runtime.IsBorderlessResizeActive()) {
m_state->chrome.runtime.IsBorderlessResizeActive()) {
const bool changed =
m_chrome.chromeState.hoveredTarget !=
m_state->chrome.chromeState.hoveredTarget !=
Host::BorderlessWindowChromeHitTarget::None;
m_chrome.chromeState.hoveredTarget =
m_state->chrome.chromeState.hoveredTarget =
Host::BorderlessWindowChromeHitTarget::None;
return changed;
}
@@ -29,18 +30,18 @@ bool EditorWindow::UpdateBorderlessWindowChromeHover(LPARAM lParam) {
hitTarget == Host::BorderlessWindowChromeHitTarget::CloseButton
? hitTarget
: Host::BorderlessWindowChromeHitTarget::None;
if (m_chrome.chromeState.hoveredTarget == buttonTarget) {
if (m_state->chrome.chromeState.hoveredTarget == buttonTarget) {
return false;
}
m_chrome.chromeState.hoveredTarget = buttonTarget;
m_state->chrome.chromeState.hoveredTarget = buttonTarget;
return true;
}
bool EditorWindow::HandleBorderlessWindowChromeButtonDown(LPARAM lParam) {
if (m_chrome.runtime.GetHoveredBorderlessResizeEdge() !=
if (m_state->chrome.runtime.GetHoveredBorderlessResizeEdge() !=
Host::BorderlessWindowResizeEdge::None ||
m_chrome.runtime.IsBorderlessResizeActive()) {
m_state->chrome.runtime.IsBorderlessResizeActive()) {
return false;
}
@@ -50,23 +51,23 @@ bool EditorWindow::HandleBorderlessWindowChromeButtonDown(LPARAM lParam) {
case Host::BorderlessWindowChromeHitTarget::MinimizeButton:
case Host::BorderlessWindowChromeHitTarget::MaximizeRestoreButton:
case Host::BorderlessWindowChromeHitTarget::CloseButton:
m_chrome.chromeState.pressedTarget = hitTarget;
m_state->chrome.chromeState.pressedTarget = hitTarget;
AcquirePointerCapture(EditorWindowPointerCaptureOwner::BorderlessChrome);
InvalidateHostWindow();
return true;
case Host::BorderlessWindowChromeHitTarget::DragRegion:
if (m_window.hwnd != nullptr) {
if (m_state->window.hwnd != nullptr) {
if (IsBorderlessWindowMaximized()) {
POINT screenPoint = {};
if (GetCursorPos(&screenPoint)) {
m_chrome.runtime.BeginBorderlessWindowDragRestore(screenPoint);
m_state->chrome.runtime.BeginBorderlessWindowDragRestore(screenPoint);
AcquirePointerCapture(EditorWindowPointerCaptureOwner::BorderlessChrome);
return true;
}
}
ForceReleasePointerCapture();
SendMessageW(m_window.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
SendMessageW(m_state->window.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
return true;
case Host::BorderlessWindowChromeHitTarget::None:
@@ -79,13 +80,13 @@ bool EditorWindow::HandleBorderlessWindowChromeButtonUp(
EditorContext& editorContext,
bool globalTabDragActive,
LPARAM lParam) {
if (m_chrome.runtime.IsBorderlessWindowDragRestoreArmed()) {
if (m_state->chrome.runtime.IsBorderlessWindowDragRestoreArmed()) {
ClearBorderlessWindowChromeDragRestoreState();
return true;
}
const Host::BorderlessWindowChromeHitTarget pressedTarget =
m_chrome.chromeState.pressedTarget;
m_state->chrome.chromeState.pressedTarget;
if (pressedTarget != Host::BorderlessWindowChromeHitTarget::MinimizeButton &&
pressedTarget != Host::BorderlessWindowChromeHitTarget::MaximizeRestoreButton &&
pressedTarget != Host::BorderlessWindowChromeHitTarget::CloseButton) {
@@ -94,7 +95,7 @@ bool EditorWindow::HandleBorderlessWindowChromeButtonUp(
const Host::BorderlessWindowChromeHitTarget releasedTarget =
HitTestBorderlessWindowChrome(lParam);
m_chrome.chromeState.pressedTarget =
m_state->chrome.chromeState.pressedTarget =
Host::BorderlessWindowChromeHitTarget::None;
ReleasePointerCapture(EditorWindowPointerCaptureOwner::BorderlessChrome);
InvalidateHostWindow();
@@ -112,7 +113,7 @@ bool EditorWindow::HandleBorderlessWindowChromeDoubleClick(
EditorContext& editorContext,
bool globalTabDragActive,
LPARAM lParam) {
if (m_chrome.runtime.IsBorderlessWindowDragRestoreArmed()) {
if (m_state->chrome.runtime.IsBorderlessWindowDragRestoreArmed()) {
ClearBorderlessWindowChromeDragRestoreState();
}
@@ -131,7 +132,8 @@ bool EditorWindow::HandleBorderlessWindowChromeDoubleClick(
bool EditorWindow::HandleBorderlessWindowChromeDragRestorePointerMove(
EditorContext& editorContext,
bool globalTabDragActive) {
if (!m_chrome.runtime.IsBorderlessWindowDragRestoreArmed() || m_window.hwnd == nullptr) {
if (!m_state->chrome.runtime.IsBorderlessWindowDragRestoreArmed() ||
m_state->window.hwnd == nullptr) {
return false;
}
@@ -141,7 +143,7 @@ bool EditorWindow::HandleBorderlessWindowChromeDragRestorePointerMove(
}
const POINT initialScreenPoint =
m_chrome.runtime.GetBorderlessWindowDragRestoreInitialScreenPoint();
m_state->chrome.runtime.GetBorderlessWindowDragRestoreInitialScreenPoint();
const int dragThresholdX = (std::max)(GetSystemMetrics(SM_CXDRAG), 1);
const int dragThresholdY = (std::max)(GetSystemMetrics(SM_CYDRAG), 1);
const LONG deltaX = currentScreenPoint.x - initialScreenPoint.x;
@@ -154,7 +156,7 @@ bool EditorWindow::HandleBorderlessWindowChromeDragRestorePointerMove(
RECT restoreRect = {};
RECT currentRect = {};
RECT workAreaRect = {};
if (!m_chrome.runtime.TryGetBorderlessWindowRestoreRect(restoreRect) ||
if (!m_state->chrome.runtime.TryGetBorderlessWindowRestoreRect(restoreRect) ||
!QueryCurrentWindowRect(currentRect) ||
!QueryBorderlessWindowWorkAreaRect(workAreaRect)) {
ClearBorderlessWindowChromeDragRestoreState();
@@ -193,34 +195,34 @@ bool EditorWindow::HandleBorderlessWindowChromeDragRestorePointerMove(
newTop + restoreHeight
};
m_chrome.runtime.SetBorderlessWindowMaximized(false);
m_state->chrome.runtime.SetBorderlessWindowMaximized(false);
ApplyPredictedWindowRectTransition(
editorContext,
globalTabDragActive,
targetRect);
ClearBorderlessWindowChromeDragRestoreState();
SendMessageW(m_window.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
SendMessageW(m_state->window.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
return true;
}
void EditorWindow::ClearBorderlessWindowChromeDragRestoreState() {
if (!m_chrome.runtime.IsBorderlessWindowDragRestoreArmed()) {
if (!m_state->chrome.runtime.IsBorderlessWindowDragRestoreArmed()) {
return;
}
m_chrome.runtime.EndBorderlessWindowDragRestore();
m_state->chrome.runtime.EndBorderlessWindowDragRestore();
ReleasePointerCapture(EditorWindowPointerCaptureOwner::BorderlessChrome);
}
void EditorWindow::ClearBorderlessWindowChromeState() {
if (m_chrome.chromeState.hoveredTarget ==
if (m_state->chrome.chromeState.hoveredTarget ==
Host::BorderlessWindowChromeHitTarget::None &&
m_chrome.chromeState.pressedTarget ==
m_state->chrome.chromeState.pressedTarget ==
Host::BorderlessWindowChromeHitTarget::None) {
return;
}
m_chrome.chromeState = {};
m_state->chrome.chromeState = {};
InvalidateHostWindow();
}
@@ -228,19 +230,19 @@ void EditorWindow::ExecuteBorderlessWindowChromeAction(
EditorContext& editorContext,
bool globalTabDragActive,
Host::BorderlessWindowChromeHitTarget target) {
if (m_window.hwnd == nullptr) {
if (m_state->window.hwnd == nullptr) {
return;
}
switch (target) {
case Host::BorderlessWindowChromeHitTarget::MinimizeButton:
ShowWindow(m_window.hwnd, SW_MINIMIZE);
ShowWindow(m_state->window.hwnd, SW_MINIMIZE);
break;
case Host::BorderlessWindowChromeHitTarget::MaximizeRestoreButton:
ToggleBorderlessWindowMaximizeRestore(editorContext, globalTabDragActive);
break;
case Host::BorderlessWindowChromeHitTarget::CloseButton:
PostMessageW(m_window.hwnd, WM_CLOSE, 0, 0);
PostMessageW(m_state->window.hwnd, WM_CLOSE, 0, 0);
break;
case Host::BorderlessWindowChromeHitTarget::DragRegion:
case Host::BorderlessWindowChromeHitTarget::None: