@@ -13,10 +13,10 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
1313 private const int MIN_OFFSET = 64 ;
1414 private const double GESTURE_STEP = 0.1 ;
1515
16+ public Clutter . Actor ? actor { get { return this ; } }
1617 public WindowManager wm { get ; construct; }
1718 public bool opened { get ; private set ; default = false ; }
18-
19- public Clutter . Actor ? actor { get { return this ; } }
19+ public float monitor_scale { get ; private set ; }
2020
2121 private GestureController gesture_controller;
2222 private int modifier_mask;
@@ -50,8 +50,6 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
5050
5151 private double previous_progress = 0d ;
5252
53- private float scaling_factor = 1.0f ;
54-
5553 public WindowSwitcher (WindowManager wm ) {
5654 Object (wm: wm);
5755 }
@@ -95,37 +93,39 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
9593 orientation = VERTICAL
9694 };
9795
98- shadow_effect = new ShadowEffect (" window-switcher" , scaling_factor) {
96+ unowned var display = wm. get_display ();
97+ monitor_scale = display. get_monitor_scale (display. get_primary_monitor ());
98+ notify[" monitor-scale" ]. connect (scale);
99+
100+ scale ();
101+
102+ shadow_effect = new ShadowEffect (" window-switcher" , monitor_scale) {
99103 border_radius = 10 ,
100104 shadow_opacity = 100
101105 };
106+ bind_property (" monitor-scale" , shadow_effect, " monitor-scale" );
102107 add_effect (shadow_effect);
103108
104109
105- blur_effect = new BackgroundBlurEffect (40 , 9 , scaling_factor);
110+ blur_effect = new BackgroundBlurEffect (40 , 9 , monitor_scale);
111+ bind_property (" monitor-scale" , blur_effect, " monitor-scale" );
106112 add_effect (blur_effect);
107113
108- scale ();
109-
110114 container. button_release_event. connect (container_mouse_release);
111115
112116 // Redraw the components if the colour scheme changes.
113117 style_manager. notify[" prefers-color-scheme" ]. connect (content. invalidate);
114118
115- unowned var monitor_manager = wm. get_display (). get_context (). get_backend (). get_monitor_manager ();
116- monitor_manager. monitors_changed. connect (scale);
119+ unowned var monitor_manager = display. get_context (). get_backend (). get_monitor_manager ();
120+ monitor_manager. monitors_changed. connect (() = > {
121+ monitor_scale = display. get_monitor_scale (display. get_primary_monitor ());
122+ });
117123
118124 notify[" opacity" ]. connect (() = > visible = opacity != 0 );
119125 }
120126
121127 private void scale () {
122- unowned var display = wm. get_display ();
123- scaling_factor = display. get_monitor_scale (display. get_current_monitor ());
124-
125- shadow_effect. monitor_scale = scaling_factor;
126- blur_effect. monitor_scale = scaling_factor;
127-
128- var margin = Utils . scale_to_int (WRAPPER_PADDING , scaling_factor);
128+ var margin = Utils . scale_to_int (WRAPPER_PADDING , monitor_scale);
129129
130130 container. margin_left = margin;
131131 container. margin_right = margin;
@@ -150,7 +150,7 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
150150 container. get_preferred_size (null , null , out container_nat_width, null );
151151
152152 var max_width = float . min (
153- geom. width - Utils . scale_to_int (MIN_OFFSET * 2 , scaling_factor ), // Don't overflow the monitor
153+ geom. width - Utils . scale_to_int (MIN_OFFSET * 2 , monitor_scale ), // Don't overflow the monitor
154154 container_nat_width // Ellipsize the label if it's longer than the icons
155155 );
156156
@@ -184,12 +184,12 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
184184
185185 ctx. set_operator (Cairo . Operator . SOURCE );
186186
187- var stroke_width = Utils . scale_to_int (1 , scaling_factor );
187+ var stroke_width = Utils . scale_to_int (1 , monitor_scale );
188188 Drawing . Utilities . cairo_rounded_rectangle (
189189 ctx,
190190 stroke_width / 2.0 , stroke_width / 2.0 ,
191191 width - stroke_width, height - stroke_width,
192- Utils . scale_to_int (9 , scaling_factor )
192+ Utils . scale_to_int (9 , monitor_scale )
193193 );
194194
195195 ctx. set_source_rgba (
@@ -214,7 +214,7 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
214214 ctx, stroke_width * 1.5 , stroke_width * 1.5 ,
215215 width - stroke_width * 3 ,
216216 height - stroke_width * 3 ,
217- Utils . scale_to_int (8 , scaling_factor )
217+ Utils . scale_to_int (8 , monitor_scale )
218218 );
219219
220220 ctx. set_line_width (stroke_width);
@@ -341,7 +341,7 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
341341
342342 unowned var current_window = display. get_tab_current (Meta . TabList . NORMAL , workspace);
343343 foreach (unowned var window in windows) {
344- var icon = new WindowSwitcherIcon (window, scaling_factor );
344+ var icon = new WindowSwitcherIcon (window, monitor_scale );
345345 bind_property (" monitor-scale" , icon, " monitor-scale" );
346346 add_icon (icon);
347347
@@ -371,7 +371,7 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
371371 var app = window_tracker. get_app_for_window (current_window);
372372 foreach (unowned var window in windows) {
373373 if (window_tracker. get_app_for_window (window) == app) {
374- var icon = new WindowSwitcherIcon (window, scaling_factor );
374+ var icon = new WindowSwitcherIcon (window, monitor_scale );
375375 bind_property (" monitor-scale" , icon, " monitor-scale" );
376376 add_icon (icon);
377377
0 commit comments