AdaptiveBrightness/AdaptiveBrightness/monitor.hpp

72 lines
1.4 KiB
C++

#pragma once
#ifdef _MSC_VER
#include <optional>
#include <string>
#include <utility>
#include <vector>
#include <physicalmonitorenumerationapi.h>
#include <windows.h>
namespace detail {
extern BOOL enumMonitorsCallback(HMONITOR, HDC, LPRECT, LPARAM);
} // namespace detail
class Monitor {
public:
Monitor() = delete;
~Monitor();
bool setBrightness(float percentage);
float getBrightness();
operator bool() const;
private:
struct PhysicalMonitor {
PhysicalMonitor(HANDLE handle, const WCHAR* name) : handle(handle), name(name) {}
HANDLE handle;
std::wstring name;
};
friend BOOL detail::enumMonitorsCallback(HMONITOR, HDC, LPRECT, LPARAM);
Monitor(HMONITOR hMonitor, PHYSICAL_MONITOR physicalMonitor);
bool hasBrightnessCapability() const;
template<typename InType, typename OutType>
auto map(InType value, InType inMin, InType inMax, OutType outMin, OutType outMax)
{
return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;
}
const HMONITOR m_hMonitor;
const PhysicalMonitor m_physicalMonitor;
std::optional<std::pair<DWORD, DWORD>> m_brightnessRange;
};
#endif
#if defined(__clang__) || defined(__GNUC__)
class Monitor {
public:
Monitor();
bool setBrightness(float);
float getBrightness();
operator bool() const;
private:
};
#endif