3#include "../Logging/Logger.h"
6#include "XineramaModule.h"
13 std::vector<Cogs::Monitor> monitors;
16void Cogs::Monitor::enumerate() {
19 X11Module& x11 = X11Module::instance();
20 ::Display* display = x11.XOpenDisplay(
nullptr);
22 XineramaScreenInfo* screens = XineramaModule::instance().XineramaQueryScreens(display, &screenCount);
24 LOG_DEBUG(logger,
"Enumerating monitors...");
26 monitors.resize(screenCount);
27 for (
int idx = 0; idx < screenCount; ++idx) {
28 const XineramaScreenInfo* screen = screens + idx;
29 Monitor& monitor = monitors[idx];
31 monitor.identifier =
reinterpret_cast<void*
>(screen->screen_number);
32 monitor.name = std::to_string(screen->screen_number);
33 monitor.position = glm::ivec2(screen->x_org, screen->y_org);
34 monitor.size = glm::ivec2(screen->width, screen->height);
36 LOG_DEBUG(logger,
"Monitor %d: %d,%d %dx%d.", screen->screen_number, screen->x_org, screen->y_org, screen->width, screen->height);
39 if ((screen->x_org == 0) && (screen->y_org == 0)) {
40 monitor.primary =
true;
44 x11.XCloseDisplay(display);
Log implementation class.
constexpr Log getLogger(const char(&name)[LEN]) noexcept