Skip to content

Commit

Permalink
Merge pull request aunetx#52 from aunetx/emit-paint-signal
Browse files Browse the repository at this point in the history
Adds support for better dynamic blur in gnome 40
  • Loading branch information
aunetx committed May 26, 2021
2 parents 893853c + b512ec2 commit 1cfc037
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 19 deletions.
19 changes: 19 additions & 0 deletions src/connections.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,25 @@ var Connections = class Connections {
this.process_connection(actor, id);
}

disconnect_all_for(actor) {
actor_connections = this.buffer.filter((infos) => {
infos.actor == actor
});

actor_connections.forEach((connection) => {
// disconnect
try {
connection.actor.disconnect(connection.id)
} catch (e) {
this._log(`error removing connection: ${e}; continuing`)
}

// remove from buffer
let index = this.buffer.indexOf(connection);
this.buffer.splice(index, 1);
})
}

disconnect_all() {
this.buffer.forEach((connection) => {
try {
Expand Down
14 changes: 6 additions & 8 deletions src/dash_to_dock.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const Signals = imports.signals;
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Settings = Me.imports.settings;
const Utils = Me.imports.utilities;
const PaintSignals = Me.imports.paint_signals;
let prefs = new Settings.Prefs;

const default_sigma = 30;
Expand Down Expand Up @@ -52,6 +53,7 @@ var DashBlur = class DashBlur {
constructor(connections) {
this.dashes = [];
this.connections = connections;
this.paint_signals = new PaintSignals.PaintSignals(connections);
this.sigma = default_sigma;
this.brightness = default_brightness;
}
Expand Down Expand Up @@ -142,6 +144,7 @@ var DashBlur = class DashBlur {

if (prefs.HACKS_LEVEL.get() == 1) {
this._log("dash hack level 1");
this.paint_signals.disconnect_all();

let rp = () => {
effect.queue_repaint()
Expand Down Expand Up @@ -179,14 +182,9 @@ var DashBlur = class DashBlur {
} else if (prefs.HACKS_LEVEL.get() == 2) {
this._log("dash hack level 2");

let rp = () => {
effect.queue_repaint();
};

// disabled because of #31
/*
this.connections.connect(dash, 'paint', rp);
*/
this.paint_signals.connect(dash, this.effect);
} else {
this.paint_signals.disconnect_all();
}

// ! END OF DIRTY PART
Expand Down
51 changes: 51 additions & 0 deletions src/paint_signals.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
'use strict'

const { GObject, Clutter } = imports.gi;

var PaintSignals = class PaintSignals {
constructor(connections) {
this.buffer = [];
this.connections = connections
}

connect(actor, blur_effect) {
let paint_effect = new EmitPaintSignal();
let infos = {
actor: actor,
paint_effect: paint_effect
};

actor.add_effect(paint_effect);
this.connections.connect(paint_effect, 'update-blur', () => {
blur_effect.queue_repaint();
});

this.buffer.push(infos)
}

disconnect_all() {
this.buffer.forEach((infos) => {
this.connections.disconnect_all_for(infos.paint_effect);
infos.actor.remove_effect(paint_effect);
});

this.buffer = []
}
}

var EmitPaintSignal = GObject.registerClass(
{
GTypeName: 'EmitPaintSignal',
Signals: {
'update-blur': {
param_types: []
},
}
},
class EmitPaintSignal extends Clutter.Effect {
vfunc_paint(node, paint_context, paint_flags) {
this.emit("update-blur");
super.vfunc_paint(node, paint_context, paint_flags);
}
}
);
12 changes: 6 additions & 6 deletions src/panel.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const backgroundSettings = new Gio.Settings({ schema: 'org.gnome.desktop.backgro
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Settings = Me.imports.settings;
const Utils = Me.imports.utilities;
const PaintSignals = Me.imports.paint_signals;
let prefs = new Settings.Prefs;

const dash_to_panel_uuid = 'dash-to-panel@jderose9.github.com';
Expand All @@ -18,6 +19,7 @@ let sigma = 30;
var PanelBlur = class PanelBlur {
constructor(connections) {
this.connections = connections;
this.paint_signals = new PaintSignals.PaintSignals(connections);
this.effect = new Shell.BlurEffect({
brightness: default_brightness,
sigma: default_sigma,
Expand Down Expand Up @@ -107,6 +109,7 @@ var PanelBlur = class PanelBlur {

if (prefs.HACKS_LEVEL.get() == 1) {
this._log("panel hack level 1");
this.paint_signals.disconnect_all();

let rp = () => {
this.effect.queue_repaint()
Expand All @@ -124,14 +127,11 @@ var PanelBlur = class PanelBlur {
} else if (prefs.HACKS_LEVEL.get() == 2) {
this._log("panel hack level 2");

// disabled because of #31
/*
Main.panel.get_children().forEach(child => {
this.connections.connect(child, 'paint', () => {
this.effect.queue_repaint();
});
this.paint_signals.connect(child, this.effect);
});
*/
} else {
this.paint_signals.disconnect_all();
}

// ! END OF DIRTY PART
Expand Down
5 changes: 2 additions & 3 deletions src/prefs.ui
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@
</child>
<child>
<object class="GtkCheckButton" id="hacks_level1">
<property name="label" translatable="yes">less artifacts, perfs OK+</property>
<property name="label" translatable="yes">some artifacts, perfs OK+</property>
<property name="active">1</property>
<property name="group">hacks_level0</property>
<signal name="toggled" handler="hacks_level1_toggled" swapped="no" />
Expand All @@ -201,9 +201,8 @@
</child>
<child>
<object class="GtkCheckButton" id="hacks_level2">
<property name="label" translatable="yes">no artifacts, bad perfs</property>
<property name="label" translatable="yes">nearly no artifacts, bad perfs</property>
<property name="active">0</property>
<property name="sensitive">0</property>
<property name="group">hacks_level0</property>
<signal name="toggled" handler="hacks_level2_toggled" swapped="no" />
<layout>
Expand Down
5 changes: 3 additions & 2 deletions src/utilities.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict'
const { GLib } = imports.gi;

const GLib = imports.gi.GLib;

let clearTimeout, clearInterval;
clearInterval = clearTimeout = GLib.Source.remove;
Expand All @@ -16,4 +17,4 @@ var setInterval = function (func, delay, ...args) {
func(...args);
return GLib.SOURCE_CONTINUE;
});
};
};

0 comments on commit 1cfc037

Please sign in to comment.