@@ -53,6 +53,7 @@ struct MsdOsdWindowPrivate
53
53
guint hide_timeout_id ;
54
54
guint fade_timeout_id ;
55
55
double fade_out_alpha ;
56
+ gint scale_factor ;
56
57
};
57
58
58
59
enum {
@@ -422,13 +423,16 @@ msd_osd_window_is_composited (MsdOsdWindow *window)
422
423
* @window: a #MsdOsdWindow
423
424
*
424
425
* 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.
426
428
*/
427
429
gboolean
428
430
msd_osd_window_is_valid (MsdOsdWindow * window )
429
431
{
430
432
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 ;
432
436
}
433
437
434
438
static void
@@ -441,6 +445,7 @@ msd_osd_window_init (MsdOsdWindow *window)
441
445
screen = gtk_widget_get_screen (GTK_WIDGET (window ));
442
446
443
447
window -> priv -> is_composited = gdk_screen_is_composited (screen );
448
+ window -> priv -> scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (window ));
444
449
445
450
if (window -> priv -> is_composited ) {
446
451
gdouble scalew , scaleh , scale ;
@@ -453,16 +458,16 @@ msd_osd_window_init (MsdOsdWindow *window)
453
458
gtk_style_context_add_class (style , "window-frame" );
454
459
455
460
/* 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 ) ;
458
463
scale = MIN (scalew , scaleh );
459
464
size = 130 * MAX (1 , scale );
460
465
461
466
gtk_window_set_default_size (GTK_WINDOW (window ), size , size );
462
467
463
468
window -> priv -> fade_out_alpha = 1.0 ;
464
469
} else {
465
- gtk_container_set_border_width (GTK_CONTAINER (window ), 12 );
470
+ gtk_container_set_border_width (GTK_CONTAINER (window ), 12 );
466
471
}
467
472
}
468
473
0 commit comments