86 lines
2.6 KiB
C++
86 lines
2.6 KiB
C++
#pragma once
|
|
|
|
#ifndef NOMINMAX
|
|
#define NOMINMAX
|
|
#endif
|
|
|
|
#include <XCEngine/UI/DrawData.h>
|
|
|
|
#include <windows.h>
|
|
|
|
namespace XCEngine::UI::Editor::Host {
|
|
|
|
enum class BorderlessWindowChromeHitTarget : std::uint8_t {
|
|
None = 0,
|
|
DragRegion,
|
|
MinimizeButton,
|
|
MaximizeRestoreButton,
|
|
CloseButton
|
|
};
|
|
|
|
struct BorderlessWindowChromeMetrics {
|
|
float buttonWidth = 46.0f;
|
|
float buttonInsetX = 0.0f;
|
|
float dragPaddingLeft = 6.0f;
|
|
float dragPaddingRight = 6.0f;
|
|
float iconThickness = 1.0f;
|
|
};
|
|
|
|
struct BorderlessWindowChromePalette {
|
|
::XCEngine::UI::UIColor buttonHoverColor =
|
|
::XCEngine::UI::UIColor(0.88f, 0.88f, 0.88f, 1.0f);
|
|
::XCEngine::UI::UIColor buttonPressedColor =
|
|
::XCEngine::UI::UIColor(0.78f, 0.78f, 0.78f, 1.0f);
|
|
::XCEngine::UI::UIColor closeButtonHoverColor =
|
|
::XCEngine::UI::UIColor(0.91f, 0.31f, 0.24f, 1.0f);
|
|
::XCEngine::UI::UIColor closeButtonPressedColor =
|
|
::XCEngine::UI::UIColor(0.78f, 0.22f, 0.18f, 1.0f);
|
|
::XCEngine::UI::UIColor iconColor =
|
|
::XCEngine::UI::UIColor(0.10f, 0.10f, 0.10f, 1.0f);
|
|
::XCEngine::UI::UIColor closeIconHoverColor =
|
|
::XCEngine::UI::UIColor(1.0f, 1.0f, 1.0f, 1.0f);
|
|
};
|
|
|
|
struct BorderlessWindowChromeState {
|
|
BorderlessWindowChromeHitTarget hoveredTarget = BorderlessWindowChromeHitTarget::None;
|
|
BorderlessWindowChromeHitTarget pressedTarget = BorderlessWindowChromeHitTarget::None;
|
|
};
|
|
|
|
struct BorderlessWindowChromeLayout {
|
|
::XCEngine::UI::UIRect titleBarRect = {};
|
|
::XCEngine::UI::UIRect dragRect = {};
|
|
::XCEngine::UI::UIRect minimizeButtonRect = {};
|
|
::XCEngine::UI::UIRect maximizeRestoreButtonRect = {};
|
|
::XCEngine::UI::UIRect closeButtonRect = {};
|
|
};
|
|
|
|
BorderlessWindowChromeLayout BuildBorderlessWindowChromeLayout(
|
|
const ::XCEngine::UI::UIRect& titleBarRect,
|
|
float leadingOccupiedRight,
|
|
const BorderlessWindowChromeMetrics& metrics = {});
|
|
|
|
BorderlessWindowChromeHitTarget HitTestBorderlessWindowChrome(
|
|
const BorderlessWindowChromeLayout& layout,
|
|
const ::XCEngine::UI::UIPoint& point);
|
|
|
|
void AppendBorderlessWindowChrome(
|
|
::XCEngine::UI::UIDrawList& drawList,
|
|
const BorderlessWindowChromeLayout& layout,
|
|
const BorderlessWindowChromeState& state,
|
|
bool maximized,
|
|
const BorderlessWindowChromePalette& palette = {},
|
|
const BorderlessWindowChromeMetrics& metrics = {});
|
|
|
|
void RefreshBorderlessWindowDwmDecorations(HWND hwnd);
|
|
void EnableBorderlessWindowShadow(HWND hwnd);
|
|
|
|
bool HandleBorderlessWindowGetMinMaxInfo(HWND hwnd, LPARAM lParam);
|
|
|
|
LRESULT HandleBorderlessWindowNcCalcSize(
|
|
HWND hwnd,
|
|
WPARAM wParam,
|
|
LPARAM lParam,
|
|
UINT dpi);
|
|
|
|
} // namespace XCEngine::UI::Editor::Host
|