mirror of https://github.com/bsnes-emu/bsnes
47 lines
1.5 KiB
C++
Executable File
47 lines
1.5 KiB
C++
Executable File
#if defined(Hiro_Monitor)
|
|
|
|
namespace hiro {
|
|
|
|
auto pMonitor::count() -> uint {
|
|
return gdk_display_get_n_monitors(gdk_display_get_default());
|
|
}
|
|
|
|
auto pMonitor::dpi(uint monitor) -> Position {
|
|
auto gdkMonitor = gdk_display_get_monitor(gdk_display_get_default(), monitor);
|
|
auto monitorGeometry = geometry(monitor);
|
|
auto scaleFactor = gdk_monitor_get_scale_factor(gdkMonitor);
|
|
return {
|
|
round(monitorGeometry.width() * scaleFactor / (gdk_monitor_get_width_mm(gdkMonitor) / 25.4)),
|
|
round(monitorGeometry.height() * scaleFactor / (gdk_monitor_get_height_mm(gdkMonitor) / 25.4))
|
|
};
|
|
}
|
|
|
|
auto pMonitor::geometry(uint monitor) -> Geometry {
|
|
GdkRectangle rectangle = {};
|
|
auto gdkMonitor = gdk_display_get_monitor(gdk_display_get_default(), monitor);
|
|
gdk_monitor_get_geometry(gdkMonitor, &rectangle);
|
|
return {rectangle.x, rectangle.y, rectangle.width, rectangle.height};
|
|
}
|
|
|
|
auto pMonitor::primary() -> uint {
|
|
auto display = gdk_display_get_default();
|
|
auto primary = gdk_display_get_primary_monitor(display);
|
|
|
|
// gdk_display_get_primary_monitor() returns a &GdkMonitor, but most APIs
|
|
// want an index number.
|
|
for (auto i = 1; i < gdk_display_get_n_monitors(display); i++ )
|
|
if (primary == gdk_display_get_monitor(display, i)) return i;
|
|
return 0;
|
|
}
|
|
|
|
auto pMonitor::workspace(uint monitor) -> Geometry {
|
|
auto gdkMonitor = gdk_display_get_monitor(gdk_display_get_default(), monitor);
|
|
GdkRectangle rectangle = {};
|
|
gdk_monitor_get_workarea(gdkMonitor, &rectangle);
|
|
return {rectangle.x, rectangle.y, rectangle.width, rectangle.height};
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|