diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
index 32663a0..f841b3a 100644
--- a/.github/workflows/checks.yml
+++ b/.github/workflows/checks.yml
@@ -105,7 +105,6 @@ jobs:
if: >
github.event_name == 'pull_request' ||
( contains(github.ref, 'main') && !contains(github.event.head_commit.message, '[no-ci]') ) ||
- ( contains(github.ref, 'develop') && !contains(github.event.head_commit.message, '[no-ci]') ) ||
contains(github.event.head_commit.message, '[run-ci]')
strategy:
fail-fast: false
diff --git a/README.md b/README.md
index 9f2e459..de1f958 100644
--- a/README.md
+++ b/README.md
@@ -34,6 +34,7 @@ Effect | Preview
**Energize A** Beam your windows away! |
**Energize B** Using different transporter technology results in an alternative visual effect. |
**Fire** The classic effect inspired by Compiz. However, this is implemented using a GLSL shader and not with a particle system like in the old days. |
+**Glide** This very simple effect fades the window to transparency with subtle 3D effects. |
**Hexagon** With glowing lines and hexagon-shaped tiles, this effect looks very sci-fi. |
**Incinerate** A less snappy but definitely more fancy take on the fire effect. |
**Matrix** Turn your windows into a shower of green letters! The color is actually configurable.|
@@ -64,6 +65,7 @@ Below is a table which summarizes the current availability for all effects.
Energize A
✅
✅
✅
✅
✅
✅
✅
Energize B
✅
✅
✅
✅
✅
✅
✅
Fire
✅
✅
✅
✅
✅
✅
✅
+
Glide
✅
✅
✅
✅
✅
✅
✅
Hexagon
✅
✅
✅
✅
✅
✅
✅
Incinerate
✅
✅
✅
✅
✅
✅
✅
Matrix
✅
✅
✅
✅
diff --git a/docs/changelog.md b/docs/changelog.md
index e4477a0..7806c59 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -9,6 +9,10 @@ SPDX-License-Identifier: CC-BY-4.0
**Release Date:** TBD
+#### New Features
+
+* **New Effect: Glide.** A very subtle effect which simply fades the window and applies some 3D-like tilting and scaling.
+
#### Other Enhancements
* Burn-My-Windows now follows the [REUSE Specification](https://reuse.software/spec).
diff --git a/docs/pics/glide.gif b/docs/pics/glide.gif
new file mode 100644
index 0000000..182d0b3
Binary files /dev/null and b/docs/pics/glide.gif differ
diff --git a/extension.js b/extension.js
index 3d936d4..2f33920 100644
--- a/extension.js
+++ b/extension.js
@@ -57,6 +57,7 @@ class Extension {
new Me.imports.src.EnergizeA.EnergizeA(),
new Me.imports.src.EnergizeB.EnergizeB(),
new Me.imports.src.Fire.Fire(),
+ new Me.imports.src.Glide.Glide(),
new Me.imports.src.Hexagon.Hexagon(),
new Me.imports.src.Incinerate.Incinerate(),
new Me.imports.src.Matrix.Matrix(),
diff --git a/kwin/build.sh b/kwin/build.sh
index 7a3fd6b..e769daf 100755
--- a/kwin/build.sh
+++ b/kwin/build.sh
@@ -132,6 +132,7 @@ generate "energize-a" "Energize A [Burn-My-Windows]" "Beam your windows away"
generate "energize-b" "Energize B [Burn-My-Windows]" "Using different transporter technology results in an alternative visual effect"
generate "doom" "Doom [Burn-My-Windows]" "Melt your windows"
generate "fire" "Fire [Burn-My-Windows]" "The classic effect inspired by Compiz"
+generate "glide" "Glide [Burn-My-Windows]" "Fade the window to transparency with subtle 3D effects"
generate "hexagon" "Hexagon [Burn-My-Windows]" "With glowing lines and hexagon-shaped tiles, this effect looks very sci-fi"
generate "incinerate" "Incinerate [Burn-My-Windows]" "A less snappy but definitely more fancy take on the fire effect"
generate "pixelate" "Pixelate [Burn-My-Windows]" "Pixelate the window and randomly hide the pixels"
diff --git a/kwin/glide/config.ui b/kwin/glide/config.ui
new file mode 100755
index 0000000..71e054e
--- /dev/null
+++ b/kwin/glide/config.ui
@@ -0,0 +1,116 @@
+
+
+
+
+
+ BMWConfigForm
+
+
+
+ 0
+ 0
+ 562
+ 365
+
+
+
+
+
+
+ Squish
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+
+ milliseconds
+
+
+ 100
+
+
+ 9999
+
+
+ 100
+
+
+
+
+
+
+ Scale:
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+
+ Duration:
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+
+ 0.100000000000000
+
+
+ 1.000000000000000
+
+
+ 0.1
+
+
+
+
+
+
+ Tilt
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+
+ 1.000000000000000
+
+
+ 0.1
+
+
+
+
+
+
+ -1.000000000000000
+
+
+ 1.000000000000000
+
+
+ 0.1
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kwin/glide/main.xml b/kwin/glide/main.xml
new file mode 100755
index 0000000..b5714a6
--- /dev/null
+++ b/kwin/glide/main.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+ 250
+
+
+ 0.9
+
+
+ 0.1
+
+
+ -0.3
+
+
+
\ No newline at end of file
diff --git a/kwin/glide/onSettingsChanged.js b/kwin/glide/onSettingsChanged.js
new file mode 100644
index 0000000..c8ab453
--- /dev/null
+++ b/kwin/glide/onSettingsChanged.js
@@ -0,0 +1,10 @@
+// SPDX-FileCopyrightText: Simon Schneegans
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+// This part is automatically included in the effect's source during the build process.
+// The code below is called whenever the user changes something in the configuration of
+// the effect.
+
+effect.setUniform(this.shader, 'uScale', effect.readConfig('Scale', 1.0));
+effect.setUniform(this.shader, 'uSquish', effect.readConfig('Squish', 1.0));
+effect.setUniform(this.shader, 'uTilt', effect.readConfig('Tilt', 1.0));
diff --git a/prefs.js b/prefs.js
index 98f7cf2..4440466 100644
--- a/prefs.js
+++ b/prefs.js
@@ -53,6 +53,7 @@ var PreferencesDialog = class PreferencesDialog {
new Me.imports.src.EnergizeA.EnergizeA(),
new Me.imports.src.EnergizeB.EnergizeB(),
new Me.imports.src.Fire.Fire(),
+ new Me.imports.src.Glide.Glide(),
new Me.imports.src.Hexagon.Hexagon(),
new Me.imports.src.Incinerate.Incinerate(),
new Me.imports.src.Matrix.Matrix(),
diff --git a/resources/shaders/common.glsl b/resources/shaders/common.glsl
index 4dc9201..0201fe2 100644
--- a/resources/shaders/common.glsl
+++ b/resources/shaders/common.glsl
@@ -183,13 +183,18 @@ float getRelativeEdgeMask(float fadeAmount) {
// ------------------------------------------------------------------------------- 2D math
+// Returns the shortest distance between the given point and the line defined by "origin"
+// and "direction".
float distToLine(vec2 origin, vec2 direction, vec2 point) {
vec2 perpendicular = vec2(direction.y, -direction.x);
return abs(dot(normalize(perpendicular), origin - point));
}
+// Returns a positive number if a -> b forms a clockwise corner, or a negative number if
+// the corner is counter-clockwise.
float getWinding(vec2 a, vec2 b) { return cross(vec3(a, 0.0), vec3(b, 0.0)).z; }
+// Rotates the given 2D vector a clockwise by the angle alpha (given in radians).
vec2 rotate(vec2 a, float angle) {
return vec2(a.x * cos(angle) - a.y * sin(angle), a.x * sin(angle) + a.y * cos(angle));
}
diff --git a/resources/shaders/glide.frag b/resources/shaders/glide.frag
new file mode 100644
index 0000000..25dc09d
--- /dev/null
+++ b/resources/shaders/glide.frag
@@ -0,0 +1,47 @@
+//////////////////////////////////////////////////////////////////////////////////////////
+// ) ( //
+// ( /( ( ( ) ( ( ( ( )\ ) ( ( //
+// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( //
+// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ //
+// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) //
+// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< //
+// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ //
+// |__/ //
+//////////////////////////////////////////////////////////////////////////////////////////
+
+// SPDX-FileCopyrightText: Simon Schneegans
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+// The content from common.glsl is automatically prepended to each shader effect.
+
+uniform float uScale;
+uniform float uSquish;
+uniform float uTilt;
+
+void main() {
+ // We reverse the progress for window opening.
+ float progress = easeOutQuad(uProgress);
+ progress = uForOpening ? 1.0 - progress : progress;
+
+ // Put texture coordinate origin to center of window.
+ vec2 coords = iTexCoord.st * 2.0 - 1.0;
+
+ // Scale image texture with progress.
+ coords /= mix(1.0, uScale, progress);
+
+ // Squish image texture vertically.
+ coords.y /= mix(1.0, (1.0 - 0.2 * uSquish), progress);
+
+ // 'Tilt' image texture around x-axis.
+ coords.x /= mix(1.0, 1.0 - 0.1 * uTilt * coords.y, progress);
+
+ // Move texture coordinate center to corner again.
+ coords = coords * 0.5 + 0.5;
+
+ vec4 oColor = getInputColor(coords);
+
+ // Dissolve window.
+ oColor.a = oColor.a * (uForOpening ? uProgress : pow(1.0 - uProgress, 2.0));
+
+ setOutputColor(oColor);
+}
\ No newline at end of file
diff --git a/resources/ui/gtk3/Glide.ui b/resources/ui/gtk3/Glide.ui
new file mode 100644
index 0000000..18959ed
--- /dev/null
+++ b/resources/ui/gtk3/Glide.ui
@@ -0,0 +1,254 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/ui/gtk4/Glide.ui b/resources/ui/gtk4/Glide.ui
new file mode 100644
index 0000000..d780347
--- /dev/null
+++ b/resources/ui/gtk4/Glide.ui
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+ vertical
+
+
+
+
+
+ none
+ 1
+
+
+
+
+ 0
+
+
+
+
+ Animation Time [ms]
+ 0
+ start
+ center
+ 1
+
+
+
+
+ end
+ center
+ 1
+ 0
+ left
+ 300
+
+
+ 2000
+ 100
+ 1
+ 100
+
+
+
+
+
+
+ edit-clear-symbolic
+ Reset to Default Value
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ Scale
+ 0
+ start
+ center
+ 1
+
+
+
+
+ end
+ center
+ 1
+ 2
+ left
+ 300
+
+
+ 1
+ 0.1
+ 0.01
+ 0.1
+
+
+
+
+
+
+ edit-clear-symbolic
+ Reset to Default Value
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ Squish
+ 0
+ start
+ center
+ 1
+
+
+
+
+ end
+ center
+ 1
+ 2
+ left
+ 300
+
+
+ 1
+ 0
+ 0.01
+ 0.1
+
+
+
+
+
+
+ edit-clear-symbolic
+ Reset to Default Value
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ Tilt
+ 0
+ start
+ center
+ 1
+
+
+
+
+ end
+ center
+ 1
+ 2
+ left
+ 300
+
+
+ 1
+ -1
+ 0.01
+ 0.1
+
+
+
+
+
+
+ edit-clear-symbolic
+ Reset to Default Value
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml b/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml
index a421f56..74c00e3 100644
--- a/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml
+++ b/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml
@@ -297,6 +297,46 @@ SPDX-License-Identifier: CC0-1.0
The fifth color of the fire gradient.
+
+
+
+
+
+ true
+ Glide Close Effect
+ Use the glide effect for window closing.
+
+
+
+ false
+ Glide Open Effect
+ Use the glide effect for window opening.
+
+
+
+ 250
+ Glide Animation Time
+ The time the glide effect takes.
+
+
+
+ 0.9
+ Glide Scale
+ The scale of the window.
+
+
+
+ 0.1
+ Glide Squish
+ The amount of squishing.
+
+
+
+ -0.3
+ Glide Tilt
+ The amount of tilting.
+
+
diff --git a/src/Glide.js b/src/Glide.js
new file mode 100644
index 0000000..350d728
--- /dev/null
+++ b/src/Glide.js
@@ -0,0 +1,106 @@
+//////////////////////////////////////////////////////////////////////////////////////////
+// ) ( //
+// ( /( ( ( ) ( ( ( ( )\ ) ( ( //
+// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( //
+// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ //
+// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) //
+// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< //
+// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ //
+// |__/ //
+//////////////////////////////////////////////////////////////////////////////////////////
+
+// SPDX-FileCopyrightText: Simon Schneegans
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+'use strict';
+
+const GObject = imports.gi.GObject;
+
+const _ = imports.gettext.domain('burn-my-windows').gettext;
+
+const ExtensionUtils = imports.misc.extensionUtils;
+const Me = imports.misc.extensionUtils.getCurrentExtension();
+const utils = Me.imports.src.utils;
+const ShaderFactory = Me.imports.src.ShaderFactory.ShaderFactory;
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// This very simple effect fades the window to transparency with subtle 3D effects. //
+//////////////////////////////////////////////////////////////////////////////////////////
+
+// The effect class can be used to get some metadata (like the effect's name or supported
+// GNOME Shell versions), to initialize the respective page of the settings dialog, as
+// well as to create the actual shader for the effect.
+var Glide = class {
+
+ // The constructor creates a ShaderFactory which will be used by extension.js to create
+ // shader instances for this effect. The shaders will be automagically created using the
+ // GLSL file in resources/shaders/.glsl. The callback will be called for each
+ // newly created shader instance.
+ constructor() {
+ this.shaderFactory = new ShaderFactory(this.getNick(), (shader) => {
+ // Store uniform locations of newly created shaders.
+ shader._uScale = shader.get_uniform_location('uScale');
+ shader._uSquish = shader.get_uniform_location('uSquish');
+ shader._uTilt = shader.get_uniform_location('uTilt');
+
+ // Write all uniform values at the start of each animation.
+ shader.connect('begin-animation', (shader, settings) => {
+ // clang-format off
+ shader.set_uniform_float(shader._uScale, 1, [settings.get_double('glide-scale')]);
+ shader.set_uniform_float(shader._uSquish, 1, [settings.get_double('glide-squish')]);
+ shader.set_uniform_float(shader._uTilt, 1, [settings.get_double('glide-tilt')]);
+ // clang-format on
+ });
+ });
+ }
+
+
+ // ---------------------------------------------------------------------------- metadata
+
+ // The effect is available on all GNOME Shell versions supported by this extension.
+ getMinShellVersion() {
+ return [3, 36];
+ }
+
+ // This will be called in various places where a unique identifier for this effect is
+ // required. It should match the prefix of the settings keys which store whether the
+ // effect is enabled currently (e.g. '*-close-effect'), and its animation time
+ // (e.g. '*-animation-time').
+ getNick() {
+ return 'glide';
+ }
+
+ // This will be shown in the sidebar of the preferences dialog as well as in the
+ // drop-down menus where the user can choose the effect.
+ getLabel() {
+ return _('Glide');
+ }
+
+ // -------------------------------------------------------------------- API for prefs.js
+
+ // This is called by the preferences dialog. It loads the settings page for this effect,
+ // and binds all properties to the settings.
+ getPreferences(dialog) {
+
+ // Add the settings page to the builder.
+ dialog.getBuilder().add_from_resource(`/ui/${utils.getGTKString()}/Glide.ui`);
+
+ // Bind all properties.
+ dialog.bindAdjustment('glide-animation-time');
+ dialog.bindAdjustment('glide-scale');
+ dialog.bindAdjustment('glide-squish');
+ dialog.bindAdjustment('glide-tilt');
+
+ // Finally, return the new settings page.
+ return dialog.getBuilder().get_object('glide-prefs');
+ }
+
+ // ---------------------------------------------------------------- API for extension.js
+
+ // The getActorScale() is called from extension.js to adjust the actor's size during the
+ // animation. This is useful if the effect requires drawing something beyond the usual
+ // bounds of the actor. This only works for GNOME 3.38+.
+ getActorScale(settings) {
+ return {x: 1.0, y: 1.0};
+ }
+}
diff --git a/src/PixelWipe.js b/src/PixelWipe.js
index cb1053d..1378d80 100644
--- a/src/PixelWipe.js
+++ b/src/PixelWipe.js
@@ -46,7 +46,7 @@ var PixelWipe = class {
// Write all uniform values at the start of each animation.
shader.connect('begin-animation', (shader, settings, forOpening, actor) => {
// Because the actor position may change after the begin-animation signal is
- // called, we set the uDirection uniform during the update callback.
+ // called, we set the uStartPos uniform during the update callback.
this._startPointerPos = global.get_pointer();
this._actor = actor;
@@ -55,7 +55,7 @@ var PixelWipe = class {
// clang-format on
});
- // We set the uDirection uniform during the update callback as the actor position
+ // We set the uStartPos uniform during the update callback as the actor position
// may not be set up properly before the begin animation callback.
shader.connect('update-animation', (shader) => {
if (this._startPointerPos) {
diff --git a/tests/generate-references.sh b/tests/generate-references.sh
index 9f0f9db..053f472 100755
--- a/tests/generate-references.sh
+++ b/tests/generate-references.sh
@@ -185,6 +185,7 @@ set_setting "test-mode" true
capture_effect "energize-a"
capture_effect "energize-b"
capture_effect "fire"
+capture_effect "glide"
capture_effect "hexagon"
capture_effect "incinerate"
capture_effect "pixelate"
diff --git a/tests/references/glide-close-gnome-wayland-nested-32.png b/tests/references/glide-close-gnome-wayland-nested-32.png
new file mode 100644
index 0000000..0df6ebb
Binary files /dev/null and b/tests/references/glide-close-gnome-wayland-nested-32.png differ
diff --git a/tests/references/glide-close-gnome-wayland-nested-33.png b/tests/references/glide-close-gnome-wayland-nested-33.png
new file mode 100644
index 0000000..0df6ebb
Binary files /dev/null and b/tests/references/glide-close-gnome-wayland-nested-33.png differ
diff --git a/tests/references/glide-close-gnome-wayland-nested-34.png b/tests/references/glide-close-gnome-wayland-nested-34.png
new file mode 100644
index 0000000..0df6ebb
Binary files /dev/null and b/tests/references/glide-close-gnome-wayland-nested-34.png differ
diff --git a/tests/references/glide-close-gnome-wayland-nested-35.png b/tests/references/glide-close-gnome-wayland-nested-35.png
new file mode 100644
index 0000000..0df6ebb
Binary files /dev/null and b/tests/references/glide-close-gnome-wayland-nested-35.png differ
diff --git a/tests/references/glide-close-gnome-wayland-nested-36.png b/tests/references/glide-close-gnome-wayland-nested-36.png
new file mode 100644
index 0000000..0df6ebb
Binary files /dev/null and b/tests/references/glide-close-gnome-wayland-nested-36.png differ
diff --git a/tests/references/glide-close-gnome-xsession-32.png b/tests/references/glide-close-gnome-xsession-32.png
new file mode 100644
index 0000000..0df6ebb
Binary files /dev/null and b/tests/references/glide-close-gnome-xsession-32.png differ
diff --git a/tests/references/glide-close-gnome-xsession-33.png b/tests/references/glide-close-gnome-xsession-33.png
new file mode 100644
index 0000000..0df6ebb
Binary files /dev/null and b/tests/references/glide-close-gnome-xsession-33.png differ
diff --git a/tests/references/glide-close-gnome-xsession-34.png b/tests/references/glide-close-gnome-xsession-34.png
new file mode 100644
index 0000000..0df6ebb
Binary files /dev/null and b/tests/references/glide-close-gnome-xsession-34.png differ
diff --git a/tests/references/glide-close-gnome-xsession-35.png b/tests/references/glide-close-gnome-xsession-35.png
new file mode 100644
index 0000000..0df6ebb
Binary files /dev/null and b/tests/references/glide-close-gnome-xsession-35.png differ
diff --git a/tests/references/glide-close-gnome-xsession-36.png b/tests/references/glide-close-gnome-xsession-36.png
new file mode 100644
index 0000000..0df6ebb
Binary files /dev/null and b/tests/references/glide-close-gnome-xsession-36.png differ
diff --git a/tests/references/glide-open-gnome-wayland-nested-32.png b/tests/references/glide-open-gnome-wayland-nested-32.png
new file mode 100644
index 0000000..3e668a0
Binary files /dev/null and b/tests/references/glide-open-gnome-wayland-nested-32.png differ
diff --git a/tests/references/glide-open-gnome-wayland-nested-33.png b/tests/references/glide-open-gnome-wayland-nested-33.png
new file mode 100644
index 0000000..3e668a0
Binary files /dev/null and b/tests/references/glide-open-gnome-wayland-nested-33.png differ
diff --git a/tests/references/glide-open-gnome-wayland-nested-34.png b/tests/references/glide-open-gnome-wayland-nested-34.png
new file mode 100644
index 0000000..3e668a0
Binary files /dev/null and b/tests/references/glide-open-gnome-wayland-nested-34.png differ
diff --git a/tests/references/glide-open-gnome-wayland-nested-35.png b/tests/references/glide-open-gnome-wayland-nested-35.png
new file mode 100644
index 0000000..3e668a0
Binary files /dev/null and b/tests/references/glide-open-gnome-wayland-nested-35.png differ
diff --git a/tests/references/glide-open-gnome-wayland-nested-36.png b/tests/references/glide-open-gnome-wayland-nested-36.png
new file mode 100644
index 0000000..3e668a0
Binary files /dev/null and b/tests/references/glide-open-gnome-wayland-nested-36.png differ
diff --git a/tests/references/glide-open-gnome-xsession-32.png b/tests/references/glide-open-gnome-xsession-32.png
new file mode 100644
index 0000000..3e668a0
Binary files /dev/null and b/tests/references/glide-open-gnome-xsession-32.png differ
diff --git a/tests/references/glide-open-gnome-xsession-33.png b/tests/references/glide-open-gnome-xsession-33.png
new file mode 100644
index 0000000..3e668a0
Binary files /dev/null and b/tests/references/glide-open-gnome-xsession-33.png differ
diff --git a/tests/references/glide-open-gnome-xsession-34.png b/tests/references/glide-open-gnome-xsession-34.png
new file mode 100644
index 0000000..3e668a0
Binary files /dev/null and b/tests/references/glide-open-gnome-xsession-34.png differ
diff --git a/tests/references/glide-open-gnome-xsession-35.png b/tests/references/glide-open-gnome-xsession-35.png
new file mode 100644
index 0000000..3e668a0
Binary files /dev/null and b/tests/references/glide-open-gnome-xsession-35.png differ
diff --git a/tests/references/glide-open-gnome-xsession-36.png b/tests/references/glide-open-gnome-xsession-36.png
new file mode 100644
index 0000000..3e668a0
Binary files /dev/null and b/tests/references/glide-open-gnome-xsession-36.png differ
diff --git a/tests/run-test.sh b/tests/run-test.sh
index 891b715..e379b62 100755
--- a/tests/run-test.sh
+++ b/tests/run-test.sh
@@ -210,6 +210,7 @@ set_setting "test-mode" true
test_effect "energize-a"
test_effect "energize-b"
test_effect "fire"
+test_effect "glide"
test_effect "hexagon"
test_effect "incinerate"
test_effect "pixelate"