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

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