🔀 Merge pull request #256 from Schneegans/feature/portal
@@ -41,6 +41,7 @@ Effect | Preview
|
||||
**Pixelate** <br> Pixelate your windows and randomly hide pixels until the entire window is gone.| <img src ="docs/pics/pixelate.gif" />
|
||||
**Pixel Wheel** <br> This simple effect pixelates the window and hides the pixels in a wheel-like fashion.| <img src ="docs/pics/pixel-wheel.gif" />
|
||||
**Pixel Wipe** <br> This effect pixelates the window and hides the pixels radially, starting from the pointer position.| <img src ="docs/pics/pixel-wipe.gif" />
|
||||
**Portal** <br> This ridiculous effect teleports your windows from and to alternative dimensions.| <img src ="docs/pics/portal.gif" />
|
||||
**Snap of Disintegration** <br> Dissolve your windows into a cloud of dust.| <img src ="docs/pics/snap.gif" />
|
||||
**T-Rex Attack** <br> Destroy your windows with a series of violent slashes!| <img src ="docs/pics/trex.gif" />
|
||||
**TV-Effect** <br> This is a very simple effect to demonstrate that this extension could also be used in a more professional environment. | <img src ="docs/pics/tv.gif" />
|
||||
@@ -72,6 +73,7 @@ Below is a table which summarizes the current availability for all effects.
|
||||
<tr><td>Pixelate</td> <td>✅</td> <td>✅</td> <td>✅</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td> </tr>
|
||||
<tr><td>Pixel Wheel</td> <td>✅</td> <td>✅</td> <td>✅</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td> </tr>
|
||||
<tr><td>Pixel Wipe</td> <td>✅</td> <td>✅</td> <td>✅</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td> </tr>
|
||||
<tr><td>Portal</td> <td>✅</td> <td>✅</td> <td>✅</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td> </tr>
|
||||
<tr><td>Snap of Disintegration</td> <td> </td> <td> </td> <td>✅</td><td>✅</td><td>✅</td><td>✅</td><td> </td> </tr>
|
||||
<tr><td>T-Rex Attack</td> <td> </td> <td> </td> <td>✅</td><td>✅</td><td>✅</td><td>✅</td><td> </td> </tr>
|
||||
<tr><td>TV-Effect</td> <td>✅</td> <td>✅</td> <td>✅</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td> </tr>
|
||||
|
||||
@@ -5,6 +5,14 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
# Changelog of the Burn-My-Windows Extension
|
||||
|
||||
## [Burn My Windows 23](https://github.com/schneegans/Burn-My-Windows/releases/tag/v23)
|
||||
|
||||
**Release Date:** TBD
|
||||
|
||||
#### New Features
|
||||
|
||||
* **New Effect: Portal.** This ridiculous effect teleports your windows from and to alternative dimensions. It may resemble the portal from a well-known cartoon series...
|
||||
|
||||
## [Burn My Windows 22](https://github.com/schneegans/Burn-My-Windows/releases/tag/v22)
|
||||
|
||||
**Release Date:** 2022-11-09
|
||||
|
||||
|
After Width: | Height: | Size: 840 KiB |
@@ -64,6 +64,7 @@ class Extension {
|
||||
new Me.imports.src.Pixelate.Pixelate(),
|
||||
new Me.imports.src.PixelWheel.PixelWheel(),
|
||||
new Me.imports.src.PixelWipe.PixelWipe(),
|
||||
new Me.imports.src.Portal.Portal(),
|
||||
new Me.imports.src.SnapOfDisintegration.SnapOfDisintegration(),
|
||||
new Me.imports.src.TRexAttack.TRexAttack(),
|
||||
new Me.imports.src.TVEffect.TVEffect(),
|
||||
|
||||
@@ -138,6 +138,7 @@ generate "incinerate" "Incinerate [Burn-My-Windows]" "A less snappy but defini
|
||||
generate "pixelate" "Pixelate [Burn-My-Windows]" "Pixelate the window and randomly hide the pixels"
|
||||
generate "pixel-wheel" "Pixel Wheel [Burn-My-Windows]" "Pixelate the window and hide the pixels in a wheel-like fashion"
|
||||
generate "pixel-wipe" "Pixel Wipe [Burn-My-Windows]" "Pixelate the window and hide the pixels radially, starting from the pointer position"
|
||||
generate "portal" "Portal [Burn-My-Windows]" "Transfer your windows to other locations in space and time"
|
||||
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"
|
||||
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<ui version="4.0">
|
||||
<class>BMWConfigForm</class>
|
||||
<widget class="QWidget" name="BMWConfigForm">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>562</width>
|
||||
<height>365</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Color:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>kcfg_Color</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Duration:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Rotation Speed</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSpinBox" name="kcfg_Duration">
|
||||
<property name="suffix">
|
||||
<string> milliseconds</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>500</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>5000</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>100</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="KColorButton" name="kcfg_Color">
|
||||
<property name="alphaChannelEnabled" stdset="0">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Whirling</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Details</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QDoubleSpinBox" name="kcfg_Details">
|
||||
<property name="minimum">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>100.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QDoubleSpinBox" name="kcfg_Whirl">
|
||||
<property name="minimum">
|
||||
<double>-2.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>2.000000000000000</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="stepType">
|
||||
<enum>QAbstractSpinBox::AdaptiveDecimalStepType</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QDoubleSpinBox" name="kcfg_RotationSpeed">
|
||||
<property name="minimum">
|
||||
<double>-2.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>2.000000000000000</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="stepType">
|
||||
<enum>QAbstractSpinBox::AdaptiveDecimalStepType</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>KColorButton</class>
|
||||
<extends>QPushButton</extends>
|
||||
<header>kcolorbutton.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd">
|
||||
<kcfgfile name="" />
|
||||
<group name="">
|
||||
<entry name="Duration" type="UInt">
|
||||
<default>1250</default>
|
||||
</entry>
|
||||
<entry name="Color" type="Color">
|
||||
<default>#79E918</default>
|
||||
</entry>
|
||||
<entry name="Details" type="Double">
|
||||
<default>15.0</default>
|
||||
</entry>
|
||||
<entry name="RotationSpeed" type="Double">
|
||||
<default>0.3</default>
|
||||
</entry>
|
||||
<entry name="Whirling" type="Double">
|
||||
<default>1.0</default>
|
||||
</entry>
|
||||
</group>
|
||||
</kcfg>
|
||||
@@ -0,0 +1,7 @@
|
||||
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
// 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 a window is closed or opened.
|
||||
|
||||
effect.setUniform(this.shader, 'uSeed', [Math.random(), Math.random()]);
|
||||
@@ -0,0 +1,12 @@
|
||||
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
// 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, 'uDuration', this.duration * 0.001);
|
||||
effect.setUniform(this.shader, 'uColor', this.readRGBConfig('Color'));
|
||||
effect.setUniform(this.shader, 'uDetails', effect.readConfig('Details', 1.0));
|
||||
effect.setUniform(this.shader, 'uRotationSpeed', effect.readConfig('RotationSpeed', 1.0));
|
||||
effect.setUniform(this.shader, 'uWhirling', effect.readConfig('Whirling', 1.0));
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: burn-my-windows\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-08 21:14+0100\n"
|
||||
"POT-Creation-Date: 2022-12-23 11:04+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -89,6 +89,10 @@ msgstr ""
|
||||
msgid "Pixel Wipe"
|
||||
msgstr ""
|
||||
|
||||
#: src/Portal.js:89
|
||||
msgid "Portal"
|
||||
msgstr ""
|
||||
|
||||
#: src/SnapOfDisintegration.js:118
|
||||
msgid "Snap of Disintegration"
|
||||
msgstr ""
|
||||
@@ -105,50 +109,50 @@ msgstr ""
|
||||
msgid "Wisps"
|
||||
msgstr ""
|
||||
|
||||
#: prefs.js:120
|
||||
#: prefs.js:121
|
||||
msgid "Effects"
|
||||
msgstr ""
|
||||
|
||||
#: prefs.js:162 resources/ui/gtk4/effectPage.ui:43
|
||||
#: prefs.js:163 resources/ui/gtk4/effectPage.ui:43
|
||||
#: resources/ui/gtk3/effectPage.ui:43
|
||||
msgid "Preview this effect"
|
||||
msgstr ""
|
||||
|
||||
#: prefs.js:197
|
||||
#: prefs.js:198
|
||||
msgid "Use this effect when opening windows"
|
||||
msgstr ""
|
||||
|
||||
#: prefs.js:198
|
||||
#: prefs.js:199
|
||||
msgid "Use this effect when closing windows"
|
||||
msgstr ""
|
||||
|
||||
#: prefs.js:224
|
||||
#: prefs.js:225
|
||||
msgid "General Options"
|
||||
msgstr ""
|
||||
|
||||
#: prefs.js:318
|
||||
#: prefs.js:319
|
||||
msgid "Gold Sponsors"
|
||||
msgstr ""
|
||||
|
||||
#: prefs.js:321
|
||||
#: prefs.js:322
|
||||
msgid "Silver Sponsors"
|
||||
msgstr ""
|
||||
|
||||
#: prefs.js:324
|
||||
#: prefs.js:325
|
||||
msgid "Bronze Sponsors"
|
||||
msgstr ""
|
||||
|
||||
#: prefs.js:327
|
||||
#: prefs.js:328
|
||||
msgid "Past Sponsors"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: %s will be replaced by the effect's name.
|
||||
#: prefs.js:534
|
||||
#: prefs.js:535
|
||||
#, javascript-format
|
||||
msgid "Preview for %s"
|
||||
msgstr ""
|
||||
|
||||
#: prefs.js:556
|
||||
#: prefs.js:557
|
||||
msgid "Close this Window to Preview the Effect!"
|
||||
msgstr ""
|
||||
|
||||
@@ -188,13 +192,14 @@ msgstr ""
|
||||
#: resources/ui/gtk4/Doom.ui:30 resources/ui/gtk4/TVEffect.ui:30
|
||||
#: resources/ui/gtk4/EnergizeA.ui:30 resources/ui/gtk4/Hexagon.ui:30
|
||||
#: resources/ui/gtk4/EnergizeB.ui:30 resources/ui/gtk4/Pixelate.ui:30
|
||||
#: resources/ui/gtk4/Apparition.ui:30 resources/ui/gtk3/Incinerate.ui:55
|
||||
#: resources/ui/gtk3/Wisps.ui:48 resources/ui/gtk3/Fire.ui:99
|
||||
#: resources/ui/gtk3/Glide.ui:69 resources/ui/gtk3/PixelWipe.ui:55
|
||||
#: resources/ui/gtk3/PixelWheel.ui:55 resources/ui/gtk3/Doom.ui:62
|
||||
#: resources/ui/gtk3/TVEffect.ui:41 resources/ui/gtk3/EnergizeA.ui:48
|
||||
#: resources/ui/gtk3/Hexagon.ui:55 resources/ui/gtk3/EnergizeB.ui:48
|
||||
#: resources/ui/gtk3/Pixelate.ui:55 resources/ui/gtk3/Apparition.ui:69
|
||||
#: resources/ui/gtk4/Apparition.ui:30 resources/ui/gtk4/Portal.ui:30
|
||||
#: resources/ui/gtk3/Incinerate.ui:55 resources/ui/gtk3/Wisps.ui:48
|
||||
#: resources/ui/gtk3/Fire.ui:99 resources/ui/gtk3/Glide.ui:69
|
||||
#: resources/ui/gtk3/PixelWipe.ui:55 resources/ui/gtk3/PixelWheel.ui:55
|
||||
#: resources/ui/gtk3/Doom.ui:62 resources/ui/gtk3/TVEffect.ui:41
|
||||
#: resources/ui/gtk3/EnergizeA.ui:48 resources/ui/gtk3/Hexagon.ui:55
|
||||
#: resources/ui/gtk3/EnergizeB.ui:48 resources/ui/gtk3/Pixelate.ui:55
|
||||
#: resources/ui/gtk3/Apparition.ui:69 resources/ui/gtk3/Portal.ui:62
|
||||
#: resources/ui/adw/Matrix.ui:14 resources/ui/adw/BrokenGlass.ui:15
|
||||
#: resources/ui/adw/Incinerate.ui:14 resources/ui/adw/Wisps.ui:14
|
||||
#: resources/ui/adw/Fire.ui:30 resources/ui/adw/SnapOfDisintegration.ui:14
|
||||
@@ -203,7 +208,7 @@ msgstr ""
|
||||
#: resources/ui/adw/Doom.ui:14 resources/ui/adw/TVEffect.ui:14
|
||||
#: resources/ui/adw/EnergizeA.ui:14 resources/ui/adw/Hexagon.ui:14
|
||||
#: resources/ui/adw/EnergizeB.ui:15 resources/ui/adw/Pixelate.ui:14
|
||||
#: resources/ui/adw/Apparition.ui:15
|
||||
#: resources/ui/adw/Apparition.ui:15 resources/ui/adw/Portal.ui:14
|
||||
msgid "Animation Time [ms]"
|
||||
msgstr ""
|
||||
|
||||
@@ -240,32 +245,37 @@ msgstr ""
|
||||
#: resources/ui/gtk4/prefs.ui:172 resources/ui/gtk4/prefs.ui:206
|
||||
#: resources/ui/gtk4/Apparition.ui:58 resources/ui/gtk4/Apparition.ui:104
|
||||
#: resources/ui/gtk4/Apparition.ui:150 resources/ui/gtk4/Apparition.ui:196
|
||||
#: resources/ui/gtk4/Apparition.ui:242 resources/ui/gtk3/Incinerate.ui:81
|
||||
#: resources/ui/gtk3/Incinerate.ui:130 resources/ui/gtk3/Incinerate.ui:179
|
||||
#: resources/ui/gtk3/Incinerate.ui:241 resources/ui/gtk3/Incinerate.ui:284
|
||||
#: resources/ui/gtk3/Wisps.ui:74 resources/ui/gtk3/Wisps.ui:123
|
||||
#: resources/ui/gtk3/Wisps.ui:166 resources/ui/gtk3/Fire.ui:125
|
||||
#: resources/ui/gtk3/Fire.ui:173 resources/ui/gtk3/Fire.ui:221
|
||||
#: resources/ui/gtk3/Fire.ui:283 resources/ui/gtk3/Fire.ui:351
|
||||
#: resources/ui/gtk3/Glide.ui:95 resources/ui/gtk3/Glide.ui:144
|
||||
#: resources/ui/gtk3/Glide.ui:193 resources/ui/gtk3/Glide.ui:242
|
||||
#: resources/ui/gtk3/Glide.ui:291 resources/ui/gtk3/PixelWipe.ui:81
|
||||
#: resources/ui/gtk3/PixelWipe.ui:130 resources/ui/gtk3/PixelWheel.ui:81
|
||||
#: resources/ui/gtk3/PixelWheel.ui:130 resources/ui/gtk3/PixelWheel.ui:179
|
||||
#: resources/ui/gtk3/Doom.ui:88 resources/ui/gtk3/Doom.ui:137
|
||||
#: resources/ui/gtk3/Doom.ui:186 resources/ui/gtk3/Doom.ui:235
|
||||
#: resources/ui/gtk3/TVEffect.ui:67 resources/ui/gtk3/TVEffect.ui:110
|
||||
#: resources/ui/gtk3/EnergizeA.ui:74 resources/ui/gtk3/EnergizeA.ui:123
|
||||
#: resources/ui/gtk3/EnergizeA.ui:166 resources/ui/gtk3/Hexagon.ui:81
|
||||
#: resources/ui/gtk3/Hexagon.ui:130 resources/ui/gtk3/Hexagon.ui:179
|
||||
#: resources/ui/gtk3/Hexagon.ui:222 resources/ui/gtk3/Hexagon.ui:265
|
||||
#: resources/ui/gtk3/Hexagon.ui:327 resources/ui/gtk3/EnergizeB.ui:74
|
||||
#: resources/ui/gtk3/EnergizeB.ui:123 resources/ui/gtk3/EnergizeB.ui:166
|
||||
#: resources/ui/gtk3/Pixelate.ui:81 resources/ui/gtk3/Pixelate.ui:130
|
||||
#: resources/ui/gtk3/Pixelate.ui:179 resources/ui/gtk3/prefs.ui:225
|
||||
#: resources/ui/gtk3/prefs.ui:269 resources/ui/gtk3/Apparition.ui:95
|
||||
#: resources/ui/gtk3/Apparition.ui:144 resources/ui/gtk3/Apparition.ui:193
|
||||
#: resources/ui/gtk3/Apparition.ui:242 resources/ui/gtk3/Apparition.ui:291
|
||||
#: resources/ui/gtk4/Apparition.ui:242 resources/ui/gtk4/Portal.ui:58
|
||||
#: resources/ui/gtk4/Portal.ui:104 resources/ui/gtk4/Portal.ui:150
|
||||
#: resources/ui/gtk4/Portal.ui:196 resources/ui/gtk4/Portal.ui:230
|
||||
#: resources/ui/gtk3/Incinerate.ui:81 resources/ui/gtk3/Incinerate.ui:130
|
||||
#: resources/ui/gtk3/Incinerate.ui:179 resources/ui/gtk3/Incinerate.ui:241
|
||||
#: resources/ui/gtk3/Incinerate.ui:284 resources/ui/gtk3/Wisps.ui:74
|
||||
#: resources/ui/gtk3/Wisps.ui:123 resources/ui/gtk3/Wisps.ui:166
|
||||
#: resources/ui/gtk3/Fire.ui:125 resources/ui/gtk3/Fire.ui:173
|
||||
#: resources/ui/gtk3/Fire.ui:221 resources/ui/gtk3/Fire.ui:283
|
||||
#: resources/ui/gtk3/Fire.ui:351 resources/ui/gtk3/Glide.ui:95
|
||||
#: resources/ui/gtk3/Glide.ui:144 resources/ui/gtk3/Glide.ui:193
|
||||
#: resources/ui/gtk3/Glide.ui:242 resources/ui/gtk3/Glide.ui:291
|
||||
#: resources/ui/gtk3/PixelWipe.ui:81 resources/ui/gtk3/PixelWipe.ui:130
|
||||
#: resources/ui/gtk3/PixelWheel.ui:81 resources/ui/gtk3/PixelWheel.ui:130
|
||||
#: resources/ui/gtk3/PixelWheel.ui:179 resources/ui/gtk3/Doom.ui:88
|
||||
#: resources/ui/gtk3/Doom.ui:137 resources/ui/gtk3/Doom.ui:186
|
||||
#: resources/ui/gtk3/Doom.ui:235 resources/ui/gtk3/TVEffect.ui:67
|
||||
#: resources/ui/gtk3/TVEffect.ui:110 resources/ui/gtk3/EnergizeA.ui:74
|
||||
#: resources/ui/gtk3/EnergizeA.ui:123 resources/ui/gtk3/EnergizeA.ui:166
|
||||
#: resources/ui/gtk3/Hexagon.ui:81 resources/ui/gtk3/Hexagon.ui:130
|
||||
#: resources/ui/gtk3/Hexagon.ui:179 resources/ui/gtk3/Hexagon.ui:222
|
||||
#: resources/ui/gtk3/Hexagon.ui:265 resources/ui/gtk3/Hexagon.ui:327
|
||||
#: resources/ui/gtk3/EnergizeB.ui:74 resources/ui/gtk3/EnergizeB.ui:123
|
||||
#: resources/ui/gtk3/EnergizeB.ui:166 resources/ui/gtk3/Pixelate.ui:81
|
||||
#: resources/ui/gtk3/Pixelate.ui:130 resources/ui/gtk3/Pixelate.ui:179
|
||||
#: resources/ui/gtk3/prefs.ui:225 resources/ui/gtk3/prefs.ui:269
|
||||
#: resources/ui/gtk3/Apparition.ui:95 resources/ui/gtk3/Apparition.ui:144
|
||||
#: resources/ui/gtk3/Apparition.ui:193 resources/ui/gtk3/Apparition.ui:242
|
||||
#: resources/ui/gtk3/Apparition.ui:291 resources/ui/gtk3/Portal.ui:89
|
||||
#: resources/ui/gtk3/Portal.ui:139 resources/ui/gtk3/Portal.ui:189
|
||||
#: resources/ui/gtk3/Portal.ui:239 resources/ui/gtk3/Portal.ui:282
|
||||
#: resources/ui/adw/Matrix.ui:36 resources/ui/adw/Matrix.ui:69
|
||||
#: resources/ui/adw/Matrix.ui:102 resources/ui/adw/Matrix.ui:135
|
||||
#: resources/ui/adw/Matrix.ui:160 resources/ui/adw/Matrix.ui:185
|
||||
@@ -299,7 +309,9 @@ msgstr ""
|
||||
#: resources/ui/adw/prefs.ui:63 resources/ui/adw/prefs.ui:85
|
||||
#: resources/ui/adw/Apparition.ui:37 resources/ui/adw/Apparition.ui:70
|
||||
#: resources/ui/adw/Apparition.ui:103 resources/ui/adw/Apparition.ui:136
|
||||
#: resources/ui/adw/Apparition.ui:169
|
||||
#: resources/ui/adw/Apparition.ui:169 resources/ui/adw/Portal.ui:36
|
||||
#: resources/ui/adw/Portal.ui:69 resources/ui/adw/Portal.ui:102
|
||||
#: resources/ui/adw/Portal.ui:135 resources/ui/adw/Portal.ui:160
|
||||
msgid "Reset to Default Value"
|
||||
msgstr ""
|
||||
|
||||
@@ -374,12 +386,14 @@ msgstr ""
|
||||
#: resources/ui/gtk4/Incinerate.ui:221 resources/ui/gtk4/Wisps.ui:122
|
||||
#: resources/ui/gtk4/SnapOfDisintegration.ui:122
|
||||
#: resources/ui/gtk4/TVEffect.ui:76 resources/ui/gtk4/EnergizeA.ui:122
|
||||
#: resources/ui/gtk4/EnergizeB.ui:122 resources/ui/gtk3/Incinerate.ui:263
|
||||
#: resources/ui/gtk3/Wisps.ui:145 resources/ui/gtk3/TVEffect.ui:89
|
||||
#: resources/ui/gtk3/EnergizeA.ui:145 resources/ui/gtk3/EnergizeB.ui:145
|
||||
#: resources/ui/gtk4/EnergizeB.ui:122 resources/ui/gtk4/Portal.ui:214
|
||||
#: resources/ui/gtk3/Incinerate.ui:263 resources/ui/gtk3/Wisps.ui:145
|
||||
#: resources/ui/gtk3/TVEffect.ui:89 resources/ui/gtk3/EnergizeA.ui:145
|
||||
#: resources/ui/gtk3/EnergizeB.ui:145 resources/ui/gtk3/Portal.ui:261
|
||||
#: resources/ui/adw/Incinerate.ui:136 resources/ui/adw/Wisps.ui:80
|
||||
#: resources/ui/adw/SnapOfDisintegration.ui:80 resources/ui/adw/TVEffect.ui:47
|
||||
#: resources/ui/adw/EnergizeA.ui:80 resources/ui/adw/EnergizeB.ui:81
|
||||
#: resources/ui/adw/Portal.ui:146
|
||||
msgid "Color"
|
||||
msgstr ""
|
||||
|
||||
@@ -546,6 +560,21 @@ msgstr ""
|
||||
msgid "Suction Intensity"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/gtk4/Portal.ui:76 resources/ui/gtk3/Portal.ui:162
|
||||
#: resources/ui/adw/Portal.ui:80
|
||||
msgid "Whirling"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/gtk4/Portal.ui:122 resources/ui/gtk3/Portal.ui:112
|
||||
#: resources/ui/adw/Portal.ui:47
|
||||
msgid "Rotation Speed"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/gtk4/Portal.ui:168 resources/ui/gtk3/Portal.ui:212
|
||||
#: resources/ui/adw/Portal.ui:113
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/gtk3/Fire.ui:69 resources/ui/adw/Fire.ui:19
|
||||
msgid "Choose a Preset"
|
||||
msgstr ""
|
||||
|
||||
@@ -60,6 +60,7 @@ var PreferencesDialog = class PreferencesDialog {
|
||||
new Me.imports.src.Pixelate.Pixelate(),
|
||||
new Me.imports.src.PixelWheel.PixelWheel(),
|
||||
new Me.imports.src.PixelWipe.PixelWipe(),
|
||||
new Me.imports.src.Portal.Portal(),
|
||||
new Me.imports.src.SnapOfDisintegration.SnapOfDisintegration(),
|
||||
new Me.imports.src.TRexAttack.TRexAttack(),
|
||||
new Me.imports.src.TVEffect.TVEffect(),
|
||||
|
||||
@@ -23,8 +23,6 @@ uniform float uRandomness;
|
||||
const float ACTOR_SCALE = 2.0;
|
||||
const float PADDING = ACTOR_SCALE / 2.0 - 0.5;
|
||||
|
||||
// The math for the whirling is inspired by this post:
|
||||
// http://www.geeks3d.com/20110428/shader-library-swirl-post-processing-filter-in-glsl
|
||||
void main() {
|
||||
// We simply inverse the progress for opening windows.
|
||||
float progress = uForOpening ? 1.0 - uProgress : uProgress;
|
||||
@@ -44,10 +42,7 @@ void main() {
|
||||
coords += progress * coords / dist * 0.5 * uSuction;
|
||||
|
||||
// Apply some whirling.
|
||||
float angle = pow(1.0 - dist, 2.0) * uTwirl * progress;
|
||||
float s = sin(angle);
|
||||
float c = cos(angle);
|
||||
coords = vec2(dot(coords, vec2(c, -s)), dot(coords, vec2(s, c)));
|
||||
coords = whirl(coords, uTwirl * progress, 0.0);
|
||||
|
||||
// Fade out the window texture.
|
||||
vec4 oColor = getInputColor(coords + center);
|
||||
|
||||
@@ -121,8 +121,8 @@ void setOutputColor(vec4 outColor) { cogl_color_out = outColor; }
|
||||
// The Shell.GLSLEffect uses straight alpha blending. This helper method allows
|
||||
// compositing color values in the shader in the same way.
|
||||
vec4 alphaOver(vec4 under, vec4 over) {
|
||||
float alpha = over.a + under.a * (1.0 - over.a);
|
||||
return vec4((over.rgb * over.a + under.rgb * under.a * (1.0 - over.a)) / alpha, alpha);
|
||||
float alpha = mix(under.a, 1.0, over.a);
|
||||
return vec4(mix(under.rgb * under.a, over.rgb, over.a) / alpha, alpha);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------- color helpers
|
||||
@@ -136,6 +136,14 @@ vec3 tritone(float val, vec3 shadows, vec3 midtones, vec3 highlights) {
|
||||
return mix(midtones, highlights, smoothstep(0.0, 1.0, val * 2.0 - 1.0));
|
||||
}
|
||||
|
||||
// Darkens the given color. If fac is zero, the color will not change, if fac is one, the
|
||||
// color will be black.
|
||||
vec3 darken(vec3 color, float fac) { return color * (1.0 - fac); }
|
||||
|
||||
// Lightens the given color. If fac is zero, the color will not change, if fac is one, the
|
||||
// color will be white.
|
||||
vec3 lighten(vec3 color, float fac) { return color + (vec3(1.0) - color) * fac; }
|
||||
|
||||
// ---------------------------------------------------------------------- easing functions
|
||||
|
||||
// Here are some basic easing function. More can be added if required!
|
||||
@@ -143,8 +151,16 @@ vec3 tritone(float val, vec3 shadows, vec3 midtones, vec3 highlights) {
|
||||
// https://gitlab.gnome.org/GNOME/mutter/-/blob/main/clutter/clutter/clutter-easing.c
|
||||
|
||||
float easeOutQuad(float x) { return -1.0 * x * (x - 2.0); }
|
||||
|
||||
float easeInQuad(float x) { return x * x; }
|
||||
|
||||
float easeInBack(float x, float e) { return x * x * ((e + 1.0) * x - e); }
|
||||
|
||||
float easeOutBack(float x, float e) {
|
||||
float p = x - 1.0;
|
||||
return p * p * ((e + 1.0) * p + e) + 1.0;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------- edge mask helpers
|
||||
|
||||
// This method returns a mask which smoothly transitions towards zero when approaching
|
||||
@@ -183,6 +199,15 @@ float getRelativeEdgeMask(float fadeAmount) {
|
||||
|
||||
// ------------------------------------------------------------------------------- 2D math
|
||||
|
||||
// The math for the whirling is inspired by this post:
|
||||
// http://www.geeks3d.com/20110428/shader-library-swirl-post-processing-filter-in-glsl
|
||||
vec2 whirl(vec2 coords, float warping, float rotation) {
|
||||
float angle = pow(1.0 - length(coords), 2.0) * warping + rotation;
|
||||
float s = sin(angle);
|
||||
float c = cos(angle);
|
||||
return vec2(dot(coords, vec2(c, -s)), dot(coords, vec2(s, c)));
|
||||
}
|
||||
|
||||
// Returns the shortest distance between the given point and the line defined by "origin"
|
||||
// and "direction".
|
||||
float distToLine(vec2 origin, vec2 direction, vec2 point) {
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// ) ( //
|
||||
// ( /( ( ( ) ( ( ( ( )\ ) ( ( //
|
||||
// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( //
|
||||
// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ //
|
||||
// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) //
|
||||
// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< //
|
||||
// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ //
|
||||
// |__/ //
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// The content from common.glsl is automatically prepended to each shader effect.
|
||||
|
||||
uniform vec2 uSeed;
|
||||
uniform vec3 uColor;
|
||||
uniform float uRotationSpeed;
|
||||
uniform float uWhirling;
|
||||
uniform float uDetails;
|
||||
|
||||
const float PORTAL_WOBBLE_TIME = 0.8;
|
||||
const float PORTAL_WOBBLE_STRENGTH = 1.2;
|
||||
const float GLOW_EDGE_WIDTH = 5.0;
|
||||
const float WINDOW_SCALE = 0.3;
|
||||
const float WINDOW_SQUISH = 1.0;
|
||||
const float WINDOW_TILT = -1.0;
|
||||
|
||||
// Make sure that the portal and window open / close animations are quick even if the
|
||||
// duration is longer.
|
||||
float PORTAL_OPEN_TIME = 0.4 / uDuration;
|
||||
float PORTAL_CLOSE_TIME = 0.4 / uDuration;
|
||||
float WINDOW_OPEN_TIME = 0.35 / uDuration;
|
||||
|
||||
// This will distort the given coordinate to achieve the wobble effect of the portal when
|
||||
// the window passes through. The wobble happens around the point where the window appears
|
||||
// or disappears (which is controlled by WINDOW_OPEN_TIME) and takes
|
||||
// PORTAL_WOBBLE_TIME.
|
||||
vec2 getPortalWobble(vec2 coords) {
|
||||
float progress = (uForOpening ? (1.0 - uProgress) : uProgress) / WINDOW_OPEN_TIME;
|
||||
progress = clamp(1.0 - abs((progress - 1.0) / PORTAL_WOBBLE_TIME), 0.0, 1.0);
|
||||
progress = easeInBack(progress, 1.7);
|
||||
float dist = length(coords);
|
||||
|
||||
return coords * (1.0 - dist) * exp(-dist) * progress * PORTAL_WOBBLE_STRENGTH;
|
||||
}
|
||||
|
||||
// This is used to compute the scale of the portal. The returned value will smoothly
|
||||
// increase during uDuration*PORTAL_OPEN_TIME, stay at one until uDuration*(1.0 -
|
||||
// PORTAL_CLOSE_TIME) and then decrease again.
|
||||
float getPortalScale() {
|
||||
float scale = 1.0;
|
||||
if (uProgress < PORTAL_OPEN_TIME) {
|
||||
scale = easeOutBack(uProgress / PORTAL_OPEN_TIME, 1.5);
|
||||
} else if (uProgress > 1.0 - PORTAL_CLOSE_TIME) {
|
||||
scale =
|
||||
easeOutBack(1.0 - (uProgress - 1.0 + PORTAL_CLOSE_TIME) / PORTAL_CLOSE_TIME, 1.5);
|
||||
}
|
||||
|
||||
return scale;
|
||||
}
|
||||
|
||||
// Returns a random 2D vector in [(-0.5, -0.5) ... (0.5, 0.5)] using two time simplex
|
||||
// noise. The scale of the noise can be adjusted with the scale paramter.
|
||||
vec2 getRandomDisplace(vec2 seed, float scale) {
|
||||
return vec2(simplex2D(seed * scale + uSeed) - 0.5,
|
||||
simplex2D(seed * scale + uSeed + vec2(7.89, 123.0)) - 0.5);
|
||||
}
|
||||
|
||||
// Twists the given coordinates around the origin. The speedMultiplier can be used to
|
||||
// control the overall rotation speed, warpMultiplier can be used to control the amount of
|
||||
// twisting (higher multipliers will make coordinates which are closer to the origin be
|
||||
// rotated more than coordinates farther away).
|
||||
vec2 getWhirledCoords(vec2 coords, float speedMultiplier, float warpMultiplier) {
|
||||
float rotation = uRotationSpeed * uProgress * uDuration * speedMultiplier;
|
||||
float warping = uWhirling * (6.0 + 1.5 * uProgress) * warpMultiplier;
|
||||
return whirl(coords, warping, rotation);
|
||||
}
|
||||
|
||||
// This returns a beautiful portal. It is composed of several layers:
|
||||
// 1. In the background, there is a slightly distorted radial gradient.
|
||||
// 2. Next, there is a layer of whirled bands.
|
||||
// 3. Thereafter, there is another layer of whirled bands, rotating a bit faster and
|
||||
// usually in a slightly brighter color.
|
||||
// 4. Then the rim of the portal is drawn.
|
||||
// 5. Finally, some bright sparkling dots are drawn above.
|
||||
vec4 getPortalColor() {
|
||||
|
||||
// Put coordinate origin to the center of the window.
|
||||
vec2 coords = (iTexCoord.st - vec2(0.5)) * 2.0;
|
||||
|
||||
// Add some margin for the elastic overshooting.
|
||||
coords *= 1.5;
|
||||
|
||||
// Add the open-close animation of the portal.
|
||||
float scale = getPortalScale();
|
||||
coords /= max(scale * 0.5 + 0.5, 0.01);
|
||||
|
||||
// We will use this distortion vector on all layers below in order to add the elastic
|
||||
// wobbling when the window passes through the portal.
|
||||
vec2 wobble = getPortalWobble(coords);
|
||||
|
||||
// This is used below to scale the detail level of the layers. If the portal is small,
|
||||
// we want to have less details, if the portal is huge on the screen, theres plenty of
|
||||
// space for details.
|
||||
float detailScale = 10000.0 / (uSize.x + uSize.y) / uDetails;
|
||||
|
||||
// ---------------------------------------------------------------------------- 1. layer
|
||||
// We start with the background layer. This is a radial gradient from a dark color in
|
||||
// the center to a not-so-dark color in the outer regions. We distort the coordinates to
|
||||
// add some variations to the colors and to the shape of the portal.
|
||||
vec2 layerCoords = getWhirledCoords(coords - wobble * 1.0, 0.25, 1.0);
|
||||
vec2 displace = getRandomDisplace(layerCoords, 2.1);
|
||||
layerCoords += displace * 0.1;
|
||||
float dist = length(layerCoords);
|
||||
float alpha = dist > 1.0 ? 0.0 : 1.0;
|
||||
vec4 color = vec4(mix(darken(uColor, 0.8), darken(uColor, 0.2), pow(dist, 5.0)), alpha);
|
||||
float rand = dot(displace, displace);
|
||||
|
||||
// ---------------------------------------------------------------------------- 2. layer
|
||||
// Then we add the first layer of whirly bands.
|
||||
float noise = simplex2D(layerCoords / detailScale * 1.0 + vec2(12.3, 56.4) + uSeed);
|
||||
vec4 layer = vec4(darken(uColor, 0.3), noise > 0.6 ? alpha : 0.0);
|
||||
color = alphaOver(color, layer);
|
||||
|
||||
// ---------------------------------------------------------------------------- 3. layer
|
||||
// The second layer of whirly bands uses a lighter color and a different set of
|
||||
// distorted coordinates.
|
||||
layerCoords = getWhirledCoords(coords - wobble * 1.5, 0.75, 0.5);
|
||||
displace = getRandomDisplace(layerCoords, 12.2);
|
||||
layerCoords += displace * 0.1;
|
||||
noise = simplex2D(layerCoords / detailScale * 1.3 + uSeed);
|
||||
layer = vec4(uColor, noise > 0.6 ? alpha : 0.0);
|
||||
color = alphaOver(color, layer);
|
||||
|
||||
// At this point, some of the color components can be outside the [0..1] range, so we
|
||||
// have to clamp them. Else the alpha compositing will create artifacts.
|
||||
color = clamp(color, 0.0, 1.0);
|
||||
|
||||
// ---------------------------------------------------------------------------- 4. layer
|
||||
// Then we add the edge around the portal with the effect's color. It varies in
|
||||
// thickness to create some variations.
|
||||
float edge =
|
||||
mix(1.0, 5.0, rand) * GLOW_EDGE_WIDTH * detailScale - 150.0 * abs(dist - 1.0);
|
||||
layer = vec4(uColor, clamp(edge, 0.0, 1.0));
|
||||
color = alphaOver(color, layer);
|
||||
|
||||
// ---------------------------------------------------------------------------- 5. layer
|
||||
// Finally, we add some sparkling lights.
|
||||
layerCoords = getWhirledCoords(coords - wobble * 1.8, 1.25, 0.0);
|
||||
noise = simplex2D(layerCoords / detailScale * 3.0 + uSeed);
|
||||
layer.rgb = lighten(uColor, 0.8) * clamp(pow(noise * rand + 0.9, 50.0), 0.0, 1.0);
|
||||
color.rgb += layer.rgb;
|
||||
|
||||
// Finally, fade in / out the portal when it appears / disappears.
|
||||
color.a *= pow(clamp(scale, 0.0, 1.0), 2.0);
|
||||
return clamp(color, 0.0, 1.0);
|
||||
}
|
||||
|
||||
// This method returns the window texture. The window is scaled down / up and faded to /
|
||||
// from transparency to create the illusion of travelling through the portal. The
|
||||
// animation will happen in a fraction of the full animation time (at the end of the
|
||||
// animation when opening a window and at the beginning of the animation when closing the
|
||||
// window). The fraction of the animation time take for the window animation is defined by
|
||||
// WINDOW_OPEN_TIME.
|
||||
vec4 getWindowColor() {
|
||||
float progress = (uForOpening ? (1.0 - uProgress) : uProgress) / WINDOW_OPEN_TIME;
|
||||
|
||||
// Add some elastic easing to make the effect more dynamic.
|
||||
progress = easeInBack(clamp(progress, 0.0, 1.0), 1.2);
|
||||
|
||||
// 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, WINDOW_SCALE, progress);
|
||||
|
||||
// Squish image texture vertically.
|
||||
coords.y /= mix(1.0, (1.0 - 0.2 * WINDOW_SQUISH), progress);
|
||||
|
||||
// 'Tilt' image texture around x-axis.
|
||||
coords.x /= mix(1.0, 1.0 - 0.1 * WINDOW_TILT * coords.y, progress);
|
||||
|
||||
// Move texture coordinate center to corner again.
|
||||
coords = coords * 0.5 + 0.5;
|
||||
|
||||
// Fade the window to transparency. We multiply the progress with 3.0 in order to start
|
||||
// the fade quite late.
|
||||
vec4 oColor = getInputColor(coords);
|
||||
oColor.a *= clamp((1.0 - progress) * 3.0, 0.0, 1.0);
|
||||
|
||||
return oColor;
|
||||
}
|
||||
|
||||
void main() {
|
||||
|
||||
// Get the window color and the portal color and simply combine them.
|
||||
vec4 portal = getPortalColor();
|
||||
vec4 window = getWindowColor();
|
||||
setOutputColor(alphaOver(portal, window));
|
||||
|
||||
// These can be useful for understanding how this works.
|
||||
// setOutputColor(portal);
|
||||
// setOutputColor(window);
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<interface domain="burn-my-windows">
|
||||
|
||||
<object class="AdwExpanderRow" id="portal-prefs">
|
||||
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
<property name="title" translatable="yes">Animation Time [ms]</property>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">0</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment" id="portal-animation-time">
|
||||
<property name="upper">5000</property>
|
||||
<property name="lower">500</property>
|
||||
<property name="step-increment">1</property>
|
||||
<property name="page-increment">100</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-portal-animation-time">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
<property name="title" translatable="yes">Rotation Speed</property>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment" id="portal-rotation-speed">
|
||||
<property name="upper">2</property>
|
||||
<property name="lower">-2</property>
|
||||
<property name="step-increment">0.1</property>
|
||||
<property name="page-increment">1</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-portal-rotation-speed">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
<property name="title" translatable="yes">Whirling</property>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment" id="portal-whirling">
|
||||
<property name="upper">2</property>
|
||||
<property name="lower">-2</property>
|
||||
<property name="step-increment">0.1</property>
|
||||
<property name="page-increment">1</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-portal-whirling">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
<property name="title" translatable="yes">Details</property>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">1</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment" id="portal-details">
|
||||
<property name="upper">100</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="step-increment">1</property>
|
||||
<property name="page-increment">10</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-portal-details">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
<property name="title" translatable="yes">Color</property>
|
||||
<property name="activatable-widget">portal-color</property>
|
||||
<child>
|
||||
<object class="GtkColorButton" id="portal-color">
|
||||
<property name="valign">center</property>
|
||||
<property name="width-request">250</property>
|
||||
<property name="use_alpha">0</property>
|
||||
<property name="show_editor">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-portal-color">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
|
||||
</interface>
|
||||
@@ -0,0 +1,301 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<interface domain="burn-my-windows">
|
||||
|
||||
<object class="GtkAdjustment" id="portal-animation-time">
|
||||
<property name="upper">5000</property>
|
||||
<property name="lower">500</property>
|
||||
<property name="step-increment">1</property>
|
||||
<property name="page-increment">100</property>
|
||||
</object>
|
||||
|
||||
<object class="GtkAdjustment" id="portal-rotation-speed">
|
||||
<property name="upper">2</property>
|
||||
<property name="lower">-2</property>
|
||||
<property name="step-increment">0.1</property>
|
||||
<property name="page-increment">1</property>
|
||||
</object>
|
||||
|
||||
<object class="GtkAdjustment" id="portal-whirling">
|
||||
<property name="upper">2</property>
|
||||
<property name="lower">-2</property>
|
||||
<property name="step-increment">0.1</property>
|
||||
<property name="page-increment">1</property>
|
||||
</object>
|
||||
|
||||
<object class="GtkAdjustment" id="portal-details">
|
||||
<property name="upper">100</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="step-increment">1</property>
|
||||
<property name="page-increment">10</property>
|
||||
</object>
|
||||
|
||||
<object class="GtkBox" id="portal-prefs">
|
||||
<property name="orientation">vertical</property>
|
||||
|
||||
<child>
|
||||
<object class="GtkFrame">
|
||||
<child>
|
||||
<object class="GtkListBox">
|
||||
<property name="selection-mode">none</property>
|
||||
<style>
|
||||
<class name="rich-list" />
|
||||
</style>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="margin-start">10</property>
|
||||
<property name="margin-end">10</property>
|
||||
<property name="margin-top">10</property>
|
||||
<property name="margin-bottom">10</property>
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Animation Time [ms]</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">0</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">portal-animation-time</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton"
|
||||
id="reset-portal-animation-time">
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="icon-size">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="margin-start">10</property>
|
||||
<property name="margin-end">10</property>
|
||||
<property name="margin-top">10</property>
|
||||
<property name="margin-bottom">10</property>
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Rotation Speed</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">portal-rotation-speed</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton"
|
||||
id="reset-portal-rotation-speed">
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="icon-size">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="margin-start">10</property>
|
||||
<property name="margin-end">10</property>
|
||||
<property name="margin-top">10</property>
|
||||
<property name="margin-bottom">10</property>
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Whirling</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">portal-whirling</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton"
|
||||
id="reset-portal-whirling">
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="icon-size">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="margin-start">10</property>
|
||||
<property name="margin-end">10</property>
|
||||
<property name="margin-top">10</property>
|
||||
<property name="margin-bottom">10</property>
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Details</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">1</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">portal-details</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton"
|
||||
id="reset-portal-details">
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="icon-size">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="margin-start">10</property>
|
||||
<property name="margin-end">10</property>
|
||||
<property name="margin-top">10</property>
|
||||
<property name="margin-bottom">10</property>
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Color</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkColorButton" id="portal-color">
|
||||
<property name="use_alpha">0</property>
|
||||
<property name="show_editor">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-portal-color">
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="icon-size">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
|
||||
</object>
|
||||
|
||||
</interface>
|
||||
@@ -0,0 +1,249 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<interface domain="burn-my-windows">
|
||||
|
||||
<object class="GtkBox" id="portal-prefs">
|
||||
<property name="orientation">vertical</property>
|
||||
|
||||
<child>
|
||||
<object class="GtkFrame">
|
||||
<child>
|
||||
<object class="GtkListBox">
|
||||
<property name="selection-mode">none</property>
|
||||
<property name="show-separators">1</property>
|
||||
<style>
|
||||
<class name="rich-list" />
|
||||
</style>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Animation Time [ms]</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">0</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment" id="portal-animation-time">
|
||||
<property name="upper">5000</property>
|
||||
<property name="lower">500</property>
|
||||
<property name="step-increment">1</property>
|
||||
<property name="page-increment">100</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-portal-animation-time">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Whirling</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment" id="portal-whirling">
|
||||
<property name="upper">2</property>
|
||||
<property name="lower">-2</property>
|
||||
<property name="step-increment">0.1</property>
|
||||
<property name="page-increment">1</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-portal-whirling">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Rotation Speed</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment" id="portal-rotation-speed">
|
||||
<property name="upper">2</property>
|
||||
<property name="lower">-2</property>
|
||||
<property name="step-increment">0.1</property>
|
||||
<property name="page-increment">1</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-portal-rotation-speed">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Details</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">1</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment" id="portal-details">
|
||||
<property name="upper">100</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="step-increment">1</property>
|
||||
<property name="page-increment">10</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-portal-details">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Color</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkColorButton" id="portal-color">
|
||||
<property name="use_alpha">0</property>
|
||||
<property name="show_editor">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-portal-color">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
|
||||
</object>
|
||||
|
||||
</interface>
|
||||
@@ -44,7 +44,7 @@ SPDX-License-Identifier: CC0-1.0
|
||||
</key>
|
||||
|
||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||
<!-- Apparition Effect Options -->
|
||||
<!-- Apparition Effect Options -->
|
||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||
|
||||
<key name="apparition-open-effect" type="b">
|
||||
@@ -715,6 +715,52 @@ SPDX-License-Identifier: CC0-1.0
|
||||
<description>Use the pointer location for the broken glass effect.</description>
|
||||
</key>
|
||||
|
||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||
<!-- Portal Options -->
|
||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||
|
||||
<key name="portal-close-effect" type="b">
|
||||
<default>false</default>
|
||||
<summary>Portal Close Effect</summary>
|
||||
<description>Use the Portal effect for window closing.</description>
|
||||
</key>
|
||||
|
||||
<key name="portal-open-effect" type="b">
|
||||
<default>false</default>
|
||||
<summary>Portal Open Effect</summary>
|
||||
<description>Use the Portal effect for window opening.</description>
|
||||
</key>
|
||||
|
||||
<key name="portal-animation-time" type="i">
|
||||
<default>1250</default>
|
||||
<summary>Portal Animation Time</summary>
|
||||
<description>The time the Portal effect takes.</description>
|
||||
</key>
|
||||
|
||||
<key name="portal-color" type="s">
|
||||
<default>"rgb(121, 233, 24)"</default>
|
||||
<summary>Portal Color</summary>
|
||||
<description>The color of the effect.</description>
|
||||
</key>
|
||||
|
||||
<key name="portal-rotation-speed" type="d">
|
||||
<default>0.3</default>
|
||||
<summary>Portal Rotation Speed</summary>
|
||||
<description>The angular speed of the portal.</description>
|
||||
</key>
|
||||
|
||||
<key name="portal-whirling" type="d">
|
||||
<default>1.0</default>
|
||||
<summary>Portal Whirling</summary>
|
||||
<description>The amount of distortion.</description>
|
||||
</key>
|
||||
|
||||
<key name="portal-details" type="d">
|
||||
<default>15.0</default>
|
||||
<summary>Portal Details</summary>
|
||||
<description>The amount of details in the portal.</description>
|
||||
</key>
|
||||
|
||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||
<!-- Snap of Disintegration Effect Options -->
|
||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// ) ( //
|
||||
// ( /( ( ( ) ( ( ( ( )\ ) ( ( //
|
||||
// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( //
|
||||
// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ //
|
||||
// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) //
|
||||
// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< //
|
||||
// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ //
|
||||
// |__/ //
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
// 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;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// 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 Portal = 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/<nick>.glsl. The callback will be called for each
|
||||
// newly created shader instance.
|
||||
constructor() {
|
||||
this.shaderFactory = new ShaderFactory(this.getNick(), (shader) => {
|
||||
// We import Clutter in this function as it is not available in the preferences
|
||||
// process. This creator function of the ShaderFactory is only called within GNOME
|
||||
// Shell's process.
|
||||
const Clutter = imports.gi.Clutter;
|
||||
|
||||
// Store uniform locations of newly created shaders.
|
||||
shader._uSeed = shader.get_uniform_location('uSeed');
|
||||
shader._uColor = shader.get_uniform_location('uColor');
|
||||
shader._uDetails = shader.get_uniform_location('uDetails');
|
||||
shader._uRotationSpeed = shader.get_uniform_location('uRotationSpeed');
|
||||
shader._uWhirling = shader.get_uniform_location('uWhirling');
|
||||
|
||||
// Write all uniform values at the start of each animation.
|
||||
shader.connect('begin-animation', (shader, settings) => {
|
||||
const c = Clutter.Color.from_string(settings.get_string('portal-color'))[1];
|
||||
|
||||
// If we are performing an integration tests, we use a fixed seed.
|
||||
const testMode = settings.get_boolean('test-mode');
|
||||
|
||||
// clang-format off
|
||||
shader.set_uniform_float(shader._uSeed, 2, [testMode ? 0 : Math.random(), testMode ? 0 : Math.random()]);
|
||||
shader.set_uniform_float(shader._uColor, 3, [c.red / 255, c.green / 255, c.blue / 255]);
|
||||
shader.set_uniform_float(shader._uDetails, 1, [settings.get_double('portal-details')]);
|
||||
shader.set_uniform_float(shader._uRotationSpeed, 1, [settings.get_double('portal-rotation-speed')]);
|
||||
shader.set_uniform_float(shader._uWhirling, 1, [settings.get_double('portal-whirling')]);
|
||||
// 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 'portal';
|
||||
}
|
||||
|
||||
// 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 _('Portal');
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------- 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.getUIDir()}/Portal.ui`);
|
||||
|
||||
// Bind all properties.
|
||||
dialog.bindAdjustment('portal-animation-time');
|
||||
dialog.bindAdjustment('portal-rotation-speed');
|
||||
dialog.bindAdjustment('portal-whirling');
|
||||
dialog.bindAdjustment('portal-details');
|
||||
dialog.bindColorButton('portal-color');
|
||||
|
||||
// Finally, return the new settings page.
|
||||
return dialog.getBuilder().get_object('portal-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};
|
||||
}
|
||||
}
|
||||
@@ -191,6 +191,7 @@ capture_effect "incinerate"
|
||||
capture_effect "pixelate"
|
||||
capture_effect "pixel-wheel"
|
||||
capture_effect "pixel-wipe"
|
||||
capture_effect "portal"
|
||||
capture_effect "tv"
|
||||
capture_effect "wisps"
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 942 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 877 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 877 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 979 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 942 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 877 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 877 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 979 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 717 B After Width: | Height: | Size: 263 B |
|
Before Width: | Height: | Size: 651 B After Width: | Height: | Size: 288 B |
|
Before Width: | Height: | Size: 603 B After Width: | Height: | Size: 265 B |
|
Before Width: | Height: | Size: 594 B After Width: | Height: | Size: 265 B |
|
Before Width: | Height: | Size: 699 B After Width: | Height: | Size: 285 B |
|
Before Width: | Height: | Size: 625 B After Width: | Height: | Size: 308 B |
|
Before Width: | Height: | Size: 603 B After Width: | Height: | Size: 284 B |
|
Before Width: | Height: | Size: 617 B After Width: | Height: | Size: 284 B |
|
Before Width: | Height: | Size: 631 B After Width: | Height: | Size: 273 B |
|
Before Width: | Height: | Size: 466 B After Width: | Height: | Size: 250 B |
|
Before Width: | Height: | Size: 498 B After Width: | Height: | Size: 273 B |
|
Before Width: | Height: | Size: 498 B After Width: | Height: | Size: 273 B |
|
Before Width: | Height: | Size: 603 B After Width: | Height: | Size: 257 B |
|
Before Width: | Height: | Size: 437 B After Width: | Height: | Size: 240 B |
|
Before Width: | Height: | Size: 484 B After Width: | Height: | Size: 257 B |
|
Before Width: | Height: | Size: 484 B After Width: | Height: | Size: 257 B |
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 340 B |
|
Before Width: | Height: | Size: 339 B After Width: | Height: | Size: 339 B |
|
Before Width: | Height: | Size: 341 B After Width: | Height: | Size: 341 B |
|
Before Width: | Height: | Size: 337 B After Width: | Height: | Size: 337 B |
|
Before Width: | Height: | Size: 337 B After Width: | Height: | Size: 337 B |
|
Before Width: | Height: | Size: 342 B After Width: | Height: | Size: 342 B |
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 340 B |
|
Before Width: | Height: | Size: 352 B After Width: | Height: | Size: 352 B |
|
Before Width: | Height: | Size: 347 B After Width: | Height: | Size: 347 B |
|
Before Width: | Height: | Size: 347 B After Width: | Height: | Size: 347 B |
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 340 B |
|
Before Width: | Height: | Size: 339 B After Width: | Height: | Size: 339 B |
|
Before Width: | Height: | Size: 341 B After Width: | Height: | Size: 341 B |
|
Before Width: | Height: | Size: 337 B After Width: | Height: | Size: 337 B |
|
Before Width: | Height: | Size: 337 B After Width: | Height: | Size: 337 B |
|
Before Width: | Height: | Size: 342 B After Width: | Height: | Size: 342 B |
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 340 B |
|
Before Width: | Height: | Size: 352 B After Width: | Height: | Size: 352 B |
|
Before Width: | Height: | Size: 347 B After Width: | Height: | Size: 347 B |
|
Before Width: | Height: | Size: 347 B After Width: | Height: | Size: 347 B |
|
Before Width: | Height: | Size: 494 B After Width: | Height: | Size: 494 B |
|
Before Width: | Height: | Size: 617 B After Width: | Height: | Size: 617 B |
|
Before Width: | Height: | Size: 560 B After Width: | Height: | Size: 560 B |
|
Before Width: | Height: | Size: 676 B After Width: | Height: | Size: 676 B |
|
Before Width: | Height: | Size: 676 B After Width: | Height: | Size: 676 B |
|
Before Width: | Height: | Size: 470 B After Width: | Height: | Size: 470 B |
|
Before Width: | Height: | Size: 568 B After Width: | Height: | Size: 568 B |
|
Before Width: | Height: | Size: 557 B After Width: | Height: | Size: 557 B |
|
Before Width: | Height: | Size: 575 B After Width: | Height: | Size: 575 B |
|
Before Width: | Height: | Size: 575 B After Width: | Height: | Size: 575 B |
|
Before Width: | Height: | Size: 515 B After Width: | Height: | Size: 515 B |
|
Before Width: | Height: | Size: 738 B After Width: | Height: | Size: 738 B |
|
Before Width: | Height: | Size: 836 B After Width: | Height: | Size: 836 B |
|
Before Width: | Height: | Size: 763 B After Width: | Height: | Size: 763 B |
|
Before Width: | Height: | Size: 763 B After Width: | Height: | Size: 763 B |
|
Before Width: | Height: | Size: 686 B After Width: | Height: | Size: 686 B |
|
Before Width: | Height: | Size: 745 B After Width: | Height: | Size: 745 B |
|
Before Width: | Height: | Size: 794 B After Width: | Height: | Size: 794 B |
|
Before Width: | Height: | Size: 754 B After Width: | Height: | Size: 754 B |
|
Before Width: | Height: | Size: 754 B After Width: | Height: | Size: 754 B |
|
Before Width: | Height: | Size: 350 B After Width: | Height: | Size: 585 B |
|
Before Width: | Height: | Size: 350 B After Width: | Height: | Size: 610 B |
|
Before Width: | Height: | Size: 343 B After Width: | Height: | Size: 585 B |
|
Before Width: | Height: | Size: 343 B After Width: | Height: | Size: 594 B |
|
Before Width: | Height: | Size: 343 B After Width: | Height: | Size: 594 B |
|
Before Width: | Height: | Size: 347 B After Width: | Height: | Size: 608 B |
|
Before Width: | Height: | Size: 348 B After Width: | Height: | Size: 603 B |
|
Before Width: | Height: | Size: 358 B After Width: | Height: | Size: 613 B |