@@ -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
5859enum {
@@ -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 */
427429gboolean
428430msd_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
434438static 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