From 9c547e2771e11cf36cb65ad5a41bbcd98f610b87 Mon Sep 17 00:00:00 2001 From: Simon Schneegans Date: Sat, 27 Aug 2022 13:39:27 +0200 Subject: [PATCH] :tada: Add pixelate effect --- extension.js | 1 + kwin/build.sh | 1 + kwin/pixelate/config.ui | 132 ++++++++++++ kwin/pixelate/main.xml | 16 ++ kwin/pixelate/onSettingsChanged.js | 6 + prefs.js | 1 + resources/shaders/pixelate.frag | 36 ++++ resources/ui/gtk3/Pixelate.ui | 192 ++++++++++++++++++ resources/ui/gtk4/Pixelate.ui | 163 +++++++++++++++ ...ell.extensions.burn-my-windows.gschema.xml | 35 ++++ src/Pixelate.js | 102 ++++++++++ tests/generate-references.sh | 1 + ...pixelate-close-gnome-wayland-nested-32.png | Bin 0 -> 495 bytes ...pixelate-close-gnome-wayland-nested-33.png | Bin 0 -> 513 bytes ...pixelate-close-gnome-wayland-nested-34.png | Bin 0 -> 461 bytes ...pixelate-close-gnome-wayland-nested-35.png | Bin 0 -> 461 bytes ...pixelate-close-gnome-wayland-nested-36.png | Bin 0 -> 445 bytes .../pixelate-close-gnome-xsession-32.png | Bin 0 -> 495 bytes .../pixelate-close-gnome-xsession-33.png | Bin 0 -> 513 bytes .../pixelate-close-gnome-xsession-34.png | Bin 0 -> 476 bytes .../pixelate-close-gnome-xsession-35.png | Bin 0 -> 476 bytes .../pixelate-close-gnome-xsession-36.png | Bin 0 -> 476 bytes .../pixelate-open-gnome-wayland-nested-32.png | Bin 0 -> 495 bytes .../pixelate-open-gnome-wayland-nested-33.png | Bin 0 -> 513 bytes .../pixelate-open-gnome-wayland-nested-34.png | Bin 0 -> 461 bytes .../pixelate-open-gnome-wayland-nested-35.png | Bin 0 -> 461 bytes .../pixelate-open-gnome-wayland-nested-36.png | Bin 0 -> 445 bytes .../pixelate-open-gnome-xsession-32.png | Bin 0 -> 495 bytes .../pixelate-open-gnome-xsession-33.png | Bin 0 -> 513 bytes .../pixelate-open-gnome-xsession-34.png | Bin 0 -> 476 bytes .../pixelate-open-gnome-xsession-35.png | Bin 0 -> 476 bytes .../pixelate-open-gnome-xsession-36.png | Bin 0 -> 476 bytes tests/run-test.sh | 1 + 33 files changed, 687 insertions(+) create mode 100755 kwin/pixelate/config.ui create mode 100755 kwin/pixelate/main.xml create mode 100644 kwin/pixelate/onSettingsChanged.js create mode 100644 resources/shaders/pixelate.frag create mode 100644 resources/ui/gtk3/Pixelate.ui create mode 100644 resources/ui/gtk4/Pixelate.ui create mode 100644 src/Pixelate.js create mode 100644 tests/references/pixelate-close-gnome-wayland-nested-32.png create mode 100644 tests/references/pixelate-close-gnome-wayland-nested-33.png create mode 100644 tests/references/pixelate-close-gnome-wayland-nested-34.png create mode 100644 tests/references/pixelate-close-gnome-wayland-nested-35.png create mode 100644 tests/references/pixelate-close-gnome-wayland-nested-36.png create mode 100644 tests/references/pixelate-close-gnome-xsession-32.png create mode 100644 tests/references/pixelate-close-gnome-xsession-33.png create mode 100644 tests/references/pixelate-close-gnome-xsession-34.png create mode 100644 tests/references/pixelate-close-gnome-xsession-35.png create mode 100644 tests/references/pixelate-close-gnome-xsession-36.png create mode 100644 tests/references/pixelate-open-gnome-wayland-nested-32.png create mode 100644 tests/references/pixelate-open-gnome-wayland-nested-33.png create mode 100644 tests/references/pixelate-open-gnome-wayland-nested-34.png create mode 100644 tests/references/pixelate-open-gnome-wayland-nested-35.png create mode 100644 tests/references/pixelate-open-gnome-wayland-nested-36.png create mode 100644 tests/references/pixelate-open-gnome-xsession-32.png create mode 100644 tests/references/pixelate-open-gnome-xsession-33.png create mode 100644 tests/references/pixelate-open-gnome-xsession-34.png create mode 100644 tests/references/pixelate-open-gnome-xsession-35.png create mode 100644 tests/references/pixelate-open-gnome-xsession-36.png diff --git a/extension.js b/extension.js index 207a8ce..ae4452e 100644 --- a/extension.js +++ b/extension.js @@ -58,6 +58,7 @@ class Extension { new Me.imports.src.Hexagon.Hexagon(), new Me.imports.src.Incinerate.Incinerate(), new Me.imports.src.Matrix.Matrix(), + new Me.imports.src.Pixelate.Pixelate(), new Me.imports.src.SnapOfDisintegration.SnapOfDisintegration(), new Me.imports.src.TRexAttack.TRexAttack(), new Me.imports.src.TVEffect.TVEffect(), diff --git a/kwin/build.sh b/kwin/build.sh index 2bbf5bc..fd6e2f3 100755 --- a/kwin/build.sh +++ b/kwin/build.sh @@ -133,6 +133,7 @@ generate "energize-b" "Energize B [Burn-My-Windows]" "Using different transporte generate "fire" "Fire [Burn-My-Windows]" "The classic effect inspired by Compiz" 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" generate "tv" "TV Effect [Burn-My-Windows]" "Make windows close like turning off a TV" generate "wisps" "Wisps [Burn-My-Windows]" "Let your windows be carried away to the realm of dreams by these little fairies" diff --git a/kwin/pixelate/config.ui b/kwin/pixelate/config.ui new file mode 100755 index 0000000..3fa647c --- /dev/null +++ b/kwin/pixelate/config.ui @@ -0,0 +1,132 @@ + + + BMWConfigForm + + + + 0 + 0 + 562 + 365 + + + + + + + Line Color: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 1.000000000000000 + + + 5.000000000000000 + + + + + + + 0.100000000000000 + + + 10.000000000000000 + + + + + + + milliseconds + + + 100 + + + 9999 + + + 100 + + + + + + + Glow Color: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Line Width: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Duration: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Scale: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Additive Blending + + + + + + + true + + + + + + + true + + + + + + + + KColorButton + QPushButton +
kcolorbutton.h
+
+
+ + +
\ No newline at end of file diff --git a/kwin/pixelate/main.xml b/kwin/pixelate/main.xml new file mode 100755 index 0000000..b476ecf --- /dev/null +++ b/kwin/pixelate/main.xml @@ -0,0 +1,16 @@ + + + + + + 1500 + + + 40 + + + 10 + + + \ No newline at end of file diff --git a/kwin/pixelate/onSettingsChanged.js b/kwin/pixelate/onSettingsChanged.js new file mode 100644 index 0000000..93aec00 --- /dev/null +++ b/kwin/pixelate/onSettingsChanged.js @@ -0,0 +1,6 @@ +// 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, 'uNoise', effect.readConfig('Noise', 1.0)); +effect.setUniform(this.shader, 'uPixelSize', effect.readConfig('PixelSize', 1.0)); diff --git a/prefs.js b/prefs.js index 3bc0863..64799c0 100644 --- a/prefs.js +++ b/prefs.js @@ -54,6 +54,7 @@ var PreferencesDialog = class PreferencesDialog { new Me.imports.src.Hexagon.Hexagon(), new Me.imports.src.Incinerate.Incinerate(), new Me.imports.src.Matrix.Matrix(), + new Me.imports.src.Pixelate.Pixelate(), new Me.imports.src.SnapOfDisintegration.SnapOfDisintegration(), new Me.imports.src.TRexAttack.TRexAttack(), new Me.imports.src.TVEffect.TVEffect(), diff --git a/resources/shaders/pixelate.frag b/resources/shaders/pixelate.frag new file mode 100644 index 0000000..12e4557 --- /dev/null +++ b/resources/shaders/pixelate.frag @@ -0,0 +1,36 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// ) ( // +// ( /( ( ( ) ( ( ( ( )\ ) ( ( // +// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( // +// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ // +// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) // +// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< // +// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ // +// |__/ // +// Copyright (c) 2021 Simon Schneegans // +// Released under the GPLv3 or later. See LICENSE file for details. // +////////////////////////////////////////////////////////////////////////////////////////// + +// The content from common.glsl is automatically prepended to each shader effect. + +uniform float uNoise; +uniform float uPixelSize; + +void main() { + // We simply inverse the progress for opening windows. + float progress = uForOpening ? 1.0 - uProgress : uProgress; + + // The current level of pixelation increases with the progress. + float pixelSize = ceil(uPixelSize * progress + 1.0); + vec2 pixelGrid = vec2(pixelSize) / uSize; + vec2 texcoord = iTexCoord.st - mod(iTexCoord.st, pixelGrid) + pixelGrid * 0.5; + vec4 oColor = getInputColor(texcoord); + + // Hide selected pixels based on some random noise. + float random = simplex2DFractal(texcoord * uNoise * uSize / 1000.0); + if (random * 1.5 - 0.25 < progress) { + oColor.a = 0.0; + } + + setOutputColor(oColor); +} \ No newline at end of file diff --git a/resources/ui/gtk3/Pixelate.ui b/resources/ui/gtk3/Pixelate.ui new file mode 100644 index 0000000..e1691a1 --- /dev/null +++ b/resources/ui/gtk3/Pixelate.ui @@ -0,0 +1,192 @@ + + + + + 10000 + 100 + 1 + 100 + + + + 100 + 1 + 1 + 10 + + + + 50 + 1 + 1 + 10 + + + + vertical + + + + + + none + + + + + 10 + 10 + 10 + 10 + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + pixelate-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 10 + 10 + 10 + 10 + 0 + + + 8 + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + pixelate-noise + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 10 + 10 + 10 + 10 + 0 + + + 8 + + + Pixel Size + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + pixelate-pixel-size + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/Pixelate.ui b/resources/ui/gtk4/Pixelate.ui new file mode 100644 index 0000000..9098f61 --- /dev/null +++ b/resources/ui/gtk4/Pixelate.ui @@ -0,0 +1,163 @@ + + + + + vertical + + + + + + none + 1 + + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Randomness + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 100 + 1 + 1 + 10 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Pixel Size + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 50 + 1 + 1 + 10 + + + + + + + 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 ee26406..86cc161 100644 --- a/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml +++ b/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml @@ -83,6 +83,41 @@ The amount of suction of the apparition effect. + + + + + + + false + Pixelate Close Effect + Use the Pixelate effect for window closing. + + + + false + Pixelate Open Effect + Use the Pixelate effect for window opening. + + + + 500 + Pixelate Animation Time + The time the Pixelate effect takes. + + + + 40 + Pixelate Noise + The noise of the effect. + + + + 10 + Pixelate Pixel Size + The size of the maximum pixelation. + + diff --git a/src/Pixelate.js b/src/Pixelate.js new file mode 100644 index 0000000..248f39a --- /dev/null +++ b/src/Pixelate.js @@ -0,0 +1,102 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// ) ( // +// ( /( ( ( ) ( ( ( ( )\ ) ( ( // +// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( // +// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ // +// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) // +// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< // +// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ // +// |__/ // +// Copyright (c) 2021 Simon Schneegans // +// Released under the GPLv3 or later. See LICENSE file for details. // +////////////////////////////////////////////////////////////////////////////////////////// + +'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 pixelates the window texture and randomly hides pixels until // +// the entire window is gone. // +////////////////////////////////////////////////////////////////////////////////////////// + +// 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 Pixelate = 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._uNoise = shader.get_uniform_location('uNoise'); + shader._uPixelSize = shader.get_uniform_location('uPixelSize'); + + // Write all uniform values at the start of each animation. + shader.connect('begin-animation', (shader, settings) => { + // clang-format off + shader.set_uniform_float(shader._uNoise, 1, [settings.get_double('pixelate-noise')]); + shader.set_uniform_float(shader._uPixelSize, 1, [settings.get_double('pixelate-pixel-size')]); + // 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 'pixelate'; + } + + // 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 _('Pixelate'); + } + + // -------------------------------------------------------------------- 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()}/Pixelate.ui`); + + // Bind all properties. + dialog.bindAdjustment('pixelate-animation-time'); + dialog.bindAdjustment('pixelate-noise'); + dialog.bindAdjustment('pixelate-pixel-size'); + + // Finally, return the new settings page. + return dialog.getBuilder().get_object('pixelate-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/tests/generate-references.sh b/tests/generate-references.sh index 45f26d4..a17f463 100755 --- a/tests/generate-references.sh +++ b/tests/generate-references.sh @@ -171,6 +171,7 @@ capture_effect "energize-b" capture_effect "fire" capture_effect "hexagon" capture_effect "incinerate" +capture_effect "pixelate" capture_effect "tv" capture_effect "wisps" diff --git a/tests/references/pixelate-close-gnome-wayland-nested-32.png b/tests/references/pixelate-close-gnome-wayland-nested-32.png new file mode 100644 index 0000000000000000000000000000000000000000..e545ebcf1cecee67a565474d1d59e0cf0df7fba8 GIT binary patch literal 495 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000^ zP)t-s0z8QD@bC8Z^r54p?Ck4oadP$a^W);-*w@!;Zf|UGad>-t;^E=)@$li{;7d?a z>FDV6^YZ5A<>%(+zmxxlNYMYYHQhyzYs6*1bG>vM>@Dfpn z6kVAa*yu(?i2M$zewWhQx4&3KR3PnBSaCBEMaVApQng~$O{XBiUDblRrmk^002ovPDHLkV1nr!*sA~l literal 0 HcmV?d00001 diff --git a/tests/references/pixelate-close-gnome-wayland-nested-33.png b/tests/references/pixelate-close-gnome-wayland-nested-33.png new file mode 100644 index 0000000000000000000000000000000000000000..1b8becc6a6b511d8c7b10c34a986d7e17bb020ef GIT binary patch literal 513 zcmV+c0{;DpP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00012 zP)t-s0z8QJ_4J^jq3Gx4(a_MLqoZVJX>4(F@bK^K?CbUP^W);-*w@!;Zf|UGad>-t z;^E=)@$li{;7d?a>FDV6^YZ5A<>%(+txRLPJfD3q*#nMnyH25X?l8?Xh=WAB?CFu&}9qC~2s%Qj~wJ@M>-Z$d?h zR7vav^r});5_$$wB2*G->Rc5iVkJ#;0PgE}$WdblPT&kEp`@p6FW?G%NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ332`Q^$U|thmE6i zdsml*o!#=4D@?6yCQY3h9v%DT^QZ8bxMxqFOq)4##_ZWkmM;7M|Nq0|it~Yb8I!!- zUHBz-G28@l1dcg#S~=GJ-yk1F^aWO=!$Yo_X42UB893)N5XU! zy7mdKW8HZt*+rY#ed~j3O>w>ntBy~QxN5Yj)k0U6mxpJLak}4uTaV^i7OS;v%(|+z z;LE$ayREIPfHqEOI5X2Y{r$bY4g1?!uY3ZEU$}4~P*=iLei6@+s9(KVis9UQ+}r~D y_bxU(v{k@sZ${1<*CQO4o8-2!9OSsp#9;L;ef3_k7#X1V89ZJ6T-G@yGywpQ@~z7N literal 0 HcmV?d00001 diff --git a/tests/references/pixelate-close-gnome-wayland-nested-35.png b/tests/references/pixelate-close-gnome-wayland-nested-35.png new file mode 100644 index 0000000000000000000000000000000000000000..114dced1070144487203f95429371f5baa11aea3 GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^DImNS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ332`Q^$U|thmE6i zdsml*o!#=4D@?6yCQY3h9v%DT^QZ8bxMxqFOq)4##_ZWkmM;7M|Nq0|it~Yb8I!!- zUHBz-G28@l1dcg#S~=GJ-yk1F^aWO=!$Yo_X42UB893)N5XU! zy7mdKW8HZt*+rY#ed~j3O>w>ntBy~QxN5Yj)k0U6mxpJLak}4uTaV^i7OS;v%(|+z z;LE$ayREIPfHqEOI5X2Y{r$bY4g1?!uY3ZEU$}4~P*=iLei6@+s9(KVis9UQ+}r~D y_bxU(v{k@sZ${1<*CQO4o8-2!9OSsp#9;L;ef3_k7#X1V89ZJ6T-G@yGywpQ@~z7N literal 0 HcmV?d00001 diff --git a/tests/references/pixelate-close-gnome-wayland-nested-36.png b/tests/references/pixelate-close-gnome-wayland-nested-36.png new file mode 100644 index 0000000000000000000000000000000000000000..7644aa2b52ba1385fce28d96a42c1656f2885bd6 GIT binary patch literal 445 zcmV;u0Yd(XP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000X zP)t-s0z8QN`uZ|5GWhZG%t%tKtgOYw#ZXXCJUl#)kB|TV{~?`_8vpL<(ro z^i}`>01#tgPIdqQ2Y>(o1ULWy1C9Uy0pL5p#jgMW0P;yhK~z}7?U%6;!Y~X)WsZg} zqM`(?kOkn*E2O7lg|w7eA=_dctSFX4I9lr$KF9el#kbCi0SZFIFgkpzi7PvzGkntq z(zf3FY1(xi`!T6W#=ZAfL*lzIFeP)&sDRw!qal-rh%(AWvn)<$Nb+-824#!P^4t&( zxrj``9*HigN)6E=%XLF?L>1wqr2Fz%G(`6ZnXqiKhQQLJYgHb7pGoCNa>9zZy}D)8 z^&%qPtn`|-uT+jGf0*}uAI8%#Jk@p>0_hs1Pd^kty`1@B91VdjWj6&w{y>U71=NLN n-kr)3QO3G8qoNG?9pTtt)q?*ucrDoU00000NkvXXu0mjfr_r-p literal 0 HcmV?d00001 diff --git a/tests/references/pixelate-close-gnome-xsession-32.png b/tests/references/pixelate-close-gnome-xsession-32.png new file mode 100644 index 0000000000000000000000000000000000000000..e545ebcf1cecee67a565474d1d59e0cf0df7fba8 GIT binary patch literal 495 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000^ zP)t-s0z8QD@bC8Z^r54p?Ck4oadP$a^W);-*w@!;Zf|UGad>-t;^E=)@$li{;7d?a z>FDV6^YZ5A<>%(+zmxxlNYMYYHQhyzYs6*1bG>vM>@Dfpn z6kVAa*yu(?i2M$zewWhQx4&3KR3PnBSaCBEMaVApQng~$O{XBiUDblRrmk^002ovPDHLkV1nr!*sA~l literal 0 HcmV?d00001 diff --git a/tests/references/pixelate-close-gnome-xsession-33.png b/tests/references/pixelate-close-gnome-xsession-33.png new file mode 100644 index 0000000000000000000000000000000000000000..1b8becc6a6b511d8c7b10c34a986d7e17bb020ef GIT binary patch literal 513 zcmV+c0{;DpP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00012 zP)t-s0z8QJ_4J^jq3Gx4(a_MLqoZVJX>4(F@bK^K?CbUP^W);-*w@!;Zf|UGad>-t z;^E=)@$li{;7d?a>FDV6^YZ5A<>%(+txRLPJfD3q*#nMnyH25X?l8?Xh=WAB?CFu&}9qC~2s%Qj~wJ@M>-Z$d?h zR7vav^r});5_$$wB2*G->Rc5iVkJ#;0PgE}$WdblPT&kEp`@p6FW?G%004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000y zP)t-s0z8QJ_4JL8kf^Gvx45@7Iy~Xw;D?KggNBCO+}l@MU2=AJIzU3r&dotbNvEl( zoSvSTo15wA=>Px!x;nV#00001VoOIv6AZgtmH+?%5MyCZb^rhefB*mlH~;_xjsO4w z;5)#@uK)l5_DMuRRA}Dqm)R17APhyJ`>I|3|6l7|Ul2?Pb=v7P_dGcma(IXdhL93f z#85p&$e_fJWF{hndHG~%1*D+yc@2g&N}NhImXwu3-hv%SgGR~lK#5aHrN`|-d5~}b zdgbRCDe)$$%+VvLXQ@DmQ;A-M+Evh;ni98?XrSRMD6e>wQ1S`MS4x!tqD@bFyjuN+$9xNKLH*g0Jkfo!^dl10004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000y zP)t-s0z8QJ_4JL8kf^Gvx45@7Iy~Xw;D?KggNBCO+}l@MU2=AJIzU3r&dotbNvEl( zoSvSTo15wA=>Px!x;nV#00001VoOIv6AZgtmH+?%5MyCZb^rhefB*mlH~;_xjsO4w z;5)#@uK)l5_DMuRRA}Dqm)R17APhyJ`>I|3|6l7|Ul2?Pb=v7P_dGcma(IXdhL93f z#85p&$e_fJWF{hndHG~%1*D+yc@2g&N}NhImXwu3-hv%SgGR~lK#5aHrN`|-d5~}b zdgbRCDe)$$%+VvLXQ@DmQ;A-M+Evh;ni98?XrSRMD6e>wQ1S`MS4x!tqD@bFyjuN+$9xNKLH*g0Jkfo!^dl10NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5l+X(B32|kz>G<{QmxqT( zadB~Vb+xUnZG3!uMn*4~)V@Sl|w==By4lD4q^ zOD#R$x_cVJH!F2Lh$?HcEZXh&Ddmi9j!bG~Sm;*YwOdPLi{0n(FFoh`Iq21;ZSOY( zpGoVHj4z3Ou6Aak%b9~aTa1PBCAVx}rq5v`7_+}nD`V3cL62Cm6LBd=^4I^^p}qKo zSK1SMmj&}xPRmWKy1)F)#G_q_FFNJIX77#I>~?4K_si=P4oVcByFZa%xHt6rERTPO Qf#JpA>FVdQ&MBb@04{L93;+NC literal 0 HcmV?d00001 diff --git a/tests/references/pixelate-open-gnome-wayland-nested-32.png b/tests/references/pixelate-open-gnome-wayland-nested-32.png new file mode 100644 index 0000000000000000000000000000000000000000..e545ebcf1cecee67a565474d1d59e0cf0df7fba8 GIT binary patch literal 495 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000^ zP)t-s0z8QD@bC8Z^r54p?Ck4oadP$a^W);-*w@!;Zf|UGad>-t;^E=)@$li{;7d?a z>FDV6^YZ5A<>%(+zmxxlNYMYYHQhyzYs6*1bG>vM>@Dfpn z6kVAa*yu(?i2M$zewWhQx4&3KR3PnBSaCBEMaVApQng~$O{XBiUDblRrmk^002ovPDHLkV1nr!*sA~l literal 0 HcmV?d00001 diff --git a/tests/references/pixelate-open-gnome-wayland-nested-33.png b/tests/references/pixelate-open-gnome-wayland-nested-33.png new file mode 100644 index 0000000000000000000000000000000000000000..1b8becc6a6b511d8c7b10c34a986d7e17bb020ef GIT binary patch literal 513 zcmV+c0{;DpP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00012 zP)t-s0z8QJ_4J^jq3Gx4(a_MLqoZVJX>4(F@bK^K?CbUP^W);-*w@!;Zf|UGad>-t z;^E=)@$li{;7d?a>FDV6^YZ5A<>%(+txRLPJfD3q*#nMnyH25X?l8?Xh=WAB?CFu&}9qC~2s%Qj~wJ@M>-Z$d?h zR7vav^r});5_$$wB2*G->Rc5iVkJ#;0PgE}$WdblPT&kEp`@p6FW?G%NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ332`Q^$U|thmE6i zdsml*o!#=4D@?6yCQY3h9v%DT^QZ8bxMxqFOq)4##_ZWkmM;7M|Nq0|it~Yb8I!!- zUHBz-G28@l1dcg#S~=GJ-yk1F^aWO=!$Yo_X42UB893)N5XU! zy7mdKW8HZt*+rY#ed~j3O>w>ntBy~QxN5Yj)k0U6mxpJLak}4uTaV^i7OS;v%(|+z z;LE$ayREIPfHqEOI5X2Y{r$bY4g1?!uY3ZEU$}4~P*=iLei6@+s9(KVis9UQ+}r~D y_bxU(v{k@sZ${1<*CQO4o8-2!9OSsp#9;L;ef3_k7#X1V89ZJ6T-G@yGywpQ@~z7N literal 0 HcmV?d00001 diff --git a/tests/references/pixelate-open-gnome-wayland-nested-35.png b/tests/references/pixelate-open-gnome-wayland-nested-35.png new file mode 100644 index 0000000000000000000000000000000000000000..114dced1070144487203f95429371f5baa11aea3 GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^DImNS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ332`Q^$U|thmE6i zdsml*o!#=4D@?6yCQY3h9v%DT^QZ8bxMxqFOq)4##_ZWkmM;7M|Nq0|it~Yb8I!!- zUHBz-G28@l1dcg#S~=GJ-yk1F^aWO=!$Yo_X42UB893)N5XU! zy7mdKW8HZt*+rY#ed~j3O>w>ntBy~QxN5Yj)k0U6mxpJLak}4uTaV^i7OS;v%(|+z z;LE$ayREIPfHqEOI5X2Y{r$bY4g1?!uY3ZEU$}4~P*=iLei6@+s9(KVis9UQ+}r~D y_bxU(v{k@sZ${1<*CQO4o8-2!9OSsp#9;L;ef3_k7#X1V89ZJ6T-G@yGywpQ@~z7N literal 0 HcmV?d00001 diff --git a/tests/references/pixelate-open-gnome-wayland-nested-36.png b/tests/references/pixelate-open-gnome-wayland-nested-36.png new file mode 100644 index 0000000000000000000000000000000000000000..7644aa2b52ba1385fce28d96a42c1656f2885bd6 GIT binary patch literal 445 zcmV;u0Yd(XP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000X zP)t-s0z8QN`uZ|5GWhZG%t%tKtgOYw#ZXXCJUl#)kB|TV{~?`_8vpL<(ro z^i}`>01#tgPIdqQ2Y>(o1ULWy1C9Uy0pL5p#jgMW0P;yhK~z}7?U%6;!Y~X)WsZg} zqM`(?kOkn*E2O7lg|w7eA=_dctSFX4I9lr$KF9el#kbCi0SZFIFgkpzi7PvzGkntq z(zf3FY1(xi`!T6W#=ZAfL*lzIFeP)&sDRw!qal-rh%(AWvn)<$Nb+-824#!P^4t&( zxrj``9*HigN)6E=%XLF?L>1wqr2Fz%G(`6ZnXqiKhQQLJYgHb7pGoCNa>9zZy}D)8 z^&%qPtn`|-uT+jGf0*}uAI8%#Jk@p>0_hs1Pd^kty`1@B91VdjWj6&w{y>U71=NLN n-kr)3QO3G8qoNG?9pTtt)q?*ucrDoU00000NkvXXu0mjfr_r-p literal 0 HcmV?d00001 diff --git a/tests/references/pixelate-open-gnome-xsession-32.png b/tests/references/pixelate-open-gnome-xsession-32.png new file mode 100644 index 0000000000000000000000000000000000000000..e545ebcf1cecee67a565474d1d59e0cf0df7fba8 GIT binary patch literal 495 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000^ zP)t-s0z8QD@bC8Z^r54p?Ck4oadP$a^W);-*w@!;Zf|UGad>-t;^E=)@$li{;7d?a z>FDV6^YZ5A<>%(+zmxxlNYMYYHQhyzYs6*1bG>vM>@Dfpn z6kVAa*yu(?i2M$zewWhQx4&3KR3PnBSaCBEMaVApQng~$O{XBiUDblRrmk^002ovPDHLkV1nr!*sA~l literal 0 HcmV?d00001 diff --git a/tests/references/pixelate-open-gnome-xsession-33.png b/tests/references/pixelate-open-gnome-xsession-33.png new file mode 100644 index 0000000000000000000000000000000000000000..1b8becc6a6b511d8c7b10c34a986d7e17bb020ef GIT binary patch literal 513 zcmV+c0{;DpP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00012 zP)t-s0z8QJ_4J^jq3Gx4(a_MLqoZVJX>4(F@bK^K?CbUP^W);-*w@!;Zf|UGad>-t z;^E=)@$li{;7d?a>FDV6^YZ5A<>%(+txRLPJfD3q*#nMnyH25X?l8?Xh=WAB?CFu&}9qC~2s%Qj~wJ@M>-Z$d?h zR7vav^r});5_$$wB2*G->Rc5iVkJ#;0PgE}$WdblPT&kEp`@p6FW?G%004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000y zP)t-s0z8QJ_4JL8kf^Gvx45@7Iy~Xw;D?KggNBCO+}l@MU2=AJIzU3r&dotbNvEl( zoSvSTo15wA=>Px!x;nV#00001VoOIv6AZgtmH+?%5MyCZb^rhefB*mlH~;_xjsO4w z;5)#@uK)l5_DMuRRA}Dqm)R17APhyJ`>I|3|6l7|Ul2?Pb=v7P_dGcma(IXdhL93f z#85p&$e_fJWF{hndHG~%1*D+yc@2g&N}NhImXwu3-hv%SgGR~lK#5aHrN`|-d5~}b zdgbRCDe)$$%+VvLXQ@DmQ;A-M+Evh;ni98?XrSRMD6e>wQ1S`MS4x!tqD@bFyjuN+$9xNKLH*g0Jkfo!^dl10004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000y zP)t-s0z8QJ_4JL8kf^Gvx45@7Iy~Xw;D?KggNBCO+}l@MU2=AJIzU3r&dotbNvEl( zoSvSTo15wA=>Px!x;nV#00001VoOIv6AZgtmH+?%5MyCZb^rhefB*mlH~;_xjsO4w z;5)#@uK)l5_DMuRRA}Dqm)R17APhyJ`>I|3|6l7|Ul2?Pb=v7P_dGcma(IXdhL93f z#85p&$e_fJWF{hndHG~%1*D+yc@2g&N}NhImXwu3-hv%SgGR~lK#5aHrN`|-d5~}b zdgbRCDe)$$%+VvLXQ@DmQ;A-M+Evh;ni98?XrSRMD6e>wQ1S`MS4x!tqD@bFyjuN+$9xNKLH*g0Jkfo!^dl10NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5l+X(B32|kz>G<{QmxqT( zadB~Vb+xUnZG3!uMn*4~)V@Sl|w==By4lD4q^ zOD#R$x_cVJH!F2Lh$?HcEZXh&Ddmi9j!bG~Sm;*YwOdPLi{0n(FFoh`Iq21;ZSOY( zpGoVHj4z3Ou6Aak%b9~aTa1PBCAVx}rq5v`7_+}nD`V3cL62Cm6LBd=^4I^^p}qKo zSK1SMmj&}xPRmWKy1)F)#G_q_FFNJIX77#I>~?4K_si=P4oVcByFZa%xHt6rERTPO Qf#JpA>FVdQ&MBb@04{L93;+NC literal 0 HcmV?d00001 diff --git a/tests/run-test.sh b/tests/run-test.sh index 38c9dd4..7a3e1b8 100755 --- a/tests/run-test.sh +++ b/tests/run-test.sh @@ -200,6 +200,7 @@ test_effect "energize-b" test_effect "fire" test_effect "hexagon" test_effect "incinerate" +test_effect "pixelate" test_effect "tv" test_effect "wisps"