Refactor new editor host orchestration
This commit is contained in:
89
new_editor/app/Host/HostRuntimeState.h
Normal file
89
new_editor/app/Host/HostRuntimeState.h
Normal file
@@ -0,0 +1,89 @@
|
||||
#pragma once
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
namespace XCEngine::UI::Editor::Host {
|
||||
|
||||
class HostRuntimeState {
|
||||
public:
|
||||
void Reset() {
|
||||
m_windowDpi = 96u;
|
||||
m_inInteractiveResize = false;
|
||||
m_renderFrameQueued = false;
|
||||
m_hasPendingWindowResize = false;
|
||||
m_pendingWindowResizeWidth = 0u;
|
||||
m_pendingWindowResizeHeight = 0u;
|
||||
}
|
||||
|
||||
void SetWindowDpi(UINT dpi) {
|
||||
m_windowDpi = dpi == 0u ? 96u : dpi;
|
||||
}
|
||||
|
||||
UINT GetWindowDpi() const {
|
||||
return m_windowDpi;
|
||||
}
|
||||
|
||||
float GetDpiScale(float baseDpiScale) const {
|
||||
return baseDpiScale > 0.0f
|
||||
? static_cast<float>(m_windowDpi) / baseDpiScale
|
||||
: 1.0f;
|
||||
}
|
||||
|
||||
void BeginInteractiveResize() {
|
||||
m_inInteractiveResize = true;
|
||||
}
|
||||
|
||||
void EndInteractiveResize() {
|
||||
m_inInteractiveResize = false;
|
||||
}
|
||||
|
||||
bool IsInteractiveResize() const {
|
||||
return m_inInteractiveResize;
|
||||
}
|
||||
|
||||
void QueueWindowResize(UINT width, UINT height) {
|
||||
if (width == 0u || height == 0u) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_pendingWindowResizeWidth = width;
|
||||
m_pendingWindowResizeHeight = height;
|
||||
m_hasPendingWindowResize = true;
|
||||
}
|
||||
|
||||
bool ConsumePendingWindowResize(UINT& outWidth, UINT& outHeight) {
|
||||
outWidth = 0u;
|
||||
outHeight = 0u;
|
||||
if (!m_hasPendingWindowResize) {
|
||||
return false;
|
||||
}
|
||||
|
||||
m_hasPendingWindowResize = false;
|
||||
outWidth = m_pendingWindowResizeWidth;
|
||||
outHeight = m_pendingWindowResizeHeight;
|
||||
return outWidth > 0u && outHeight > 0u;
|
||||
}
|
||||
|
||||
bool TryQueueDeferredRender() {
|
||||
if (m_renderFrameQueued) {
|
||||
return false;
|
||||
}
|
||||
|
||||
m_renderFrameQueued = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
void ClearDeferredRenderRequest() {
|
||||
m_renderFrameQueued = false;
|
||||
}
|
||||
|
||||
private:
|
||||
UINT m_windowDpi = 96u;
|
||||
bool m_inInteractiveResize = false;
|
||||
bool m_renderFrameQueued = false;
|
||||
bool m_hasPendingWindowResize = false;
|
||||
UINT m_pendingWindowResizeWidth = 0u;
|
||||
UINT m_pendingWindowResizeHeight = 0u;
|
||||
};
|
||||
|
||||
} // namespace XCEngine::UI::Editor::Host
|
||||
Reference in New Issue
Block a user