Skip to content

Commit b35f705

Browse files
committed
WindowSwitcher: introduce "monitor-scale" property
1 parent 497050c commit b35f705

File tree

1 file changed

+23
-23
lines changed

1 file changed

+23
-23
lines changed

src/Widgets/WindowSwitcher/WindowSwitcher.vala

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)