Skip to content

Commit 6323c1d

Browse files
committed
Correctly scale blur coordinates
1 parent a2df146 commit 6323c1d

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

src/BackgroundBlurEffect.vala

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,10 +224,6 @@ public class Gala.BackgroundBlurEffect : Clutter.Effect {
224224
}
225225

226226
private bool update_actor_fbo (int width, int height, float downscale_factor) {
227-
if (width <= 0 || height <= 0) {
228-
return false;
229-
}
230-
231227
if (
232228
texture_width == width &&
233229
texture_height == height &&
@@ -344,7 +340,7 @@ public class Gala.BackgroundBlurEffect : Clutter.Effect {
344340
var width = (int) actor_box.get_width ();
345341
var height = (int) actor_box.get_height ();
346342

347-
if (width < 0 || height < 0) {
343+
if (width <= 0 || height <= 0) {
348344
warning ("BackgroundBlurEffect: Couldn't update framebuffers, incorrect size");
349345
return false;
350346
}

src/BlurManager.vala

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,22 @@ public class Gala.BlurManager : Object {
3232

3333
public WindowManagerGala wm { get; construct; }
3434

35+
private bool framebuffer_is_logical = false;
3536
private GLib.HashTable<Meta.Window, BlurData?> blurred_windows = new GLib.HashTable<Meta.Window, BlurData?> (null, null);
3637

3738
private BlurManager (WindowManagerGala wm) {
3839
Object (wm: wm);
3940
}
4041

4142
construct {
43+
var experimental_features = new Settings ("org.gnome.mutter").get_strv ("experimental-features");
44+
for (var i = 0; i < experimental_features.length; i++) {
45+
if (experimental_features[i] == "scale-monitor-framebuffer") {
46+
framebuffer_is_logical = true;
47+
break;
48+
}
49+
}
50+
4251
wm.get_display ().window_created.connect ((window) => {
4352
window.notify["mutter-hints"].connect ((obj, pspec) => parse_mutter_hints ((Meta.Window) obj));
4453
parse_mutter_hints (window);
@@ -74,8 +83,17 @@ public class Gala.BlurManager : Object {
7483
var x_shadow_size = frame_rect.x - buffer_rect.x;
7584
var y_shadow_size = frame_rect.y - buffer_rect.y;
7685

77-
blur_data.actor.set_position (x_shadow_size + left, y_shadow_size + top);
78-
blur_data.actor.set_size (frame_rect.width - left - right, frame_rect.height - top - bottom);
86+
var monitor_scale = framebuffer_is_logical ? 1.0f : window.display.get_monitor_scale (window.get_monitor ());
87+
var inverse_monitor_scale = 1.0f / monitor_scale;
88+
89+
blur_data.actor.set_position (
90+
Utils.scale_to_int (x_shadow_size, inverse_monitor_scale) + left,
91+
Utils.scale_to_int (y_shadow_size, inverse_monitor_scale) + top
92+
);
93+
blur_data.actor.set_size (
94+
Utils.scale_to_int (frame_rect.width, inverse_monitor_scale) - left - right,
95+
Utils.scale_to_int (frame_rect.height, inverse_monitor_scale) - top - bottom
96+
);
7997
}
8098

8199
public void remove_blur (Meta.Window window) {

0 commit comments

Comments
 (0)