summaryrefslogtreecommitdiff
path: root/plugins/common/msd-osd-window.c
diff options
context:
space:
mode:
authorVictor Kareh <[email protected]>2018-02-12 13:13:28 -0500
committerGitHub <[email protected]>2018-02-12 13:13:28 -0500
commit705b5d1f887e3e280faa60368bb8e999a88715b6 (patch)
treed1ae0ad012fd58c5644bdcebb4ef2787b7cba35b /plugins/common/msd-osd-window.c
parenta7700a97fba68eadf3e0675944cf1ec980eac52a (diff)
downloadmate-settings-daemon-705b5d1f887e3e280faa60368bb8e999a88715b6.tar.bz2
mate-settings-daemon-705b5d1f887e3e280faa60368bb8e999a88715b6.tar.xz
Scale OSD size correctly on HiDPI displays (#212)
Also fix build warnings on xsettings
Diffstat (limited to 'plugins/common/msd-osd-window.c')
-rw-r--r--plugins/common/msd-osd-window.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/plugins/common/msd-osd-window.c b/plugins/common/msd-osd-window.c
index a3e76d0..e0f1ad7 100644
--- a/plugins/common/msd-osd-window.c
+++ b/plugins/common/msd-osd-window.c
@@ -53,6 +53,7 @@ struct MsdOsdWindowPrivate
guint hide_timeout_id;
guint fade_timeout_id;
double fade_out_alpha;
+ gint scale_factor;
};
enum {
@@ -422,13 +423,16 @@ msd_osd_window_is_composited (MsdOsdWindow *window)
* @window: a #MsdOsdWindow
*
* Return value: TRUE if the @window's idea of being composited matches whether
- * its current screen is actually composited.
+ * its current screen is actually composited, and whether the scale factor has
+ * not changed since last draw.
*/
gboolean
msd_osd_window_is_valid (MsdOsdWindow *window)
{
GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (window));
- return gdk_screen_is_composited (screen) == window->priv->is_composited;
+ gint scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (window));
+ return gdk_screen_is_composited (screen) == window->priv->is_composited
+ && scale_factor == window->priv->scale_factor;
}
static void
@@ -441,6 +445,7 @@ msd_osd_window_init (MsdOsdWindow *window)
screen = gtk_widget_get_screen (GTK_WIDGET (window));
window->priv->is_composited = gdk_screen_is_composited (screen);
+ window->priv->scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (window));
if (window->priv->is_composited) {
gdouble scalew, scaleh, scale;
@@ -453,8 +458,8 @@ msd_osd_window_init (MsdOsdWindow *window)
gtk_style_context_add_class (style, "window-frame");
/* assume 130x130 on a 640x480 display and scale from there */
- scalew = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / 640.0;
- scaleh = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / 480.0;
+ scalew = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / (640.0 * window->priv->scale_factor);
+ scaleh = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / (480.0 * window->priv->scale_factor);
scale = MIN (scalew, scaleh);
size = 130 * MAX (1, scale);
@@ -462,7 +467,7 @@ msd_osd_window_init (MsdOsdWindow *window)
window->priv->fade_out_alpha = 1.0;
} else {
- gtk_container_set_border_width (GTK_CONTAINER (window), 12);
+ gtk_container_set_border_width (GTK_CONTAINER (window), 12);
}
}