From f27dfb68096caf82840993fef0f23a76fd0ac084 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Mon, 16 Dec 2013 00:06:13 -0700 Subject: [PATCH] add platform functions for querying monitor information --- obs/platform-nix.cpp | 6 ++++++ obs/platform-osx.cpp | 6 ++++++ obs/platform-windows.cpp | 20 ++++++++++++++++++++ obs/platform.hpp | 9 +++++++++ 4 files changed, 41 insertions(+) diff --git a/obs/platform-nix.cpp b/obs/platform-nix.cpp index 88dd77cbd..20bbc94e4 100644 --- a/obs/platform-nix.cpp +++ b/obs/platform-nix.cpp @@ -23,3 +23,9 @@ bool GetDataFilePath(const char *data, string &output) // TODO return false; } + +void GetMonitors(vector &monitors) +{ + monitors.clear(); + // TODO +} diff --git a/obs/platform-osx.cpp b/obs/platform-osx.cpp index ef425f90d..9153b45d7 100644 --- a/obs/platform-osx.cpp +++ b/obs/platform-osx.cpp @@ -27,3 +27,9 @@ bool GetDataFilePath(const char *data, string &output) output = str.str(); return !access(output.c_str(), R_OK); } + +void GetMonitors(vector &monitors) +{ + monitors.clear(); + // TODO +} diff --git a/obs/platform-windows.cpp b/obs/platform-windows.cpp index 85f2a3854..e5af5ae42 100644 --- a/obs/platform-windows.cpp +++ b/obs/platform-windows.cpp @@ -30,3 +30,23 @@ bool GetDataFilePath(const char *data, string &output) output = str.str(); return os_file_exists(output.c_str()); } + +static BOOL CALLBACK OBSMonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, + LPRECT rect, LPARAM param) +{ + vector &monitors = *(vector *)param; + + MonitorInfo monitor; + monitor.x = rect->left; + monitor.y = rect->top; + monitor.cx = rect->right - rect->left; + monitor.cy = rect->bottom - rect->top; + monitors.push_back(monitor); + return true; +} + +void GetMonitors(vector &monitors) +{ + monitors.clear(); + EnumDisplayMonitors(NULL, NULL, OBSMonitorEnumProc, (LPARAM)&monitors); +} diff --git a/obs/platform.hpp b/obs/platform.hpp index 478ca9dc7..050c3aeb9 100644 --- a/obs/platform.hpp +++ b/obs/platform.hpp @@ -17,8 +17,17 @@ #pragma once +#include + #include +#include using namespace std; +struct MonitorInfo { + int32_t x, y; + uint32_t cx, cy; +}; + /* Gets the path of obs-studio specific data files (such as locale) */ bool GetDataFilePath(const char *data, string &path); +void GetMonitors(vector &monitors);