Skip to content

Commit 2f4e3af

Browse files
committed
CloseButton: make monitor scale settable
1 parent 81a3a00 commit 2f4e3af

File tree

3 files changed

+33
-25
lines changed

3 files changed

+33
-25
lines changed

lib/CloseButton.vala

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,23 @@ public class Gala.CloseButton : Clutter.Actor {
88
private static Gee.HashMap<int, Gdk.Pixbuf?> close_pixbufs;
99

1010
public signal void triggered (uint32 timestamp);
11-
public float scale { get; construct set; }
11+
12+
private float _monitor_scale = 1.0f;
13+
public float monitor_scale {
14+
get {
15+
return _monitor_scale;
16+
}
17+
set {
18+
_monitor_scale = value;
19+
20+
load_pixbuf ();
21+
}
22+
}
1223

1324
// used to avoid changing hitbox of the button
1425
private Clutter.Actor pixbuf_actor;
1526
private bool is_pressed = false;
1627

17-
public CloseButton (float scale) {
18-
Object (scale: scale);
19-
}
20-
2128
static construct {
2229
close_pixbufs = new Gee.HashMap<int, Gdk.Pixbuf?> ();
2330
}
@@ -30,23 +37,23 @@ public class Gala.CloseButton : Clutter.Actor {
3037
};
3138
add_child (pixbuf_actor);
3239

33-
var pixbuf = get_close_button_pixbuf (scale);
40+
load_pixbuf ();
41+
}
42+
43+
private void load_pixbuf () {
44+
var pixbuf = get_close_button_pixbuf (monitor_scale);
3445
if (pixbuf != null) {
35-
try {
36-
var image = new Gala.Image.from_pixbuf (pixbuf);
37-
pixbuf_actor.set_content (image);
38-
pixbuf_actor.set_size (pixbuf.width, pixbuf.height);
39-
set_size (pixbuf.width, pixbuf.height);
40-
} catch (Error e) {
41-
create_error_texture ();
42-
}
46+
var image = new Gala.Image.from_pixbuf (pixbuf);
47+
pixbuf_actor.set_content (image);
48+
pixbuf_actor.set_size (pixbuf.width, pixbuf.height);
49+
set_size (pixbuf.width, pixbuf.height);
4350
} else {
4451
create_error_texture ();
4552
}
4653
}
4754

48-
private static Gdk.Pixbuf? get_close_button_pixbuf (float scale) {
49-
var height = Utils.scale_to_int (36, scale);
55+
private static Gdk.Pixbuf? get_close_button_pixbuf (float monitor_scale) {
56+
var height = Utils.scale_to_int (36, monitor_scale);
5057

5158
if (close_pixbufs[height] == null) {
5259
try {
@@ -71,7 +78,7 @@ public class Gala.CloseButton : Clutter.Actor {
7178
// works as good as some weird fallback-image-failed-to-load pixbuf
7279
critical ("Could not create close button");
7380

74-
var size = Utils.scale_to_int (36, scale);
81+
var size = Utils.scale_to_int (36, monitor_scale);
7582
pixbuf_actor.set_size (size, size);
7683
pixbuf_actor.background_color = { 255, 0, 0, 255 };
7784
}

plugins/pip/PopupWindow.vala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor {
9797

9898
set_position (x_position, y_position);
9999

100-
close_button = new Gala.CloseButton (scale) {
100+
close_button = new Gala.CloseButton () {
101101
opacity = 0
102102
};
103103
// TODO: Check if close button should be on the right

src/Widgets/MultitaskingView/WindowClone.vala

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,17 @@ public class Gala.WindowClone : ActorTarget, RootTarget {
136136

137137
window_title = new Tooltip ();
138138

139+
close_button = new Gala.CloseButton () {
140+
opacity = 0
141+
};
142+
bind_property ("monitor-scale", close_button, "monitor-scale", SYNC_CREATE);
143+
close_button.triggered.connect (close_window);
144+
close_button.notify["has-pointer"].connect (() => update_hover_widgets ());
145+
139146
add_child (active_shape);
140147
add_child (clone_container);
141148
add_child (window_title);
149+
add_child (close_button);
142150

143151
notify["monitor-scale"].connect (reallocate);
144152
reallocate ();
@@ -163,19 +171,12 @@ public class Gala.WindowClone : ActorTarget, RootTarget {
163171
}
164172

165173
private void reallocate () {
166-
close_button = new Gala.CloseButton (monitor_scale) {
167-
opacity = 0
168-
};
169-
close_button.triggered.connect (close_window);
170-
close_button.notify["has-pointer"].connect (() => update_hover_widgets ());
171-
172174
window_icon = new WindowIcon (window, WINDOW_ICON_SIZE, (int)Math.round (monitor_scale)) {
173175
visible = !overview_mode
174176
};
175177
window_icon.opacity = 0;
176178
window_icon.set_pivot_point (0.5f, 0.5f);
177179

178-
add_child (close_button);
179180
add_child (window_icon);
180181

181182
set_child_below_sibling (window_icon, window_title);

0 commit comments

Comments
 (0)