Files
XCEngine/new_editor/app/Host/HostRuntimeState.h

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