refactor(new_editor): tighten app dependency boundaries
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user