/ src / modules / Workspaces / workspaces-common / MonitorUtils.h
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  }