Skip to content

Commit 9929aea

Browse files
authored
Scale OSD size correctly on HiDPI displays (#246)
1 parent 8ea1469 commit 9929aea

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/msd-osd-window.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ struct MsdOsdWindowPrivate
5353
guint hide_timeout_id;
5454
guint fade_timeout_id;
5555
double fade_out_alpha;
56+
gint scale_factor;
5657
};
5758

5859
enum {
@@ -422,13 +423,16 @@ msd_osd_window_is_composited (MsdOsdWindow *window)
422423
* @window: a #MsdOsdWindow
423424
*
424425
* Return value: TRUE if the @window's idea of being composited matches whether
425-
* its current screen is actually composited.
426+
* its current screen is actually composited and whether the scale factor has
427+
* not changed since last draw.
426428
*/
427429
gboolean
428430
msd_osd_window_is_valid (MsdOsdWindow *window)
429431
{
430432
GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (window));
431-
return gdk_screen_is_composited (screen) == window->priv->is_composited;
433+
gint scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (window));
434+
return gdk_screen_is_composited (screen) == window->priv->is_composited
435+
&& scale_factor == window->priv->scale_factor;
432436
}
433437

434438
static void
@@ -441,6 +445,7 @@ msd_osd_window_init (MsdOsdWindow *window)
441445
screen = gtk_widget_get_screen (GTK_WIDGET (window));
442446

443447
window->priv->is_composited = gdk_screen_is_composited (screen);
448+
window->priv->scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (window));
444449

445450
if (window->priv->is_composited) {
446451
gdouble scalew, scaleh, scale;
@@ -453,16 +458,16 @@ msd_osd_window_init (MsdOsdWindow *window)
453458
gtk_style_context_add_class (style, "window-frame");
454459

455460
/* assume 130x130 on a 640x480 display and scale from there */
456-
scalew = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / 640.0;
457-
scaleh = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / 480.0;
461+
scalew = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / (640.0 * window->priv->scale_factor);
462+
scaleh = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / (480.0 * window->priv->scale_factor);
458463
scale = MIN (scalew, scaleh);
459464
size = 130 * MAX (1, scale);
460465

461466
gtk_window_set_default_size (GTK_WINDOW (window), size, size);
462467

463468
window->priv->fade_out_alpha = 1.0;
464469
} else {
465-
gtk_container_set_border_width (GTK_CONTAINER (window), 12);
470+
gtk_container_set_border_width (GTK_CONTAINER (window), 12);
466471
}
467472
}
468473

0 commit comments

Comments
 (0)