PowerToys/src/modules/fancyzones/lib/ZoneSet.h
yuyoyuppe f3e25ae3e6
Fix for different per-monitor scaling (#657)
* Use DPIAware::DEFAULT_DPI

* Make runner DPI-unaware, since it doesn't need to use a Per Monitor V2 DPI.

* Programmatically enable "Per Monitor V2 DPI" for the runner proccess and use a separate DPI-unaware thread for the corresponding API calls

* Increase PCH memory limit for settings project

* Address review issues

* Draw zoneWindows properly scaled
2019-11-07 21:56:32 +03:00

81 lines
2.4 KiB
C++

#pragma once
#include "Zone.h"
enum class ZoneSetLayout
{
Grid,
Row,
Focus,
Custom
};
interface __declspec(uuid("{E4839EB7-669D-49CF-84A9-71A2DFD851A3}")) IZoneSet : public IUnknown
{
IFACEMETHOD_(GUID, Id)() = 0;
IFACEMETHOD_(WORD, LayoutId)() = 0;
IFACEMETHOD(AddZone)(winrt::com_ptr<IZone> zone, bool front) = 0;
IFACEMETHOD(RemoveZone)(winrt::com_ptr<IZone> zone) = 0;
IFACEMETHOD_(winrt::com_ptr<IZone>, ZoneFromPoint)(POINT pt) = 0;
IFACEMETHOD_(winrt::com_ptr<IZone>, ZoneFromWindow)(HWND window) = 0;
IFACEMETHOD_(int, GetZoneIndexFromWindow)(HWND window) = 0;
IFACEMETHOD_(std::vector<winrt::com_ptr<IZone>>, GetZones)() = 0;
IFACEMETHOD_(ZoneSetLayout, GetLayout)() = 0;
IFACEMETHOD_(int, GetInnerPadding)() = 0;
IFACEMETHOD_(winrt::com_ptr<IZoneSet>, MakeCustomClone)() = 0;
IFACEMETHOD_(void, Save)() = 0;
IFACEMETHOD_(void, MoveZoneToFront)(winrt::com_ptr<IZone> zone) = 0;
IFACEMETHOD_(void, MoveZoneToBack)(winrt::com_ptr<IZone> zone) = 0;
IFACEMETHOD_(void, MoveWindowIntoZoneByIndex)(HWND window, HWND zoneWindow, int index) = 0;
IFACEMETHOD_(void, MoveWindowIntoZoneByDirection)(HWND window, HWND zoneWindow, DWORD vkCode) = 0;
IFACEMETHOD_(void, MoveSizeEnd)(HWND window, HWND zoneWindow, POINT ptClient) = 0;
};
#define VERSION_PERSISTEDDATA 0x0000F00D
struct ZoneSetPersistedData
{
static constexpr inline size_t MAX_ZONES = 40;
DWORD Version{VERSION_PERSISTEDDATA};
WORD LayoutId{};
DWORD ZoneCount{};
ZoneSetLayout Layout{};
DWORD PaddingInner{};
DWORD PaddingOuter{};
RECT Zones[MAX_ZONES]{};
};
struct ZoneSetConfig
{
ZoneSetConfig(
GUID id,
WORD layoutId,
HMONITOR monitor,
PCWSTR resolutionKey,
ZoneSetLayout layout,
int zoneCount,
int paddingOuter,
int paddingInner) noexcept :
Id(id),
LayoutId(layoutId),
Monitor(monitor),
ResolutionKey(resolutionKey),
Layout(layout),
ZoneCount(zoneCount),
PaddingOuter(paddingOuter),
PaddingInner(paddingInner)
{
}
GUID Id{};
WORD LayoutId{};
HMONITOR Monitor{};
PCWSTR ResolutionKey{};
ZoneSetLayout Layout{};
int ZoneCount{};
int PaddingOuter{};
int PaddingInner{};
bool IsCustom{};
};
winrt::com_ptr<IZoneSet> MakeZoneSet(ZoneSetConfig const& config) noexcept;