summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/xfwm-common.c47
-rw-r--r--common/xfwm-common.h3
2 files changed, 35 insertions, 15 deletions
diff --git a/common/xfwm-common.c b/common/xfwm-common.c
index 740451a96..f187e4277 100644
--- a/common/xfwm-common.c
+++ b/common/xfwm-common.c
@@ -75,52 +75,71 @@ xfwm_get_screen_dimensions (gint *width, gint *height)
+static void
+xfwm_geometry_convert_to_device_pixels (GdkRectangle *geometry,
+ gint scale)
+{
+ if (geometry != NULL)
+ {
+ geometry->x *= scale;
+ geometry->y *= scale;
+ geometry->width *= scale;
+ geometry->height *= scale;
+ }
+}
+
+
+
void
xfwm_get_monitor_geometry (GdkScreen *screen,
gint monitor_num,
GdkRectangle *geometry,
gboolean scaled)
{
+ gint scale;
#if GTK_CHECK_VERSION(3, 22, 0)
GdkDisplay *display;
GdkMonitor *monitor;
display = gdk_screen_get_display (screen);
monitor = gdk_display_get_monitor (display, monitor_num);
+ scale = gdk_monitor_get_scale_factor (monitor);
gdk_monitor_get_geometry (monitor, geometry);
-
- /* Convert to device pixels */
- if (scaled)
- {
- int scale = gdk_monitor_get_scale_factor (monitor);
- geometry->x *= scale;
- geometry->y *= scale;
- geometry->width *= scale;
- geometry->height *= scale;
- }
#else
+ scale = gdk_screen_get_monitor_scale_factor (screen, monitor_num);
gdk_screen_get_monitor_geometry (screen, monitor_num, geometry);
#endif
+
+ if (scaled && scale != 1)
+ xfwm_geometry_convert_to_device_pixels (geometry, scale);
}
void
xfwm_get_primary_monitor_geometry (GdkScreen *screen,
- GdkRectangle *geometry)
+ GdkRectangle *geometry,
+ gboolean scaled)
{
+ gint scale;
#if GTK_CHECK_VERSION(3, 22, 0)
GdkDisplay *display;
GdkMonitor *monitor;
display = gdk_screen_get_display (screen);
monitor = gdk_display_get_primary_monitor (display);
+ scale = gdk_monitor_get_scale_factor (monitor);
gdk_monitor_get_geometry (monitor, geometry);
#else
- gdk_screen_get_monitor_geometry (screen,
- gdk_screen_get_primary_monitor (screen),
- geometry);
+ gint monitor_num;
+
+ monitor_num = gdk_screen_get_primary_monitor (screen);
+ scale = gdk_screen_get_monitor_scale_factor (screen, monitor_num);
+ gdk_screen_get_monitor_geometry (screen, monitor_num, geometry);
#endif
+
+ if (scaled && scale != 1)
+ xfwm_geometry_convert_to_device_pixels (geometry, scale);
}
diff --git a/common/xfwm-common.h b/common/xfwm-common.h
index 667caff3a..693ad8476 100644
--- a/common/xfwm-common.h
+++ b/common/xfwm-common.h
@@ -35,7 +35,8 @@ void xfwm_get_monitor_geometry (GdkScreen *screen,
gboolean scaled);
void xfwm_get_primary_monitor_geometry (GdkScreen *screen,
- GdkRectangle *geometry);
+ GdkRectangle *geometry,
+ gboolean scaled);
gint xfwm_get_primary_refresh_rate (GdkScreen *screen);