90 lines
2.1 KiB
C++
90 lines
2.1 KiB
C++
#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
|