Skip to content

Commit 94ef835

Browse files
authored
Streamline monitor scale passing (#2354)
1 parent b34af6c commit 94ef835

File tree

5 files changed

+33
-76
lines changed

5 files changed

+33
-76
lines changed

src/Widgets/MultitaskingView/MonitorClone.vala

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class Gala.MonitorClone : ActorTarget {
1616

1717
public WindowManager wm { get; construct; }
1818
public int monitor { get; construct; }
19+
public float monitor_scale { get; construct set; }
1920

2021
private WindowCloneContainer window_container;
2122
private BackgroundManager background;
@@ -26,15 +27,16 @@ public class Gala.MonitorClone : ActorTarget {
2627

2728
construct {
2829
reactive = true;
30+
update_allocation ();
2931

3032
unowned var display = wm.get_display ();
3133

3234
background = new BackgroundManager (display, monitor, false);
3335

34-
var scale = display.get_monitor_scale (monitor);
35-
36-
window_container = new WindowCloneContainer (wm, scale);
36+
window_container = new WindowCloneContainer (wm, monitor_scale);
37+
window_container.add_constraint (new Clutter.BindConstraint (this, SIZE, 0.0f));
3738
window_container.window_selected.connect ((w) => { window_selected (w); });
39+
bind_property ("monitor-scale", window_container, "monitor-scale");
3840

3941
display.window_entered_monitor.connect (window_entered);
4042
display.window_left_monitor.connect (window_left);
@@ -55,8 +57,6 @@ public class Gala.MonitorClone : ActorTarget {
5557

5658
var drop = new DragDropAction (DragDropActionType.DESTINATION, "multitaskingview-window");
5759
add_action (drop);
58-
59-
update_allocation ();
6060
}
6161

6262
~MonitorClone () {
@@ -75,10 +75,8 @@ public class Gala.MonitorClone : ActorTarget {
7575

7676
set_position (monitor_geometry.x, monitor_geometry.y);
7777
set_size (monitor_geometry.width, monitor_geometry.height);
78-
window_container.set_size (monitor_geometry.width, monitor_geometry.height);
7978

80-
var scale = display.get_monitor_scale (monitor);
81-
window_container.monitor_scale = scale;
79+
monitor_scale = display.get_monitor_scale (monitor);
8280
}
8381

8482
private void window_left (int window_monitor, Meta.Window window) {

src/Widgets/MultitaskingView/MultitaskingView.vala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ public class Gala.MultitaskingView : ActorTarget, ActivatableComponent {
166166

167167
foreach (unowned var child in workspaces.get_children ()) {
168168
unowned var workspace_clone = (WorkspaceClone) child;
169-
workspace_clone.scale_factor = scale;
169+
workspace_clone.monitor_scale = scale;
170170
workspace_clone.update_size (primary_geometry);
171171
}
172172
}

src/Widgets/MultitaskingView/WindowClone.vala

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,7 @@ public class Gala.WindowClone : ActorTarget {
4949
}
5050

5151
public bool overview_mode { get; construct; }
52-
private float _monitor_scale_factor = 1.0f;
53-
public float monitor_scale_factor {
54-
get {
55-
return _monitor_scale_factor;
56-
}
57-
set {
58-
if (value != _monitor_scale_factor) {
59-
_monitor_scale_factor = value;
60-
reallocate ();
61-
}
62-
}
63-
}
52+
public float monitor_scale { get; construct set; }
6453

6554
[CCode (notify = false)]
6655
public uint8 shadow_opacity {
@@ -92,11 +81,11 @@ public class Gala.WindowClone : ActorTarget {
9281

9382
private GestureController gesture_controller;
9483

95-
public WindowClone (WindowManager wm, Meta.Window window, float scale, bool overview_mode = false) {
84+
public WindowClone (WindowManager wm, Meta.Window window, float monitor_scale, bool overview_mode = false) {
9685
Object (
9786
wm: wm,
9887
window: window,
99-
monitor_scale_factor: scale,
88+
monitor_scale: monitor_scale,
10089
overview_mode: overview_mode
10190
);
10291
}
@@ -145,6 +134,7 @@ public class Gala.WindowClone : ActorTarget {
145134
add_child (clone_container);
146135
add_child (window_title);
147136

137+
notify["monitor-scale"].connect (reallocate);
148138
reallocate ();
149139

150140
InternalUtils.wait_for_window_actor (window, load_clone);
@@ -163,13 +153,13 @@ public class Gala.WindowClone : ActorTarget {
163153
}
164154

165155
private void reallocate () {
166-
close_button = new Gala.CloseButton (monitor_scale_factor) {
156+
close_button = new Gala.CloseButton (monitor_scale) {
167157
opacity = 0
168158
};
169159
close_button.triggered.connect (close_window);
170160
close_button.notify["has-pointer"].connect (() => update_hover_widgets ());
171161

172-
window_icon = new WindowIcon (window, WINDOW_ICON_SIZE, (int)Math.round (monitor_scale_factor)) {
162+
window_icon = new WindowIcon (window, WINDOW_ICON_SIZE, (int)Math.round (monitor_scale)) {
173163
visible = !overview_mode
174164
};
175165
window_icon.opacity = 0;
@@ -206,7 +196,7 @@ public class Gala.WindowClone : ActorTarget {
206196

207197
if (window.fullscreen || window.maximized_horizontally && window.maximized_vertically) {
208198
if (shadow_effect == null) {
209-
shadow_effect = new ShadowEffect ("window", monitor_scale_factor);
199+
shadow_effect = new ShadowEffect ("window", monitor_scale);
210200
shadow_opacity = 0;
211201
clone.add_effect_with_name ("shadow", shadow_effect);
212202
}
@@ -278,7 +268,7 @@ public class Gala.WindowClone : ActorTarget {
278268
return;
279269
}
280270

281-
var target_translation_y = (float) (-CLOSE_TRANSLATION * monitor_scale_factor * progress);
271+
var target_translation_y = (float) (-CLOSE_TRANSLATION * monitor_scale * progress);
282272
var target_opacity = (uint) (255 * (1 - progress));
283273

284274
clone_container.translation_y = target_translation_y;

src/Widgets/MultitaskingView/WindowCloneContainer.vala

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,7 @@ public class Gala.WindowCloneContainer : ActorTarget {
1919
public WindowManager wm { get; construct; }
2020
public bool overview_mode { get; construct; }
2121

22-
private float _monitor_scale = 1.0f;
23-
public float monitor_scale {
24-
get {
25-
return _monitor_scale;
26-
}
27-
set {
28-
if (value != _monitor_scale) {
29-
_monitor_scale = value;
30-
reallocate ();
31-
}
32-
}
33-
}
22+
public float monitor_scale { get; construct set; }
3423

3524
private bool opened = false;
3625

@@ -40,15 +29,8 @@ public class Gala.WindowCloneContainer : ActorTarget {
4029
*/
4130
private unowned WindowClone? current_window = null;
4231

43-
public WindowCloneContainer (WindowManager wm, float scale, bool overview_mode = false) {
44-
Object (wm: wm, monitor_scale: scale, overview_mode: overview_mode);
45-
}
46-
47-
private void reallocate () {
48-
foreach (unowned var child in get_children ()) {
49-
unowned var clone = (WindowClone) child;
50-
clone.monitor_scale_factor = monitor_scale;
51-
}
32+
public WindowCloneContainer (WindowManager wm, float monitor_scale, bool overview_mode = false) {
33+
Object (wm: wm, monitor_scale: monitor_scale, overview_mode: overview_mode);
5234
}
5335

5436
/**
@@ -85,6 +67,8 @@ public class Gala.WindowCloneContainer : ActorTarget {
8567
});
8668
new_window.request_reposition.connect (() => reflow (false));
8769

70+
bind_property ("monitor-scale", new_window, "monitor-scale");
71+
8872
unowned Meta.Window? target = null;
8973
foreach (unowned var w in windows_ordered) {
9074
if (w != window) {

src/Widgets/MultitaskingView/WorkspaceClone.vala

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -128,30 +128,18 @@ public class Gala.WorkspaceClone : ActorTarget {
128128

129129
public WindowManager wm { get; construct; }
130130
public Meta.Workspace workspace { get; construct; }
131+
public float monitor_scale { get; construct set; }
132+
131133
public IconGroup icon_group { get; private set; }
132134
public WindowCloneContainer window_container { get; private set; }
133135

134-
private float _scale_factor = 1.0f;
135-
public float scale_factor {
136-
get {
137-
return _scale_factor;
138-
}
139-
set {
140-
if (value != _scale_factor) {
141-
_scale_factor = value;
142-
reallocate ();
143-
update_targets ();
144-
}
145-
}
146-
}
147-
148136
private BackgroundManager background;
149137
private bool opened;
150138

151139
private uint hover_activate_timeout = 0;
152140

153-
public WorkspaceClone (WindowManager wm, Meta.Workspace workspace, float scale) {
154-
Object (wm: wm, workspace: workspace, scale_factor: scale);
141+
public WorkspaceClone (WindowManager wm, Meta.Workspace workspace, float monitor_scale) {
142+
Object (wm: wm, workspace: workspace, monitor_scale: monitor_scale);
155143
}
156144

157145
construct {
@@ -166,15 +154,17 @@ public class Gala.WorkspaceClone : ActorTarget {
166154
background = new FramedBackground (display);
167155
background.add_action (background_click_action);
168156

169-
window_container = new WindowCloneContainer (wm, scale_factor) {
157+
window_container = new WindowCloneContainer (wm, monitor_scale) {
170158
width = monitor_geometry.width,
171159
height = monitor_geometry.height,
172160
};
173161
window_container.window_selected.connect ((w) => { window_selected (w); });
174162
window_container.requested_close.connect (() => activate (true));
163+
bind_property ("monitor-scale", window_container, "monitor-scale");
175164

176-
icon_group = new IconGroup (display, workspace, scale_factor);
165+
icon_group = new IconGroup (display, workspace, monitor_scale);
177166
icon_group.selected.connect (() => activate (true));
167+
bind_property ("monitor-scale", icon_group, "scale-factor");
178168

179169
var icons_drop_action = new DragDropAction (DragDropActionType.DESTINATION, "multitaskingview-window");
180170
icon_group.add_action (icons_drop_action);
@@ -221,7 +211,7 @@ public class Gala.WorkspaceClone : ActorTarget {
221211

222212
unowned var monitor_manager = display.get_context ().get_backend ().get_monitor_manager ();
223213
monitor_manager.monitors_changed.connect (update_targets);
224-
214+
notify["monitor-scale"].connect (update_targets);
225215
update_targets ();
226216
}
227217

@@ -238,11 +228,6 @@ public class Gala.WorkspaceClone : ActorTarget {
238228
icon_group.destroy ();
239229
}
240230

241-
private void reallocate () {
242-
icon_group.scale_factor = scale_factor;
243-
window_container.monitor_scale = scale_factor;
244-
}
245-
246231
/**
247232
* Add a window to the WindowCloneContainer and the IconGroup if it really
248233
* belongs to this workspace and this monitor.
@@ -301,8 +286,8 @@ public class Gala.WorkspaceClone : ActorTarget {
301286

302287
var monitor = display.get_monitor_geometry (display.get_primary_monitor ());
303288

304-
var scale = (float)(monitor.height - InternalUtils.scale_to_int (TOP_OFFSET + BOTTOM_OFFSET, scale_factor)) / monitor.height;
305-
var pivot_y = InternalUtils.scale_to_int (TOP_OFFSET, scale_factor) / (monitor.height - monitor.height * scale);
289+
var scale = (float)(monitor.height - InternalUtils.scale_to_int (TOP_OFFSET + BOTTOM_OFFSET, monitor_scale)) / monitor.height;
290+
var pivot_y = InternalUtils.scale_to_int (TOP_OFFSET, monitor_scale) / (monitor.height - monitor.height * scale);
306291
background.set_pivot_point (0.5f, pivot_y);
307292

308293
var initial_width = monitor.width;
@@ -312,10 +297,10 @@ public class Gala.WorkspaceClone : ActorTarget {
312297
add_target (new PropertyTarget (MULTITASKING_VIEW, background, "scale-x", typeof (double), 1d, (double) scale));
313298
add_target (new PropertyTarget (MULTITASKING_VIEW, background, "scale-y", typeof (double), 1d, (double) scale));
314299

315-
window_container.padding_top = InternalUtils.scale_to_int (TOP_OFFSET, scale_factor);
300+
window_container.padding_top = InternalUtils.scale_to_int (TOP_OFFSET, monitor_scale);
316301
window_container.padding_left =
317302
window_container.padding_right = (int)(monitor.width - monitor.width * scale) / 2;
318-
window_container.padding_bottom = InternalUtils.scale_to_int (BOTTOM_OFFSET, scale_factor);
303+
window_container.padding_bottom = InternalUtils.scale_to_int (BOTTOM_OFFSET, monitor_scale);
319304
}
320305

321306
public override void update_progress (GestureAction action, double progress) {

0 commit comments

Comments
 (0)