MonitorUtils.h
1 #pragma once 2 3 #include <WorkspacesLib/WorkspacesData.h> 4 #include <common/Display/DisplayUtils.h> 5 6 namespace MonitorUtils 7 { 8 inline std::vector<WorkspacesData::WorkspacesProject::Monitor> IdentifyMonitors() noexcept 9 { 10 auto displaysResult = DisplayUtils::GetDisplays(); 11 12 int retryCounter = 0; 13 while (!displaysResult.first && retryCounter < 100) 14 { 15 std::this_thread::sleep_for(std::chrono::milliseconds(30)); 16 displaysResult = DisplayUtils::GetDisplays(); 17 retryCounter++; 18 } 19 20 std::vector<WorkspacesData::WorkspacesProject::Monitor> result{}; 21 for (const auto& data : displaysResult.second) 22 { 23 result.emplace_back(WorkspacesData::WorkspacesProject::Monitor{ 24 .monitor = data.monitor, 25 .id = data.id, 26 .instanceId = data.instanceId, 27 .number = data.number, 28 .dpi = data.dpi, 29 .monitorRectDpiAware = WorkspacesData::WorkspacesProject::Monitor::MonitorRect{ 30 .top = data.monitorRectDpiAware.top, 31 .left = data.monitorRectDpiAware.left, 32 .width = data.monitorRectDpiAware.right - data.monitorRectDpiAware.left, 33 .height = data.monitorRectDpiAware.bottom - data.monitorRectDpiAware.top, 34 }, 35 .monitorRectDpiUnaware = WorkspacesData::WorkspacesProject::Monitor::MonitorRect{ 36 .top = data.monitorRectDpiUnaware.top, 37 .left = data.monitorRectDpiUnaware.left, 38 .width = data.monitorRectDpiUnaware.right - data.monitorRectDpiUnaware.left, 39 .height = data.monitorRectDpiUnaware.bottom - data.monitorRectDpiUnaware.top, 40 }, 41 }); 42 } 43 44 return result; 45 } 46 }