Compare commits
202 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 14cfa0818f | |||
| 4814730400 | |||
| 91f7f8f1b5 | |||
| fa5baa4301 | |||
| c80707ee1f | |||
| 343eddbfcb | |||
| 04e0999d5b | |||
| 48c8bcec3a | |||
| 38d12453b6 | |||
| b48e92f8c1 | |||
| 14d482e16a | |||
| e87340d7ad | |||
| ee93c06304 | |||
| 1e06ed6503 | |||
| 0fd3f0f62f | |||
| 42d69afa89 | |||
| 1b57d1e015 | |||
| 658ca6415a | |||
| 5ffee2c817 | |||
| 5aad16c8bf | |||
| b623a5923f | |||
| e06245bdca | |||
| e5907292ed | |||
| 70bfbac890 | |||
| d010c60143 | |||
| 649a1cce73 | |||
| bccdc0253d | |||
| b7429bada3 | |||
| 23a85798ca | |||
| e051551747 | |||
| 6eae8d1aa3 | |||
| 6d34936375 | |||
| 46c8eaf417 | |||
| 55b491bb36 | |||
| c78bc4c094 | |||
| 024b39d627 | |||
| 349170f68f | |||
| 6ba32dff81 | |||
| 8fac2692f5 | |||
| 448b9a513d | |||
| 94339dbc19 | |||
| 4aa5b3fc27 | |||
| 84f11659f1 | |||
| 5aacdbea5f | |||
| c7b0e92eb2 | |||
| 612a27fbf5 | |||
| 0b71317791 | |||
| 465e587714 | |||
| 591c8d38db | |||
| 3fde2f8602 | |||
| 3b8bcd02aa | |||
| 9872531544 | |||
| a4ee545b9a | |||
| caa29fb9d6 | |||
| ce6e6389e4 | |||
| edd6d76a58 | |||
| b93d28e66c | |||
| e8703e3484 | |||
| fae67f89b5 | |||
| 97e18cb727 | |||
| 1bd646bc92 | |||
| f4866471e4 | |||
| b3237b6e4e | |||
| ba9226d4e2 | |||
| 9bd813777e | |||
| 56f87c4851 | |||
| 0ef412ebf1 | |||
| eb3adfd251 | |||
| 931a4aab01 | |||
| 40866b97fb | |||
| 0bcd3cd731 | |||
| 5b89864f7f | |||
| dc7d26e4d7 | |||
| 4280c21575 | |||
| 3179686e28 | |||
| 08450b6358 | |||
| 2604055fb0 | |||
| bcfe85ce34 | |||
| 4b6b6f359d | |||
| 543cf7de09 | |||
| f2cf78971d | |||
| 43130b4680 | |||
| 86f24c0a50 | |||
| 7fb6db28c2 | |||
| d37789ce7a | |||
| b47c548deb | |||
| cb60747e5a | |||
| 7f7fd8686f | |||
| 8d7144b6e4 | |||
| 8c163f3a38 | |||
| dd5801c0f7 | |||
| 3020fec2bc | |||
| 2dd771aac4 | |||
| 3c7849cc1a | |||
| 26e7f6bb00 | |||
| 58dec719c7 | |||
| 33f4410a5b | |||
| 1c8ed8df92 | |||
| 142f6e9e3c | |||
| 89e056084a | |||
| ab851d8113 | |||
| fa7b118dc3 | |||
| fbaa04082c | |||
| a5f7a7a215 | |||
| 07d9633609 | |||
| 44ccb41f90 | |||
| e62a0454c6 | |||
| f149ee4cf3 | |||
| 9539a9fa13 | |||
| bfd52dd98a | |||
| d95e2eccdc | |||
| e7145eb9fb | |||
| 656007bf1e | |||
| 01f7bf3a1a | |||
| 0e8bd76755 | |||
| f603eb7784 | |||
| 712317225a | |||
| d49f1853a9 | |||
| 0210945a1d | |||
| f45511290f | |||
| 746c3beb90 | |||
| 7da0833678 | |||
| e7448f488d | |||
| 73b72f1c9d | |||
| 9961fcd867 | |||
| 4792f8fcbb | |||
| cc6a4d8331 | |||
| 33e9627801 | |||
| 956cef56b4 | |||
| d6c89cd79b | |||
| 88168553f8 | |||
| 99b90377c5 | |||
| 35860c7b2d | |||
| 792be167a4 | |||
| ea6ab1d7f3 | |||
| 269c5a1355 | |||
| ddf54c215e | |||
| 1bc146164e | |||
| 72f9c8eefc | |||
| 96d098daba | |||
| 776cfa9736 | |||
| b9a8071dd1 | |||
| da9bd8818d | |||
| 8bb0ee26db | |||
| 374b8c98b6 | |||
| 6904762590 | |||
| 764b8b9ffa | |||
| 53e738b87b | |||
| 524345606c | |||
| 3f6d55994a | |||
| 2ceb8e3212 | |||
| 4179761c7a | |||
| f22acef43b | |||
| 30ddd8b496 | |||
| 49aeb053bf | |||
| 6bdb1b07ff | |||
| b2f5a930d0 | |||
| 6f83004123 | |||
| 86bd765125 | |||
| 7ab078129f | |||
| f318a02b02 | |||
| 6edd9ac723 | |||
| 28d6531a87 | |||
| 50780eba46 | |||
| 1e5b30a274 | |||
| 7af4455833 | |||
| f833b49c25 | |||
| 265187cac5 | |||
| b3b9373956 | |||
| 0441402fa3 | |||
| d52c27228e | |||
| 9e1d9142fc | |||
| bf7cb797f2 | |||
| 8ace960e18 | |||
| 3651237248 | |||
| 424f522177 | |||
| 72db690fa8 | |||
| 6da3e209b2 | |||
| 5a0688cffc | |||
| 29174104e6 | |||
| 4a8724f529 | |||
| b05e935f62 | |||
| d73bab1cb1 | |||
| 8c88adcb19 | |||
| 492b16cd0c | |||
| 73fc6820b8 | |||
| 66f0640027 | |||
| 04387af610 | |||
| 7b5ef70b4d | |||
| b45480991a | |||
| a8c1035253 | |||
| c21790f5a8 | |||
| ae0c1309a2 | |||
| 2a79860aac | |||
| fd5d195446 | |||
| a0d134f629 | |||
| bfc313c825 | |||
| 3a7e076067 | |||
| a4b9f70cc3 | |||
| 532aad1341 | |||
| 6def4e4a4a | |||
| 8fdc958cb9 |
@@ -6,7 +6,7 @@
|
|||||||
github: schneegans
|
github: schneegans
|
||||||
patreon: # Replace with a single Patreon username
|
patreon: # Replace with a single Patreon username
|
||||||
open_collective: # Replace with a single Open Collective username
|
open_collective: # Replace with a single Open Collective username
|
||||||
ko_fi: # Replace with a single Ko-fi username
|
ko_fi: schneegans
|
||||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||||
liberapay: # Schneegans
|
liberapay: # Schneegans
|
||||||
|
|||||||
@@ -116,6 +116,8 @@ jobs:
|
|||||||
- '35'
|
- '35'
|
||||||
- '36'
|
- '36'
|
||||||
- '37'
|
- '37'
|
||||||
|
- '38'
|
||||||
|
- 'rawhide'
|
||||||
session:
|
session:
|
||||||
- 'gnome-xsession'
|
- 'gnome-xsession'
|
||||||
- 'gnome-wayland-nested'
|
- 'gnome-wayland-nested'
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ jobs:
|
|||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update -q
|
sudo apt-get update -q
|
||||||
sudo apt-get install clang-format
|
sudo apt-get install gettext clang-format
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
run: |
|
run: |
|
||||||
./kwin/build.sh
|
./kwin/build.sh
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ DOMAIN := schneegans.github.com
|
|||||||
ZIP_NAME := $(NAME)@$(DOMAIN).zip
|
ZIP_NAME := $(NAME)@$(DOMAIN).zip
|
||||||
|
|
||||||
# Some of the recipes below depend on some of these files.
|
# Some of the recipes below depend on some of these files.
|
||||||
JS_FILES = $(wildcard src/*.js extension.js prefs.js)
|
JS_FILES = $(wildcard src/*.js src/*/*.js extension.js prefs.js)
|
||||||
UI_FILES = $(shell find resources -type f -and \( -name "*.ui" \))
|
UI_FILES = $(shell find resources -type f -and \( -name "*.ui" \))
|
||||||
RESOURCE_FILES = $(shell find resources -mindepth 2 -type f)
|
RESOURCE_FILES = $(shell find resources -mindepth 2 -type f)
|
||||||
LOCALES_PO = $(wildcard po/*.po)
|
LOCALES_PO = $(wildcard po/*.po)
|
||||||
@@ -17,6 +17,8 @@ LOCALES_MO = $(patsubst po/%.po,locale/%/LC_MESSAGES/$(NAME).mo,$(LOCALES_PO
|
|||||||
|
|
||||||
# These files will be included in the extension zip file.
|
# These files will be included in the extension zip file.
|
||||||
ZIP_CONTENT = $(JS_FILES) $(LOCALES_MO) resources/$(NAME).gresource \
|
ZIP_CONTENT = $(JS_FILES) $(LOCALES_MO) resources/$(NAME).gresource \
|
||||||
|
schemas/org.gnome.shell.extensions.$(NAME).gschema.xml \
|
||||||
|
schemas/org.gnome.shell.extensions.$(NAME)-profile.gschema.xml \
|
||||||
schemas/gschemas.compiled metadata.json LICENSE
|
schemas/gschemas.compiled metadata.json LICENSE
|
||||||
|
|
||||||
# These seven recipes can be invoked by the user.
|
# These seven recipes can be invoked by the user.
|
||||||
@@ -46,7 +48,7 @@ pot: $(JS_FILES) $(UI_FILES)
|
|||||||
|
|
||||||
# This runs several tests in containerized versions of GNOME Shell.
|
# This runs several tests in containerized versions of GNOME Shell.
|
||||||
test:
|
test:
|
||||||
@ for version in 32 33 34 35 36 37 ; do \
|
@ for version in 32 33 34 35 36 37 38 "rawhide" ; do \
|
||||||
for session in "gnome-xsession" "gnome-wayland-nested" ; do \
|
for session in "gnome-xsession" "gnome-wayland-nested" ; do \
|
||||||
echo ; \
|
echo ; \
|
||||||
echo "Running Tests on Fedora $$version ($$session)." ; \
|
echo "Running Tests on Fedora $$version ($$session)." ; \
|
||||||
@@ -57,7 +59,7 @@ test:
|
|||||||
|
|
||||||
# This re-generates all reference images required by the tests.
|
# This re-generates all reference images required by the tests.
|
||||||
references:
|
references:
|
||||||
@ for version in 32 33 34 35 36 37 ; do \
|
@ for version in 32 33 34 35 36 37 38 "rawhide" ; do \
|
||||||
for session in "gnome-xsession" "gnome-wayland-nested" ; do \
|
for session in "gnome-xsession" "gnome-wayland-nested" ; do \
|
||||||
echo ; \
|
echo ; \
|
||||||
echo "Generating References for Fedora $$version ($$session)." ; \
|
echo "Generating References for Fedora $$version ($$session)." ; \
|
||||||
@@ -91,7 +93,7 @@ $(ZIP_NAME): $(ZIP_CONTENT)
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Compiles the gschemas.compiled file from the gschema.xml file.
|
# Compiles the gschemas.compiled file from the gschema.xml file.
|
||||||
schemas/gschemas.compiled: schemas/org.gnome.shell.extensions.$(NAME).gschema.xml
|
schemas/gschemas.compiled: schemas/org.gnome.shell.extensions.$(NAME).gschema.xml schemas/org.gnome.shell.extensions.$(NAME)-profile.gschema.xml
|
||||||
@echo "Compiling schemas..."
|
@echo "Compiling schemas..."
|
||||||
@glib-compile-schemas schemas
|
@glib-compile-schemas schemas
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,10 @@ SPDX-License-Identifier: CC-BY-4.0
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://www.youtube.com/watch?v=L2aaNF_rPHo"><img src ="docs/pics/teaser.jpg" /></a>
|
<a href="https://www.youtube.com/watch?v=ZHMboQq8Z5c"><img src ="docs/pics/teaser.jpg" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h1 align="center">🔥 Set GNOME Shell on Fire!</h1>
|
<h1 align="center">🔥 Set GNOME Shell and KWin on Fire!</h1>
|
||||||
<p align="center">(and KWin as well)</p>
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://extensions.gnome.org/extension/4679/burn-my-windows/"><img src="https://img.shields.io/badge/Download-extensions.gnome.org-e67f4d.svg?logo=gnome&logoColor=lightgrey&labelColor=303030" /></a><br/>
|
<a href="https://extensions.gnome.org/extension/4679/burn-my-windows/"><img src="https://img.shields.io/badge/Download-extensions.gnome.org-e67f4d.svg?logo=gnome&logoColor=lightgrey&labelColor=303030" /></a><br/>
|
||||||
@@ -23,16 +22,15 @@ SPDX-License-Identifier: CC-BY-4.0
|
|||||||
When I released the [Desktop Cube Extension](https://github.com/Schneegans/Desktop-Cube/) for GNOME, many people requested to revive one of the most useless features of Linux desktop history: Setting windows on fire!
|
When I released the [Desktop Cube Extension](https://github.com/Schneegans/Desktop-Cube/) for GNOME, many people requested to revive one of the most useless features of Linux desktop history: Setting windows on fire!
|
||||||
This extension is not only more useless than the cube, but it is also much more hacky. So I expect some bug! [Let's incinerate them all](https://github.com/Schneegans/Burn-My-Windows/issues)!
|
This extension is not only more useless than the cube, but it is also much more hacky. So I expect some bug! [Let's incinerate them all](https://github.com/Schneegans/Burn-My-Windows/issues)!
|
||||||
|
|
||||||
Burn-My-Windows is not only available for **GNOME** but also includes some basic support for **KDE Plasma's KWin**.
|
**🖼️ The wallpapers used in the previews below were all generated using AI and are available in [this GitHub repository](https://github.com/Schneegans/ai-wallpapers).**
|
||||||
Further down in this file you'll find installation instructions for both.
|
|
||||||
|
|
||||||
Effect | Preview
|
Effect | Preview
|
||||||
-----|--------
|
-----|--------
|
||||||
**Apparition** <br> This effect hides your windows by violently sucking them into the void of magic! | <img src ="docs/pics/apparition.gif" />
|
**Apparition** <br> This effect hides your windows by violently sucking them into the void of magic! | <img src ="docs/pics/apparition.gif" />
|
||||||
**Broken Glass** <br> Shatter your windows into a shower sharp shards! This effect can be configured so that the shards fly away from your mouse pointer position!| <img src ="docs/pics/glass.gif" />
|
**Broken Glass** <br> Shatter your windows into a shower sharp shards! This effect can be configured so that the shards fly away from your mouse pointer position!| <img src ="docs/pics/broken-glass.gif" />
|
||||||
**Doom** <br> Melt your windows. Inspired by the legendary screen transitions of the original Doom. | <img src ="docs/pics/doom.gif" />
|
**Doom** <br> Melt your windows. Inspired by the legendary screen transitions of the original Doom. | <img src ="docs/pics/doom.gif" />
|
||||||
**Energize A** <br> Beam your windows away! | <img src ="docs/pics/energizeA.gif" />
|
**Energize A** <br> Beam your windows away! | <img src ="docs/pics/energize-a.gif" />
|
||||||
**Energize B** <br> Using different transporter technology results in an alternative visual effect. | <img src ="docs/pics/energizeB.gif" />
|
**Energize B** <br> Using different transporter technology results in an alternative visual effect. | <img src ="docs/pics/energize-b.gif" />
|
||||||
**Fire** <br> The classic effect inspired by Compiz. However, this is implemented using a GLSL shader and not with a particle system like in the old days. | <img src ="docs/pics/fire.gif" />
|
**Fire** <br> The classic effect inspired by Compiz. However, this is implemented using a GLSL shader and not with a particle system like in the old days. | <img src ="docs/pics/fire.gif" />
|
||||||
**Glide** <br> This very simple effect fades the window to transparency with subtle 3D effects. | <img src ="docs/pics/glide.gif" />
|
**Glide** <br> This very simple effect fades the window to transparency with subtle 3D effects. | <img src ="docs/pics/glide.gif" />
|
||||||
**Glitch** <br> This effect applies some intentional graphics issues to your windows. | <img src ="docs/pics/glitch.gif" />
|
**Glitch** <br> This effect applies some intentional graphics issues to your windows. | <img src ="docs/pics/glitch.gif" />
|
||||||
@@ -45,7 +43,8 @@ Effect | Preview
|
|||||||
**Portal** <br> This ridiculous effect teleports your windows from and to alternative dimensions. It may resemble the portal from a well-known cartoon series... | <img src ="docs/pics/portal.gif" />
|
**Portal** <br> This ridiculous effect teleports your windows from and to alternative dimensions. It may resemble the portal from a well-known cartoon series... | <img src ="docs/pics/portal.gif" />
|
||||||
**Snap of Disintegration** <br> Dissolve your windows into a cloud of dust.| <img src ="docs/pics/snap.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" />
|
**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" />
|
**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" />
|
||||||
|
**TV Glitch** <br> This effect combines the Glitch and the TV Effect. | <img src ="docs/pics/tv-glitch.gif" />
|
||||||
**Wisps** <br> Let your windows be carried away to the realm of dreams by these little fairies! | <img src ="docs/pics/wisps.gif" />
|
**Wisps** <br> Let your windows be carried away to the realm of dreams by these little fairies! | <img src ="docs/pics/wisps.gif" />
|
||||||
**Your Effect!** <br> The extension is very modular and with a bit of creativity and GLSL knowledge, [you can easily create your own effects](docs/how-to-create-new-effects.md). | [](docs/how-to-create-new-effects.md)
|
**Your Effect!** <br> The extension is very modular and with a bit of creativity and GLSL knowledge, [you can easily create your own effects](docs/how-to-create-new-effects.md). | [](docs/how-to-create-new-effects.md)
|
||||||
|
|
||||||
@@ -78,7 +77,8 @@ Below is a table which summarizes the current availability for all effects.
|
|||||||
<tr><td>Portal</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
<tr><td>Portal</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||||
<tr><td>Snap of Disintegration</td> <td> </td> <td> </td> <td>✅</td> <td> </td> </tr>
|
<tr><td>Snap of Disintegration</td> <td> </td> <td> </td> <td>✅</td> <td> </td> </tr>
|
||||||
<tr><td>T-Rex Attack</td> <td> </td> <td> </td> <td>✅</td> <td> </td> </tr>
|
<tr><td>T-Rex Attack</td> <td> </td> <td> </td> <td>✅</td> <td> </td> </tr>
|
||||||
<tr><td>TV-Effect</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
<tr><td>TV Effect</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||||
|
<tr><td>TV Glitch</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||||
<tr><td>Wisps</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
<tr><td>Wisps</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -91,24 +91,26 @@ While [coding new features](docs/how-to-create-new-effects.md) or [translating t
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/D3vil0p3r">D3vil0p3r</a><br>
|
<a href="https://github.com/D3vil0p3r">D3vil0p3r</a><br>
|
||||||
Maxence Sebald<br>
|
Maxence Sebald<br>
|
||||||
<a href="https://github.com/dennis1248">Dennis ten Hoove</a><br>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3 align="center">🥈 Current Silver Sponsors</h3>
|
<h3 align="center">🥈 Current Silver Sponsors</h3>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/danielheadbang">@danielheadbang</a><br>
|
<a href="https://github.com/danielheadbang">@danielheadbang</a><br>
|
||||||
<a href="https://github.com/MRR-dev">@MRR-dev</a><br>
|
|
||||||
<a href="https://github.com/castrojo">Jorge Castro</a><br>
|
<a href="https://github.com/castrojo">Jorge Castro</a><br>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3 align="center">🥉 Current Bronze Sponsors</h3>
|
<h3 align="center">🥉 Current Bronze Sponsors</h3>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href='https://github.com/AngelBrielez'>Angel Brielez</a>
|
<a href='https://github.com/SubOptimal'>@SubOptimal</a><br>
|
||||||
|
<a href='https://github.com/vlazic'>@vlazic</a><br>
|
||||||
<!-- <a href="https://github.com/sponsors/Schneegans">Become the first!</a><br> -->
|
<!-- <a href="https://github.com/sponsors/Schneegans">Become the first!</a><br> -->
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3 align="center">🏅 Previous Sponsors and One-Time Donators</h3>
|
<h3 align="center">🏅 Previous Sponsors and One-Time Donators</h3>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
<a href="https://github.com/dennis1248">Dennis ten Hoove</a><br>
|
||||||
|
<a href="https://github.com/MRR-dev">@MRR-dev</a><br>
|
||||||
|
<a href='https://github.com/AngelBrielez'>Angel Brielez</a>
|
||||||
<a href='https://github.com/taconomix'>@taconomix</a><br>
|
<a href='https://github.com/taconomix'>@taconomix</a><br>
|
||||||
<a href='https://github.com/enolive'>@enolive</a><br>
|
<a href='https://github.com/enolive'>@enolive</a><br>
|
||||||
<a href="https://github.com/Aggraxis">@Aggraxis</a><br>
|
<a href="https://github.com/Aggraxis">@Aggraxis</a><br>
|
||||||
@@ -191,11 +193,30 @@ You can either download the effects from the KDE store (a), download a stable ve
|
|||||||
|
|
||||||
:warning: **You need at least KWin 5.25.0 for the Burn-My-Windows effects.**
|
:warning: **You need at least KWin 5.25.0 for the Burn-My-Windows effects.**
|
||||||
|
|
||||||
:warning: **If the color picker widgets in the effect settings do not work for you, you may have to install a package called `libkf5widgetsaddons-dev` (Kubuntu, KDE Neon, ...) or `kwidgetsaddons-devel` (Fedora, OpenSuse, ...).**
|
:warning: **If the color picker widgets in the effect settings do not work for you, you may have to install a package called `libkf5widgetsaddons-dev` (Kubuntu, KDE Neon, ...) or `kf5-kwidgetsaddons-devel`, `kwidgetsaddons-devel` (Fedora, OpenSuse, ...).**
|
||||||
|
|
||||||
### a) Download from the [KDE Store](https://store.kde.org/p/1861183)
|
### a) Download from the KDE Store
|
||||||
|
|
||||||
You can directly get the effects from within your system settings. Just go to your System Settings, then "Workspace Behavior", and "Desktop Effects". Then click on "Get new Desktop Effetcs...".
|
Here are links to all effects which are currently available in the KDE store;
|
||||||
|
|
||||||
|
* [Doom](https://store.kde.org/p/1898739)
|
||||||
|
* [Energize A](https://store.kde.org/p/1884310)
|
||||||
|
* [Energize B](https://store.kde.org/p/1884311)
|
||||||
|
* [Fire](https://store.kde.org/p/1884307)
|
||||||
|
* [Glide](https://store.kde.org/p/1935778)
|
||||||
|
* [Glitch](https://store.kde.org/p/1972813)
|
||||||
|
* [Hexagon](https://store.kde.org/p/1884309)
|
||||||
|
* [Incinerate](https://store.kde.org/p/1861183)
|
||||||
|
* [Pixelate](https://store.kde.org/p/1898742)
|
||||||
|
* [Pixel Wheel](https://store.kde.org/p/1898746)
|
||||||
|
* [Pixel Wipe](https://store.kde.org/p/1898748)
|
||||||
|
* [Portal](https://store.kde.org/p/1959879)
|
||||||
|
* [TV-Effect](https://store.kde.org/p/1884312)
|
||||||
|
* [TV-Glitch](https://store.kde.org/p/1982142)
|
||||||
|
* [Wisps](https://store.kde.org/p/1884313)
|
||||||
|
|
||||||
|
You can also directly get the effects from within your system settings.
|
||||||
|
Just go to your System Settings, then "Workspace Behavior", and "Desktop Effects". Then click on "Get new Desktop Effects...".
|
||||||
|
|
||||||
### b) Downloading a Stable Release
|
### b) Downloading a Stable Release
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 4.1 MiB After Width: | Height: | Size: 2.1 MiB |
@@ -5,6 +5,76 @@ SPDX-License-Identifier: CC-BY-4.0
|
|||||||
|
|
||||||
# Changelog of the Burn-My-Windows Extension
|
# Changelog of the Burn-My-Windows Extension
|
||||||
|
|
||||||
|
## [Burn My Windows 28](https://github.com/schneegans/Burn-My-Windows/releases/tag/v28)
|
||||||
|
|
||||||
|
**Release Date:** 2023-04-06
|
||||||
|
|
||||||
|
#### Enhancements
|
||||||
|
|
||||||
|
* **New donation method: Ko-fi**. Follow me on Ko-fi to get the latest updates regarding my extensions: https://ko-fi.com/schneegans!
|
||||||
|
* All shaders are now compatible with OpenGL ES. Due to [this change in Mutter](https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2672) the number of devices using OpenGL ES has significantly increased since GNOME 44. This change makes Burn-My-Windows working on those devices.
|
||||||
|
* It is now possible to create effects which do not have any settings at all.
|
||||||
|
|
||||||
|
#### Bug Fixes
|
||||||
|
|
||||||
|
* [This change in GNOME Shell](https://gitlab.gnome.org/GNOME/gnome-shell/-/commit/7bd98f3f5fb7e0d1220646b8a4ee7073534a8e8f) prevented Burn-My-Windows from working if no hardware-acceleration was available on GNOME 44, including the Docker containers used for CI testing. Some severe refactoring was necessary to fix this issue.
|
||||||
|
* The tutorial on how to create new effects has been updated and should work again.
|
||||||
|
* Fixed an issue which caused effect-profile loading to fail whenever Burn-My-Windows was updated.
|
||||||
|
|
||||||
|
## [Burn My Windows 27](https://github.com/schneegans/Burn-My-Windows/releases/tag/v27)
|
||||||
|
|
||||||
|
**Release Date:** 2023-03-01
|
||||||
|
|
||||||
|
#### New Features
|
||||||
|
|
||||||
|
* **Effect Profiles:** It is now possible to create _effect profiles_. Each profile contains a different set of effect settings. You can choose for each profile under which circumstances it will be used. Currently, these constraints are supported:
|
||||||
|
- Application name
|
||||||
|
- Animation type (open close)
|
||||||
|
- Window type (normal, dialog)
|
||||||
|
- Desktop style (light, dark)
|
||||||
|
- Power mode (plugged-in, on battery)
|
||||||
|
- Power profile (power saver, balanced, performance)
|
||||||
|
|
||||||
|
This allows for a very detailed configuration of the extension. For instance, you can now...
|
||||||
|
- ... exclude specific applications from BMW effects
|
||||||
|
- ... select effects per-application
|
||||||
|
- ... use different configurations of the same effect for opening or closing windows
|
||||||
|
|
||||||
|
The extension will attempt to migrate your previous settings to the new effect profile system. Depending on your previous configuration, you may have now one or two profiles to start with, but you can add an arbitrary amount of profiles.
|
||||||
|
|
||||||
|
The effect profiles are available for all supported GNOME versions (that is GNOME 3.36, 3.38, 40, 41, 42, 43, and 44).
|
||||||
|
* **Wallpapers:** A set of AI-generated [wallpapers has released](https://github.com/Schneegans/ai-wallpapers). For each effect of Burn-My-Windows, there is one dedicated wallpaper. As a central theme, each wallpaper shows a window. In some cases, the window is actually burning!
|
||||||
|
* Initial support for GNOME 44.
|
||||||
|
|
||||||
|
#### Other Enhancements
|
||||||
|
|
||||||
|
* As part of the effect profile implementation, the libadwaita-inspired preferences dialog layout got back-ported to all other supported GNOME versions.
|
||||||
|
* A notification is now shown in the settings dialog whenever the extension got updated. It contains a link to this changelog.
|
||||||
|
* Many translation updates. Thanks to all the translators!
|
||||||
|
|
||||||
|
## [Burn My Windows 26](https://github.com/schneegans/Burn-My-Windows/releases/tag/v26)
|
||||||
|
|
||||||
|
**Release Date:** 2023-02-04
|
||||||
|
|
||||||
|
#### New Features
|
||||||
|
|
||||||
|
* **New Effect: TV-Glitch.** This effect combines the Glitch and the TV Effect into one. Credits go to [Kurt Wilson](https://github.com/Kurtoid) for this idea!
|
||||||
|
|
||||||
|
#### Other Enhancements
|
||||||
|
|
||||||
|
* On KDE, the effect configuration dialogs can now be translated. The translations for GNOME are re-used, so we already have many translations! This requires at least KWin 5.27 to be working.
|
||||||
|
* Many translation updates, including a completely new Japanese translation. Thanks to all the translators!
|
||||||
|
* The effect colors for the Glitch and TV Effect now support an alpha channel. With this you can control how much color gets mixed into the window color.
|
||||||
|
|
||||||
|
|
||||||
|
## [Burn My Windows 25](https://github.com/schneegans/Burn-My-Windows/releases/tag/v25)
|
||||||
|
|
||||||
|
**Release Date:** 2023-01-17
|
||||||
|
|
||||||
|
#### Bug Fixes
|
||||||
|
|
||||||
|
* Fixed an issue which prevented the extension from loading if `power-profiles-daemon` was masked.
|
||||||
|
|
||||||
## [Burn My Windows 24](https://github.com/schneegans/Burn-My-Windows/releases/tag/v24)
|
## [Burn My Windows 24](https://github.com/schneegans/Burn-My-Windows/releases/tag/v24)
|
||||||
|
|
||||||
**Release Date:** 2023-01-14
|
**Release Date:** 2023-01-14
|
||||||
|
|||||||
@@ -47,9 +47,9 @@ You will have to ...
|
|||||||
|
|
||||||
### 1. Expanding the Schema
|
### 1. Expanding the Schema
|
||||||
|
|
||||||
For enabling the new effect, the boolean settings keys `simple-fade-open-effect`, `simple-fade-close-effect`, and `simple-fade-animation-time` are required.
|
For enabling the new effect, the boolean settings keys `simple-fade-enable-effect` and `simple-fade-animation-time` are required.
|
||||||
In this example, we also add a floating point value for storing another property of the effect - we will use them later in the tutorial.
|
In this example, we also add a floating point value for storing another property of the effect - we will use them later in the tutorial.
|
||||||
Just copy the XML code below to the file [`schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml`](../schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml).
|
Just copy the XML code below to the file [`schemas/org.gnome.shell.extensions.burn-my-windows-profile.gschema.xml`](../schemas/org.gnome.shell.extensions.burn-my-windows-profile.gschema.xml).
|
||||||
Just remember to replace `simple-fade` with your custom name!
|
Just remember to replace `simple-fade` with your custom name!
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
@@ -57,16 +57,10 @@ Just remember to replace `simple-fade` with your custom name!
|
|||||||
<!-- Simple Fade Effect Options -->
|
<!-- Simple Fade Effect Options -->
|
||||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||||
|
|
||||||
<key name="simple-fade-close-effect" type="b">
|
<key name="simple-fade-enable-effect" type="b">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
<summary>Simple Fade Close Effect</summary>
|
<summary>Simple Fade Enable Effect</summary>
|
||||||
<description>Use the Simple Fade effect for window closing.</description>
|
<description>Use the Simple Fade effect.</description>
|
||||||
</key>
|
|
||||||
|
|
||||||
<key name="simple-fade-open-effect" type="b">
|
|
||||||
<default>false</default>
|
|
||||||
<summary>Simple Fade Open Effect</summary>
|
|
||||||
<description>Use the Simple Fade effect for window opening.</description>
|
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key name="simple-fade-animation-time" type="i">
|
<key name="simple-fade-animation-time" type="i">
|
||||||
@@ -84,7 +78,7 @@ Just remember to replace `simple-fade` with your custom name!
|
|||||||
|
|
||||||
### 2. Creating the Effect Class
|
### 2. Creating the Effect Class
|
||||||
|
|
||||||
You will have to create a new GLSL file called `resources/shaders/simple-fade.frag` and a new JavaScript source file called `src/SimpleFade.js`.
|
You will have to create a new GLSL file called `resources/shaders/simple-fade.frag` and a new JavaScript source file called `src/effects/SimpleFade.js`.
|
||||||
Simply paste the following source code to the respective file.
|
Simply paste the following source code to the respective file.
|
||||||
Please study this code carefully, all of it is explained with inline comments.
|
Please study this code carefully, all of it is explained with inline comments.
|
||||||
|
|
||||||
@@ -92,6 +86,20 @@ Please study this code carefully, all of it is explained with inline comments.
|
|||||||
<summary>Expand this to show the GLSL code.</summary>
|
<summary>Expand this to show the GLSL code.</summary>
|
||||||
|
|
||||||
```glsl
|
```glsl
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// ) ( //
|
||||||
|
// ( /( ( ( ) ( ( ( ( )\ ) ( ( //
|
||||||
|
// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( //
|
||||||
|
// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ //
|
||||||
|
// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) //
|
||||||
|
// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< //
|
||||||
|
// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ //
|
||||||
|
// |__/ //
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// SPDX-FileCopyrightText: Your Name <your@email.com>
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// The content from common.glsl is automatically prepended to each shader effect. This
|
// The content from common.glsl is automatically prepended to each shader effect. This
|
||||||
// provides the standard input:
|
// provides the standard input:
|
||||||
|
|
||||||
@@ -201,8 +209,9 @@ var SimpleFade = class {
|
|||||||
|
|
||||||
// This will be called in various places where a unique identifier for this effect is
|
// 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
|
// 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
|
// effect is enabled currently (e.g. '*-enable-effect'), and its animation time
|
||||||
// (e.g. '*-animation-time').
|
// (e.g. '*-animation-time'). Also, the shader file and the settings UI files should be
|
||||||
|
// named likes this.
|
||||||
getNick() {
|
getNick() {
|
||||||
return 'simple-fade';
|
return 'simple-fade';
|
||||||
}
|
}
|
||||||
@@ -215,12 +224,10 @@ var SimpleFade = class {
|
|||||||
|
|
||||||
// -------------------------------------------------------------------- API for prefs.js
|
// -------------------------------------------------------------------- API for prefs.js
|
||||||
|
|
||||||
// This is called by the preferences dialog. It loads the settings page for this effect,
|
// This is called by the preferences dialog whenever a new effect profile is loaded. It
|
||||||
// binds all properties to the settings and appends the page to the main stack of the
|
// binds all user interface elements to the respective settings keys of the profile.
|
||||||
// preferences dialog.
|
bindPreferences(dialog) {
|
||||||
getPreferences(dialog) {
|
|
||||||
// Empty for now... Code is added here later in the tutorial!
|
// Empty for now... Code is added here later in the tutorial!
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------- API for extension.js
|
// ---------------------------------------------------------------- API for extension.js
|
||||||
@@ -245,7 +252,7 @@ Like this:
|
|||||||
```javascript
|
```javascript
|
||||||
const ALL_EFFECTS = [
|
const ALL_EFFECTS = [
|
||||||
...
|
...
|
||||||
new Me.imports.src.SimpleFade.SimpleFade(),
|
new Me.imports.src.effects.SimpleFade.SimpleFade(),
|
||||||
...
|
...
|
||||||
];
|
];
|
||||||
```
|
```
|
||||||
@@ -271,9 +278,10 @@ There should be two sliders in this example: The animation duration and the widt
|
|||||||
If your effect supports GNOME Shell 3.3x _and_ GNOME Shell 40+, you will have to provide three `*.ui` files for this.
|
If your effect supports GNOME Shell 3.3x _and_ GNOME Shell 40+, you will have to provide three `*.ui` files for this.
|
||||||
This is because starting with GNOME Shell 40, the preference dialog uses GTK4, before it used to use GTK3.
|
This is because starting with GNOME Shell 40, the preference dialog uses GTK4, before it used to use GTK3.
|
||||||
Starting with GNOME Shell 42, it uses `libadwaita` which requires different UI files again.
|
Starting with GNOME Shell 42, it uses `libadwaita` which requires different UI files again.
|
||||||
We will load the respective file in the `getPreferences()` method of your new effect class.
|
|
||||||
|
|
||||||
Just save the code below to `resources/ui/gtk3/SimpleFade.ui`, `resources/ui/gtk4/SimpleFade.ui`, and `resources/ui/adw/SimpleFade.ui` respectively.
|
_:information_source: If you do not have the means to test your effect on different versions of GNOME, feel free to submit a pull request for one GNOME version only, I may then port your effect to other GNOME versions!_
|
||||||
|
|
||||||
|
Just save the code below to `resources/ui/gtk3/simple-fade.ui`, `resources/ui/gtk4/simple-fade.ui`, and `resources/ui/adw/simple-fade.ui` respectively.
|
||||||
Remember to replace any occurrence of `simple-fade` with your effect's nick-name!
|
Remember to replace any occurrence of `simple-fade` with your effect's nick-name!
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
@@ -287,7 +295,7 @@ SPDX-FileCopyrightText: Your Name <your@email.com>
|
|||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<interface>
|
<interface domain="burn-my-windows">
|
||||||
|
|
||||||
<object class="GtkAdjustment" id="simple-fade-animation-time">
|
<object class="GtkAdjustment" id="simple-fade-animation-time">
|
||||||
<property name="upper">5000</property>
|
<property name="upper">5000</property>
|
||||||
@@ -303,114 +311,97 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<property name="page-increment">0.1</property>
|
<property name="page-increment">0.1</property>
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
<object class="GtkBox" id="simple-fade-prefs">
|
<object class="GtkRevealer" id="simple-fade-prefs">
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkFrame">
|
<object class="GtkListBox">
|
||||||
|
<property name="selection-mode">none</property>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkListBox">
|
<object class="GtkListBoxRow">
|
||||||
<property name="selection-mode">none</property>
|
<property name="activatable">0</property>
|
||||||
<style>
|
|
||||||
<class name="rich-list" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkListBoxRow">
|
<object class="GtkBox">
|
||||||
<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>
|
<child>
|
||||||
<object class="GtkBox">
|
<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">simple-fade-animation-time</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="reset-simple-fade-animation-time">
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel">
|
<object class="GtkImage">
|
||||||
<property name="label" translatable="yes">Animation Time [ms]</property>
|
<property name="icon-name">edit-clear-symbolic</property>
|
||||||
<property name="xalign">0</property>
|
<property name="icon-size">1</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">simple-fade-animation-time</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="reset-simple-fade-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>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||||
|
<style>
|
||||||
|
<class name="flat" />
|
||||||
|
</style>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<object class="GtkListBoxRow">
|
||||||
|
<property name="activatable">0</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkListBoxRow">
|
<object class="GtkBox">
|
||||||
<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>
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkLabel">
|
||||||
|
<property name="label" translatable="yes">Fade Width</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">simple-fade-width</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="reset-simple-fade-width">
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel">
|
<object class="GtkImage">
|
||||||
<property name="label" translatable="yes">Fade Width</property>
|
<property name="icon-name">edit-clear-symbolic</property>
|
||||||
<property name="xalign">0</property>
|
<property name="icon-size">1</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">simple-fade-width</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="reset-simple-fade-width">
|
|
||||||
<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>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||||
|
<style>
|
||||||
|
<class name="flat" />
|
||||||
|
</style>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
@@ -437,7 +428,7 @@ SPDX-FileCopyrightText: Your Name <your@email.com>
|
|||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<interface>
|
<interface domain="burn-my-windows">
|
||||||
|
|
||||||
<object class="GtkAdjustment" id="simple-fade-animation-time">
|
<object class="GtkAdjustment" id="simple-fade-animation-time">
|
||||||
<property name="upper">5000</property>
|
<property name="upper">5000</property>
|
||||||
@@ -453,97 +444,87 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<property name="page-increment">0.1</property>
|
<property name="page-increment">0.1</property>
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
<object class="GtkBox" id="simple-fade-prefs">
|
<object class="GtkRevealer" id="simple-fade-prefs">
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkFrame">
|
<object class="GtkListBox">
|
||||||
|
<property name="selection-mode">none</property>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkListBox">
|
<object class="GtkListBoxRow">
|
||||||
<property name="selection-mode">none</property>
|
<property name="activatable">0</property>
|
||||||
<property name="show-separators">1</property>
|
|
||||||
<style>
|
|
||||||
<class name="rich-list" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkListBoxRow">
|
<object class="GtkBox">
|
||||||
<property name="activatable">0</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkLabel">
|
||||||
<child>
|
<property name="label" translatable="yes">Animation Time [ms]</property>
|
||||||
<object class="GtkLabel">
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Animation Time [ms]</property>
|
<property name="halign">start</property>
|
||||||
<property name="xalign">0</property>
|
<property name="valign">center</property>
|
||||||
<property name="halign">start</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="valign">center</property>
|
</object>
|
||||||
<property name="hexpand">1</property>
|
</child>
|
||||||
</object>
|
<child>
|
||||||
</child>
|
<object class="GtkScale">
|
||||||
<child>
|
<property name="halign">end</property>
|
||||||
<object class="GtkScale">
|
<property name="valign">center</property>
|
||||||
<property name="halign">end</property>
|
<property name="draw-value">1</property>
|
||||||
<property name="valign">center</property>
|
<property name="digits">0</property>
|
||||||
<property name="draw-value">1</property>
|
<property name="value-pos">left</property>
|
||||||
<property name="digits">0</property>
|
<property name="width-request">300</property>
|
||||||
<property name="value-pos">left</property>
|
<property name="adjustment">simple-fade-animation-time</property>
|
||||||
<property name="width-request">300</property>
|
</object>
|
||||||
<property name="adjustment">simple-fade-animation-time</property>
|
</child>
|
||||||
</object>
|
<child>
|
||||||
</child>
|
<object class="GtkButton" id="reset-simple-fade-animation-time">
|
||||||
<child>
|
<property name="icon-name">edit-clear-symbolic</property>
|
||||||
<object class="GtkButton" id="reset-simple-fade-animation-time">
|
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||||
<property name="icon-name">edit-clear-symbolic</property>
|
<style>
|
||||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
<class name="flat" />
|
||||||
<style>
|
</style>
|
||||||
<class name="flat" />
|
|
||||||
</style>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<object class="GtkListBoxRow">
|
||||||
|
<property name="activatable">0</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkListBoxRow">
|
<object class="GtkBox">
|
||||||
<property name="activatable">0</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkLabel">
|
||||||
<child>
|
<property name="label" translatable="yes">Fade Width</property>
|
||||||
<object class="GtkLabel">
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Fade Width</property>
|
<property name="halign">start</property>
|
||||||
<property name="xalign">0</property>
|
<property name="valign">center</property>
|
||||||
<property name="halign">start</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="valign">center</property>
|
</object>
|
||||||
<property name="hexpand">1</property>
|
</child>
|
||||||
</object>
|
<child>
|
||||||
</child>
|
<object class="GtkScale">
|
||||||
<child>
|
<property name="halign">end</property>
|
||||||
<object class="GtkScale">
|
<property name="valign">center</property>
|
||||||
<property name="halign">end</property>
|
<property name="draw-value">1</property>
|
||||||
<property name="valign">center</property>
|
<property name="digits">2</property>
|
||||||
<property name="draw-value">1</property>
|
<property name="value-pos">left</property>
|
||||||
<property name="digits">2</property>
|
<property name="width-request">300</property>
|
||||||
<property name="value-pos">left</property>
|
<property name="adjustment">simple-fade-width</property>
|
||||||
<property name="width-request">300</property>
|
</object>
|
||||||
<property name="adjustment">simple-fade-width</property>
|
</child>
|
||||||
</object>
|
<child>
|
||||||
</child>
|
<object class="GtkButton" id="reset-simple-fade-width">
|
||||||
<child>
|
<property name="icon-name">edit-clear-symbolic</property>
|
||||||
<object class="GtkButton" id="reset-simple-fade-width">
|
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||||
<property name="icon-name">edit-clear-symbolic</property>
|
<style>
|
||||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
<class name="flat" />
|
||||||
<style>
|
</style>
|
||||||
<class name="flat" />
|
|
||||||
</style>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
@@ -584,7 +565,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<property name="page-increment">0.1</property>
|
<property name="page-increment">0.1</property>
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
<object class="AdwActionRow" id="simple-fade-prefs">
|
<object class="AdwExpanderRow" id="simple-fade-prefs">
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwActionRow">
|
<object class="AdwActionRow">
|
||||||
@@ -647,21 +628,14 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
|
|
||||||
### Loading the Preferences Page
|
### Loading the Preferences Page
|
||||||
|
|
||||||
In order to load the above `*.ui` files, add the following code to your effect's `getPreferences()` method.
|
In order to load the above `*.ui` files, add the following code to your effect's `bindPreferences()` method.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
static getPreferences(dialog) {
|
bindPreferences(dialog) {
|
||||||
|
|
||||||
// Add the settings page to the builder.
|
|
||||||
dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/SimpleFade.ui`);
|
|
||||||
|
|
||||||
// These connect the settings to the UI elements. Have a look at prefs.js
|
// These connect the settings to the UI elements. Have a look at prefs.js
|
||||||
// on how to bind other types of UI elements.
|
// on how to bind other types of UI elements.
|
||||||
dialog.bindAdjustment('simple-fade-animation-time');
|
dialog.bindAdjustment('simple-fade-animation-time');
|
||||||
dialog.bindAdjustment('simple-fade-width');
|
dialog.bindAdjustment('simple-fade-width');
|
||||||
|
|
||||||
// Finally, return the new settings page.
|
|
||||||
return dialog.getBuilder().get_object('simple-fade-prefs');
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -3,5 +3,5 @@
|
|||||||
The preview GIFs are recorded with OBS Studio at 1920x1080, cut to a length of exactly two seconds and converted to a GIF with the following command:
|
The preview GIFs are recorded with OBS Studio at 1920x1080, cut to a length of exactly two seconds and converted to a GIF with the following command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
gifski --fps 30 -W 400 -H 225 -o effect.gif effect.mp4
|
gifski --fps 30 -W 320 -H 180 -o effect.gif effect.mp4
|
||||||
```
|
```
|
||||||
|
Before Width: | Height: | Size: 415 KiB After Width: | Height: | Size: 256 KiB |
|
After Width: | Height: | Size: 927 KiB |
|
Before Width: | Height: | Size: 623 KiB After Width: | Height: | Size: 433 KiB |
|
After Width: | Height: | Size: 862 KiB |
|
After Width: | Height: | Size: 646 KiB |
|
Before Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 958 KiB |
|
Before Width: | Height: | Size: 949 KiB After Width: | Height: | Size: 758 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 544 KiB After Width: | Height: | Size: 357 KiB |
|
Before Width: | Height: | Size: 387 KiB After Width: | Height: | Size: 366 KiB |
|
Before Width: | Height: | Size: 615 KiB After Width: | Height: | Size: 504 KiB |
|
Before Width: | Height: | Size: 975 KiB After Width: | Height: | Size: 536 KiB |
|
Before Width: | Height: | Size: 625 KiB After Width: | Height: | Size: 593 KiB |
|
Before Width: | Height: | Size: 414 KiB After Width: | Height: | Size: 261 KiB |
|
Before Width: | Height: | Size: 792 KiB After Width: | Height: | Size: 348 KiB |
|
Before Width: | Height: | Size: 491 KiB After Width: | Height: | Size: 391 KiB |
|
Before Width: | Height: | Size: 840 KiB After Width: | Height: | Size: 676 KiB |
|
Before Width: | Height: | Size: 928 KiB After Width: | Height: | Size: 739 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 936 KiB After Width: | Height: | Size: 603 KiB |
|
After Width: | Height: | Size: 294 KiB |
|
Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 215 KiB |
|
Before Width: | Height: | Size: 821 KiB After Width: | Height: | Size: 660 KiB |
@@ -30,7 +30,10 @@ try {
|
|||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||||
|
const migrate = Me.imports.src.migrate;
|
||||||
const utils = Me.imports.src.utils;
|
const utils = Me.imports.src.utils;
|
||||||
|
const ProfileManager = Me.imports.src.ProfileManager.ProfileManager;
|
||||||
|
const WindowPicker = Me.imports.src.WindowPicker.WindowPicker;
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// This extensions modifies the window-close and window-open animations with all kinds //
|
// This extensions modifies the window-close and window-open animations with all kinds //
|
||||||
@@ -51,25 +54,26 @@ class Extension {
|
|||||||
|
|
||||||
// New effects must be registered here and in prefs.js.
|
// New effects must be registered here and in prefs.js.
|
||||||
this._ALL_EFFECTS = [
|
this._ALL_EFFECTS = [
|
||||||
new Me.imports.src.Apparition.Apparition(),
|
new Me.imports.src.effects.Apparition.Apparition(),
|
||||||
new Me.imports.src.BrokenGlass.BrokenGlass(),
|
new Me.imports.src.effects.BrokenGlass.BrokenGlass(),
|
||||||
new Me.imports.src.Doom.Doom(),
|
new Me.imports.src.effects.Doom.Doom(),
|
||||||
new Me.imports.src.EnergizeA.EnergizeA(),
|
new Me.imports.src.effects.EnergizeA.EnergizeA(),
|
||||||
new Me.imports.src.EnergizeB.EnergizeB(),
|
new Me.imports.src.effects.EnergizeB.EnergizeB(),
|
||||||
new Me.imports.src.Fire.Fire(),
|
new Me.imports.src.effects.Fire.Fire(),
|
||||||
new Me.imports.src.Glide.Glide(),
|
new Me.imports.src.effects.Glide.Glide(),
|
||||||
new Me.imports.src.Glitch.Glitch(),
|
new Me.imports.src.effects.Glitch.Glitch(),
|
||||||
new Me.imports.src.Hexagon.Hexagon(),
|
new Me.imports.src.effects.Hexagon.Hexagon(),
|
||||||
new Me.imports.src.Incinerate.Incinerate(),
|
new Me.imports.src.effects.Incinerate.Incinerate(),
|
||||||
new Me.imports.src.Matrix.Matrix(),
|
new Me.imports.src.effects.Matrix.Matrix(),
|
||||||
new Me.imports.src.Pixelate.Pixelate(),
|
new Me.imports.src.effects.Pixelate.Pixelate(),
|
||||||
new Me.imports.src.PixelWheel.PixelWheel(),
|
new Me.imports.src.effects.PixelWheel.PixelWheel(),
|
||||||
new Me.imports.src.PixelWipe.PixelWipe(),
|
new Me.imports.src.effects.PixelWipe.PixelWipe(),
|
||||||
new Me.imports.src.Portal.Portal(),
|
new Me.imports.src.effects.Portal.Portal(),
|
||||||
new Me.imports.src.SnapOfDisintegration.SnapOfDisintegration(),
|
new Me.imports.src.effects.SnapOfDisintegration.SnapOfDisintegration(),
|
||||||
new Me.imports.src.TRexAttack.TRexAttack(),
|
new Me.imports.src.effects.TRexAttack.TRexAttack(),
|
||||||
new Me.imports.src.TVEffect.TVEffect(),
|
new Me.imports.src.effects.TVEffect.TVEffect(),
|
||||||
new Me.imports.src.Wisps.Wisps(),
|
new Me.imports.src.effects.TVGlitch.TVGlitch(),
|
||||||
|
new Me.imports.src.effects.Wisps.Wisps(),
|
||||||
];
|
];
|
||||||
|
|
||||||
// Load all of our resources.
|
// Load all of our resources.
|
||||||
@@ -79,6 +83,39 @@ class Extension {
|
|||||||
// Store a reference to the settings object.
|
// Store a reference to the settings object.
|
||||||
this._settings = ExtensionUtils.getSettings();
|
this._settings = ExtensionUtils.getSettings();
|
||||||
|
|
||||||
|
// Now we check whether the extension settings need to be migrated from a previous
|
||||||
|
// version. If this is the case, we defer the profile loading until this is finished.
|
||||||
|
const lastVersion = this._settings.get_int('last-extension-version');
|
||||||
|
if (lastVersion < Me.metadata.version) {
|
||||||
|
if (lastVersion <= 26) {
|
||||||
|
// If the profile migration fails for some reason, the callback will create a
|
||||||
|
// default profile instead.
|
||||||
|
migrate.fromVersion26().finally(() => {
|
||||||
|
this._loadProfiles();
|
||||||
|
this._settings.set_int('last-extension-version', Me.metadata.version);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this._loadProfiles();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
this._loadProfiles();
|
||||||
|
}
|
||||||
|
|
||||||
|
// We reload all effect profiles whenever the currently edited profile in the
|
||||||
|
// preferences dialog changes. This is most likely a bit too often, but it will also
|
||||||
|
// happen whenever a new profile is created and whenever an old profile is deleted.
|
||||||
|
this._settings.connect('changed::active-profile', () => {
|
||||||
|
this._loadProfiles();
|
||||||
|
});
|
||||||
|
|
||||||
|
// This is used to get the desktop's color scheme.
|
||||||
|
this._shellSettings = new Gio.Settings({schema: 'org.gnome.desktop.interface'});
|
||||||
|
|
||||||
|
// Enable the window-picking D-Bus API for the preferences dialog.
|
||||||
|
this._windowPicker = new WindowPicker();
|
||||||
|
this._windowPicker.export();
|
||||||
|
|
||||||
// We will use extensionThis to refer to the extension inside the patched methods.
|
// We will use extensionThis to refer to the extension inside the patched methods.
|
||||||
const extensionThis = this;
|
const extensionThis = this;
|
||||||
|
|
||||||
@@ -89,113 +126,135 @@ class Extension {
|
|||||||
'/org/freedesktop/UPower');
|
'/org/freedesktop/UPower');
|
||||||
|
|
||||||
// This is used to get the current power profile.
|
// This is used to get the current power profile.
|
||||||
const PowerProfilesProxy = Gio.DBusProxy.makeProxyWrapper(
|
try {
|
||||||
utils.getStringResource('/interfaces/net.hadess.PowerProfiles.xml'));
|
const PowerProfilesProxy = Gio.DBusProxy.makeProxyWrapper(
|
||||||
this._powerProfilesProxy = new PowerProfilesProxy(
|
utils.getStringResource('/interfaces/net.hadess.PowerProfiles.xml'));
|
||||||
Gio.DBus.system, 'net.hadess.PowerProfiles', '/net/hadess/PowerProfiles');
|
this._powerProfilesProxy = new PowerProfilesProxy(
|
||||||
|
Gio.DBus.system, 'net.hadess.PowerProfiles', '/net/hadess/PowerProfiles');
|
||||||
|
} catch (e) {
|
||||||
|
// Maybe the service is masked...
|
||||||
|
}
|
||||||
|
|
||||||
// We will monkey-patch these methods. Let's store the original ones.
|
// We will monkey-patch these methods. Let's store the original ones.
|
||||||
|
this._origShouldAnimateActor = WindowManager.prototype._shouldAnimateActor;
|
||||||
|
this._origWaitForOverviewToHide = WindowManager.prototype._waitForOverviewToHide;
|
||||||
this._origAddWindowClone = Workspace.prototype._addWindowClone;
|
this._origAddWindowClone = Workspace.prototype._addWindowClone;
|
||||||
this._origWindowRemoved = Workspace.prototype._windowRemoved;
|
this._origWindowRemoved = Workspace.prototype._windowRemoved;
|
||||||
this._origDoRemoveWindow = Workspace.prototype._doRemoveWindow;
|
this._origDoRemoveWindow = Workspace.prototype._doRemoveWindow;
|
||||||
this._origShouldAnimateActor = WindowManager.prototype._shouldAnimateActor;
|
|
||||||
this._origWaitForOverviewToHide = WindowManager.prototype._waitForOverviewToHide;
|
|
||||||
this._origDestroyWindowDone = WindowManager.prototype._destroyWindowDone;
|
|
||||||
|
|
||||||
// We will also override these animation times.
|
// ------------------------------- patching the window animations outside the overview
|
||||||
this._origWindowTime = imports.ui.windowManager.DESTROY_WINDOW_ANIMATION_TIME;
|
|
||||||
this._origDialogTime = imports.ui.windowManager.DIALOG_DESTROY_WINDOW_ANIMATION_TIME;
|
|
||||||
|
|
||||||
|
// If a window is created, the transitions are set up in the async _mapWindow() of the
|
||||||
// ------------------------------------------------ patching the window-open animation
|
|
||||||
|
|
||||||
// Here we add an effect to the window-open animation. This is done whenever a new
|
|
||||||
// window is created. Usually, there is no real window animation for opening windows
|
|
||||||
// in the overview - only the window's clone is animated - but thanks to the hacks
|
|
||||||
// below, we can show the real animations in the overview.
|
|
||||||
|
|
||||||
// If a window is created the transitions are set up in the async _mapWindow of the
|
|
||||||
// WindowManager:
|
// WindowManager:
|
||||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1452
|
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1487
|
||||||
// AFAIK, overriding this method is not possible as it's called by a signal to
|
// AFAIK, overriding this method is not possible as it's called by a signal to which
|
||||||
// which it is bound via the bind() method. To tweak the async transition
|
// it is bound via the bind() method. To tweak the async transition anyways, we
|
||||||
// anyways, we override the actors ease() method once - the next time it will be
|
// override the actors ease() method once. We do this in _shouldAnimateActor() which
|
||||||
// called by the _mapWindow(), we will intercept it!
|
// is called right before the ease() in _mapWindow:
|
||||||
this._windowCreatedConnection =
|
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1472
|
||||||
global.display.connect('window-created', (d, metaWin) => {
|
|
||||||
let actor = metaWin.get_compositor_private();
|
|
||||||
|
|
||||||
const orig = actor.ease;
|
// The same trick is done for the window-close animation. This is set up in a similar
|
||||||
actor.ease = function(...params) {
|
// fashion in the WindowManager's _destroyWindow():
|
||||||
orig.apply(actor, params);
|
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1558.
|
||||||
actor.ease = orig;
|
// Here is _shouldAnimateActor() also called right before. So we use it again to
|
||||||
|
// monkey-patch the window actor's ease() once.
|
||||||
|
|
||||||
// There are cases where the ease() is called prior to mapping the actor. If
|
// We override WindowManager._shouldAnimateActor() also for another purpose: Usually,
|
||||||
// the actor is not yet mapped, we defer the effect creation.
|
// it returns false when we are in the overview. This prevents the window animations
|
||||||
if (actor.mapped) {
|
// there. To enable animations in the overview, we check inside the method whether it
|
||||||
extensionThis._setupEffect(actor, true);
|
// was called by either _mapWindow or _destroyWindow. If so, we return true. Let's see
|
||||||
} else {
|
// if this breaks stuff left and right...
|
||||||
const connectionID = actor.connect('notify::mapped', () => {
|
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1120
|
||||||
extensionThis._setupEffect(actor, true);
|
WindowManager.prototype._shouldAnimateActor = function(actor, types) {
|
||||||
actor.disconnect(connectionID);
|
const caller = (new Error()).stack.split('\n')[1];
|
||||||
});
|
const forClosing = caller.includes('_destroyWindow@');
|
||||||
}
|
const forOpening = caller.includes('_mapWindow@');
|
||||||
};
|
|
||||||
|
// This is also called in other cases, for instance when minimizing windows. We are
|
||||||
|
// only interested in window opening and window closing for now.
|
||||||
|
if (forClosing || forOpening) {
|
||||||
|
|
||||||
|
// If there is an applicable effect profile, we intercept the ease() method to
|
||||||
|
// setup our own effect.
|
||||||
|
const chosenEffect = extensionThis._chooseEffect(actor, forOpening);
|
||||||
|
|
||||||
|
if (chosenEffect) {
|
||||||
|
// Store the original ease() method of the actor.
|
||||||
|
const orig = actor.ease;
|
||||||
|
|
||||||
|
// Now intercept the next call to actor.ease().
|
||||||
|
actor.ease = function(...params) {
|
||||||
|
// Quickly restore the original behavior. Nobody noticed, I guess :D
|
||||||
|
actor.ease = orig;
|
||||||
|
|
||||||
|
// And then create the effect!
|
||||||
|
extensionThis._setupEffect(actor, forOpening, chosenEffect.effect,
|
||||||
|
chosenEffect.profile);
|
||||||
|
};
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return extensionThis._origShouldAnimateActor.apply(this, [actor, types]);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Make sure to remove any effects if requested by the window manager.
|
||||||
|
this._killEffectsSignal =
|
||||||
|
global.window_manager.connect('kill-window-effects', (wm, actor) => {
|
||||||
|
const shader = actor.get_effect('burn-my-windows-effect');
|
||||||
|
if (shader) {
|
||||||
|
shader.endAnimation();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// --------------------------------------------- fix window animations in the overview
|
||||||
|
|
||||||
// Some of the effects require that the window's actor is enlarged to provide a bigger
|
// Some of the effects require that the window's actor is enlarged to provide a bigger
|
||||||
// canvas to draw the effects. Outside the overview we can simply increase the scale
|
// canvas to draw the effects. Outside the overview we can simply increase the scale
|
||||||
// of the actor. However, if we are in the overview, we have to enlarge the clone of
|
// of the actor. However, if we are in the overview, we have to enlarge the clone of
|
||||||
// the window as well.
|
// the window as well.
|
||||||
Workspace.prototype._addWindowClone = function(...params) {
|
Workspace.prototype._addWindowClone = function(...params) {
|
||||||
const result = extensionThis._origAddWindowClone.apply(this, params);
|
const clone = extensionThis._origAddWindowClone.apply(this, params);
|
||||||
|
|
||||||
// The parameters of this method changed a bit through the versions...
|
// The parameters of this method changed a bit through the versions...
|
||||||
let realWindow, clone;
|
let realWindow, container;
|
||||||
|
|
||||||
if (utils.shellVersionIs(3, 36)) {
|
if (utils.shellVersionIs(3, 36)) {
|
||||||
clone = result[0];
|
container = clone[0];
|
||||||
realWindow = clone.realWindow;
|
realWindow = container.realWindow;
|
||||||
} else if (utils.shellVersionIs(3, 38)) {
|
} else if (utils.shellVersionIs(3, 38)) {
|
||||||
clone = result._windowContainer;
|
container = clone._windowContainer;
|
||||||
realWindow = params[0].get_compositor_private();
|
realWindow = params[0].get_compositor_private();
|
||||||
} else {
|
} else {
|
||||||
clone = result.window_container;
|
container = clone.window_container;
|
||||||
realWindow = params[0].get_compositor_private();
|
realWindow = params[0].get_compositor_private();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Syncing the real window's scale with the scale of its clone only works on GNOME
|
// Store the overview clone as temporary members of the real window actor. When we
|
||||||
// Shell 3.38+. So effects cannot scale windows in the overview of GNOME 3.36...
|
// set up the effect, we will check for the existence of these and enlarge the clone
|
||||||
if (utils.shellVersionIsAtLeast(3, 38)) {
|
// as needed.
|
||||||
const xID = realWindow.connect('notify::scale-x', () => {
|
realWindow._bmwOverviewClone = clone;
|
||||||
if (realWindow.scale_x > 0 && clone.allocation.get_size()[0] > 0) {
|
realWindow._bmwOverviewCloneContainer = container;
|
||||||
clone.scale_x = realWindow.scale_x;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const yID = realWindow.connect('notify::scale-y', () => {
|
// Remove the temporary members again once the clone is deleted.
|
||||||
if (realWindow.scale_y > 0 && clone.allocation.get_size()[1] > 0) {
|
container.connect('destroy', () => {
|
||||||
clone.scale_y = realWindow.scale_y;
|
delete realWindow._bmwOverviewClone;
|
||||||
}
|
delete realWindow._bmwOverviewCloneContainer;
|
||||||
});
|
});
|
||||||
|
|
||||||
clone.connect('destroy', () => {
|
|
||||||
realWindow.disconnect(xID);
|
|
||||||
realWindow.disconnect(yID);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is actually needed for the window-close animation on GNOME Shell 3.36.
|
// This is actually needed for the window-close animation on GNOME Shell 3.36.
|
||||||
// On GNOME 3.36, the window clone's 'destroy' handler only calls _removeWindowClone
|
// On GNOME 3.36, the window clone's 'destroy' handler only calls _removeWindowClone
|
||||||
// but not _doRemoveWindow. The latter is required to trigger the repositioning of
|
// but not _doRemoveWindow. The latter is required to trigger the repositioning of
|
||||||
// the overview window layout. Therefore we call this method in addition.
|
// the overview window layout. Therefore we call this method in addition.
|
||||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/gnome-3-36/js/ui/workspace.js#L1877
|
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/gnome-3-36/js/ui/workspace.js#L1877
|
||||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1405
|
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1363
|
||||||
if (utils.shellVersionIs(3, 36)) {
|
if (utils.shellVersionIs(3, 36)) {
|
||||||
clone.connect('destroy', () => this._doRemoveWindow(clone.metaWindow));
|
container.connect('destroy', () => this._doRemoveWindow(container.metaWindow));
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return clone;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Usually, windows are faded in after the overview is completely hidden. We enable
|
// Usually, windows are faded in after the overview is completely hidden. We enable
|
||||||
@@ -204,69 +263,19 @@ class Extension {
|
|||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Here comes the ULTRA-HACK: The method below is called (amongst others) by the
|
|
||||||
// _destroyWindow and _mapWindow methods of the WindowManager. Usually, it returns
|
|
||||||
// false when we are in the overview. This prevents the window animations. As we
|
|
||||||
// cannot monkey-patch the _destroyWindow or _mapWindow methods themselves, we check
|
|
||||||
// inside the method below whether it was called by either of those. If so, we return
|
|
||||||
// true. Let's see if this breaks stuff left and right...
|
|
||||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1124
|
|
||||||
WindowManager.prototype._shouldAnimateActor = function(...params) {
|
|
||||||
const caller = (new Error()).stack.split('\n')[1];
|
|
||||||
if (caller.includes('_destroyWindow@') || caller.includes('_mapWindow@')) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return extensionThis._origShouldAnimateActor.apply(this, params);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------- patching the window-close animation
|
|
||||||
|
|
||||||
// The signal handler below and the following patch are all which is required outside
|
|
||||||
// of the overview. All other hacks further below are just required to defer the
|
|
||||||
// window-hiding in the overview until the effect is finished.
|
|
||||||
|
|
||||||
// The close animation is set up in WindowManager's _destroyWindow:
|
|
||||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1541
|
|
||||||
// As we cannot monkey-patch the _destroyWindow itself, we connect to the 'destroy'
|
|
||||||
// signal of the window manager and tweak the animation to our needs.
|
|
||||||
this._destroyConnection = global.window_manager.connect('destroy', (wm, actor) => {
|
|
||||||
this._setupEffect(actor, false);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Once the window-close animation is is finished, the window manager's
|
|
||||||
// _destroyWindowDone is called. We use this to free the effect so that it can be
|
|
||||||
// re-used in future.
|
|
||||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1541
|
|
||||||
WindowManager.prototype._destroyWindowDone = function(shellwm, actor) {
|
|
||||||
if (this._destroying.has(actor)) {
|
|
||||||
const shader = actor.get_effect('burn-my-windows-effect');
|
|
||||||
if (shader) {
|
|
||||||
actor.remove_effect(shader);
|
|
||||||
shader.endAnimation();
|
|
||||||
shader.returnToFactory();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call the original method.
|
|
||||||
extensionThis._origDestroyWindowDone.apply(this, [shellwm, actor]);
|
|
||||||
};
|
|
||||||
|
|
||||||
// These three method overrides are mega-hacky! Usually, windows are not faded when
|
// These three method overrides are mega-hacky! Usually, windows are not faded when
|
||||||
// closed from the overview (why?). With these overrides we make sure that they are
|
// closed from the overview (why?). With these overrides we make sure that they are
|
||||||
// actually faded out. To do this, _windowRemoved and _doRemoveWindow now check
|
// actually faded out. To do this, _windowRemoved and _doRemoveWindow now check
|
||||||
// whether there is a transition ongoing (via extensionThis._shouldDestroy). If that's
|
// whether there is a transition ongoing (via extensionThis._shouldDestroy). If that's
|
||||||
// the case, these methods do nothing. Are the actors removed in the end? I hope so.
|
// the case, these methods do nothing.
|
||||||
// The _destroyWindow of the WindowManager sets the transitions up and should take
|
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1258
|
||||||
// care of removing the actors at the end of the transitions.
|
|
||||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1301
|
|
||||||
Workspace.prototype._windowRemoved = function(ws, metaWin) {
|
Workspace.prototype._windowRemoved = function(ws, metaWin) {
|
||||||
if (extensionThis._shouldDestroy(this, metaWin)) {
|
if (extensionThis._shouldDestroy(this, metaWin)) {
|
||||||
extensionThis._origWindowRemoved.apply(this, [ws, metaWin]);
|
extensionThis._origWindowRemoved.apply(this, [ws, metaWin]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1180
|
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1137
|
||||||
Workspace.prototype._doRemoveWindow = function(metaWin) {
|
Workspace.prototype._doRemoveWindow = function(metaWin) {
|
||||||
if (extensionThis._shouldDestroy(this, metaWin)) {
|
if (extensionThis._shouldDestroy(this, metaWin)) {
|
||||||
extensionThis._origDoRemoveWindow.apply(this, [metaWin]);
|
extensionThis._origDoRemoveWindow.apply(this, [metaWin]);
|
||||||
@@ -333,19 +342,17 @@ class Extension {
|
|||||||
// Unregister our resources.
|
// Unregister our resources.
|
||||||
Gio.resources_unregister(this._resources);
|
Gio.resources_unregister(this._resources);
|
||||||
|
|
||||||
// Restore the original window-open and window-close animations.
|
// Disable the window-picking D-Bus API.
|
||||||
global.window_manager.disconnect(this._destroyConnection);
|
this._windowPicker.unexport();
|
||||||
global.display.disconnect(this._windowCreatedConnection);
|
|
||||||
|
|
||||||
|
global.window_manager.disconnect(this._killEffectsSignal);
|
||||||
|
|
||||||
|
// Restore the original window-open and window-close animations.
|
||||||
Workspace.prototype._addWindowClone = this._origAddWindowClone;
|
Workspace.prototype._addWindowClone = this._origAddWindowClone;
|
||||||
Workspace.prototype._windowRemoved = this._origWindowRemoved;
|
Workspace.prototype._windowRemoved = this._origWindowRemoved;
|
||||||
Workspace.prototype._doRemoveWindow = this._origDoRemoveWindow;
|
Workspace.prototype._doRemoveWindow = this._origDoRemoveWindow;
|
||||||
WindowManager.prototype._shouldAnimateActor = this._origShouldAnimateActor;
|
WindowManager.prototype._shouldAnimateActor = this._origShouldAnimateActor;
|
||||||
WindowManager.prototype._waitForOverviewToHide = this._origWaitForOverviewToHide;
|
WindowManager.prototype._waitForOverviewToHide = this._origWaitForOverviewToHide;
|
||||||
WindowManager.prototype._destroyWindowDone = this._origDestroyWindowDone;
|
|
||||||
|
|
||||||
imports.ui.windowManager.DESTROY_WINDOW_ANIMATION_TIME = this._origWindowTime;
|
|
||||||
imports.ui.windowManager.DIALOG_DESTROY_WINDOW_ANIMATION_TIME = this._origDialogTime;
|
|
||||||
|
|
||||||
if (WindowPreview) {
|
if (WindowPreview) {
|
||||||
WindowPreview.prototype._deleteAll = this._origDeleteAll;
|
WindowPreview.prototype._deleteAll = this._origDeleteAll;
|
||||||
@@ -358,91 +365,178 @@ class Extension {
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------- private stuff
|
// ----------------------------------------------------------------------- private stuff
|
||||||
|
|
||||||
// This method adds one of the configured effects to the given actor. If forOpening is
|
// This loads all effect profiles and assigns a priority to each profile. Whenever a
|
||||||
// set to true, a effect from the enabled window-open animations is chosen, else an
|
// window is opened or closed, the matching effect profile with the highest priority
|
||||||
// enabled window-close animation is used. This will also tweak the transitions of the
|
// will be chosen.
|
||||||
// given actor (e.g. scale it up if required).
|
// This method is called whenever the currently edited profile in the/ preferences
|
||||||
_setupEffect(actor, forOpening) {
|
// dialog changes. This is most likely a bit too often, but it will also happen whenever
|
||||||
|
// a new profile is created and whenever an old profile is deleted.
|
||||||
|
_loadProfiles() {
|
||||||
|
|
||||||
// Only add effects to normal windows and dialog windows.
|
// Get all currently available profiles.
|
||||||
|
const profileManager = new ProfileManager();
|
||||||
|
this._profiles = profileManager.getProfiles();
|
||||||
|
|
||||||
|
// Whenever the properties of a profile is changed in the settings, we may have to
|
||||||
|
// resort all profiles according to their priority.
|
||||||
|
const updatePriority = (p) => {
|
||||||
|
p.priority = profileManager.getProfilePriority(p.settings);
|
||||||
|
this._profiles.sort((a, b) => b.priority - a.priority);
|
||||||
|
};
|
||||||
|
|
||||||
|
// For each profile, assign an initial priority and update the priority whenever a
|
||||||
|
// related setting changes.
|
||||||
|
this._profiles.forEach(p => {
|
||||||
|
p.priority = profileManager.getProfilePriority(p.settings);
|
||||||
|
p.settings.connect('changed::profile-app', () => updatePriority(p));
|
||||||
|
p.settings.connect('changed::profile-animation-type', () => updatePriority(p));
|
||||||
|
p.settings.connect('changed::profile-window-type', () => updatePriority(p));
|
||||||
|
p.settings.connect('changed::profile-color-scheme', () => updatePriority(p));
|
||||||
|
p.settings.connect('changed::profile-power-mode', () => updatePriority(p));
|
||||||
|
p.settings.connect('changed::profile-power-profile', () => updatePriority(p));
|
||||||
|
p.settings.connect('changed::profile-high-priority', () => updatePriority(p));
|
||||||
|
});
|
||||||
|
|
||||||
|
// Sort all profiles initially according to their initial priority.
|
||||||
|
this._profiles.sort((a, b) => b.priority - a.priority);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This method selects an effect profile matching the current circumstances. Then a
|
||||||
|
// random effect from its enabled effects will be selected. It returns null if no
|
||||||
|
// profile is currently applicable.
|
||||||
|
_chooseEffect(actor, forOpening) {
|
||||||
|
|
||||||
|
// For now, we only add effects to normal windows and dialog windows.
|
||||||
const isNormalWindow = actor.meta_window.window_type == Meta.WindowType.NORMAL;
|
const isNormalWindow = actor.meta_window.window_type == Meta.WindowType.NORMAL;
|
||||||
const isDialogWindow =
|
const isDialogWindow =
|
||||||
actor.meta_window.window_type == Meta.WindowType.MODAL_DIALOG ||
|
actor.meta_window.window_type == Meta.WindowType.MODAL_DIALOG ||
|
||||||
actor.meta_window.window_type == Meta.WindowType.DIALOG;
|
actor.meta_window.window_type == Meta.WindowType.DIALOG;
|
||||||
|
|
||||||
if (!isNormalWindow && !isDialogWindow) {
|
if (!isNormalWindow && !isDialogWindow) {
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We do nothing if a dialog got closed and we should not burn them.
|
// ----------------------------------------------- choose a profile and then an effect
|
||||||
const shouldDestroyDialogs = this._settings.get_boolean('destroy-dialogs');
|
|
||||||
|
|
||||||
// If an effect is to be previewed, we have to affect dialogs es well. This is
|
// Usually, we use the effect profile with the highest priority which matches the
|
||||||
// because the preview window is a dialog window...
|
// current circumstances. From this profile, we choose a random effect. However, if an
|
||||||
const action = forOpening ? 'open' : 'close';
|
// effect is to be previewed, we choose the currently edited profile regardless of the
|
||||||
const previewNick = this._settings.get_string(action + '-preview-effect');
|
// circumstances.
|
||||||
|
let profile = null;
|
||||||
|
let effect = null;
|
||||||
|
|
||||||
if (isDialogWindow && !shouldDestroyDialogs && previewNick == '') {
|
// Hence, we first check if an effect is to be previewed.
|
||||||
this._fixAnimationTimes(isDialogWindow, forOpening, null);
|
const previewNick = this._settings.get_string('preview-effect');
|
||||||
return;
|
|
||||||
|
if (previewNick != '') {
|
||||||
|
const activeProfile = this._settings.get_string('active-profile');
|
||||||
|
effect = this._ALL_EFFECTS.find(effect => effect.getNick() == previewNick);
|
||||||
|
profile = this._profiles.find(p => p.path == activeProfile);
|
||||||
|
|
||||||
|
// Only preview the effect until the preview window is closed.
|
||||||
|
if (!profile || !forOpening) {
|
||||||
|
this._settings.set_string('preview-effect', '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If no effect is previewed, we use the effect profile with the highest priority
|
||||||
|
// which matches the current circumstances. From this profile, we choose a random
|
||||||
|
// effect.
|
||||||
|
else {
|
||||||
|
|
||||||
|
// These numbers match the indices in the Gtk.StringLists defined in the UI files
|
||||||
|
// (e.g. resources/ui/adw/prefs.ui).
|
||||||
|
const animationType = forOpening ? 1 : 2;
|
||||||
|
const windowType = isNormalWindow ? 1 : 2;
|
||||||
|
const powerMode = this._upowerProxy.OnBattery ? 1 : 2;
|
||||||
|
|
||||||
|
// Get the first profile whose constraints match the circumstances. The list is
|
||||||
|
// sorted by priority, so we are good to take the first match.
|
||||||
|
profile = this._profiles.find(p => {
|
||||||
|
const profileApp = p.settings.get_string('profile-app');
|
||||||
|
const profileAnimationType = p.settings.get_int('profile-animation-type');
|
||||||
|
const profileWindowType = p.settings.get_int('profile-window-type');
|
||||||
|
const profilePowerMode = p.settings.get_int('profile-power-mode');
|
||||||
|
const profileColorScheme = p.settings.get_int('profile-color-scheme');
|
||||||
|
const profilePowerProfile = p.settings.get_int('profile-power-profile');
|
||||||
|
|
||||||
|
// First we check whether the animation type, window type, and power mode are
|
||||||
|
// matching.
|
||||||
|
let matches =
|
||||||
|
(profileAnimationType == 0 || profileAnimationType == animationType) &&
|
||||||
|
(profileWindowType == 0 || profileWindowType == windowType) &&
|
||||||
|
(profilePowerMode == 0 || profilePowerMode == powerMode);
|
||||||
|
|
||||||
|
// If that was the case, we also check the application name.
|
||||||
|
if (matches && profileApp != '') {
|
||||||
|
const app = actor.meta_window.get_wm_class().toLowerCase();
|
||||||
|
|
||||||
|
// Split app names at |, remove any whitespace, and transform to lower case.
|
||||||
|
const profileApps =
|
||||||
|
profileApp.split('|').map(item => item.trim().toLowerCase());
|
||||||
|
matches = profileApps.includes(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the profile is still matching, we also check the color scheme.
|
||||||
|
if (matches && profileColorScheme != 0 && utils.shellVersionIsAtLeast(42, 0)) {
|
||||||
|
const colorScheme = this._shellSettings.get_string('color-scheme');
|
||||||
|
matches &= (profileColorScheme == 1 && colorScheme == 'default') ||
|
||||||
|
(profileColorScheme == 2 && colorScheme == 'prefer-dark');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finally, we may also have to check the power profile.
|
||||||
|
if (matches && profilePowerProfile != 0 && this._powerProfilesProxy) {
|
||||||
|
const powerProfile = this._powerProfilesProxy.ActiveProfile;
|
||||||
|
|
||||||
|
// To understand the numbers, please refer to the indices in the Gtk.StringList
|
||||||
|
// of the profile-power-profile Adw.ComboRow in resources/ui/adw/prefs.ui.
|
||||||
|
if (powerProfile == 'power-saver') {
|
||||||
|
matches &= profilePowerProfile == 1 || profilePowerProfile == 4;
|
||||||
|
} else if (powerProfile == 'balanced') {
|
||||||
|
matches &= profilePowerProfile == 2 || profilePowerProfile == 4 ||
|
||||||
|
profilePowerProfile == 5;
|
||||||
|
} else {
|
||||||
|
matches &= profilePowerProfile == 3 || profilePowerProfile == 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return matches;
|
||||||
|
});
|
||||||
|
|
||||||
|
// If we found a matching profile, choose a random effect from it.
|
||||||
|
if (profile) {
|
||||||
|
|
||||||
|
// Create a list of all enabled effects of this profile.
|
||||||
|
const enabled = this._ALL_EFFECTS.filter(effect => {
|
||||||
|
return profile.settings.get_boolean(`${effect.getNick()}-enable-effect`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// And then choose a random effect.
|
||||||
|
if (enabled.length > 0) {
|
||||||
|
effect = enabled[Math.floor(Math.random() * enabled.length)];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We may have to do nothing if running on battery power or if in power-save mode.
|
// If nothing was enabled, we have to do nothing :)
|
||||||
let disableOnBattery =
|
if (!effect || !profile) {
|
||||||
this._settings.get_boolean('disable-on-battery') && this._upowerProxy.OnBattery;
|
return null;
|
||||||
let disableOnPowerSave = this._settings.get_boolean('disable-on-power-save') &&
|
|
||||||
this._powerProfilesProxy.ActiveProfile == 'power-saver';
|
|
||||||
|
|
||||||
if ((disableOnBattery || disableOnPowerSave) && previewNick == '') {
|
|
||||||
this._fixAnimationTimes(isDialogWindow, forOpening, null);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return {effect: effect, profile: profile};
|
||||||
|
}
|
||||||
|
|
||||||
|
// This method adds the given effect using the settings from the given profile to the
|
||||||
|
// given actor.
|
||||||
|
_setupEffect(actor, forOpening, effect, profile) {
|
||||||
|
|
||||||
// There is the weird case where an animation is already ongoing. This happens when a
|
// There is the weird case where an animation is already ongoing. This happens when a
|
||||||
// window is closed which has been created before the session was started (e.g. when
|
// window is closed which has been created before the session was started (e.g. when
|
||||||
// GNOME Shell has been restarted in the meantime).
|
// GNOME Shell has been restarted in the meantime).
|
||||||
const oldShader = actor.get_effect('burn-my-windows-effect');
|
const oldShader = actor.get_effect('burn-my-windows-effect');
|
||||||
if (oldShader) {
|
if (oldShader) {
|
||||||
actor.remove_effect(oldShader);
|
|
||||||
oldShader.endAnimation();
|
oldShader.endAnimation();
|
||||||
oldShader.returnToFactory();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------ choose an effect
|
|
||||||
|
|
||||||
// Now we chose a random effect from all enabled effects.
|
|
||||||
let effect = null;
|
|
||||||
|
|
||||||
// First we check if an effect is to be previewed.
|
|
||||||
if (previewNick != '') {
|
|
||||||
effect = this._ALL_EFFECTS.find(effect => effect.getNick() == previewNick);
|
|
||||||
|
|
||||||
// Only preview the effect once.
|
|
||||||
this._settings.set_string(action + '-preview-effect', '');
|
|
||||||
|
|
||||||
}
|
|
||||||
// Else we choose a random effect from all enabled effects.
|
|
||||||
else {
|
|
||||||
|
|
||||||
// Therefore, we first create a list of all currently enabled effects.
|
|
||||||
const enabled = this._ALL_EFFECTS.filter(effect => {
|
|
||||||
return this._settings.get_boolean(`${effect.getNick()}-${action}-effect`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// And then choose a random effect.
|
|
||||||
if (enabled.length > 0) {
|
|
||||||
effect = enabled[Math.floor(Math.random() * enabled.length)];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If nothing was enabled, we have to do nothing :)
|
|
||||||
if (effect == null) {
|
|
||||||
this._fixAnimationTimes(isDialogWindow, forOpening, null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------- tweak actor transitions
|
|
||||||
|
|
||||||
// If we are currently performing integration test, all animations are set to a fixed
|
// If we are currently performing integration test, all animations are set to a fixed
|
||||||
// duration and show a fixed frame from the middle of the animation.
|
// duration and show a fixed frame from the middle of the animation.
|
||||||
const testMode = this._settings.get_boolean('test-mode');
|
const testMode = this._settings.get_boolean('test-mode');
|
||||||
@@ -451,123 +545,62 @@ class Extension {
|
|||||||
// windows are faded in / out scaled up / down slightly by GNOME Shell. Here, we tweak
|
// windows are faded in / out scaled up / down slightly by GNOME Shell. Here, we tweak
|
||||||
// the transitions so that nothing changes. The window stays opaque and is scaled to
|
// the transitions so that nothing changes. The window stays opaque and is scaled to
|
||||||
// actorScale.
|
// actorScale.
|
||||||
const actorScale = effect.getActorScale(this._settings, forOpening, actor);
|
const actorScale = effect.getActorScale(profile.settings, forOpening, actor);
|
||||||
|
|
||||||
|
// All scaling is relative to the window's center.
|
||||||
|
actor.set_pivot_point(0.5, 0.5);
|
||||||
|
actor.opacity = 255;
|
||||||
|
actor.scale_x = actorScale.x;
|
||||||
|
actor.scale_y = actorScale.y;
|
||||||
|
|
||||||
|
// If we are in the overview, we have to enlarge the window's clone as well. We also
|
||||||
|
// disable the clone's overlay (e.g. its icon, name, and close button) during the
|
||||||
|
// animation.
|
||||||
|
if (actor._bmwOverviewClone && utils.shellVersionIsAtLeast(3, 38)) {
|
||||||
|
actor._bmwOverviewClone.overlayEnabled = false;
|
||||||
|
actor._bmwOverviewCloneContainer.set_pivot_point(0.5, 0.5);
|
||||||
|
actor._bmwOverviewCloneContainer.scale_x = actorScale.x;
|
||||||
|
actor._bmwOverviewCloneContainer.scale_y = actorScale.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now add a cool shader to our window actor!
|
||||||
|
const shader = effect.shaderFactory.getShader();
|
||||||
|
actor.add_effect_with_name('burn-my-windows-effect', shader);
|
||||||
|
|
||||||
|
// At the end of the animation, we restore the scale of the overview clone (if any)
|
||||||
|
// and call the methods which would have been called by the original ease() calls at
|
||||||
|
// the end of the standard fade-in animation.
|
||||||
|
const endID = shader.connect('end-animation', () => {
|
||||||
|
shader.disconnect(endID);
|
||||||
|
|
||||||
|
if (actor._bmwOverviewClone && utils.shellVersionIsAtLeast(3, 38)) {
|
||||||
|
actor._bmwOverviewClone.overlayEnabled = true;
|
||||||
|
actor._bmwOverviewCloneContainer.scale_x = 1.0;
|
||||||
|
actor._bmwOverviewCloneContainer.scale_y = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove the shader and mark it being re-usable for future animations.
|
||||||
|
actor.remove_effect(shader);
|
||||||
|
shader.returnToFactory();
|
||||||
|
|
||||||
|
// Finally, once the animation is done or interrupted, we call the methods which
|
||||||
|
// should have been called by the original ease() methods.
|
||||||
|
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1487
|
||||||
|
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1558.
|
||||||
|
if (forOpening) {
|
||||||
|
Main.wm._mapWindowDone(global.window_manager, actor);
|
||||||
|
} else {
|
||||||
|
Main.wm._destroyWindowDone(global.window_manager, actor);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// To make things deterministic during testing, we set the effect duration to 5
|
// To make things deterministic during testing, we set the effect duration to 5
|
||||||
// seconds.
|
// seconds.
|
||||||
const duration =
|
const duration =
|
||||||
testMode ? 5000 : this._settings.get_int(effect.getNick() + '-animation-time');
|
testMode ? 5000 : profile.settings.get_int(effect.getNick() + '-animation-time');
|
||||||
|
|
||||||
// All animations are relative to the window's center.
|
// Finally start the animation!
|
||||||
actor.set_pivot_point(0.5, 0.5);
|
shader.beginAnimation(profile.settings, forOpening, testMode, duration, actor);
|
||||||
|
|
||||||
|
|
||||||
// We tweak the opacity and scale of the actor. If there is no ongoing transition for
|
|
||||||
// a property, a new one is set up.
|
|
||||||
const config = {'opacity': 255, 'scale-x': actorScale.x, 'scale-y': actorScale.y};
|
|
||||||
|
|
||||||
for (const property in config) {
|
|
||||||
let transition = actor.get_transition(property);
|
|
||||||
|
|
||||||
// If there is currently no ongoing transition, we create a new one. Clutter does
|
|
||||||
// not like to create transitions with the same start and end value - however, we
|
|
||||||
// need at least one transition for our progress value in the shader. So we trick
|
|
||||||
// Clutter by creating an arbitrary transition first and then modifying the start
|
|
||||||
// and end values according to our config object.
|
|
||||||
if (!transition) {
|
|
||||||
actor.set_property(property, 0);
|
|
||||||
actor.save_easing_state();
|
|
||||||
actor.set_easing_duration(1000);
|
|
||||||
actor.set_property(property, 1);
|
|
||||||
actor.restore_easing_state();
|
|
||||||
|
|
||||||
// Now there should be a transition!
|
|
||||||
transition = actor.get_transition(property);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tweak the transition according to the config object. For some reason, there are
|
|
||||||
// rare cases, where no transition is set up. This happens from time to time...
|
|
||||||
if (transition) {
|
|
||||||
transition.set_duration(duration);
|
|
||||||
transition.set_to(config[property]);
|
|
||||||
transition.set_from(config[property]);
|
|
||||||
transition.set_progress_mode(Clutter.AnimationMode.LINEAR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Once the transitions are finished, we restore the original actor size.
|
|
||||||
if (forOpening) {
|
|
||||||
const connectionID = actor.connect('transitions-completed', () => {
|
|
||||||
actor.scale_x = 1.0;
|
|
||||||
actor.scale_y = 1.0;
|
|
||||||
actor.disconnect(connectionID);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------- add the shader
|
|
||||||
|
|
||||||
// Now add a cool shader to our window actor!
|
|
||||||
const shader = effect.shaderFactory.getShader();
|
|
||||||
|
|
||||||
// There should always be an opacity transition going on...
|
|
||||||
const transition = actor.get_transition('opacity');
|
|
||||||
|
|
||||||
if (!transition) {
|
|
||||||
this._fixAnimationTimes(isDialogWindow, forOpening, null);
|
|
||||||
utils.debug('Cannot setup shader without opacity transition.')
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assign the effect to the window actor!
|
|
||||||
actor.add_effect_with_name('burn-my-windows-effect', shader);
|
|
||||||
|
|
||||||
// Set one-time uniforms.
|
|
||||||
shader.beginAnimation(this._settings, forOpening, duration * 0.001, actor);
|
|
||||||
|
|
||||||
// Set other uniforms each frame.
|
|
||||||
transition.connect('new-frame', (t) => {
|
|
||||||
if (testMode) {
|
|
||||||
shader.updateAnimation(0.5);
|
|
||||||
} else {
|
|
||||||
shader.updateAnimation(t.get_progress());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Remove the effect if the animation finished or was interrupted.
|
|
||||||
if (forOpening) {
|
|
||||||
transition.connect('stopped', () => {
|
|
||||||
const oldShader = actor.get_effect('burn-my-windows-effect');
|
|
||||||
if (oldShader) {
|
|
||||||
actor.remove_effect(oldShader);
|
|
||||||
oldShader.endAnimation();
|
|
||||||
oldShader.returnToFactory();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally, ensure that all animation times are set properly so that other extensions
|
|
||||||
// may guess how long it will take until windows are gone :)
|
|
||||||
this._fixAnimationTimes(isDialogWindow, forOpening, duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
// The code below is not necessary for Burn-My-Windows to function. However, there
|
|
||||||
// are some extensions such as "Show Application View When Workspace Empty"
|
|
||||||
// https://extensions.gnome.org/extension/2036/show-application-view-when-workspace-empty/
|
|
||||||
// which do something *after* a window was closed. As the window-close animation
|
|
||||||
// duration depends on the used effect, this may vary each time a window is
|
|
||||||
// closed. We set the currently used time here, so that others can get an idea how
|
|
||||||
// long this will take...
|
|
||||||
_fixAnimationTimes(isDialogWindow, forOpening, duration) {
|
|
||||||
if (!forOpening) {
|
|
||||||
if (isDialogWindow) {
|
|
||||||
imports.ui.windowManager.DIALOG_DESTROY_WINDOW_ANIMATION_TIME =
|
|
||||||
duration != null ? duration : this._origDialogTime;
|
|
||||||
} else {
|
|
||||||
imports.ui.windowManager.DESTROY_WINDOW_ANIMATION_TIME =
|
|
||||||
duration != null ? duration : this._origWindowTime;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is required to enable window-close animations in the overview. See the comment
|
// This is required to enable window-close animations in the overview. See the comment
|
||||||
@@ -581,11 +614,9 @@ class Extension {
|
|||||||
// This was called "realWindow" in GNOME 3.36.
|
// This was called "realWindow" in GNOME 3.36.
|
||||||
const propertyName = utils.shellVersionIs(3, 36) ? 'realWindow' : '_windowActor';
|
const propertyName = utils.shellVersionIs(3, 36) ? 'realWindow' : '_windowActor';
|
||||||
const actor = workspace._windows[index][propertyName];
|
const actor = workspace._windows[index][propertyName];
|
||||||
if (!actor.get_transition('scale-y')) {
|
const shader = actor.get_effect('burn-my-windows-effect');
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return shader == null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,127 +0,0 @@
|
|||||||
<?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="1">
|
|
||||||
<widget class="QDoubleSpinBox" name="kcfg_Randomness">
|
|
||||||
<property name="minimum">
|
|
||||||
<double>0.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<double>1.000000000000000</double>
|
|
||||||
</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>100</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>9999</number>
|
|
||||||
</property>
|
|
||||||
<property name="singleStep">
|
|
||||||
<number>100</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="text">
|
|
||||||
<string>Suction:</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="label_4">
|
|
||||||
<property name="text">
|
|
||||||
<string>Twirl:</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QLabel" name="label_5">
|
|
||||||
<property name="text">
|
|
||||||
<string>Randomness:</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_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Shake:</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_Suction">
|
|
||||||
<property name="minimum">
|
|
||||||
<double>0.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<double>1.000000000000000</double>
|
|
||||||
</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="2" column="1">
|
|
||||||
<widget class="QDoubleSpinBox" name="kcfg_Twirl">
|
|
||||||
<property name="minimum">
|
|
||||||
<double>-10.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<double>10.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QDoubleSpinBox" name="kcfg_Shake">
|
|
||||||
<property name="maximum">
|
|
||||||
<double>10.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<resources />
|
|
||||||
<connections />
|
|
||||||
</ui>
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// 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, 'uShake', effect.readConfig('Shake', 1.0));
|
|
||||||
effect.setUniform(this.shader, 'uTwirl', effect.readConfig('Twirl', 1.0));
|
|
||||||
effect.setUniform(this.shader, 'uSuction', effect.readConfig('Suction', 1.0));
|
|
||||||
effect.setUniform(this.shader, 'uRandomness', effect.readConfig('Randomness', 1.0));
|
|
||||||
@@ -30,6 +30,14 @@ BUILD_DIR="_build"
|
|||||||
# Create it if it's not there yet.
|
# Create it if it's not there yet.
|
||||||
mkdir -p "$BUILD_DIR"
|
mkdir -p "$BUILD_DIR"
|
||||||
|
|
||||||
|
# Compile the translations.
|
||||||
|
for file in ../po/*.po; do
|
||||||
|
echo "Compiling $file"
|
||||||
|
lang=$(basename "$file" .po)
|
||||||
|
mkdir -p "$BUILD_DIR/locale/$lang/LC_MESSAGES"
|
||||||
|
msgfmt "$file" -o "$BUILD_DIR/locale/$lang/LC_MESSAGES/burn-my-windows.mo"
|
||||||
|
done
|
||||||
|
|
||||||
# This method is called one for each effect. The parameters are as follows:
|
# This method is called one for each effect. The parameters are as follows:
|
||||||
# $1: The nick of the effect (e.g. "energize-a")
|
# $1: The nick of the effect (e.g. "energize-a")
|
||||||
# $2: The name of the effect (e.g. "Energize A")
|
# $2: The name of the effect (e.g. "Energize A")
|
||||||
@@ -48,6 +56,9 @@ generate() {
|
|||||||
mkdir -p "$BUILD_DIR/$DIR_NAME/contents/config"
|
mkdir -p "$BUILD_DIR/$DIR_NAME/contents/config"
|
||||||
mkdir -p "$BUILD_DIR/$DIR_NAME/contents/ui"
|
mkdir -p "$BUILD_DIR/$DIR_NAME/contents/ui"
|
||||||
|
|
||||||
|
# Copy the translations.
|
||||||
|
cp -r "$BUILD_DIR/locale" "$BUILD_DIR/$DIR_NAME/contents"
|
||||||
|
|
||||||
# Copy the config file if it exists.
|
# Copy the config file if it exists.
|
||||||
if [ -f "$1/main.xml" ]; then
|
if [ -f "$1/main.xml" ]; then
|
||||||
cp "$1/main.xml" "$BUILD_DIR/$DIR_NAME/contents/config"
|
cp "$1/main.xml" "$BUILD_DIR/$DIR_NAME/contents/config"
|
||||||
@@ -123,9 +134,9 @@ generate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Now run the above method for all supported effects.
|
# Now run the above method for all supported effects.
|
||||||
|
generate "doom" "Doom [Burn-My-Windows]" "Melt your windows"
|
||||||
generate "energize-a" "Energize A [Burn-My-Windows]" "Beam your windows away"
|
generate "energize-a" "Energize A [Burn-My-Windows]" "Beam your windows away"
|
||||||
generate "energize-b" "Energize B [Burn-My-Windows]" "Using different transporter technology results in an alternative visual effect"
|
generate "energize-b" "Energize B [Burn-My-Windows]" "Using different transporter technology results in an alternative visual effect"
|
||||||
generate "doom" "Doom [Burn-My-Windows]" "Melt your windows"
|
|
||||||
generate "fire" "Fire [Burn-My-Windows]" "The classic effect inspired by Compiz"
|
generate "fire" "Fire [Burn-My-Windows]" "The classic effect inspired by Compiz"
|
||||||
generate "glide" "Glide [Burn-My-Windows]" "Fade the window to transparency with subtle 3D effects"
|
generate "glide" "Glide [Burn-My-Windows]" "Fade the window to transparency with subtle 3D effects"
|
||||||
generate "glitch" "Glitch [Burn-My-Windows]" "This effect applies some intentional graphics issues to your windows"
|
generate "glitch" "Glitch [Burn-My-Windows]" "This effect applies some intentional graphics issues to your windows"
|
||||||
@@ -136,6 +147,7 @@ generate "pixel-wheel" "Pixel Wheel [Burn-My-Windows]" "Pixelate the window and
|
|||||||
generate "pixel-wipe" "Pixel Wipe [Burn-My-Windows]" "Pixelate the window and hide the pixels radially, starting from the pointer position"
|
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 "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 "tv" "TV Effect [Burn-My-Windows]" "Make windows close like turning off a TV"
|
||||||
|
generate "tv-glitch" "TV Glitch [Burn-My-Windows]" "Make your windows close like a very glitchy old-school TV"
|
||||||
generate "wisps" "Wisps [Burn-My-Windows]" "Let your windows be carried away to the realm of dreams by these little fairies"
|
generate "wisps" "Wisps [Burn-My-Windows]" "Let your windows be carried away to the realm of dreams by these little fairies"
|
||||||
|
|
||||||
# Finally, create an archive for the effects.
|
# Finally, create an archive for the effects.
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -62,9 +62,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -30,7 +30,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Color:</string>
|
<string>Color</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -50,7 +50,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Scale:</string>
|
<string>Scale</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -72,9 +72,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -30,7 +30,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Color:</string>
|
<string>Color</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -50,7 +50,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Scale:</string>
|
<string>Scale</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -72,9 +72,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="4" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Gradient:</string>
|
<string>Gradient</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -29,9 +29,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
@@ -56,7 +53,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Movement Speed:</string>
|
<string>Speed</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -76,7 +73,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Scale:</string>
|
<string>Scale</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -132,7 +129,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -150,4 +147,4 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources />
|
<resources />
|
||||||
<connections />
|
<connections />
|
||||||
</ui>
|
</ui>
|
||||||
|
|||||||
@@ -29,9 +29,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
@@ -46,7 +43,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Scale:</string>
|
<string>Scale</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -56,7 +53,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Scale:</string>
|
<string>Scale</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -33,7 +33,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="5" column="0">
|
<item row="5" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Color:</string>
|
<string>Color</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -46,7 +46,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -62,9 +62,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ effect.setUniform(this.shader, 'uDuration', this.duration * 0.001);
|
|||||||
effect.setUniform(this.shader, 'uScale', effect.readConfig('Scale', 1.0));
|
effect.setUniform(this.shader, 'uScale', effect.readConfig('Scale', 1.0));
|
||||||
effect.setUniform(this.shader, 'uStrength', effect.readConfig('Strength', 1.0));
|
effect.setUniform(this.shader, 'uStrength', effect.readConfig('Strength', 1.0));
|
||||||
effect.setUniform(this.shader, 'uSpeed', effect.readConfig('Speed', 1.0));
|
effect.setUniform(this.shader, 'uSpeed', effect.readConfig('Speed', 1.0));
|
||||||
effect.setUniform(this.shader, 'uColor', this.readRGBConfig('Color'));
|
effect.setUniform(this.shader, 'uColor', this.readRGBAConfig('Color'));
|
||||||
@@ -20,7 +20,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Line Color:</string>
|
<string>Line Color</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -49,9 +49,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
@@ -66,7 +63,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Glow Color:</string>
|
<string>Glow Color</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -76,7 +73,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="4" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="label_5">
|
<widget class="QLabel" name="label_5">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Line Width:</string>
|
<string>Mesh Line Width</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -86,7 +83,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -96,7 +93,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Scale:</string>
|
<string>Scale</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -135,4 +132,4 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources />
|
<resources />
|
||||||
<connections />
|
<connections />
|
||||||
</ui>
|
</ui>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Scale:</string>
|
<string>Scale</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -32,9 +32,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
@@ -59,7 +56,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -69,7 +66,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Turbulence:</string>
|
<string>Turbulence</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -92,7 +89,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Color:</string>
|
<string>Color</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -112,7 +109,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="4" column="1">
|
<item row="4" column="1">
|
||||||
<widget class="QCheckBox" name="kcfg_UsePointer">
|
<widget class="QCheckBox" name="kcfg_UsePointer">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Start from Pointer Location</string>
|
<string>Start at Pointer</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -127,4 +124,4 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources />
|
<resources />
|
||||||
<connections />
|
<connections />
|
||||||
</ui>
|
</ui>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
},
|
},
|
||||||
"X-KDE-Ordering": "60",
|
"X-KDE-Ordering": "60",
|
||||||
"X-KDE-PluginKeyword": "%DIR_NAME%",
|
"X-KDE-PluginKeyword": "%DIR_NAME%",
|
||||||
"X-KWin-Config-TranslationDomain": "kwin_effects",
|
"X-KWin-Config-TranslationDomain": "burn-my-windows",
|
||||||
"X-KWin-Exclusive-Category": "toplevel-open-close-animation",
|
"X-KWin-Exclusive-Category": "toplevel-open-close-animation",
|
||||||
"X-Plasma-API": "javascript",
|
"X-Plasma-API": "javascript",
|
||||||
"X-Plasma-MainScript": "code/main.js"
|
"X-Plasma-MainScript": "code/main.js"
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -39,9 +39,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -39,9 +39,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -39,9 +39,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="4" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Color:</string>
|
<string>Color</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -33,7 +33,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -52,9 +52,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>500</number>
|
<number>500</number>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -0,0 +1,137 @@
|
|||||||
|
<?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="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Scale</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="5" 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>Animation Time [ms]</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="KColorButton" name="kcfg_Color">
|
||||||
|
<property name="alphaChannelEnabled" stdset="0">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>9999</number>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>Strength</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Speed</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="kcfg_Scale">
|
||||||
|
<property name="minimum">
|
||||||
|
<double>0.100000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>10.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="kcfg_Strength">
|
||||||
|
<property name="minimum">
|
||||||
|
<double>0.100000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>10.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="kcfg_Speed">
|
||||||
|
<property name="minimum">
|
||||||
|
<double>0.100000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>10.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>KColorButton</class>
|
||||||
|
<extends>QPushButton</extends>
|
||||||
|
<header>kcolorbutton.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
@@ -10,19 +10,19 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<kcfgfile name="" />
|
<kcfgfile name="" />
|
||||||
<group name="">
|
<group name="">
|
||||||
<entry name="Duration" type="UInt">
|
<entry name="Duration" type="UInt">
|
||||||
<default>300</default>
|
<default>750</default>
|
||||||
</entry>
|
</entry>
|
||||||
<entry name="Shake" type="Double">
|
<entry name="Scale" type="Double">
|
||||||
<default>3</default>
|
<default>1</default>
|
||||||
</entry>
|
</entry>
|
||||||
<entry name="Twirl" type="Double">
|
<entry name="Strength" type="Double">
|
||||||
<default>5</default>
|
<default>2</default>
|
||||||
</entry>
|
</entry>
|
||||||
<entry name="Suction" type="Double">
|
<entry name="Speed" type="Double">
|
||||||
<default>0.75</default>
|
<default>2</default>
|
||||||
</entry>
|
</entry>
|
||||||
<entry name="Randomness" type="Double">
|
<entry name="Color" type="Color">
|
||||||
<default>0.5</default>
|
<default>#64A0FF</default>
|
||||||
</entry>
|
</entry>
|
||||||
</group>
|
</group>
|
||||||
</kcfg>
|
</kcfg>
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
// This part is automatically included in the effect's source during the build process.
|
// 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.
|
// The code below is called whenever a window is closed or opened.
|
||||||
|
|
||||||
effect.setUniform(this.shader, 'uSeed', [Math.random(), Math.random()]);
|
effect.setUniform(this.shader, 'uSeed', 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, 'uScale', effect.readConfig('Scale', 1.0));
|
||||||
|
effect.setUniform(this.shader, 'uStrength', effect.readConfig('Strength', 1.0));
|
||||||
|
effect.setUniform(this.shader, 'uSpeed', effect.readConfig('Speed', 1.0));
|
||||||
|
effect.setUniform(this.shader, 'uColor', this.readRGBAConfig('Color'));
|
||||||
@@ -19,9 +19,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
@@ -43,7 +40,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -53,7 +50,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Color:</string>
|
<string>Color</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
|||||||
@@ -5,4 +5,4 @@
|
|||||||
// The code below is called whenever the user changes something in the configuration of
|
// The code below is called whenever the user changes something in the configuration of
|
||||||
// the effect.
|
// the effect.
|
||||||
|
|
||||||
effect.setUniform(this.shader, 'uColor', this.readRGBConfig('Color'));
|
effect.setUniform(this.shader, 'uColor', this.readRGBAConfig('Color'));
|
||||||
@@ -29,9 +29,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="kcfg_Duration">
|
<widget class="QSpinBox" name="kcfg_Duration">
|
||||||
<property name="suffix">
|
|
||||||
<string> milliseconds</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>100</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
@@ -46,7 +43,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Color:</string>
|
<string>Color</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -56,7 +53,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Duration:</string>
|
<string>Animation Time [ms]</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -66,7 +63,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Scale:</string>
|
<string>Scale</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
|||||||
@@ -10,8 +10,9 @@
|
|||||||
"40",
|
"40",
|
||||||
"41",
|
"41",
|
||||||
"42",
|
"42",
|
||||||
"43"
|
"43",
|
||||||
|
"44"
|
||||||
],
|
],
|
||||||
"url": "https://github.com/Schneegans/Burn-My-Windows",
|
"url": "https://github.com/Schneegans/Burn-My-Windows",
|
||||||
"version": 24
|
"version": 28
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,769 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR Simon Schneegans
|
||||||
|
# This file is distributed under the same license as the burn-my-windows package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: burn-my-windows\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2023-02-21 16:46+0100\n"
|
||||||
|
"PO-Revision-Date: 2023-02-06 11:38+0000\n"
|
||||||
|
"Last-Translator: KinteLiX <superh552@gmail.com>\n"
|
||||||
|
"Language-Team: Hungarian <https://hosted.weblate.org/projects/burn-my-"
|
||||||
|
"windows/core/hu/>\n"
|
||||||
|
"Language: hu\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Weblate 4.16-dev\n"
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:168 resources/ui/gtk4/prefs.ui:220
|
||||||
|
#: resources/ui/gtk3/prefs.ui:265 resources/ui/adw/prefs.ui:103
|
||||||
|
msgid "Opening Windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:169 resources/ui/gtk4/prefs.ui:221
|
||||||
|
#: resources/ui/gtk3/prefs.ui:266 resources/ui/adw/prefs.ui:104
|
||||||
|
msgid "Closing Windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:170 resources/ui/gtk4/prefs.ui:249
|
||||||
|
#: resources/ui/gtk3/prefs.ui:294 resources/ui/adw/prefs.ui:118
|
||||||
|
msgid "Normal Windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:171 resources/ui/gtk4/prefs.ui:250
|
||||||
|
#: resources/ui/gtk3/prefs.ui:295 resources/ui/adw/prefs.ui:119
|
||||||
|
msgid "Dialog Windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:172 resources/ui/gtk4/prefs.ui:278
|
||||||
|
#: resources/ui/gtk3/prefs.ui:323 resources/ui/adw/prefs.ui:133
|
||||||
|
msgid "Default Color Scheme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:173 resources/ui/gtk4/prefs.ui:279
|
||||||
|
#: resources/ui/gtk3/prefs.ui:324 resources/ui/adw/prefs.ui:134
|
||||||
|
msgid "Dark Color Scheme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:174 resources/ui/gtk4/prefs.ui:307
|
||||||
|
#: resources/ui/gtk3/prefs.ui:352 resources/ui/adw/prefs.ui:148
|
||||||
|
msgid "On Battery"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:175 resources/ui/gtk4/prefs.ui:308
|
||||||
|
#: resources/ui/gtk3/prefs.ui:353 resources/ui/adw/prefs.ui:149
|
||||||
|
msgid "Plugged In"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:176 resources/ui/gtk4/prefs.ui:336
|
||||||
|
#: resources/ui/gtk3/prefs.ui:381 resources/ui/adw/prefs.ui:163
|
||||||
|
msgid "Power-Saver Mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:177 resources/ui/gtk4/prefs.ui:337
|
||||||
|
#: resources/ui/gtk3/prefs.ui:382 resources/ui/adw/prefs.ui:164
|
||||||
|
msgid "Balanced Mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:178 resources/ui/gtk4/prefs.ui:338
|
||||||
|
#: resources/ui/gtk3/prefs.ui:383 resources/ui/adw/prefs.ui:165
|
||||||
|
msgid "Performance Mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:179 resources/ui/gtk4/prefs.ui:339
|
||||||
|
#: resources/ui/gtk3/prefs.ui:384 resources/ui/adw/prefs.ui:166
|
||||||
|
msgid "Power Saver or Balanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:180 resources/ui/gtk4/prefs.ui:340
|
||||||
|
#: resources/ui/gtk3/prefs.ui:385 resources/ui/adw/prefs.ui:167
|
||||||
|
msgid "Balanced or Performance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:185 resources/ui/gtk4/prefs.ui:387
|
||||||
|
#: resources/ui/gtk3/prefs.ui:432 resources/ui/adw/prefs.ui:183
|
||||||
|
msgid "High Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:191
|
||||||
|
msgid "Standard Profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/effects/Apparition.js:78
|
||||||
|
msgid "Apparition"
|
||||||
|
msgstr "Jelenés"
|
||||||
|
|
||||||
|
#: src/effects/BrokenGlass.js:137
|
||||||
|
msgid "Broken Glass"
|
||||||
|
msgstr "Szilánkok"
|
||||||
|
|
||||||
|
#: src/effects/Doom.js:88
|
||||||
|
msgid "Doom"
|
||||||
|
msgstr "Végzet"
|
||||||
|
|
||||||
|
#: src/effects/EnergizeA.js:80
|
||||||
|
msgid "Energize A"
|
||||||
|
msgstr "Energia A"
|
||||||
|
|
||||||
|
#: src/effects/EnergizeB.js:81
|
||||||
|
msgid "Energize B"
|
||||||
|
msgstr "Energia B"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:100
|
||||||
|
msgid "Fire"
|
||||||
|
msgstr "Tűz"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:154
|
||||||
|
msgid "Default Fire"
|
||||||
|
msgstr "Alapértelmezett tűz"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:164
|
||||||
|
msgid "Hell Fire"
|
||||||
|
msgstr "Pokoli tűz"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:174
|
||||||
|
msgid "Dark and Smutty"
|
||||||
|
msgstr "Sötét és kormos"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:184
|
||||||
|
msgid "Cold Breeze"
|
||||||
|
msgstr "Hideg szellő"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:194
|
||||||
|
msgid "Santa is Coming"
|
||||||
|
msgstr "Jön a télapó"
|
||||||
|
|
||||||
|
#: src/effects/Glide.js:78
|
||||||
|
msgid "Glide"
|
||||||
|
msgstr "Siklás"
|
||||||
|
|
||||||
|
#: src/effects/Glitch.js:86
|
||||||
|
msgid "Glitch"
|
||||||
|
msgstr "Hiba"
|
||||||
|
|
||||||
|
#: src/effects/Hexagon.js:94
|
||||||
|
msgid "Hexagon"
|
||||||
|
msgstr "Hatszög"
|
||||||
|
|
||||||
|
#: src/effects/Incinerate.js:131
|
||||||
|
msgid "Incinerate"
|
||||||
|
msgstr "Elégetés"
|
||||||
|
|
||||||
|
#: src/effects/Matrix.js:114
|
||||||
|
msgid "Matrix"
|
||||||
|
msgstr "Mátrix"
|
||||||
|
|
||||||
|
#: src/effects/Pixelate.js:74
|
||||||
|
msgid "Pixelate"
|
||||||
|
msgstr "Pixelezés"
|
||||||
|
|
||||||
|
#: src/effects/PixelWheel.js:74
|
||||||
|
msgid "Pixel Wheel"
|
||||||
|
msgstr "Pixelciklus"
|
||||||
|
|
||||||
|
#: src/effects/PixelWipe.js:101
|
||||||
|
msgid "Pixel Wipe"
|
||||||
|
msgstr "Pixelhullám"
|
||||||
|
|
||||||
|
#: src/effects/Portal.js:88
|
||||||
|
msgid "Portal"
|
||||||
|
msgstr "Portál"
|
||||||
|
|
||||||
|
#: src/effects/SnapOfDisintegration.js:114
|
||||||
|
msgid "Snap of Disintegration"
|
||||||
|
msgstr "Hírtelen felbomlás"
|
||||||
|
|
||||||
|
#: src/effects/TRexAttack.js:112
|
||||||
|
msgid "T-Rex Attack"
|
||||||
|
msgstr "T-Rex támadás"
|
||||||
|
|
||||||
|
#: src/effects/TVEffect.js:78
|
||||||
|
msgid "TV Effect"
|
||||||
|
msgstr "Tévé hatás"
|
||||||
|
|
||||||
|
#: src/effects/TVGlitch.js:87
|
||||||
|
msgid "TV Glitch"
|
||||||
|
msgstr "Tévé hiba"
|
||||||
|
|
||||||
|
#: src/effects/Wisps.js:82
|
||||||
|
msgid "Wisps"
|
||||||
|
msgstr "Szálak"
|
||||||
|
|
||||||
|
#: prefs.js:247
|
||||||
|
msgid "Preview this effect"
|
||||||
|
msgstr "Nézze elő ezt a hatást"
|
||||||
|
|
||||||
|
#: prefs.js:364 resources/ui/gtk4/prefs.ui:50 resources/ui/gtk3/prefs.ui:86
|
||||||
|
msgid "Burn-My-Windows has been updated!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: prefs.js:365 resources/ui/common/menus.ui:17 resources/ui/gtk4/prefs.ui:56
|
||||||
|
#: resources/ui/gtk3/prefs.ui:96
|
||||||
|
msgid "View Changelog"
|
||||||
|
msgstr "Változási napló megtekintése"
|
||||||
|
|
||||||
|
#: prefs.js:496 prefs.js:528
|
||||||
|
msgid "Gold Sponsors"
|
||||||
|
msgstr "Aranyszponzorok"
|
||||||
|
|
||||||
|
#: prefs.js:500 prefs.js:532
|
||||||
|
msgid "Silver Sponsors"
|
||||||
|
msgstr "Ezüstszponzorok"
|
||||||
|
|
||||||
|
#: prefs.js:504 prefs.js:536
|
||||||
|
msgid "Bronze Sponsors"
|
||||||
|
msgstr "Bronzszponzorok"
|
||||||
|
|
||||||
|
#: prefs.js:508 prefs.js:540
|
||||||
|
msgid "Past Sponsors"
|
||||||
|
msgstr "Korábbi szponzorok"
|
||||||
|
|
||||||
|
#: prefs.js:585
|
||||||
|
msgid "Delete this Profile?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: prefs.js:587
|
||||||
|
msgid ""
|
||||||
|
"The current effect profile with all its effect settings will be permanently "
|
||||||
|
"lost."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: prefs.js:592
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: prefs.js:593
|
||||||
|
msgid "Delete"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Translators: %s will be replaced by the effect's name.
|
||||||
|
#: prefs.js:923
|
||||||
|
#, javascript-format
|
||||||
|
msgid "Preview for %s"
|
||||||
|
msgstr "%s előnézete"
|
||||||
|
|
||||||
|
#: prefs.js:945
|
||||||
|
msgid "Close this Window to Preview the Effect!"
|
||||||
|
msgstr "Zárja be ezt az ablakot hogy előnézze ezt a hatást!"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:13
|
||||||
|
msgid "Visit Homepage"
|
||||||
|
msgstr "Honlap meglátogatása"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:21
|
||||||
|
msgid "View Matching Wallpapers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:27
|
||||||
|
msgid "Report a Bug"
|
||||||
|
msgstr "Hiba jelentése"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:31
|
||||||
|
msgid "Create an Effect"
|
||||||
|
msgstr "Hatás készítése"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:35
|
||||||
|
msgid "Translate"
|
||||||
|
msgstr "Fordítás"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:39
|
||||||
|
msgid "Donate"
|
||||||
|
msgstr "Adományozás"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:52
|
||||||
|
msgid "About Burn-My-Windows"
|
||||||
|
msgstr "A Burn-My-Windowsról"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:63
|
||||||
|
msgid "Add New Profile..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:22 resources/ui/gtk4/tv-glitch.ui:23
|
||||||
|
#: resources/ui/gtk4/glitch.ui:23 resources/ui/gtk4/matrix.ui:23
|
||||||
|
#: resources/ui/gtk4/doom.ui:22 resources/ui/gtk4/trex.ui:23
|
||||||
|
#: resources/ui/gtk4/wisps.ui:23 resources/ui/gtk4/energize-b.ui:23
|
||||||
|
#: resources/ui/gtk4/pixel-wheel.ui:23 resources/ui/gtk4/glide.ui:23
|
||||||
|
#: resources/ui/gtk4/apparition.ui:22 resources/ui/gtk4/portal.ui:23
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:23 resources/ui/gtk4/hexagon.ui:23
|
||||||
|
#: resources/ui/gtk4/fire.ui:46 resources/ui/gtk4/pixel-wipe.ui:23
|
||||||
|
#: resources/ui/gtk4/snap.ui:23 resources/ui/gtk4/energize-a.ui:23
|
||||||
|
#: resources/ui/gtk4/pixelate.ui:23 resources/ui/gtk4/tv.ui:23
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:52 resources/ui/gtk3/glitch.ui:52
|
||||||
|
#: resources/ui/gtk3/doom.ui:52 resources/ui/gtk3/wisps.ui:38
|
||||||
|
#: resources/ui/gtk3/energize-b.ui:38 resources/ui/gtk3/pixel-wheel.ui:45
|
||||||
|
#: resources/ui/gtk3/glide.ui:59 resources/ui/gtk3/apparition.ui:59
|
||||||
|
#: resources/ui/gtk3/portal.ui:52 resources/ui/gtk3/incinerate.ui:45
|
||||||
|
#: resources/ui/gtk3/hexagon.ui:45 resources/ui/gtk3/fire.ui:84
|
||||||
|
#: resources/ui/gtk3/pixel-wipe.ui:45 resources/ui/gtk3/energize-a.ui:38
|
||||||
|
#: resources/ui/gtk3/pixelate.ui:45 resources/ui/gtk3/tv.ui:31
|
||||||
|
#: resources/ui/adw/broken-glass.ui:15 resources/ui/adw/tv-glitch.ui:14
|
||||||
|
#: resources/ui/adw/glitch.ui:14 resources/ui/adw/matrix.ui:14
|
||||||
|
#: resources/ui/adw/doom.ui:14 resources/ui/adw/trex.ui:14
|
||||||
|
#: resources/ui/adw/wisps.ui:14 resources/ui/adw/energize-b.ui:15
|
||||||
|
#: resources/ui/adw/pixel-wheel.ui:14 resources/ui/adw/glide.ui:14
|
||||||
|
#: resources/ui/adw/apparition.ui:15 resources/ui/adw/portal.ui:14
|
||||||
|
#: resources/ui/adw/incinerate.ui:14 resources/ui/adw/hexagon.ui:14
|
||||||
|
#: resources/ui/adw/fire.ui:30 resources/ui/adw/pixel-wipe.ui:14
|
||||||
|
#: resources/ui/adw/snap.ui:14 resources/ui/adw/energize-a.ui:14
|
||||||
|
#: resources/ui/adw/pixelate.ui:14 resources/ui/adw/tv.ui:14
|
||||||
|
msgid "Animation Time [ms]"
|
||||||
|
msgstr "Animáció időtartama [ms]"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:50 resources/ui/gtk4/broken-glass.ui:96
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:142 resources/ui/gtk4/broken-glass.ui:188
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:244 resources/ui/gtk4/tv-glitch.ui:51
|
||||||
|
#: resources/ui/gtk4/tv-glitch.ui:97 resources/ui/gtk4/tv-glitch.ui:143
|
||||||
|
#: resources/ui/gtk4/tv-glitch.ui:189 resources/ui/gtk4/tv-glitch.ui:226
|
||||||
|
#: resources/ui/gtk4/glitch.ui:51 resources/ui/gtk4/glitch.ui:97
|
||||||
|
#: resources/ui/gtk4/glitch.ui:143 resources/ui/gtk4/glitch.ui:189
|
||||||
|
#: resources/ui/gtk4/glitch.ui:226 resources/ui/gtk4/matrix.ui:51
|
||||||
|
#: resources/ui/gtk4/matrix.ui:97 resources/ui/gtk4/matrix.ui:143
|
||||||
|
#: resources/ui/gtk4/matrix.ui:189 resources/ui/gtk4/matrix.ui:226
|
||||||
|
#: resources/ui/gtk4/matrix.ui:263 resources/ui/gtk4/doom.ui:50
|
||||||
|
#: resources/ui/gtk4/doom.ui:96 resources/ui/gtk4/doom.ui:142
|
||||||
|
#: resources/ui/gtk4/doom.ui:188 resources/ui/gtk4/trex.ui:51
|
||||||
|
#: resources/ui/gtk4/trex.ui:97 resources/ui/gtk4/trex.ui:143
|
||||||
|
#: resources/ui/gtk4/trex.ui:189 resources/ui/gtk4/trex.ui:226
|
||||||
|
#: resources/ui/gtk4/wisps.ui:51 resources/ui/gtk4/wisps.ui:97
|
||||||
|
#: resources/ui/gtk4/wisps.ui:134 resources/ui/gtk4/energize-b.ui:51
|
||||||
|
#: resources/ui/gtk4/energize-b.ui:97 resources/ui/gtk4/energize-b.ui:134
|
||||||
|
#: resources/ui/gtk4/pixel-wheel.ui:51 resources/ui/gtk4/pixel-wheel.ui:97
|
||||||
|
#: resources/ui/gtk4/pixel-wheel.ui:143 resources/ui/gtk4/glide.ui:51
|
||||||
|
#: resources/ui/gtk4/glide.ui:97 resources/ui/gtk4/glide.ui:143
|
||||||
|
#: resources/ui/gtk4/glide.ui:189 resources/ui/gtk4/glide.ui:235
|
||||||
|
#: resources/ui/gtk4/apparition.ui:50 resources/ui/gtk4/apparition.ui:96
|
||||||
|
#: resources/ui/gtk4/apparition.ui:142 resources/ui/gtk4/apparition.ui:188
|
||||||
|
#: resources/ui/gtk4/apparition.ui:234 resources/ui/gtk4/portal.ui:51
|
||||||
|
#: resources/ui/gtk4/portal.ui:97 resources/ui/gtk4/portal.ui:143
|
||||||
|
#: resources/ui/gtk4/portal.ui:189 resources/ui/gtk4/portal.ui:226
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:51 resources/ui/gtk4/incinerate.ui:97
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:143 resources/ui/gtk4/incinerate.ui:198
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:235 resources/ui/gtk4/hexagon.ui:51
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:97 resources/ui/gtk4/hexagon.ui:143
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:180 resources/ui/gtk4/hexagon.ui:217
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:272 resources/ui/gtk4/fire.ui:74
|
||||||
|
#: resources/ui/gtk4/fire.ui:120 resources/ui/gtk4/fire.ui:166
|
||||||
|
#: resources/ui/gtk4/fire.ui:221 resources/ui/gtk4/fire.ui:280
|
||||||
|
#: resources/ui/gtk4/pixel-wipe.ui:51 resources/ui/gtk4/pixel-wipe.ui:97
|
||||||
|
#: resources/ui/gtk4/energize-a.ui:51 resources/ui/gtk4/energize-a.ui:97
|
||||||
|
#: resources/ui/gtk4/energize-a.ui:134 resources/ui/gtk4/pixelate.ui:51
|
||||||
|
#: resources/ui/gtk4/pixelate.ui:97 resources/ui/gtk4/pixelate.ui:143
|
||||||
|
#: resources/ui/gtk4/tv.ui:51 resources/ui/gtk4/tv.ui:88
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:78 resources/ui/gtk3/tv-glitch.ui:123
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:168 resources/ui/gtk3/tv-glitch.ui:213
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:255 resources/ui/gtk3/glitch.ui:78
|
||||||
|
#: resources/ui/gtk3/glitch.ui:123 resources/ui/gtk3/glitch.ui:168
|
||||||
|
#: resources/ui/gtk3/glitch.ui:213 resources/ui/gtk3/glitch.ui:255
|
||||||
|
#: resources/ui/gtk3/doom.ui:78 resources/ui/gtk3/doom.ui:123
|
||||||
|
#: resources/ui/gtk3/doom.ui:168 resources/ui/gtk3/doom.ui:213
|
||||||
|
#: resources/ui/gtk3/wisps.ui:64 resources/ui/gtk3/wisps.ui:109
|
||||||
|
#: resources/ui/gtk3/wisps.ui:151 resources/ui/gtk3/energize-b.ui:64
|
||||||
|
#: resources/ui/gtk3/energize-b.ui:109 resources/ui/gtk3/energize-b.ui:151
|
||||||
|
#: resources/ui/gtk3/pixel-wheel.ui:71 resources/ui/gtk3/pixel-wheel.ui:116
|
||||||
|
#: resources/ui/gtk3/pixel-wheel.ui:161 resources/ui/gtk3/glide.ui:85
|
||||||
|
#: resources/ui/gtk3/glide.ui:130 resources/ui/gtk3/glide.ui:175
|
||||||
|
#: resources/ui/gtk3/glide.ui:220 resources/ui/gtk3/glide.ui:265
|
||||||
|
#: resources/ui/gtk3/apparition.ui:85 resources/ui/gtk3/apparition.ui:130
|
||||||
|
#: resources/ui/gtk3/apparition.ui:175 resources/ui/gtk3/apparition.ui:220
|
||||||
|
#: resources/ui/gtk3/apparition.ui:265 resources/ui/gtk3/portal.ui:78
|
||||||
|
#: resources/ui/gtk3/portal.ui:123 resources/ui/gtk3/portal.ui:168
|
||||||
|
#: resources/ui/gtk3/portal.ui:213 resources/ui/gtk3/portal.ui:255
|
||||||
|
#: resources/ui/gtk3/incinerate.ui:71 resources/ui/gtk3/incinerate.ui:116
|
||||||
|
#: resources/ui/gtk3/incinerate.ui:161 resources/ui/gtk3/incinerate.ui:220
|
||||||
|
#: resources/ui/gtk3/incinerate.ui:262 resources/ui/gtk3/hexagon.ui:71
|
||||||
|
#: resources/ui/gtk3/hexagon.ui:116 resources/ui/gtk3/hexagon.ui:161
|
||||||
|
#: resources/ui/gtk3/hexagon.ui:203 resources/ui/gtk3/hexagon.ui:245
|
||||||
|
#: resources/ui/gtk3/hexagon.ui:304 resources/ui/gtk3/fire.ui:110
|
||||||
|
#: resources/ui/gtk3/fire.ui:154 resources/ui/gtk3/fire.ui:198
|
||||||
|
#: resources/ui/gtk3/fire.ui:257 resources/ui/gtk3/fire.ui:321
|
||||||
|
#: resources/ui/gtk3/pixel-wipe.ui:71 resources/ui/gtk3/pixel-wipe.ui:116
|
||||||
|
#: resources/ui/gtk3/energize-a.ui:64 resources/ui/gtk3/energize-a.ui:109
|
||||||
|
#: resources/ui/gtk3/energize-a.ui:151 resources/ui/gtk3/pixelate.ui:71
|
||||||
|
#: resources/ui/gtk3/pixelate.ui:116 resources/ui/gtk3/pixelate.ui:161
|
||||||
|
#: resources/ui/gtk3/tv.ui:57 resources/ui/gtk3/tv.ui:99
|
||||||
|
#: resources/ui/adw/broken-glass.ui:37 resources/ui/adw/broken-glass.ui:70
|
||||||
|
#: resources/ui/adw/broken-glass.ui:103 resources/ui/adw/broken-glass.ui:136
|
||||||
|
#: resources/ui/adw/broken-glass.ui:159 resources/ui/adw/tv-glitch.ui:36
|
||||||
|
#: resources/ui/adw/tv-glitch.ui:69 resources/ui/adw/tv-glitch.ui:102
|
||||||
|
#: resources/ui/adw/tv-glitch.ui:135 resources/ui/adw/tv-glitch.ui:160
|
||||||
|
#: resources/ui/adw/glitch.ui:36 resources/ui/adw/glitch.ui:69
|
||||||
|
#: resources/ui/adw/glitch.ui:102 resources/ui/adw/glitch.ui:135
|
||||||
|
#: resources/ui/adw/glitch.ui:160 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 resources/ui/adw/doom.ui:36
|
||||||
|
#: resources/ui/adw/doom.ui:69 resources/ui/adw/doom.ui:102
|
||||||
|
#: resources/ui/adw/doom.ui:135 resources/ui/adw/trex.ui:36
|
||||||
|
#: resources/ui/adw/trex.ui:69 resources/ui/adw/trex.ui:102
|
||||||
|
#: resources/ui/adw/trex.ui:135 resources/ui/adw/trex.ui:160
|
||||||
|
#: resources/ui/adw/wisps.ui:36 resources/ui/adw/wisps.ui:69
|
||||||
|
#: resources/ui/adw/wisps.ui:94 resources/ui/adw/energize-b.ui:37
|
||||||
|
#: resources/ui/adw/energize-b.ui:70 resources/ui/adw/energize-b.ui:95
|
||||||
|
#: resources/ui/adw/pixel-wheel.ui:36 resources/ui/adw/pixel-wheel.ui:69
|
||||||
|
#: resources/ui/adw/pixel-wheel.ui:102 resources/ui/adw/glide.ui:36
|
||||||
|
#: resources/ui/adw/glide.ui:69 resources/ui/adw/glide.ui:102
|
||||||
|
#: resources/ui/adw/glide.ui:135 resources/ui/adw/glide.ui:168
|
||||||
|
#: 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/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
|
||||||
|
#: resources/ui/adw/incinerate.ui:36 resources/ui/adw/incinerate.ui:69
|
||||||
|
#: resources/ui/adw/incinerate.ui:102 resources/ui/adw/incinerate.ui:125
|
||||||
|
#: resources/ui/adw/incinerate.ui:150 resources/ui/adw/hexagon.ui:36
|
||||||
|
#: resources/ui/adw/hexagon.ui:69 resources/ui/adw/hexagon.ui:102
|
||||||
|
#: resources/ui/adw/hexagon.ui:127 resources/ui/adw/hexagon.ui:152
|
||||||
|
#: resources/ui/adw/hexagon.ui:175 resources/ui/adw/fire.ui:52
|
||||||
|
#: resources/ui/adw/fire.ui:85 resources/ui/adw/fire.ui:118
|
||||||
|
#: resources/ui/adw/fire.ui:141 resources/ui/adw/fire.ui:199
|
||||||
|
#: resources/ui/adw/pixel-wipe.ui:36 resources/ui/adw/pixel-wipe.ui:69
|
||||||
|
#: resources/ui/adw/energize-a.ui:36 resources/ui/adw/energize-a.ui:69
|
||||||
|
#: resources/ui/adw/energize-a.ui:94 resources/ui/adw/pixelate.ui:36
|
||||||
|
#: resources/ui/adw/pixelate.ui:69 resources/ui/adw/pixelate.ui:102
|
||||||
|
#: resources/ui/adw/tv.ui:36 resources/ui/adw/tv.ui:61
|
||||||
|
msgid "Reset to Default Value"
|
||||||
|
msgstr "Visszaállítás az alapértelmezett értékre"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:68 resources/ui/gtk4/tv-glitch.ui:69
|
||||||
|
#: resources/ui/gtk4/glitch.ui:69 resources/ui/gtk4/matrix.ui:69
|
||||||
|
#: resources/ui/gtk4/wisps.ui:69 resources/ui/gtk4/energize-b.ui:69
|
||||||
|
#: resources/ui/gtk4/glide.ui:69 resources/ui/gtk4/incinerate.ui:69
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:69 resources/ui/gtk4/fire.ui:92
|
||||||
|
#: resources/ui/gtk4/snap.ui:69 resources/ui/gtk4/energize-a.ui:69
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:97 resources/ui/gtk3/glitch.ui:97
|
||||||
|
#: resources/ui/gtk3/wisps.ui:83 resources/ui/gtk3/energize-b.ui:83
|
||||||
|
#: resources/ui/gtk3/glide.ui:104 resources/ui/gtk3/incinerate.ui:90
|
||||||
|
#: resources/ui/gtk3/hexagon.ui:90 resources/ui/gtk3/fire.ui:128
|
||||||
|
#: resources/ui/gtk3/energize-a.ui:83 resources/ui/adw/broken-glass.ui:48
|
||||||
|
#: resources/ui/adw/tv-glitch.ui:47 resources/ui/adw/glitch.ui:47
|
||||||
|
#: resources/ui/adw/matrix.ui:47 resources/ui/adw/wisps.ui:47
|
||||||
|
#: resources/ui/adw/energize-b.ui:48 resources/ui/adw/glide.ui:47
|
||||||
|
#: resources/ui/adw/incinerate.ui:47 resources/ui/adw/hexagon.ui:47
|
||||||
|
#: resources/ui/adw/fire.ui:63 resources/ui/adw/snap.ui:47
|
||||||
|
#: resources/ui/adw/energize-a.ui:47
|
||||||
|
msgid "Scale"
|
||||||
|
msgstr "Skála"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:114 resources/ui/adw/broken-glass.ui:81
|
||||||
|
msgid "Gravity"
|
||||||
|
msgstr "Gravitáció"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:160 resources/ui/adw/broken-glass.ui:114
|
||||||
|
msgid "Blow Force"
|
||||||
|
msgstr "Fúvóerő"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:210 resources/ui/adw/broken-glass.ui:147
|
||||||
|
msgid "Shatter From Pointer Location"
|
||||||
|
msgstr "Összetörés a mutató pozíciójáról"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:219 resources/ui/adw/broken-glass.ui:148
|
||||||
|
msgid ""
|
||||||
|
"The shards will fly away from where your mouse pointer was when closing the "
|
||||||
|
"window."
|
||||||
|
msgstr ""
|
||||||
|
"A szilánkok onnan fognak elrepülni, ahol a mutató tartózkodott az ablak "
|
||||||
|
"bezárásakor."
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/tv-glitch.ui:115 resources/ui/gtk4/glitch.ui:115
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:142 resources/ui/gtk3/glitch.ui:142
|
||||||
|
#: resources/ui/adw/tv-glitch.ui:80 resources/ui/adw/glitch.ui:80
|
||||||
|
msgid "Strength"
|
||||||
|
msgstr "Erő"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/tv-glitch.ui:161 resources/ui/gtk4/glitch.ui:161
|
||||||
|
#: resources/ui/gtk4/fire.ui:138 resources/ui/gtk3/tv-glitch.ui:187
|
||||||
|
#: resources/ui/gtk3/glitch.ui:187 resources/ui/gtk3/fire.ui:172
|
||||||
|
#: resources/ui/adw/tv-glitch.ui:113 resources/ui/adw/glitch.ui:113
|
||||||
|
#: resources/ui/adw/fire.ui:96
|
||||||
|
msgid "Speed"
|
||||||
|
msgstr "Gyorsaság"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/tv-glitch.ui:207 resources/ui/gtk4/glitch.ui:207
|
||||||
|
#: resources/ui/gtk4/wisps.ui:115 resources/ui/gtk4/energize-b.ui:115
|
||||||
|
#: resources/ui/gtk4/portal.ui:207 resources/ui/gtk4/incinerate.ui:216
|
||||||
|
#: resources/ui/gtk4/snap.ui:115 resources/ui/gtk4/energize-a.ui:115
|
||||||
|
#: resources/ui/gtk4/tv.ui:69 resources/ui/gtk3/tv-glitch.ui:231
|
||||||
|
#: resources/ui/gtk3/glitch.ui:231 resources/ui/gtk3/wisps.ui:127
|
||||||
|
#: resources/ui/gtk3/energize-b.ui:127 resources/ui/gtk3/portal.ui:231
|
||||||
|
#: resources/ui/gtk3/incinerate.ui:238 resources/ui/gtk3/energize-a.ui:127
|
||||||
|
#: resources/ui/gtk3/tv.ui:75 resources/ui/adw/tv-glitch.ui:146
|
||||||
|
#: resources/ui/adw/glitch.ui:146 resources/ui/adw/wisps.ui:80
|
||||||
|
#: resources/ui/adw/energize-b.ui:81 resources/ui/adw/portal.ui:146
|
||||||
|
#: resources/ui/adw/incinerate.ui:136 resources/ui/adw/snap.ui:80
|
||||||
|
#: resources/ui/adw/energize-a.ui:80 resources/ui/adw/tv.ui:47
|
||||||
|
msgid "Color"
|
||||||
|
msgstr "Szín"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/matrix.ui:115 resources/ui/gtk4/apparition.ui:68
|
||||||
|
#: resources/ui/gtk3/apparition.ui:104 resources/ui/adw/matrix.ui:80
|
||||||
|
#: resources/ui/adw/apparition.ui:48
|
||||||
|
msgid "Randomness"
|
||||||
|
msgstr "Véletlenszerűség"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/matrix.ui:161 resources/ui/adw/matrix.ui:113
|
||||||
|
msgid "Vertical Overshooting"
|
||||||
|
msgstr "Függőleges túlcsúszás"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/matrix.ui:207 resources/ui/adw/matrix.ui:146
|
||||||
|
msgid "Trail Color"
|
||||||
|
msgstr "Nyom színe"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/matrix.ui:244 resources/ui/adw/matrix.ui:171
|
||||||
|
msgid "Tip Color"
|
||||||
|
msgstr "Csúcs színe"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/doom.ui:68 resources/ui/gtk3/doom.ui:97
|
||||||
|
#: resources/ui/adw/doom.ui:47
|
||||||
|
msgid "Horizontal Scale"
|
||||||
|
msgstr "Vízszintes skála"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/doom.ui:114 resources/ui/gtk3/doom.ui:142
|
||||||
|
#: resources/ui/adw/doom.ui:80
|
||||||
|
msgid "Vertical Scale"
|
||||||
|
msgstr "Függőleges skála"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/doom.ui:160 resources/ui/gtk4/pixel-wheel.ui:115
|
||||||
|
#: resources/ui/gtk4/pixel-wipe.ui:69 resources/ui/gtk4/pixelate.ui:115
|
||||||
|
#: resources/ui/gtk3/doom.ui:187 resources/ui/gtk3/pixel-wheel.ui:135
|
||||||
|
#: resources/ui/gtk3/pixel-wipe.ui:90 resources/ui/gtk3/pixelate.ui:135
|
||||||
|
#: resources/ui/adw/doom.ui:113 resources/ui/adw/pixel-wheel.ui:80
|
||||||
|
#: resources/ui/adw/pixel-wipe.ui:47 resources/ui/adw/pixelate.ui:80
|
||||||
|
msgid "Pixel Size"
|
||||||
|
msgstr "Pixelméret"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/trex.ui:69 resources/ui/adw/trex.ui:47
|
||||||
|
msgid "Claw Scratch Scale"
|
||||||
|
msgstr "Korom karmolás skálája"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/trex.ui:115 resources/ui/adw/trex.ui:80
|
||||||
|
msgid "Claw Scratch Count"
|
||||||
|
msgstr "Korom karmolás száma"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/trex.ui:161 resources/ui/adw/trex.ui:113
|
||||||
|
msgid "Warp Effect"
|
||||||
|
msgstr "Eltorzító hatás"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/trex.ui:207 resources/ui/adw/trex.ui:146
|
||||||
|
msgid "Flash Color"
|
||||||
|
msgstr "Villanás színe"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/pixel-wheel.ui:69 resources/ui/gtk3/pixel-wheel.ui:90
|
||||||
|
#: resources/ui/adw/pixel-wheel.ui:47
|
||||||
|
msgid "Spoke Count"
|
||||||
|
msgstr "Sugár száma"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/glide.ui:115 resources/ui/gtk3/glide.ui:149
|
||||||
|
#: resources/ui/adw/glide.ui:80
|
||||||
|
msgid "Squish"
|
||||||
|
msgstr "Összenyomás"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/glide.ui:161 resources/ui/gtk3/glide.ui:194
|
||||||
|
#: resources/ui/adw/glide.ui:113
|
||||||
|
msgid "Tilt"
|
||||||
|
msgstr "Billenés"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/glide.ui:207 resources/ui/gtk3/glide.ui:239
|
||||||
|
#: resources/ui/adw/glide.ui:146
|
||||||
|
msgid "Shift"
|
||||||
|
msgstr "Elmozdítás"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/apparition.ui:114 resources/ui/gtk3/apparition.ui:149
|
||||||
|
#: resources/ui/adw/apparition.ui:81
|
||||||
|
msgid "Twirl Intensity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/apparition.ui:160 resources/ui/gtk3/apparition.ui:194
|
||||||
|
#: resources/ui/adw/apparition.ui:114
|
||||||
|
msgid "Shake Intensity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/apparition.ui:206 resources/ui/gtk3/apparition.ui:239
|
||||||
|
#: resources/ui/adw/apparition.ui:147
|
||||||
|
msgid "Suction Intensity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/portal.ui:69 resources/ui/gtk3/portal.ui:142
|
||||||
|
#: resources/ui/adw/portal.ui:80
|
||||||
|
msgid "Whirling"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/portal.ui:115 resources/ui/gtk3/portal.ui:97
|
||||||
|
#: resources/ui/adw/portal.ui:47
|
||||||
|
msgid "Rotation Speed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/portal.ui:161 resources/ui/gtk3/portal.ui:187
|
||||||
|
#: resources/ui/adw/portal.ui:113
|
||||||
|
msgid "Details"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:115 resources/ui/gtk3/incinerate.ui:135
|
||||||
|
#: resources/ui/adw/incinerate.ui:80
|
||||||
|
msgid "Turbulence"
|
||||||
|
msgstr "Légörvény"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:165 resources/ui/gtk3/incinerate.ui:183
|
||||||
|
#: resources/ui/adw/incinerate.ui:113
|
||||||
|
msgid "Start at Pointer"
|
||||||
|
msgstr "Mutatónál kezdje"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:174 resources/ui/gtk3/incinerate.ui:192
|
||||||
|
#: resources/ui/adw/incinerate.ui:114
|
||||||
|
msgid "If disabled, a random location will be chosen."
|
||||||
|
msgstr "Ha ki van kapcsolva, egy véletlenszerű hely lesz választva."
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:115 resources/ui/gtk3/hexagon.ui:135
|
||||||
|
#: resources/ui/adw/hexagon.ui:80
|
||||||
|
msgid "Mesh Line Width"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:161 resources/ui/gtk3/hexagon.ui:179
|
||||||
|
#: resources/ui/adw/hexagon.ui:113
|
||||||
|
msgid "Line Color"
|
||||||
|
msgstr "Vonal színe"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:198 resources/ui/gtk3/hexagon.ui:221
|
||||||
|
#: resources/ui/adw/hexagon.ui:138
|
||||||
|
msgid "Glow Color"
|
||||||
|
msgstr "Világítás színe"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:239 resources/ui/gtk3/hexagon.ui:267
|
||||||
|
#: resources/ui/adw/hexagon.ui:163
|
||||||
|
msgid "Additive Blending"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:248 resources/ui/gtk3/hexagon.ui:276
|
||||||
|
#: resources/ui/adw/hexagon.ui:164
|
||||||
|
msgid "You may want to enable this for dark window themes."
|
||||||
|
msgstr "Lehet, hogy szeretné bekapcsolni ezt a sötét témájú ablaktémákoknak."
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/fire.ui:22 resources/ui/gtk3/fire.ui:44
|
||||||
|
#: resources/ui/adw/fire.ui:14
|
||||||
|
msgid "Presets"
|
||||||
|
msgstr "Sablonok"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/fire.ui:188 resources/ui/gtk3/fire.ui:220
|
||||||
|
#: resources/ui/adw/fire.ui:129
|
||||||
|
msgid "3D Noise"
|
||||||
|
msgstr "3D zaj"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/fire.ui:197 resources/ui/gtk3/fire.ui:229
|
||||||
|
#: resources/ui/adw/fire.ui:130
|
||||||
|
msgid "Creates a more dynamic fire but requires more GPU power."
|
||||||
|
msgstr "Egy dinamikusabb tüzet készít, de több GPU erőt igényel."
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/fire.ui:239 resources/ui/gtk3/fire.ui:276
|
||||||
|
#: resources/ui/adw/fire.ui:152
|
||||||
|
msgid "Gradient"
|
||||||
|
msgstr "Gradiens"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:82 resources/ui/gtk3/prefs.ui:124
|
||||||
|
#: resources/ui/adw/prefs.ui:224
|
||||||
|
msgid "Effect Settings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:92 resources/ui/gtk3/prefs.ui:134
|
||||||
|
#: resources/ui/adw/prefs.ui:225
|
||||||
|
msgid "If multiple are selected, one is chosen randomly."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:132 resources/ui/gtk3/prefs.ui:172
|
||||||
|
#: resources/ui/adw/prefs.ui:65
|
||||||
|
msgid "Effect Profile Constraints"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:142 resources/ui/gtk3/prefs.ui:182
|
||||||
|
#: resources/ui/adw/prefs.ui:66
|
||||||
|
msgid "Define when the current effect settings should be used."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/prefs.ui:206
|
||||||
|
#: resources/ui/adw/prefs.ui:70
|
||||||
|
msgid "Application"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:184 resources/ui/gtk4/prefs.ui:219
|
||||||
|
#: resources/ui/gtk4/prefs.ui:248 resources/ui/gtk4/prefs.ui:277
|
||||||
|
#: resources/ui/gtk4/prefs.ui:306 resources/ui/gtk4/prefs.ui:335
|
||||||
|
#: resources/ui/gtk3/prefs.ui:224 resources/ui/gtk3/prefs.ui:264
|
||||||
|
#: resources/ui/gtk3/prefs.ui:293 resources/ui/gtk3/prefs.ui:322
|
||||||
|
#: resources/ui/gtk3/prefs.ui:351 resources/ui/gtk3/prefs.ui:380
|
||||||
|
#: resources/ui/adw/prefs.ui:81 resources/ui/adw/prefs.ui:102
|
||||||
|
#: resources/ui/adw/prefs.ui:117 resources/ui/adw/prefs.ui:132
|
||||||
|
#: resources/ui/adw/prefs.ui:147 resources/ui/adw/prefs.ui:162
|
||||||
|
msgid "Any"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:208 resources/ui/gtk3/prefs.ui:253
|
||||||
|
#: resources/ui/adw/prefs.ui:98
|
||||||
|
msgid "Animation Type"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:237 resources/ui/gtk3/prefs.ui:282
|
||||||
|
#: resources/ui/adw/prefs.ui:113
|
||||||
|
msgid "Window Type"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:266 resources/ui/gtk3/prefs.ui:311
|
||||||
|
#: resources/ui/adw/prefs.ui:128
|
||||||
|
msgid "Color Scheme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:295 resources/ui/gtk3/prefs.ui:340
|
||||||
|
#: resources/ui/adw/prefs.ui:143
|
||||||
|
msgid "Power Mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:324 resources/ui/gtk3/prefs.ui:369
|
||||||
|
#: resources/ui/adw/prefs.ui:158
|
||||||
|
msgid "Power Profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:356 resources/ui/gtk3/prefs.ui:401
|
||||||
|
#: resources/ui/adw/prefs.ui:179
|
||||||
|
msgid "Advanced Profile Options"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:396 resources/ui/gtk3/prefs.ui:441
|
||||||
|
#: resources/ui/adw/prefs.ui:184
|
||||||
|
msgid "Use this profile even if there are better matching profiles."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:428 resources/ui/gtk3/prefs.ui:473
|
||||||
|
#: resources/ui/adw/prefs.ui:204
|
||||||
|
msgid "Delete this Profile..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/pixelate.ui:69 resources/ui/gtk3/pixelate.ui:90
|
||||||
|
#: resources/ui/adw/pixelate.ui:47
|
||||||
|
msgid "Noise"
|
||||||
|
msgstr "Zaj"
|
||||||
|
|
||||||
|
#: resources/ui/gtk3/fire.ui:58 resources/ui/adw/fire.ui:19
|
||||||
|
msgid "Choose a Preset"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Effects"
|
||||||
|
#~ msgstr "Hatások"
|
||||||
|
|
||||||
|
#~ msgid "Use this effect when opening windows"
|
||||||
|
#~ msgstr "Használja ezt a hatást az ablakok megnyitásakor"
|
||||||
|
|
||||||
|
#~ msgid "Use this effect when closing windows"
|
||||||
|
#~ msgstr "Használja ezt a hatást az ablakok bezárásakor"
|
||||||
|
|
||||||
|
#~ msgid "General Options"
|
||||||
|
#~ msgstr "Általános opciók"
|
||||||
|
|
||||||
|
#~ msgid "Welcome to Burn-My-Windows!"
|
||||||
|
#~ msgstr "Üdvözöljük a Burn-My-Windowsban!"
|
||||||
|
|
||||||
|
#~ msgid "If you like this extension, recommend it to your friends :)"
|
||||||
|
#~ msgstr "Ha tetszik önnek ez a bővítmény, ajánlja barátainak :)"
|
||||||
|
|
||||||
|
#~ msgid "Open Window Animation"
|
||||||
|
#~ msgstr "Megnyitott ablak animációja"
|
||||||
@@ -0,0 +1,783 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR Simon Schneegans
|
||||||
|
# This file is distributed under the same license as the burn-my-windows package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: burn-my-windows\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2023-02-21 16:46+0100\n"
|
||||||
|
"PO-Revision-Date: 2023-01-31 11:35+0000\n"
|
||||||
|
"Last-Translator: Ryan Y <ryuichi.ya220@gmail.com>\n"
|
||||||
|
"Language-Team: Japanese <https://hosted.weblate.org/projects/burn-my-windows/"
|
||||||
|
"core/ja/>\n"
|
||||||
|
"Language: ja\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"X-Generator: Weblate 4.16-dev\n"
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:168 resources/ui/gtk4/prefs.ui:220
|
||||||
|
#: resources/ui/gtk3/prefs.ui:265 resources/ui/adw/prefs.ui:103
|
||||||
|
msgid "Opening Windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:169 resources/ui/gtk4/prefs.ui:221
|
||||||
|
#: resources/ui/gtk3/prefs.ui:266 resources/ui/adw/prefs.ui:104
|
||||||
|
msgid "Closing Windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:170 resources/ui/gtk4/prefs.ui:249
|
||||||
|
#: resources/ui/gtk3/prefs.ui:294 resources/ui/adw/prefs.ui:118
|
||||||
|
msgid "Normal Windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:171 resources/ui/gtk4/prefs.ui:250
|
||||||
|
#: resources/ui/gtk3/prefs.ui:295 resources/ui/adw/prefs.ui:119
|
||||||
|
msgid "Dialog Windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:172 resources/ui/gtk4/prefs.ui:278
|
||||||
|
#: resources/ui/gtk3/prefs.ui:323 resources/ui/adw/prefs.ui:133
|
||||||
|
msgid "Default Color Scheme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:173 resources/ui/gtk4/prefs.ui:279
|
||||||
|
#: resources/ui/gtk3/prefs.ui:324 resources/ui/adw/prefs.ui:134
|
||||||
|
msgid "Dark Color Scheme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:174 resources/ui/gtk4/prefs.ui:307
|
||||||
|
#: resources/ui/gtk3/prefs.ui:352 resources/ui/adw/prefs.ui:148
|
||||||
|
msgid "On Battery"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:175 resources/ui/gtk4/prefs.ui:308
|
||||||
|
#: resources/ui/gtk3/prefs.ui:353 resources/ui/adw/prefs.ui:149
|
||||||
|
msgid "Plugged In"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:176 resources/ui/gtk4/prefs.ui:336
|
||||||
|
#: resources/ui/gtk3/prefs.ui:381 resources/ui/adw/prefs.ui:163
|
||||||
|
msgid "Power-Saver Mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:177 resources/ui/gtk4/prefs.ui:337
|
||||||
|
#: resources/ui/gtk3/prefs.ui:382 resources/ui/adw/prefs.ui:164
|
||||||
|
msgid "Balanced Mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:178 resources/ui/gtk4/prefs.ui:338
|
||||||
|
#: resources/ui/gtk3/prefs.ui:383 resources/ui/adw/prefs.ui:165
|
||||||
|
msgid "Performance Mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:179 resources/ui/gtk4/prefs.ui:339
|
||||||
|
#: resources/ui/gtk3/prefs.ui:384 resources/ui/adw/prefs.ui:166
|
||||||
|
msgid "Power Saver or Balanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:180 resources/ui/gtk4/prefs.ui:340
|
||||||
|
#: resources/ui/gtk3/prefs.ui:385 resources/ui/adw/prefs.ui:167
|
||||||
|
msgid "Balanced or Performance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:185 resources/ui/gtk4/prefs.ui:387
|
||||||
|
#: resources/ui/gtk3/prefs.ui:432 resources/ui/adw/prefs.ui:183
|
||||||
|
msgid "High Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/ProfileManager.js:191
|
||||||
|
msgid "Standard Profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/effects/Apparition.js:78
|
||||||
|
msgid "Apparition"
|
||||||
|
msgstr "幻影"
|
||||||
|
|
||||||
|
#: src/effects/BrokenGlass.js:137
|
||||||
|
msgid "Broken Glass"
|
||||||
|
msgstr "壊れたガラス"
|
||||||
|
|
||||||
|
#: src/effects/Doom.js:88
|
||||||
|
msgid "Doom"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/effects/EnergizeA.js:80
|
||||||
|
msgid "Energize A"
|
||||||
|
msgstr "エナジャイズ A"
|
||||||
|
|
||||||
|
#: src/effects/EnergizeB.js:81
|
||||||
|
msgid "Energize B"
|
||||||
|
msgstr "エナジャイズ B"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:100
|
||||||
|
msgid "Fire"
|
||||||
|
msgstr "炎"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:154
|
||||||
|
msgid "Default Fire"
|
||||||
|
msgstr "デフォルトの炎"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:164
|
||||||
|
msgid "Hell Fire"
|
||||||
|
msgstr "地獄の炎"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:174
|
||||||
|
msgid "Dark and Smutty"
|
||||||
|
msgstr "暗い感じ"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:184
|
||||||
|
msgid "Cold Breeze"
|
||||||
|
msgstr "冷たい風"
|
||||||
|
|
||||||
|
#: src/effects/Fire.js:194
|
||||||
|
msgid "Santa is Coming"
|
||||||
|
msgstr "サンタさんがやってきた"
|
||||||
|
|
||||||
|
#: src/effects/Glide.js:78
|
||||||
|
msgid "Glide"
|
||||||
|
msgstr "グライド"
|
||||||
|
|
||||||
|
#: src/effects/Glitch.js:86
|
||||||
|
msgid "Glitch"
|
||||||
|
msgstr "グリッチ"
|
||||||
|
|
||||||
|
#: src/effects/Hexagon.js:94
|
||||||
|
msgid "Hexagon"
|
||||||
|
msgstr "ヘキサゴン"
|
||||||
|
|
||||||
|
#: src/effects/Incinerate.js:131
|
||||||
|
msgid "Incinerate"
|
||||||
|
msgstr "焼却"
|
||||||
|
|
||||||
|
#: src/effects/Matrix.js:114
|
||||||
|
msgid "Matrix"
|
||||||
|
msgstr "マトリックス"
|
||||||
|
|
||||||
|
#: src/effects/Pixelate.js:74
|
||||||
|
msgid "Pixelate"
|
||||||
|
msgstr "ピクセル"
|
||||||
|
|
||||||
|
#: src/effects/PixelWheel.js:74
|
||||||
|
msgid "Pixel Wheel"
|
||||||
|
msgstr "ピクセルの輪"
|
||||||
|
|
||||||
|
#: src/effects/PixelWipe.js:101
|
||||||
|
msgid "Pixel Wipe"
|
||||||
|
msgstr "ピクセルの波"
|
||||||
|
|
||||||
|
#: src/effects/Portal.js:88
|
||||||
|
msgid "Portal"
|
||||||
|
msgstr "ポータル"
|
||||||
|
|
||||||
|
#: src/effects/SnapOfDisintegration.js:114
|
||||||
|
msgid "Snap of Disintegration"
|
||||||
|
msgstr "指パッチン"
|
||||||
|
|
||||||
|
#: src/effects/TRexAttack.js:112
|
||||||
|
msgid "T-Rex Attack"
|
||||||
|
msgstr "ティラノサウルスの攻撃"
|
||||||
|
|
||||||
|
#: src/effects/TVEffect.js:78
|
||||||
|
msgid "TV Effect"
|
||||||
|
msgstr "テレビ"
|
||||||
|
|
||||||
|
#: src/effects/TVGlitch.js:87
|
||||||
|
msgid "TV Glitch"
|
||||||
|
msgstr "テレビの故障"
|
||||||
|
|
||||||
|
#: src/effects/Wisps.js:82
|
||||||
|
msgid "Wisps"
|
||||||
|
msgstr "フェアリー"
|
||||||
|
|
||||||
|
#: prefs.js:247
|
||||||
|
msgid "Preview this effect"
|
||||||
|
msgstr "このエフェクトをプレビュー"
|
||||||
|
|
||||||
|
#: prefs.js:364 resources/ui/gtk4/prefs.ui:50 resources/ui/gtk3/prefs.ui:86
|
||||||
|
msgid "Burn-My-Windows has been updated!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: prefs.js:365 resources/ui/common/menus.ui:17 resources/ui/gtk4/prefs.ui:56
|
||||||
|
#: resources/ui/gtk3/prefs.ui:96
|
||||||
|
msgid "View Changelog"
|
||||||
|
msgstr "変更ログを見る"
|
||||||
|
|
||||||
|
#: prefs.js:496 prefs.js:528
|
||||||
|
msgid "Gold Sponsors"
|
||||||
|
msgstr "ゴールドスポンサー"
|
||||||
|
|
||||||
|
#: prefs.js:500 prefs.js:532
|
||||||
|
msgid "Silver Sponsors"
|
||||||
|
msgstr "シルバースポンサー"
|
||||||
|
|
||||||
|
#: prefs.js:504 prefs.js:536
|
||||||
|
msgid "Bronze Sponsors"
|
||||||
|
msgstr "ブロンズスポンサー"
|
||||||
|
|
||||||
|
#: prefs.js:508 prefs.js:540
|
||||||
|
msgid "Past Sponsors"
|
||||||
|
msgstr "過去のスポンサー"
|
||||||
|
|
||||||
|
#: prefs.js:585
|
||||||
|
msgid "Delete this Profile?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: prefs.js:587
|
||||||
|
msgid ""
|
||||||
|
"The current effect profile with all its effect settings will be permanently "
|
||||||
|
"lost."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: prefs.js:592
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: prefs.js:593
|
||||||
|
msgid "Delete"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Translators: %s will be replaced by the effect's name.
|
||||||
|
#: prefs.js:923
|
||||||
|
#, javascript-format
|
||||||
|
msgid "Preview for %s"
|
||||||
|
msgstr "%s のプレビュー"
|
||||||
|
|
||||||
|
#: prefs.js:945
|
||||||
|
msgid "Close this Window to Preview the Effect!"
|
||||||
|
msgstr "このウィンドウを閉じてエフェクトを試してみて下さい!"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:13
|
||||||
|
msgid "Visit Homepage"
|
||||||
|
msgstr "ホームページを訪れる"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:21
|
||||||
|
msgid "View Matching Wallpapers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:27
|
||||||
|
msgid "Report a Bug"
|
||||||
|
msgstr "バグを報告する"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:31
|
||||||
|
msgid "Create an Effect"
|
||||||
|
msgstr "エフェクトを作成する"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:35
|
||||||
|
msgid "Translate"
|
||||||
|
msgstr "翻訳する"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:39
|
||||||
|
msgid "Donate"
|
||||||
|
msgstr "寄付する"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:52
|
||||||
|
msgid "About Burn-My-Windows"
|
||||||
|
msgstr "Burn-My-Windows について"
|
||||||
|
|
||||||
|
#: resources/ui/common/menus.ui:63
|
||||||
|
msgid "Add New Profile..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:22 resources/ui/gtk4/tv-glitch.ui:23
|
||||||
|
#: resources/ui/gtk4/glitch.ui:23 resources/ui/gtk4/matrix.ui:23
|
||||||
|
#: resources/ui/gtk4/doom.ui:22 resources/ui/gtk4/trex.ui:23
|
||||||
|
#: resources/ui/gtk4/wisps.ui:23 resources/ui/gtk4/energize-b.ui:23
|
||||||
|
#: resources/ui/gtk4/pixel-wheel.ui:23 resources/ui/gtk4/glide.ui:23
|
||||||
|
#: resources/ui/gtk4/apparition.ui:22 resources/ui/gtk4/portal.ui:23
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:23 resources/ui/gtk4/hexagon.ui:23
|
||||||
|
#: resources/ui/gtk4/fire.ui:46 resources/ui/gtk4/pixel-wipe.ui:23
|
||||||
|
#: resources/ui/gtk4/snap.ui:23 resources/ui/gtk4/energize-a.ui:23
|
||||||
|
#: resources/ui/gtk4/pixelate.ui:23 resources/ui/gtk4/tv.ui:23
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:52 resources/ui/gtk3/glitch.ui:52
|
||||||
|
#: resources/ui/gtk3/doom.ui:52 resources/ui/gtk3/wisps.ui:38
|
||||||
|
#: resources/ui/gtk3/energize-b.ui:38 resources/ui/gtk3/pixel-wheel.ui:45
|
||||||
|
#: resources/ui/gtk3/glide.ui:59 resources/ui/gtk3/apparition.ui:59
|
||||||
|
#: resources/ui/gtk3/portal.ui:52 resources/ui/gtk3/incinerate.ui:45
|
||||||
|
#: resources/ui/gtk3/hexagon.ui:45 resources/ui/gtk3/fire.ui:84
|
||||||
|
#: resources/ui/gtk3/pixel-wipe.ui:45 resources/ui/gtk3/energize-a.ui:38
|
||||||
|
#: resources/ui/gtk3/pixelate.ui:45 resources/ui/gtk3/tv.ui:31
|
||||||
|
#: resources/ui/adw/broken-glass.ui:15 resources/ui/adw/tv-glitch.ui:14
|
||||||
|
#: resources/ui/adw/glitch.ui:14 resources/ui/adw/matrix.ui:14
|
||||||
|
#: resources/ui/adw/doom.ui:14 resources/ui/adw/trex.ui:14
|
||||||
|
#: resources/ui/adw/wisps.ui:14 resources/ui/adw/energize-b.ui:15
|
||||||
|
#: resources/ui/adw/pixel-wheel.ui:14 resources/ui/adw/glide.ui:14
|
||||||
|
#: resources/ui/adw/apparition.ui:15 resources/ui/adw/portal.ui:14
|
||||||
|
#: resources/ui/adw/incinerate.ui:14 resources/ui/adw/hexagon.ui:14
|
||||||
|
#: resources/ui/adw/fire.ui:30 resources/ui/adw/pixel-wipe.ui:14
|
||||||
|
#: resources/ui/adw/snap.ui:14 resources/ui/adw/energize-a.ui:14
|
||||||
|
#: resources/ui/adw/pixelate.ui:14 resources/ui/adw/tv.ui:14
|
||||||
|
msgid "Animation Time [ms]"
|
||||||
|
msgstr "アニメーション時間(ミリ秒)"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:50 resources/ui/gtk4/broken-glass.ui:96
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:142 resources/ui/gtk4/broken-glass.ui:188
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:244 resources/ui/gtk4/tv-glitch.ui:51
|
||||||
|
#: resources/ui/gtk4/tv-glitch.ui:97 resources/ui/gtk4/tv-glitch.ui:143
|
||||||
|
#: resources/ui/gtk4/tv-glitch.ui:189 resources/ui/gtk4/tv-glitch.ui:226
|
||||||
|
#: resources/ui/gtk4/glitch.ui:51 resources/ui/gtk4/glitch.ui:97
|
||||||
|
#: resources/ui/gtk4/glitch.ui:143 resources/ui/gtk4/glitch.ui:189
|
||||||
|
#: resources/ui/gtk4/glitch.ui:226 resources/ui/gtk4/matrix.ui:51
|
||||||
|
#: resources/ui/gtk4/matrix.ui:97 resources/ui/gtk4/matrix.ui:143
|
||||||
|
#: resources/ui/gtk4/matrix.ui:189 resources/ui/gtk4/matrix.ui:226
|
||||||
|
#: resources/ui/gtk4/matrix.ui:263 resources/ui/gtk4/doom.ui:50
|
||||||
|
#: resources/ui/gtk4/doom.ui:96 resources/ui/gtk4/doom.ui:142
|
||||||
|
#: resources/ui/gtk4/doom.ui:188 resources/ui/gtk4/trex.ui:51
|
||||||
|
#: resources/ui/gtk4/trex.ui:97 resources/ui/gtk4/trex.ui:143
|
||||||
|
#: resources/ui/gtk4/trex.ui:189 resources/ui/gtk4/trex.ui:226
|
||||||
|
#: resources/ui/gtk4/wisps.ui:51 resources/ui/gtk4/wisps.ui:97
|
||||||
|
#: resources/ui/gtk4/wisps.ui:134 resources/ui/gtk4/energize-b.ui:51
|
||||||
|
#: resources/ui/gtk4/energize-b.ui:97 resources/ui/gtk4/energize-b.ui:134
|
||||||
|
#: resources/ui/gtk4/pixel-wheel.ui:51 resources/ui/gtk4/pixel-wheel.ui:97
|
||||||
|
#: resources/ui/gtk4/pixel-wheel.ui:143 resources/ui/gtk4/glide.ui:51
|
||||||
|
#: resources/ui/gtk4/glide.ui:97 resources/ui/gtk4/glide.ui:143
|
||||||
|
#: resources/ui/gtk4/glide.ui:189 resources/ui/gtk4/glide.ui:235
|
||||||
|
#: resources/ui/gtk4/apparition.ui:50 resources/ui/gtk4/apparition.ui:96
|
||||||
|
#: resources/ui/gtk4/apparition.ui:142 resources/ui/gtk4/apparition.ui:188
|
||||||
|
#: resources/ui/gtk4/apparition.ui:234 resources/ui/gtk4/portal.ui:51
|
||||||
|
#: resources/ui/gtk4/portal.ui:97 resources/ui/gtk4/portal.ui:143
|
||||||
|
#: resources/ui/gtk4/portal.ui:189 resources/ui/gtk4/portal.ui:226
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:51 resources/ui/gtk4/incinerate.ui:97
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:143 resources/ui/gtk4/incinerate.ui:198
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:235 resources/ui/gtk4/hexagon.ui:51
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:97 resources/ui/gtk4/hexagon.ui:143
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:180 resources/ui/gtk4/hexagon.ui:217
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:272 resources/ui/gtk4/fire.ui:74
|
||||||
|
#: resources/ui/gtk4/fire.ui:120 resources/ui/gtk4/fire.ui:166
|
||||||
|
#: resources/ui/gtk4/fire.ui:221 resources/ui/gtk4/fire.ui:280
|
||||||
|
#: resources/ui/gtk4/pixel-wipe.ui:51 resources/ui/gtk4/pixel-wipe.ui:97
|
||||||
|
#: resources/ui/gtk4/energize-a.ui:51 resources/ui/gtk4/energize-a.ui:97
|
||||||
|
#: resources/ui/gtk4/energize-a.ui:134 resources/ui/gtk4/pixelate.ui:51
|
||||||
|
#: resources/ui/gtk4/pixelate.ui:97 resources/ui/gtk4/pixelate.ui:143
|
||||||
|
#: resources/ui/gtk4/tv.ui:51 resources/ui/gtk4/tv.ui:88
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:78 resources/ui/gtk3/tv-glitch.ui:123
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:168 resources/ui/gtk3/tv-glitch.ui:213
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:255 resources/ui/gtk3/glitch.ui:78
|
||||||
|
#: resources/ui/gtk3/glitch.ui:123 resources/ui/gtk3/glitch.ui:168
|
||||||
|
#: resources/ui/gtk3/glitch.ui:213 resources/ui/gtk3/glitch.ui:255
|
||||||
|
#: resources/ui/gtk3/doom.ui:78 resources/ui/gtk3/doom.ui:123
|
||||||
|
#: resources/ui/gtk3/doom.ui:168 resources/ui/gtk3/doom.ui:213
|
||||||
|
#: resources/ui/gtk3/wisps.ui:64 resources/ui/gtk3/wisps.ui:109
|
||||||
|
#: resources/ui/gtk3/wisps.ui:151 resources/ui/gtk3/energize-b.ui:64
|
||||||
|
#: resources/ui/gtk3/energize-b.ui:109 resources/ui/gtk3/energize-b.ui:151
|
||||||
|
#: resources/ui/gtk3/pixel-wheel.ui:71 resources/ui/gtk3/pixel-wheel.ui:116
|
||||||
|
#: resources/ui/gtk3/pixel-wheel.ui:161 resources/ui/gtk3/glide.ui:85
|
||||||
|
#: resources/ui/gtk3/glide.ui:130 resources/ui/gtk3/glide.ui:175
|
||||||
|
#: resources/ui/gtk3/glide.ui:220 resources/ui/gtk3/glide.ui:265
|
||||||
|
#: resources/ui/gtk3/apparition.ui:85 resources/ui/gtk3/apparition.ui:130
|
||||||
|
#: resources/ui/gtk3/apparition.ui:175 resources/ui/gtk3/apparition.ui:220
|
||||||
|
#: resources/ui/gtk3/apparition.ui:265 resources/ui/gtk3/portal.ui:78
|
||||||
|
#: resources/ui/gtk3/portal.ui:123 resources/ui/gtk3/portal.ui:168
|
||||||
|
#: resources/ui/gtk3/portal.ui:213 resources/ui/gtk3/portal.ui:255
|
||||||
|
#: resources/ui/gtk3/incinerate.ui:71 resources/ui/gtk3/incinerate.ui:116
|
||||||
|
#: resources/ui/gtk3/incinerate.ui:161 resources/ui/gtk3/incinerate.ui:220
|
||||||
|
#: resources/ui/gtk3/incinerate.ui:262 resources/ui/gtk3/hexagon.ui:71
|
||||||
|
#: resources/ui/gtk3/hexagon.ui:116 resources/ui/gtk3/hexagon.ui:161
|
||||||
|
#: resources/ui/gtk3/hexagon.ui:203 resources/ui/gtk3/hexagon.ui:245
|
||||||
|
#: resources/ui/gtk3/hexagon.ui:304 resources/ui/gtk3/fire.ui:110
|
||||||
|
#: resources/ui/gtk3/fire.ui:154 resources/ui/gtk3/fire.ui:198
|
||||||
|
#: resources/ui/gtk3/fire.ui:257 resources/ui/gtk3/fire.ui:321
|
||||||
|
#: resources/ui/gtk3/pixel-wipe.ui:71 resources/ui/gtk3/pixel-wipe.ui:116
|
||||||
|
#: resources/ui/gtk3/energize-a.ui:64 resources/ui/gtk3/energize-a.ui:109
|
||||||
|
#: resources/ui/gtk3/energize-a.ui:151 resources/ui/gtk3/pixelate.ui:71
|
||||||
|
#: resources/ui/gtk3/pixelate.ui:116 resources/ui/gtk3/pixelate.ui:161
|
||||||
|
#: resources/ui/gtk3/tv.ui:57 resources/ui/gtk3/tv.ui:99
|
||||||
|
#: resources/ui/adw/broken-glass.ui:37 resources/ui/adw/broken-glass.ui:70
|
||||||
|
#: resources/ui/adw/broken-glass.ui:103 resources/ui/adw/broken-glass.ui:136
|
||||||
|
#: resources/ui/adw/broken-glass.ui:159 resources/ui/adw/tv-glitch.ui:36
|
||||||
|
#: resources/ui/adw/tv-glitch.ui:69 resources/ui/adw/tv-glitch.ui:102
|
||||||
|
#: resources/ui/adw/tv-glitch.ui:135 resources/ui/adw/tv-glitch.ui:160
|
||||||
|
#: resources/ui/adw/glitch.ui:36 resources/ui/adw/glitch.ui:69
|
||||||
|
#: resources/ui/adw/glitch.ui:102 resources/ui/adw/glitch.ui:135
|
||||||
|
#: resources/ui/adw/glitch.ui:160 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 resources/ui/adw/doom.ui:36
|
||||||
|
#: resources/ui/adw/doom.ui:69 resources/ui/adw/doom.ui:102
|
||||||
|
#: resources/ui/adw/doom.ui:135 resources/ui/adw/trex.ui:36
|
||||||
|
#: resources/ui/adw/trex.ui:69 resources/ui/adw/trex.ui:102
|
||||||
|
#: resources/ui/adw/trex.ui:135 resources/ui/adw/trex.ui:160
|
||||||
|
#: resources/ui/adw/wisps.ui:36 resources/ui/adw/wisps.ui:69
|
||||||
|
#: resources/ui/adw/wisps.ui:94 resources/ui/adw/energize-b.ui:37
|
||||||
|
#: resources/ui/adw/energize-b.ui:70 resources/ui/adw/energize-b.ui:95
|
||||||
|
#: resources/ui/adw/pixel-wheel.ui:36 resources/ui/adw/pixel-wheel.ui:69
|
||||||
|
#: resources/ui/adw/pixel-wheel.ui:102 resources/ui/adw/glide.ui:36
|
||||||
|
#: resources/ui/adw/glide.ui:69 resources/ui/adw/glide.ui:102
|
||||||
|
#: resources/ui/adw/glide.ui:135 resources/ui/adw/glide.ui:168
|
||||||
|
#: 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/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
|
||||||
|
#: resources/ui/adw/incinerate.ui:36 resources/ui/adw/incinerate.ui:69
|
||||||
|
#: resources/ui/adw/incinerate.ui:102 resources/ui/adw/incinerate.ui:125
|
||||||
|
#: resources/ui/adw/incinerate.ui:150 resources/ui/adw/hexagon.ui:36
|
||||||
|
#: resources/ui/adw/hexagon.ui:69 resources/ui/adw/hexagon.ui:102
|
||||||
|
#: resources/ui/adw/hexagon.ui:127 resources/ui/adw/hexagon.ui:152
|
||||||
|
#: resources/ui/adw/hexagon.ui:175 resources/ui/adw/fire.ui:52
|
||||||
|
#: resources/ui/adw/fire.ui:85 resources/ui/adw/fire.ui:118
|
||||||
|
#: resources/ui/adw/fire.ui:141 resources/ui/adw/fire.ui:199
|
||||||
|
#: resources/ui/adw/pixel-wipe.ui:36 resources/ui/adw/pixel-wipe.ui:69
|
||||||
|
#: resources/ui/adw/energize-a.ui:36 resources/ui/adw/energize-a.ui:69
|
||||||
|
#: resources/ui/adw/energize-a.ui:94 resources/ui/adw/pixelate.ui:36
|
||||||
|
#: resources/ui/adw/pixelate.ui:69 resources/ui/adw/pixelate.ui:102
|
||||||
|
#: resources/ui/adw/tv.ui:36 resources/ui/adw/tv.ui:61
|
||||||
|
msgid "Reset to Default Value"
|
||||||
|
msgstr "デフォルトの値にリセット"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:68 resources/ui/gtk4/tv-glitch.ui:69
|
||||||
|
#: resources/ui/gtk4/glitch.ui:69 resources/ui/gtk4/matrix.ui:69
|
||||||
|
#: resources/ui/gtk4/wisps.ui:69 resources/ui/gtk4/energize-b.ui:69
|
||||||
|
#: resources/ui/gtk4/glide.ui:69 resources/ui/gtk4/incinerate.ui:69
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:69 resources/ui/gtk4/fire.ui:92
|
||||||
|
#: resources/ui/gtk4/snap.ui:69 resources/ui/gtk4/energize-a.ui:69
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:97 resources/ui/gtk3/glitch.ui:97
|
||||||
|
#: resources/ui/gtk3/wisps.ui:83 resources/ui/gtk3/energize-b.ui:83
|
||||||
|
#: resources/ui/gtk3/glide.ui:104 resources/ui/gtk3/incinerate.ui:90
|
||||||
|
#: resources/ui/gtk3/hexagon.ui:90 resources/ui/gtk3/fire.ui:128
|
||||||
|
#: resources/ui/gtk3/energize-a.ui:83 resources/ui/adw/broken-glass.ui:48
|
||||||
|
#: resources/ui/adw/tv-glitch.ui:47 resources/ui/adw/glitch.ui:47
|
||||||
|
#: resources/ui/adw/matrix.ui:47 resources/ui/adw/wisps.ui:47
|
||||||
|
#: resources/ui/adw/energize-b.ui:48 resources/ui/adw/glide.ui:47
|
||||||
|
#: resources/ui/adw/incinerate.ui:47 resources/ui/adw/hexagon.ui:47
|
||||||
|
#: resources/ui/adw/fire.ui:63 resources/ui/adw/snap.ui:47
|
||||||
|
#: resources/ui/adw/energize-a.ui:47
|
||||||
|
msgid "Scale"
|
||||||
|
msgstr "大きさ"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:114 resources/ui/adw/broken-glass.ui:81
|
||||||
|
msgid "Gravity"
|
||||||
|
msgstr "重力"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:160 resources/ui/adw/broken-glass.ui:114
|
||||||
|
msgid "Blow Force"
|
||||||
|
msgstr "吹き飛ぶ強さ"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:210 resources/ui/adw/broken-glass.ui:147
|
||||||
|
msgid "Shatter From Pointer Location"
|
||||||
|
msgstr "ポインタの位置から砕ける"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/broken-glass.ui:219 resources/ui/adw/broken-glass.ui:148
|
||||||
|
msgid ""
|
||||||
|
"The shards will fly away from where your mouse pointer was when closing the "
|
||||||
|
"window."
|
||||||
|
msgstr "ウィンドウが閉じられた際のポインタの位置から砕け散ります。"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/tv-glitch.ui:115 resources/ui/gtk4/glitch.ui:115
|
||||||
|
#: resources/ui/gtk3/tv-glitch.ui:142 resources/ui/gtk3/glitch.ui:142
|
||||||
|
#: resources/ui/adw/tv-glitch.ui:80 resources/ui/adw/glitch.ui:80
|
||||||
|
msgid "Strength"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/tv-glitch.ui:161 resources/ui/gtk4/glitch.ui:161
|
||||||
|
#: resources/ui/gtk4/fire.ui:138 resources/ui/gtk3/tv-glitch.ui:187
|
||||||
|
#: resources/ui/gtk3/glitch.ui:187 resources/ui/gtk3/fire.ui:172
|
||||||
|
#: resources/ui/adw/tv-glitch.ui:113 resources/ui/adw/glitch.ui:113
|
||||||
|
#: resources/ui/adw/fire.ui:96
|
||||||
|
msgid "Speed"
|
||||||
|
msgstr "速さ"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/tv-glitch.ui:207 resources/ui/gtk4/glitch.ui:207
|
||||||
|
#: resources/ui/gtk4/wisps.ui:115 resources/ui/gtk4/energize-b.ui:115
|
||||||
|
#: resources/ui/gtk4/portal.ui:207 resources/ui/gtk4/incinerate.ui:216
|
||||||
|
#: resources/ui/gtk4/snap.ui:115 resources/ui/gtk4/energize-a.ui:115
|
||||||
|
#: resources/ui/gtk4/tv.ui:69 resources/ui/gtk3/tv-glitch.ui:231
|
||||||
|
#: resources/ui/gtk3/glitch.ui:231 resources/ui/gtk3/wisps.ui:127
|
||||||
|
#: resources/ui/gtk3/energize-b.ui:127 resources/ui/gtk3/portal.ui:231
|
||||||
|
#: resources/ui/gtk3/incinerate.ui:238 resources/ui/gtk3/energize-a.ui:127
|
||||||
|
#: resources/ui/gtk3/tv.ui:75 resources/ui/adw/tv-glitch.ui:146
|
||||||
|
#: resources/ui/adw/glitch.ui:146 resources/ui/adw/wisps.ui:80
|
||||||
|
#: resources/ui/adw/energize-b.ui:81 resources/ui/adw/portal.ui:146
|
||||||
|
#: resources/ui/adw/incinerate.ui:136 resources/ui/adw/snap.ui:80
|
||||||
|
#: resources/ui/adw/energize-a.ui:80 resources/ui/adw/tv.ui:47
|
||||||
|
msgid "Color"
|
||||||
|
msgstr "色"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/matrix.ui:115 resources/ui/gtk4/apparition.ui:68
|
||||||
|
#: resources/ui/gtk3/apparition.ui:104 resources/ui/adw/matrix.ui:80
|
||||||
|
#: resources/ui/adw/apparition.ui:48
|
||||||
|
msgid "Randomness"
|
||||||
|
msgstr "ランダム度"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/matrix.ui:161 resources/ui/adw/matrix.ui:113
|
||||||
|
msgid "Vertical Overshooting"
|
||||||
|
msgstr "垂直オーバーシュート"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/matrix.ui:207 resources/ui/adw/matrix.ui:146
|
||||||
|
msgid "Trail Color"
|
||||||
|
msgstr "軌跡の色"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/matrix.ui:244 resources/ui/adw/matrix.ui:171
|
||||||
|
msgid "Tip Color"
|
||||||
|
msgstr "先端の色"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/doom.ui:68 resources/ui/gtk3/doom.ui:97
|
||||||
|
#: resources/ui/adw/doom.ui:47
|
||||||
|
msgid "Horizontal Scale"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/doom.ui:114 resources/ui/gtk3/doom.ui:142
|
||||||
|
#: resources/ui/adw/doom.ui:80
|
||||||
|
msgid "Vertical Scale"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/doom.ui:160 resources/ui/gtk4/pixel-wheel.ui:115
|
||||||
|
#: resources/ui/gtk4/pixel-wipe.ui:69 resources/ui/gtk4/pixelate.ui:115
|
||||||
|
#: resources/ui/gtk3/doom.ui:187 resources/ui/gtk3/pixel-wheel.ui:135
|
||||||
|
#: resources/ui/gtk3/pixel-wipe.ui:90 resources/ui/gtk3/pixelate.ui:135
|
||||||
|
#: resources/ui/adw/doom.ui:113 resources/ui/adw/pixel-wheel.ui:80
|
||||||
|
#: resources/ui/adw/pixel-wipe.ui:47 resources/ui/adw/pixelate.ui:80
|
||||||
|
msgid "Pixel Size"
|
||||||
|
msgstr "ピクセルの大きさ"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/trex.ui:69 resources/ui/adw/trex.ui:47
|
||||||
|
msgid "Claw Scratch Scale"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/trex.ui:115 resources/ui/adw/trex.ui:80
|
||||||
|
msgid "Claw Scratch Count"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/trex.ui:161 resources/ui/adw/trex.ui:113
|
||||||
|
msgid "Warp Effect"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/trex.ui:207 resources/ui/adw/trex.ui:146
|
||||||
|
msgid "Flash Color"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/pixel-wheel.ui:69 resources/ui/gtk3/pixel-wheel.ui:90
|
||||||
|
#: resources/ui/adw/pixel-wheel.ui:47
|
||||||
|
msgid "Spoke Count"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/glide.ui:115 resources/ui/gtk3/glide.ui:149
|
||||||
|
#: resources/ui/adw/glide.ui:80
|
||||||
|
msgid "Squish"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/glide.ui:161 resources/ui/gtk3/glide.ui:194
|
||||||
|
#: resources/ui/adw/glide.ui:113
|
||||||
|
msgid "Tilt"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/glide.ui:207 resources/ui/gtk3/glide.ui:239
|
||||||
|
#: resources/ui/adw/glide.ui:146
|
||||||
|
msgid "Shift"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/apparition.ui:114 resources/ui/gtk3/apparition.ui:149
|
||||||
|
#: resources/ui/adw/apparition.ui:81
|
||||||
|
msgid "Twirl Intensity"
|
||||||
|
msgstr "ねじれの強さ"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/apparition.ui:160 resources/ui/gtk3/apparition.ui:194
|
||||||
|
#: resources/ui/adw/apparition.ui:114
|
||||||
|
msgid "Shake Intensity"
|
||||||
|
msgstr "揺れの強さ"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/apparition.ui:206 resources/ui/gtk3/apparition.ui:239
|
||||||
|
#: resources/ui/adw/apparition.ui:147
|
||||||
|
msgid "Suction Intensity"
|
||||||
|
msgstr "吸う力の強さ"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/portal.ui:69 resources/ui/gtk3/portal.ui:142
|
||||||
|
#: resources/ui/adw/portal.ui:80
|
||||||
|
msgid "Whirling"
|
||||||
|
msgstr "渦巻き度"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/portal.ui:115 resources/ui/gtk3/portal.ui:97
|
||||||
|
#: resources/ui/adw/portal.ui:47
|
||||||
|
msgid "Rotation Speed"
|
||||||
|
msgstr "回転速度"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/portal.ui:161 resources/ui/gtk3/portal.ui:187
|
||||||
|
#: resources/ui/adw/portal.ui:113
|
||||||
|
msgid "Details"
|
||||||
|
msgstr "ディテール"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:115 resources/ui/gtk3/incinerate.ui:135
|
||||||
|
#: resources/ui/adw/incinerate.ui:80
|
||||||
|
msgid "Turbulence"
|
||||||
|
msgstr "乱気流"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:165 resources/ui/gtk3/incinerate.ui:183
|
||||||
|
#: resources/ui/adw/incinerate.ui:113
|
||||||
|
msgid "Start at Pointer"
|
||||||
|
msgstr "ポインタから開始"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/incinerate.ui:174 resources/ui/gtk3/incinerate.ui:192
|
||||||
|
#: resources/ui/adw/incinerate.ui:114
|
||||||
|
msgid "If disabled, a random location will be chosen."
|
||||||
|
msgstr "無効化されている場合、ランダムに位置が選ばれます。"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:115 resources/ui/gtk3/hexagon.ui:135
|
||||||
|
#: resources/ui/adw/hexagon.ui:80
|
||||||
|
msgid "Mesh Line Width"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:161 resources/ui/gtk3/hexagon.ui:179
|
||||||
|
#: resources/ui/adw/hexagon.ui:113
|
||||||
|
msgid "Line Color"
|
||||||
|
msgstr "線の色"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:198 resources/ui/gtk3/hexagon.ui:221
|
||||||
|
#: resources/ui/adw/hexagon.ui:138
|
||||||
|
msgid "Glow Color"
|
||||||
|
msgstr "光の色"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:239 resources/ui/gtk3/hexagon.ui:267
|
||||||
|
#: resources/ui/adw/hexagon.ui:163
|
||||||
|
msgid "Additive Blending"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/hexagon.ui:248 resources/ui/gtk3/hexagon.ui:276
|
||||||
|
#: resources/ui/adw/hexagon.ui:164
|
||||||
|
msgid "You may want to enable this for dark window themes."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/fire.ui:22 resources/ui/gtk3/fire.ui:44
|
||||||
|
#: resources/ui/adw/fire.ui:14
|
||||||
|
msgid "Presets"
|
||||||
|
msgstr "プリセット"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/fire.ui:188 resources/ui/gtk3/fire.ui:220
|
||||||
|
#: resources/ui/adw/fire.ui:129
|
||||||
|
msgid "3D Noise"
|
||||||
|
msgstr "3D ノイズ"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/fire.ui:197 resources/ui/gtk3/fire.ui:229
|
||||||
|
#: resources/ui/adw/fire.ui:130
|
||||||
|
msgid "Creates a more dynamic fire but requires more GPU power."
|
||||||
|
msgstr "ダイナミックな炎を生成します。GPU の使用率が増えます。"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/fire.ui:239 resources/ui/gtk3/fire.ui:276
|
||||||
|
#: resources/ui/adw/fire.ui:152
|
||||||
|
msgid "Gradient"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:82 resources/ui/gtk3/prefs.ui:124
|
||||||
|
#: resources/ui/adw/prefs.ui:224
|
||||||
|
msgid "Effect Settings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:92 resources/ui/gtk3/prefs.ui:134
|
||||||
|
#: resources/ui/adw/prefs.ui:225
|
||||||
|
msgid "If multiple are selected, one is chosen randomly."
|
||||||
|
msgstr ""
|
||||||
|
"複数のエフェクトが設定されている場合、その中からランダムに選択されます。"
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:132 resources/ui/gtk3/prefs.ui:172
|
||||||
|
#: resources/ui/adw/prefs.ui:65
|
||||||
|
msgid "Effect Profile Constraints"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:142 resources/ui/gtk3/prefs.ui:182
|
||||||
|
#: resources/ui/adw/prefs.ui:66
|
||||||
|
msgid "Define when the current effect settings should be used."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/prefs.ui:206
|
||||||
|
#: resources/ui/adw/prefs.ui:70
|
||||||
|
msgid "Application"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:184 resources/ui/gtk4/prefs.ui:219
|
||||||
|
#: resources/ui/gtk4/prefs.ui:248 resources/ui/gtk4/prefs.ui:277
|
||||||
|
#: resources/ui/gtk4/prefs.ui:306 resources/ui/gtk4/prefs.ui:335
|
||||||
|
#: resources/ui/gtk3/prefs.ui:224 resources/ui/gtk3/prefs.ui:264
|
||||||
|
#: resources/ui/gtk3/prefs.ui:293 resources/ui/gtk3/prefs.ui:322
|
||||||
|
#: resources/ui/gtk3/prefs.ui:351 resources/ui/gtk3/prefs.ui:380
|
||||||
|
#: resources/ui/adw/prefs.ui:81 resources/ui/adw/prefs.ui:102
|
||||||
|
#: resources/ui/adw/prefs.ui:117 resources/ui/adw/prefs.ui:132
|
||||||
|
#: resources/ui/adw/prefs.ui:147 resources/ui/adw/prefs.ui:162
|
||||||
|
msgid "Any"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:208 resources/ui/gtk3/prefs.ui:253
|
||||||
|
#: resources/ui/adw/prefs.ui:98
|
||||||
|
msgid "Animation Type"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:237 resources/ui/gtk3/prefs.ui:282
|
||||||
|
#: resources/ui/adw/prefs.ui:113
|
||||||
|
msgid "Window Type"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:266 resources/ui/gtk3/prefs.ui:311
|
||||||
|
#: resources/ui/adw/prefs.ui:128
|
||||||
|
msgid "Color Scheme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:295 resources/ui/gtk3/prefs.ui:340
|
||||||
|
#: resources/ui/adw/prefs.ui:143
|
||||||
|
msgid "Power Mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:324 resources/ui/gtk3/prefs.ui:369
|
||||||
|
#: resources/ui/adw/prefs.ui:158
|
||||||
|
msgid "Power Profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:356 resources/ui/gtk3/prefs.ui:401
|
||||||
|
#: resources/ui/adw/prefs.ui:179
|
||||||
|
msgid "Advanced Profile Options"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:396 resources/ui/gtk3/prefs.ui:441
|
||||||
|
#: resources/ui/adw/prefs.ui:184
|
||||||
|
msgid "Use this profile even if there are better matching profiles."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/prefs.ui:428 resources/ui/gtk3/prefs.ui:473
|
||||||
|
#: resources/ui/adw/prefs.ui:204
|
||||||
|
msgid "Delete this Profile..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: resources/ui/gtk4/pixelate.ui:69 resources/ui/gtk3/pixelate.ui:90
|
||||||
|
#: resources/ui/adw/pixelate.ui:47
|
||||||
|
msgid "Noise"
|
||||||
|
msgstr "ノイズ"
|
||||||
|
|
||||||
|
#: resources/ui/gtk3/fire.ui:58 resources/ui/adw/fire.ui:19
|
||||||
|
msgid "Choose a Preset"
|
||||||
|
msgstr "プリセットを選ぶ"
|
||||||
|
|
||||||
|
#~ msgid "Effects"
|
||||||
|
#~ msgstr "エフェクト"
|
||||||
|
|
||||||
|
#~ msgid "Use this effect when opening windows"
|
||||||
|
#~ msgstr "ウィンドウを開くときに使用"
|
||||||
|
|
||||||
|
#~ msgid "Use this effect when closing windows"
|
||||||
|
#~ msgstr "ウィンドウを閉じるときに使用"
|
||||||
|
|
||||||
|
#~ msgid "General Options"
|
||||||
|
#~ msgstr "全般"
|
||||||
|
|
||||||
|
#~ msgid "Welcome to Burn-My-Windows!"
|
||||||
|
#~ msgstr "Burn-My-Windows へようこそ!"
|
||||||
|
|
||||||
|
#~ msgid "If you like this extension, recommend it to your friends :)"
|
||||||
|
#~ msgstr "気に入っていただけたなら、あなたの友人にも見せてみて下さい :)"
|
||||||
|
|
||||||
|
#~ msgid "Open Window Animation"
|
||||||
|
#~ msgstr "ウィンドウを開いたときのアニメーション"
|
||||||
|
|
||||||
|
#~ msgid "Choose Effects"
|
||||||
|
#~ msgstr "エフェクトを選ぶ"
|
||||||
|
|
||||||
|
#~ msgid "Close Window Animation"
|
||||||
|
#~ msgstr "ウィンドウを閉じたときのアニメーション"
|
||||||
|
|
||||||
|
#~ msgid "Also Add Effects to Dialogs"
|
||||||
|
#~ msgstr "ダイアログにでもエフェクトを使用する"
|
||||||
|
|
||||||
|
#~ msgid "Disable on Battery Power"
|
||||||
|
#~ msgstr "電源に接続されていないとき無効化"
|
||||||
|
|
||||||
|
#~ msgid "Disable in Power-Save Mode"
|
||||||
|
#~ msgstr "パワーセーブモード時無効化"
|
||||||
@@ -29,9 +29,7 @@ const _ = imports.gettext.domain('burn-my-windows').gettext;
|
|||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||||
const utils = Me.imports.src.utils;
|
const utils = Me.imports.src.utils;
|
||||||
|
const ProfileManager = Me.imports.src.ProfileManager.ProfileManager;
|
||||||
// This template widget class is defined at the bottom of this file.
|
|
||||||
var BurnMyWindowsEffectPage = null;
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// The preferences dialog is organized in pages, each of which is loaded from a //
|
// The preferences dialog is organized in pages, each of which is loaded from a //
|
||||||
@@ -47,40 +45,45 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
|
|
||||||
// New effects must be registered here and in extension.js.
|
// New effects must be registered here and in extension.js.
|
||||||
this._ALL_EFFECTS = [
|
this._ALL_EFFECTS = [
|
||||||
new Me.imports.src.Apparition.Apparition(),
|
new Me.imports.src.effects.Apparition.Apparition(),
|
||||||
new Me.imports.src.BrokenGlass.BrokenGlass(),
|
new Me.imports.src.effects.BrokenGlass.BrokenGlass(),
|
||||||
new Me.imports.src.Doom.Doom(),
|
new Me.imports.src.effects.Doom.Doom(),
|
||||||
new Me.imports.src.EnergizeA.EnergizeA(),
|
new Me.imports.src.effects.EnergizeA.EnergizeA(),
|
||||||
new Me.imports.src.EnergizeB.EnergizeB(),
|
new Me.imports.src.effects.EnergizeB.EnergizeB(),
|
||||||
new Me.imports.src.Fire.Fire(),
|
new Me.imports.src.effects.Fire.Fire(),
|
||||||
new Me.imports.src.Glide.Glide(),
|
new Me.imports.src.effects.Glide.Glide(),
|
||||||
new Me.imports.src.Glitch.Glitch(),
|
new Me.imports.src.effects.Glitch.Glitch(),
|
||||||
new Me.imports.src.Hexagon.Hexagon(),
|
new Me.imports.src.effects.Hexagon.Hexagon(),
|
||||||
new Me.imports.src.Incinerate.Incinerate(),
|
new Me.imports.src.effects.Incinerate.Incinerate(),
|
||||||
new Me.imports.src.Matrix.Matrix(),
|
new Me.imports.src.effects.Matrix.Matrix(),
|
||||||
new Me.imports.src.Pixelate.Pixelate(),
|
new Me.imports.src.effects.Pixelate.Pixelate(),
|
||||||
new Me.imports.src.PixelWheel.PixelWheel(),
|
new Me.imports.src.effects.PixelWheel.PixelWheel(),
|
||||||
new Me.imports.src.PixelWipe.PixelWipe(),
|
new Me.imports.src.effects.PixelWipe.PixelWipe(),
|
||||||
new Me.imports.src.Portal.Portal(),
|
new Me.imports.src.effects.Portal.Portal(),
|
||||||
new Me.imports.src.SnapOfDisintegration.SnapOfDisintegration(),
|
new Me.imports.src.effects.SnapOfDisintegration.SnapOfDisintegration(),
|
||||||
new Me.imports.src.TRexAttack.TRexAttack(),
|
new Me.imports.src.effects.TRexAttack.TRexAttack(),
|
||||||
new Me.imports.src.TVEffect.TVEffect(),
|
new Me.imports.src.effects.TVEffect.TVEffect(),
|
||||||
new Me.imports.src.Wisps.Wisps(),
|
new Me.imports.src.effects.TVGlitch.TVGlitch(),
|
||||||
|
new Me.imports.src.effects.Wisps.Wisps(),
|
||||||
];
|
];
|
||||||
|
|
||||||
// Load all of our resources.
|
// Load all of our resources.
|
||||||
this._resources = Gio.Resource.load(Me.path + '/resources/burn-my-windows.gresource');
|
this._resources = Gio.Resource.load(Me.path + '/resources/burn-my-windows.gresource');
|
||||||
Gio.resources_register(this._resources);
|
Gio.resources_register(this._resources);
|
||||||
|
|
||||||
// Load the CSS file for the settings dialog.
|
// Load the CSS file for the settings dialog. If using libadwaita, we do not need an
|
||||||
const styleProvider = Gtk.CssProvider.new();
|
// additional style sheet.
|
||||||
styleProvider.load_from_resource('/css/gtk.css');
|
if (!utils.isADW()) {
|
||||||
if (utils.isGTK4()) {
|
const provider = Gtk.CssProvider.new();
|
||||||
Gtk.StyleContext.add_provider_for_display(Gdk.Display.get_default(), styleProvider,
|
if (utils.isGTK4()) {
|
||||||
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
|
provider.load_from_resource('/css/gtk4.css');
|
||||||
} else {
|
Gtk.StyleContext.add_provider_for_display(
|
||||||
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), styleProvider,
|
Gdk.Display.get_default(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||||
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
|
} else {
|
||||||
|
provider.load_from_resource('/css/gtk3.css');
|
||||||
|
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), provider,
|
||||||
|
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure custom icons are found.
|
// Make sure custom icons are found.
|
||||||
@@ -90,59 +93,186 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
Gtk.IconTheme.get_default().add_resource_path('/img');
|
Gtk.IconTheme.get_default().add_resource_path('/img');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register the template widgets used in the settings dialog.
|
|
||||||
this._registerCustomClasses();
|
|
||||||
|
|
||||||
// Store a reference to the settings object.
|
|
||||||
this._settings = ExtensionUtils.getSettings();
|
|
||||||
|
|
||||||
// Load the general user interface files.
|
// Load the general user interface files.
|
||||||
this._builder = new Gtk.Builder();
|
this._builder = new Gtk.Builder();
|
||||||
this._builder.add_from_resource(`/ui/common/main-menu.ui`);
|
this._builder.add_from_resource(`/ui/common/menus.ui`);
|
||||||
this._builder.add_from_resource(`/ui/${utils.getUIDir()}/prefs.ui`);
|
this._builder.add_from_resource(`/ui/${utils.getUIDir()}/prefs.ui`);
|
||||||
|
|
||||||
// Bind general options properties.
|
// Store a reference to the general settings object.
|
||||||
this.bindSwitch('destroy-dialogs');
|
this._settings = ExtensionUtils.getSettings();
|
||||||
this.bindSwitch('disable-on-battery');
|
|
||||||
this.bindSwitch('disable-on-power-save');
|
// This tracks all available effect profiles.
|
||||||
|
this._profileManager = new ProfileManager();
|
||||||
|
|
||||||
|
// This is used to track all connections to properties of the current effect profile.
|
||||||
|
// Whenever the current effect profile changes, all connections are disconnected.
|
||||||
|
this._profileConnections = [];
|
||||||
|
|
||||||
|
// Load the current effect profile. If there is none, we create a default profile.
|
||||||
|
this._settings.connect('changed::active-profile', () => {
|
||||||
|
this._loadActiveProfile();
|
||||||
|
});
|
||||||
|
|
||||||
// Check whether the power profiles daemon is available - if not, we hide the
|
// Check whether the power profiles daemon is available - if not, we hide the
|
||||||
// corresponding settings row.
|
// corresponding settings row.
|
||||||
const PowerProfilesProxy = Gio.DBusProxy.makeProxyWrapper(
|
let hasPowerProfiles = false;
|
||||||
utils.getStringResource('/interfaces/net.hadess.PowerProfiles.xml'));
|
try {
|
||||||
let powerProfilesProxy = new PowerProfilesProxy(
|
const PowerProfilesProxy = Gio.DBusProxy.makeProxyWrapper(
|
||||||
Gio.DBus.system, 'net.hadess.PowerProfiles', '/net/hadess/PowerProfiles');
|
utils.getStringResource('/interfaces/net.hadess.PowerProfiles.xml'));
|
||||||
|
let powerProfilesProxy = new PowerProfilesProxy(
|
||||||
|
Gio.DBus.system, 'net.hadess.PowerProfiles', '/net/hadess/PowerProfiles');
|
||||||
|
|
||||||
if (powerProfilesProxy.get_name_owner() == null) {
|
hasPowerProfiles = powerProfilesProxy.get_name_owner() != null;
|
||||||
this._builder.get_object('disable-on-power-save-row').set_visible(false);
|
} catch (e) {
|
||||||
|
// Maybe the service is masked...
|
||||||
}
|
}
|
||||||
|
|
||||||
// Starting with GNOME Shell 42, the settings dialog uses libadwaita (at least most of
|
let powerProfileRow = this._builder.get_object('profile-power-profile');
|
||||||
// the time - it seems that pop!_OS does not support libadwaita even on GNOME 42). We
|
if (!utils.isADW()) {
|
||||||
// have to use a different layout, as the stack sidebar looks pretty ugly with the
|
powerProfileRow = powerProfileRow.get_parent().get_parent();
|
||||||
// included Adw.Clamp...
|
}
|
||||||
if (utils.isADW()) {
|
powerProfileRow.set_visible(hasPowerProfiles);
|
||||||
|
|
||||||
// This is our top-level widget which we will return later.
|
// The global color scheme is only available starting with GNOME Shell 42. We hide the
|
||||||
this._widget = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL});
|
// corresponding settings row on older versions.
|
||||||
|
let colorSchemeRow = this._builder.get_object('profile-color-scheme');
|
||||||
|
if (!utils.isADW()) {
|
||||||
|
colorSchemeRow = colorSchemeRow.get_parent().get_parent();
|
||||||
|
}
|
||||||
|
colorSchemeRow.set_visible(utils.shellVersionIsAtLeast(42, 0));
|
||||||
|
|
||||||
// Add the general options page to the settings dialog.
|
// Wire up the window picker of the profile editor. Whenever the app-chooser button is
|
||||||
const generalPrefs = this._builder.get_object('general-prefs');
|
// clicked, we call a method of the extension which will initiate the window picking.
|
||||||
this.gtkBoxAppend(this._widget, generalPrefs);
|
this._builder.get_object('profile-choose-app-button').connect('clicked', () => {
|
||||||
|
Gio.DBus.session.call('org.gnome.Shell',
|
||||||
|
'/org/gnome/shell/extensions/BurnMyWindows',
|
||||||
|
'org.gnome.shell.extensions.BurnMyWindows', 'PickWindow',
|
||||||
|
null, null, Gio.DBusCallFlags.NO_AUTO_START, -1, null, null);
|
||||||
|
});
|
||||||
|
|
||||||
// Then add a preferences group for the effect expander rows.
|
// If the window picking was successful, this D-Bus signal will be emitted. If a
|
||||||
const group = new Adw.PreferencesGroup({title: _('Effects')});
|
// window was picked, we add it to the list of window name.
|
||||||
this.gtkBoxAppend(this._widget, group);
|
this._dbusConnection = Gio.DBus.session.signal_subscribe(
|
||||||
|
'org.gnome.Shell', 'org.gnome.shell.extensions.BurnMyWindows', 'WindowPicked',
|
||||||
|
'/org/gnome/shell/extensions/BurnMyWindows', null, Gio.DBusSignalFlags.NONE,
|
||||||
|
(conn, sender, obj_path, iface, signal, params) => {
|
||||||
|
const val = params.get_child_value(0).get_string()[0];
|
||||||
|
if (val != 'window-not-found') {
|
||||||
|
const entry = this._builder.get_object('profile-app');
|
||||||
|
|
||||||
// This stores all expander rows for the effects. We use this to implement the
|
// Split the current value at each |, trim spaces, and remove empty components.
|
||||||
// accordion-functionality of the effect settings.
|
let apps = entry.text.split('|').map(item => item.trim()).filter(v => v != '');
|
||||||
this._effectRows = [];
|
|
||||||
|
|
||||||
// Now add all the rows.
|
// If the list is empty, we simply use the name of the picked window.
|
||||||
this._ALL_EFFECTS.forEach(effect => {
|
if (apps.length == 0) {
|
||||||
const [minMajor, minMinor] = effect.getMinShellVersion();
|
entry.text = val;
|
||||||
if (utils.shellVersionIsAtLeast(minMajor, minMinor)) {
|
} else {
|
||||||
const row = effect.getPreferences(this);
|
|
||||||
|
// Else we append the new application name, remove any duplicates, and sort
|
||||||
|
// the resulting list alphabetically.
|
||||||
|
apps.push(val);
|
||||||
|
apps = [...new Set(apps)].sort();
|
||||||
|
entry.text = apps.join(' | ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// If using libadwaita, the visibility of the profile-editor Adw.Flap is controlled
|
||||||
|
// using bindings in the ui file. On GTK3 and GTK4 we have to wire up this toggling
|
||||||
|
// here since we are using a Gtk.Stack instead of an Adw.Flap.
|
||||||
|
if (!utils.isADW()) {
|
||||||
|
const profileEditorButton = this._builder.get_object('edit-profile-button');
|
||||||
|
profileEditorButton.connect('toggled', b => {
|
||||||
|
if (b.active) {
|
||||||
|
this._builder.get_object('general-prefs')
|
||||||
|
.set_visible_child(this._builder.get_object('profile-editor'));
|
||||||
|
} else {
|
||||||
|
this._builder.get_object('general-prefs')
|
||||||
|
.set_visible_child(this._builder.get_object('effect-editor'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is our top-level widget which we will return later.
|
||||||
|
this._widget = this._builder.get_object('general-prefs');
|
||||||
|
|
||||||
|
// Then add a preferences group for the effect expander rows.
|
||||||
|
const group = this._builder.get_object('effects-group');
|
||||||
|
|
||||||
|
// This stores all expander rows for the effects. We use this to implement the
|
||||||
|
// accordion-like behavior of the effect settings.
|
||||||
|
this._effectRows = [];
|
||||||
|
|
||||||
|
if (!utils.isADW()) {
|
||||||
|
group.connect('row-activated', (g, row) => {
|
||||||
|
this._effectRows.forEach(r => {
|
||||||
|
if (r == row) {
|
||||||
|
if (r._revealer.get_reveal_child()) {
|
||||||
|
r._revealer.set_reveal_child(false);
|
||||||
|
r._arrow.get_style_context().remove_class('revealed');
|
||||||
|
} else {
|
||||||
|
r._revealer.set_reveal_child(true);
|
||||||
|
r._arrow.get_style_context().add_class('revealed');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
r._revealer.set_reveal_child(false);
|
||||||
|
r._arrow.get_style_context().remove_class('revealed');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now add all the rows.
|
||||||
|
this._ALL_EFFECTS.forEach(effect => {
|
||||||
|
const [minMajor, minMinor] = effect.getMinShellVersion();
|
||||||
|
if (utils.shellVersionIsAtLeast(minMajor, minMinor)) {
|
||||||
|
|
||||||
|
const uiFile = `/ui/${utils.getUIDir()}/${effect.getNick()}.ui`;
|
||||||
|
|
||||||
|
// Is there a better way to test for the existence of a resource file?
|
||||||
|
let hasPrefs = false;
|
||||||
|
try {
|
||||||
|
Gio.resources_get_info(uiFile, 0);
|
||||||
|
hasPrefs = true;
|
||||||
|
} catch (e) {
|
||||||
|
// Nothing todo, there
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the settings page to the builder.
|
||||||
|
if (hasPrefs) {
|
||||||
|
this._builder.add_from_resource(uiFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
// The preview button.
|
||||||
|
let previewButton;
|
||||||
|
if (utils.isGTK4()) {
|
||||||
|
previewButton = Gtk.Button.new_from_icon_name('bmw-preview-symbolic');
|
||||||
|
} else {
|
||||||
|
previewButton = Gtk.Button.new_from_icon_name('bmw-preview-symbolic', 1);
|
||||||
|
}
|
||||||
|
previewButton.get_style_context().add_class('circular');
|
||||||
|
previewButton.get_style_context().add_class('flat');
|
||||||
|
previewButton.set_tooltip_text(_('Preview this effect'));
|
||||||
|
previewButton.set_valign(Gtk.Align.CENTER);
|
||||||
|
previewButton.connect('clicked', () => {
|
||||||
|
this._previewEffect(effect);
|
||||||
|
});
|
||||||
|
|
||||||
|
// The toggle button for enabling and disabling the effect.
|
||||||
|
const button = Gtk.Switch.new();
|
||||||
|
button.set_valign(Gtk.Align.CENTER);
|
||||||
|
this._builder.expose_object(`${effect.getNick()}-enable-effect`, button);
|
||||||
|
|
||||||
|
if (utils.isADW()) {
|
||||||
|
|
||||||
|
let row;
|
||||||
|
if (hasPrefs) {
|
||||||
|
|
||||||
|
// Add the effect's preferences (if any).
|
||||||
|
row = this._builder.get_object(`${effect.getNick()}-prefs`);
|
||||||
|
} else if (utils.isADW()) {
|
||||||
|
row = Adw.ActionRow.new();
|
||||||
|
}
|
||||||
|
|
||||||
// On older versions of Adw (e.g. on GNOME Shell <43), the set_use_markup() does
|
// On older versions of Adw (e.g. on GNOME Shell <43), the set_use_markup() does
|
||||||
// not yet exist.
|
// not yet exist.
|
||||||
@@ -155,112 +285,71 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
|
|
||||||
// Un-expand any previously expanded effect row. This way we ensure that there
|
// Un-expand any previously expanded effect row. This way we ensure that there
|
||||||
// is only one expanded row at any time.
|
// is only one expanded row at any time.
|
||||||
row.connect('notify::expanded', currentRow => {
|
if (hasPrefs) {
|
||||||
if (currentRow.get_expanded()) {
|
row.connect('notify::expanded', currentRow => {
|
||||||
this._effectRows.forEach(row => {
|
if (currentRow.get_expanded()) {
|
||||||
if (row != currentRow) {
|
this._effectRows.forEach(row => {
|
||||||
row.set_expanded(false);
|
if (row != currentRow) {
|
||||||
}
|
row.set_expanded(false);
|
||||||
});
|
}
|
||||||
}
|
});
|
||||||
});
|
|
||||||
|
|
||||||
// Add three buttons on the right.
|
|
||||||
const box = new Gtk.Box();
|
|
||||||
box.set_spacing(8);
|
|
||||||
|
|
||||||
// The preview button.
|
|
||||||
const previewButton = Gtk.Button.new_from_icon_name('bmw-preview-symbolic');
|
|
||||||
previewButton.add_css_class('circular');
|
|
||||||
previewButton.add_css_class('flat');
|
|
||||||
previewButton.set_tooltip_text(_('Preview this effect'));
|
|
||||||
previewButton.set_valign(Gtk.Align.CENTER);
|
|
||||||
box.append(previewButton);
|
|
||||||
|
|
||||||
previewButton.connect('clicked', () => {
|
|
||||||
this._previewEffect(effect);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Now add the two toggle buttons for enabling and disabling the effect.
|
|
||||||
const addToggle = (action, tooltip) => {
|
|
||||||
const button = Gtk.ToggleButton.new();
|
|
||||||
button.set_action_name(
|
|
||||||
`${action}-effects.${effect.getNick()}-${action}-effect`);
|
|
||||||
button.set_child(
|
|
||||||
Gtk.Image.new_from_icon_name(`bmw-window-${action}-symbolic`));
|
|
||||||
button.set_tooltip_text(tooltip);
|
|
||||||
button.set_valign(Gtk.Align.CENTER);
|
|
||||||
|
|
||||||
// We switch some class when the button is enabled in order to make it more
|
|
||||||
// apparent which effects are currently in use.
|
|
||||||
button.add_css_class('circular');
|
|
||||||
button.add_css_class('flat');
|
|
||||||
button.connect('toggled', button => {
|
|
||||||
if (button.active) {
|
|
||||||
button.add_css_class('suggested-action');
|
|
||||||
button.remove_css_class('flat');
|
|
||||||
} else {
|
|
||||||
button.remove_css_class('suggested-action');
|
|
||||||
button.add_css_class('flat');
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
this._effectRows.push(row);
|
||||||
box.append(button);
|
row.add_action(previewButton);
|
||||||
};
|
} else {
|
||||||
|
row.add_suffix(previewButton);
|
||||||
addToggle('open', _('Use this effect when opening windows'));
|
|
||||||
addToggle('close', _('Use this effect when closing windows'));
|
|
||||||
|
|
||||||
row.add_action(box);
|
|
||||||
group.add(row);
|
|
||||||
|
|
||||||
this._effectRows.push(row);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// On older GNOME versions, we use a StackSidebar. The code below works both, on GTK3
|
|
||||||
// and GTK4.
|
|
||||||
else {
|
|
||||||
|
|
||||||
// This is our top-level widget which we will return later.
|
|
||||||
this._widget = new Gtk.Box({
|
|
||||||
orientation: Gtk.Orientation.HORIZONTAL,
|
|
||||||
});
|
|
||||||
|
|
||||||
const stack = new Gtk.Stack({
|
|
||||||
transition_type: Gtk.StackTransitionType.SLIDE_UP_DOWN,
|
|
||||||
});
|
|
||||||
|
|
||||||
// Add the general options page.
|
|
||||||
const generalPage = this._builder.get_object('general-prefs');
|
|
||||||
generalPage.margin_start = 60;
|
|
||||||
generalPage.margin_end = 60;
|
|
||||||
stack.add_titled(generalPage, 'general', _('General Options'));
|
|
||||||
|
|
||||||
this.gtkBoxAppend(this._widget, new Gtk.StackSidebar({stack: stack}));
|
|
||||||
this.gtkBoxAppend(this._widget, stack);
|
|
||||||
|
|
||||||
// Add all other effect pages.
|
|
||||||
this._ALL_EFFECTS.forEach(effect => {
|
|
||||||
const [minMajor, minMinor] = effect.getMinShellVersion();
|
|
||||||
if (utils.shellVersionIsAtLeast(minMajor, minMinor)) {
|
|
||||||
|
|
||||||
const page = new BurnMyWindowsEffectPage(effect, this);
|
|
||||||
page.margin_start = 60;
|
|
||||||
page.margin_end = 60;
|
|
||||||
page.margin_top = 60;
|
|
||||||
page.margin_bottom = 60;
|
|
||||||
|
|
||||||
// Add the effect's preferences (if any).
|
|
||||||
const preferences = effect.getPreferences(this);
|
|
||||||
if (preferences) {
|
|
||||||
this.gtkBoxAppend(page, preferences);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stack.add_titled(page, effect.getNick(), effect.getLabel());
|
row.add_prefix(button);
|
||||||
|
|
||||||
|
group.add(row);
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
const row = new Gtk.ListBoxRow();
|
||||||
|
row.get_style_context().add_class('effect-row');
|
||||||
|
|
||||||
|
const container = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL});
|
||||||
|
|
||||||
|
const header = new Gtk.Box({spacing: 12});
|
||||||
|
header.get_style_context().add_class('effect-row-header');
|
||||||
|
|
||||||
|
const label = new Gtk.Label(
|
||||||
|
{label: effect.getLabel(), hexpand: true, halign: Gtk.Align.START});
|
||||||
|
label.get_style_context().add_class('heading');
|
||||||
|
|
||||||
|
this.gtkBoxAppend(header, button);
|
||||||
|
this.gtkBoxAppend(header, label);
|
||||||
|
this.gtkBoxAppend(header, previewButton);
|
||||||
|
this.gtkBoxAppend(container, header);
|
||||||
|
|
||||||
|
if (hasPrefs) {
|
||||||
|
const revealer = this._builder.get_object(`${effect.getNick()}-prefs`);
|
||||||
|
const arrow = new Gtk.Image({icon_name: 'go-down-symbolic'});
|
||||||
|
arrow.get_style_context().add_class('revealer-arrow');
|
||||||
|
this.gtkBoxAppend(header, arrow);
|
||||||
|
this.gtkBoxAppend(container, revealer);
|
||||||
|
row._revealer = revealer;
|
||||||
|
row._arrow = arrow;
|
||||||
|
|
||||||
|
row.set_activatable(true);
|
||||||
|
this._effectRows.push(row);
|
||||||
|
} else {
|
||||||
|
row.set_activatable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (utils.isGTK4()) {
|
||||||
|
row.set_child(container);
|
||||||
|
group.append(row);
|
||||||
|
} else {
|
||||||
|
row.add(container);
|
||||||
|
group.add(row);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
// Some things can only be done once the widget is shown as we do not have access to
|
// Some things can only be done once the widget is shown as we do not have access to
|
||||||
// the toplevel widget before.
|
// the toplevel widget before.
|
||||||
@@ -270,6 +359,45 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
// Show the version number in the title bar.
|
// Show the version number in the title bar.
|
||||||
window.set_title(`Burn-My-Windows ${Me.metadata.version}`);
|
window.set_title(`Burn-My-Windows ${Me.metadata.version}`);
|
||||||
|
|
||||||
|
this._loadActiveProfile();
|
||||||
|
this._updateProfileMenu();
|
||||||
|
|
||||||
|
// Show an Adw.Toast or a Gtk.InfoBar whenever Burn-My-Windows was updated. We use a
|
||||||
|
// small timeout so that it is not shown instantaneously.
|
||||||
|
const lastVersion = this._settings.get_int('last-prefs-version');
|
||||||
|
if (lastVersion < Me.metadata.version) {
|
||||||
|
this._showUpdateInfoTimeout =
|
||||||
|
GLib.timeout_add(GLib.PRIORITY_DEFAULT, 2000, () => {
|
||||||
|
this._showUpdateInfoTimeout = 0;
|
||||||
|
|
||||||
|
if (utils.isADW()) {
|
||||||
|
const toast = Adw.Toast.new(_('Burn-My-Windows has been updated!'));
|
||||||
|
toast.set_button_label(_('View Changelog'));
|
||||||
|
toast.set_action_name('prefs.changelog');
|
||||||
|
toast.set_timeout(0);
|
||||||
|
|
||||||
|
toast.connect(
|
||||||
|
'dismissed',
|
||||||
|
() => this._settings.set_int('last-prefs-version', Me.metadata.version));
|
||||||
|
|
||||||
|
window.add_toast(toast);
|
||||||
|
} else {
|
||||||
|
const infoBar = this._builder.get_object('update-info');
|
||||||
|
infoBar.connect('response', i => {
|
||||||
|
this._settings.set_int('last-prefs-version', Me.metadata.version);
|
||||||
|
i.set_revealed(false);
|
||||||
|
});
|
||||||
|
infoBar.set_revealed(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Populate the menu with actions.
|
||||||
|
const group = Gio.SimpleActionGroup.new();
|
||||||
|
window.insert_action_group('prefs', group);
|
||||||
|
|
||||||
// Add the main menu to the title bar.
|
// Add the main menu to the title bar.
|
||||||
{
|
{
|
||||||
// Add the menu button to the title bar.
|
// Add the menu button to the title bar.
|
||||||
@@ -277,20 +405,40 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
|
|
||||||
// Starting with GNOME Shell 42, we have to hack our way through the widget tree
|
// Starting with GNOME Shell 42, we have to hack our way through the widget tree
|
||||||
// of the Adw.PreferencesWindow...
|
// of the Adw.PreferencesWindow...
|
||||||
if (Adw && utils.shellVersionIsAtLeast(42, 'beta')) {
|
if (utils.isADW()) {
|
||||||
const header = this._findWidgetByType(window.get_content(), Adw.HeaderBar);
|
const header = this._findWidgetByType(window.get_content(), Adw.HeaderBar);
|
||||||
header.pack_start(menu);
|
header.pack_start(menu);
|
||||||
|
header.set_title_widget(this._builder.get_object('profile-button'));
|
||||||
|
|
||||||
// Allow closing of the sub pages.
|
// GNOME Shell extensions are forced to use a AdwPreferencesWindow. This already
|
||||||
window.can_navigate_back = true;
|
// includes a Gtk.ScrolledWindow as well as an Adw.Clamp. For the profile
|
||||||
|
// editing, we want to use an Adw.Flap which reveals itself from the top. This
|
||||||
|
// needs to be inserted in the widget hierarchy above the Adw.Clamp, else it
|
||||||
|
// would look ugly. Therefore, we fiddle around with the internal widgets...
|
||||||
|
const flap = this._builder.get_object('profile-editor-flap');
|
||||||
|
const clamp = this._findWidgetByType(window.get_content(), Adw.Clamp);
|
||||||
|
const viewport = clamp.get_parent();
|
||||||
|
viewport.get_parent().set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER);
|
||||||
|
viewport.set_child(flap);
|
||||||
|
|
||||||
|
const scrolledWindow = Gtk.ScrolledWindow.new();
|
||||||
|
scrolledWindow.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||||
|
scrolledWindow.set_propagate_natural_height(true);
|
||||||
|
scrolledWindow.set_vexpand(true);
|
||||||
|
scrolledWindow.set_child(clamp);
|
||||||
|
|
||||||
|
flap.set_content(scrolledWindow);
|
||||||
|
|
||||||
|
} else if (utils.isGTK4()) {
|
||||||
|
window.get_titlebar().pack_start(menu);
|
||||||
|
window.get_titlebar().set_title_widget(
|
||||||
|
this._builder.get_object('profile-button'));
|
||||||
} else {
|
} else {
|
||||||
window.get_titlebar().pack_start(menu);
|
window.get_titlebar().pack_start(menu);
|
||||||
|
window.get_titlebar().set_custom_title(
|
||||||
|
this._builder.get_object('profile-button'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate the menu with actions.
|
|
||||||
const group = Gio.SimpleActionGroup.new();
|
|
||||||
window.insert_action_group('prefs', group);
|
|
||||||
|
|
||||||
const addURIAction = (name, uri) => {
|
const addURIAction = (name, uri) => {
|
||||||
const action = Gio.SimpleAction.new(name, null);
|
const action = Gio.SimpleAction.new(name, null);
|
||||||
action.connect('activate', () => Gtk.show_uri(null, uri, Gdk.CURRENT_TIME));
|
action.connect('activate', () => Gtk.show_uri(null, uri, Gdk.CURRENT_TIME));
|
||||||
@@ -299,14 +447,30 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
addURIAction('homepage', 'https://github.com/Schneegans/Burn-My-Windows');
|
addURIAction('homepage', 'https://github.com/Schneegans/Burn-My-Windows');
|
||||||
addURIAction('changelog', 'https://github.com/Schneegans/Burn-My-Windows/blob/main/docs/changelog.md');
|
|
||||||
addURIAction('bugs', 'https://github.com/Schneegans/Burn-My-Windows/issues');
|
addURIAction('bugs', 'https://github.com/Schneegans/Burn-My-Windows/issues');
|
||||||
addURIAction('new-effect', 'https://github.com/Schneegans/Burn-My-Windows/blob/main/docs/how-to-create-new-effects.md');
|
addURIAction('new-effect', 'https://github.com/Schneegans/Burn-My-Windows/blob/main/docs/how-to-create-new-effects.md');
|
||||||
addURIAction('translate', 'https://hosted.weblate.org/engage/burn-my-windows/');
|
addURIAction('translate', 'https://hosted.weblate.org/engage/burn-my-windows/');
|
||||||
addURIAction('donate-paypal', 'https://www.paypal.com/donate/?hosted_button_id=3F7UFL8KLVPXE');
|
addURIAction('donate-kofi', 'https://ko-fi.com/schneegans');
|
||||||
addURIAction('donate-github', 'https://github.com/sponsors/Schneegans');
|
addURIAction('donate-github', 'https://github.com/sponsors/Schneegans');
|
||||||
|
addURIAction('donate-paypal', 'https://www.paypal.com/donate/?hosted_button_id=3F7UFL8KLVPXE');
|
||||||
|
addURIAction('wallpapers', 'https://github.com/Schneegans/ai-wallpapers');
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
// The changelog action is a bit different, as it may get activated when the
|
||||||
|
// view-changelog button is pressed which is shown in an Adw.Toast or a
|
||||||
|
// Gtk.InfoBar whenever Burn-My-Windows gets updated. To ensure that the
|
||||||
|
// notification is shown only once, we have to store the current version of
|
||||||
|
// Burn-My-Windows in the settings.
|
||||||
|
const changelogAction = Gio.SimpleAction.new('changelog', null);
|
||||||
|
changelogAction.connect('activate', () => {
|
||||||
|
Gtk.show_uri(
|
||||||
|
null,
|
||||||
|
'https://github.com/Schneegans/Burn-My-Windows/blob/main/docs/changelog.md',
|
||||||
|
Gdk.CURRENT_TIME);
|
||||||
|
this._settings.set_int('last-prefs-version', Me.metadata.version)
|
||||||
|
});
|
||||||
|
group.add_action(changelogAction);
|
||||||
|
|
||||||
// Add the about dialog.
|
// Add the about dialog.
|
||||||
const aboutAction = Gio.SimpleAction.new('about', null);
|
const aboutAction = Gio.SimpleAction.new('about', null);
|
||||||
aboutAction.connect('activate', () => {
|
aboutAction.connect('activate', () => {
|
||||||
@@ -404,50 +568,85 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
group.add_action(aboutAction);
|
group.add_action(aboutAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate the open-effects drop-down menu.
|
// Setup all the profile-related actions.
|
||||||
{
|
{
|
||||||
const group = Gio.SimpleActionGroup.new();
|
// Allow switching the current profile.
|
||||||
window.insert_action_group('open-effects', group);
|
const activeProfileAction = this._settings.create_action('active-profile');
|
||||||
|
group.add_action(activeProfileAction);
|
||||||
|
|
||||||
this._ALL_EFFECTS.forEach(effect => {
|
// This action creates a new profile and makes it the active one.
|
||||||
const [minMajor, minMinor] = effect.getMinShellVersion();
|
const newProfileAction = Gio.SimpleAction.new('profile-new', null);
|
||||||
if (utils.shellVersionIsAtLeast(minMajor, minMinor)) {
|
newProfileAction.connect('activate', () => {
|
||||||
const actionName = effect.getNick() + '-open-effect';
|
const profile = this._profileManager.createProfile();
|
||||||
const action = this._settings.create_action(actionName);
|
this._settings.set_string('active-profile', profile.path);
|
||||||
group.add_action(action);
|
|
||||||
|
|
||||||
// The menu only exists if not using libadwaita. With libadwaita, individual
|
// Start editing the profile.
|
||||||
// ToggleButtons are used for triggering the above actions.
|
this._builder.get_object('edit-profile-button').active = true;
|
||||||
if (!utils.isADW()) {
|
|
||||||
const menu = this._builder.get_object('open-effect-menu');
|
// The number of profiles has changed, so we have to update the profile
|
||||||
const label = effect.getLabel();
|
// selection menu.
|
||||||
menu.append_item(Gio.MenuItem.new(label, 'open-effects.' + actionName));
|
this._updateProfileMenu();
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
group.add_action(newProfileAction);
|
||||||
|
|
||||||
// Populate the close-effects drop-down menu.
|
// This action shows a confirmation dialog. Upon user approval, the currently
|
||||||
{
|
// active profile is deleted. We use the more beautiful Adw.MessageDialog if it is
|
||||||
const group = Gio.SimpleActionGroup.new();
|
// available (usually on GNOME 43 and beyond).
|
||||||
window.insert_action_group('close-effects', group);
|
let deleteProfileDialog;
|
||||||
|
const dialogTitle = _('Delete this Profile?');
|
||||||
|
const dialogSubtitle = _(
|
||||||
|
'The current effect profile with all its effect settings will be permanently lost.');
|
||||||
|
|
||||||
this._ALL_EFFECTS.forEach(effect => {
|
if (utils.isADW() && Adw.MessageDialog) {
|
||||||
const [minMajor, minMinor] = effect.getMinShellVersion();
|
deleteProfileDialog =
|
||||||
if (utils.shellVersionIsAtLeast(minMajor, minMinor)) {
|
new Adw.MessageDialog({heading: dialogTitle, body: dialogSubtitle});
|
||||||
const actionName = effect.getNick() + '-close-effect';
|
deleteProfileDialog.add_response('cancel', _('Cancel'));
|
||||||
const action = this._settings.create_action(actionName);
|
deleteProfileDialog.add_response('delete', _('Delete'));
|
||||||
group.add_action(action);
|
deleteProfileDialog.set_response_appearance('delete',
|
||||||
|
Adw.ResponseAppearance.DESTRUCTIVE);
|
||||||
|
deleteProfileDialog.set_default_response('cancel');
|
||||||
|
deleteProfileDialog.set_close_response('cancel');
|
||||||
|
} else {
|
||||||
|
deleteProfileDialog = new Gtk.MessageDialog({
|
||||||
|
text: dialogTitle,
|
||||||
|
secondary_text: dialogSubtitle,
|
||||||
|
modal: true,
|
||||||
|
title: '',
|
||||||
|
buttons: Gtk.ButtonsType.OK_CANCEL
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// The menu only exists if not using libadwaita. With libadwaita, individual
|
if (utils.isGTK4()) {
|
||||||
// ToggleButtons are used for triggering the above actions.
|
deleteProfileDialog.set_hide_on_close(true);
|
||||||
if (!utils.isADW()) {
|
}
|
||||||
const menu = this._builder.get_object('close-effect-menu');
|
|
||||||
const label = effect.getLabel();
|
deleteProfileDialog.set_transient_for(window);
|
||||||
menu.append_item(Gio.MenuItem.new(label, 'close-effects.' + actionName));
|
|
||||||
}
|
deleteProfileDialog.connect('response', (dialog, response) => {
|
||||||
|
if (response == 'delete' || response == Gtk.ResponseType.OK) {
|
||||||
|
// Stop editing the current profile.
|
||||||
|
this._builder.get_object('edit-profile-button').active = false;
|
||||||
|
|
||||||
|
// Delete the currently active profile.
|
||||||
|
this._profileManager.deleteProfile(this._activeProfile.path);
|
||||||
|
|
||||||
|
// Select another one.
|
||||||
|
this._settings.set_string('active-profile',
|
||||||
|
this._profileManager.getProfiles()[0].path);
|
||||||
|
|
||||||
|
// The number of profiles has changed, so we have to update the profile
|
||||||
|
// selection menu.
|
||||||
|
this._updateProfileMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dialog.hide();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const deleteProfileAction = Gio.SimpleAction.new('profile-delete', null);
|
||||||
|
deleteProfileAction.connect('activate', () => {
|
||||||
|
deleteProfileDialog.show();
|
||||||
|
});
|
||||||
|
group.add_action(deleteProfileAction);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -456,6 +655,14 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
this._widget.connect('destroy', () => {
|
this._widget.connect('destroy', () => {
|
||||||
// Unregister our resources.
|
// Unregister our resources.
|
||||||
Gio.resources_unregister(this._resources);
|
Gio.resources_unregister(this._resources);
|
||||||
|
|
||||||
|
// Disconnect from the window-picker API.
|
||||||
|
Gio.DBus.session.signal_unsubscribe(this._dbusConnection);
|
||||||
|
|
||||||
|
// If the settings dialog got closed too quickly, this may not have been shown.
|
||||||
|
if (this._showUpdateInfoTimeout > 0) {
|
||||||
|
GLib.source_remove(this._showUpdateInfoTimeout);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Show the widgets on GTK3.
|
// Show the widgets on GTK3.
|
||||||
@@ -472,9 +679,9 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
return this._builder;
|
return this._builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a Gio.Settings object for this extension.
|
// Returns a Gio.Settings object for the current effect profile.
|
||||||
getSettings() {
|
getProfileSettings() {
|
||||||
return this._settings;
|
return this._activeProfile.settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the widget used for the settings of this extension.
|
// Returns the widget used for the settings of this extension.
|
||||||
@@ -482,10 +689,22 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
return this._widget;
|
return this._widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connects a Gtk.ComboBox (or anything else which has an 'active-id' property) to a
|
// Connects an Adw.ComboRow (or anything else which has an 'selected' property) to a
|
||||||
// settings key. It also binds the corresponding reset button.
|
// settings key. It also binds the corresponding reset button.
|
||||||
bindCombobox(settingsKey) {
|
bindComboRow(settingsKey) {
|
||||||
this._bind(settingsKey, 'active-id');
|
this._bind(settingsKey, 'selected');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connects a Gtk.ComboBox (or anything else which has an 'active' property) to a
|
||||||
|
// settings key. It also binds the corresponding reset button.
|
||||||
|
bindComboBox(settingsKey) {
|
||||||
|
this._bind(settingsKey, 'active');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connects a Gtk.Entry (or anything else which has an 'text' property) to a
|
||||||
|
// settings key. It also binds the corresponding reset button.
|
||||||
|
bindEntry(settingsKey) {
|
||||||
|
this._bind(settingsKey, 'text');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connects a Gtk.Adjustment (or anything else which has a 'value' property) to a
|
// Connects a Gtk.Adjustment (or anything else which has a 'value' property) to a
|
||||||
@@ -510,18 +729,23 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
if (button) {
|
if (button) {
|
||||||
|
|
||||||
// Update the settings when the color is modified.
|
// Update the settings when the color is modified.
|
||||||
button.connect('color-set', () => {
|
if (!button._isConnected) {
|
||||||
this._settings.set_string(settingsKey, button.get_rgba().to_string());
|
button.connect('color-set', () => {
|
||||||
});
|
this.getProfileSettings().set_string(settingsKey,
|
||||||
|
button.get_rgba().to_string());
|
||||||
|
});
|
||||||
|
|
||||||
|
button._isConnected = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Update the button state when the settings change.
|
// Update the button state when the settings change.
|
||||||
const settingSignalHandler = () => {
|
const settingSignalHandler = () => {
|
||||||
const rgba = new Gdk.RGBA();
|
const rgba = new Gdk.RGBA();
|
||||||
rgba.parse(this._settings.get_string(settingsKey));
|
rgba.parse(this.getProfileSettings().get_string(settingsKey));
|
||||||
button.rgba = rgba;
|
button.rgba = rgba;
|
||||||
};
|
};
|
||||||
|
|
||||||
this._settings.connect('changed::' + settingsKey, settingSignalHandler);
|
this._connectProfileSetting('changed::' + settingsKey, settingSignalHandler);
|
||||||
|
|
||||||
// Initialize the button with the state in the settings.
|
// Initialize the button with the state in the settings.
|
||||||
settingSignalHandler();
|
settingSignalHandler();
|
||||||
@@ -537,20 +761,127 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
if (utils.isGTK4()) {
|
if (utils.isGTK4()) {
|
||||||
box.append(child);
|
box.append(child);
|
||||||
} else {
|
} else {
|
||||||
box.pack_start(child, false, false, 0);
|
box.pack_start(child, false, true, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- private stuff
|
// ----------------------------------------------------------------------- private stuff
|
||||||
|
|
||||||
|
// This loads all settings from the profile given in the settings key 'active-profile'.
|
||||||
|
_loadActiveProfile() {
|
||||||
|
|
||||||
|
// Disconnect any connection to the previously active profile.
|
||||||
|
this._disconnectProfileSettings();
|
||||||
|
|
||||||
|
// Find the active profile in the list of all profiles.
|
||||||
|
const allProfiles = this._profileManager.getProfiles();
|
||||||
|
const path = this._settings.get_string('active-profile');
|
||||||
|
this._activeProfile = allProfiles.find(p => p.path == path);
|
||||||
|
|
||||||
|
// If, for whatever reason, it is not found, select the first one. Setting the
|
||||||
|
// settings key will trigger this method again.
|
||||||
|
if (!this._activeProfile) {
|
||||||
|
this._activeProfile = allProfiles[0];
|
||||||
|
this._settings.set_string('active-profile', this._activeProfile.path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect all profile options.
|
||||||
|
const updateProfileButtonMenuIfChanged = (settingsKey) => {
|
||||||
|
this._connectProfileSetting('changed::' + settingsKey, () => {
|
||||||
|
this._updateProfileButton();
|
||||||
|
this._updateProfileMenu();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
updateProfileButtonMenuIfChanged('profile-app');
|
||||||
|
updateProfileButtonMenuIfChanged('profile-animation-type');
|
||||||
|
updateProfileButtonMenuIfChanged('profile-window-type');
|
||||||
|
updateProfileButtonMenuIfChanged('profile-color-scheme');
|
||||||
|
updateProfileButtonMenuIfChanged('profile-power-mode');
|
||||||
|
updateProfileButtonMenuIfChanged('profile-power-profile');
|
||||||
|
updateProfileButtonMenuIfChanged('profile-high-priority');
|
||||||
|
|
||||||
|
this.bindEntry('profile-app');
|
||||||
|
|
||||||
|
if (utils.isADW()) {
|
||||||
|
this.bindComboRow('profile-animation-type');
|
||||||
|
this.bindComboRow('profile-window-type');
|
||||||
|
this.bindComboRow('profile-color-scheme');
|
||||||
|
this.bindComboRow('profile-power-mode');
|
||||||
|
this.bindComboRow('profile-power-profile');
|
||||||
|
} else {
|
||||||
|
this.bindComboBox('profile-animation-type');
|
||||||
|
this.bindComboBox('profile-window-type');
|
||||||
|
this.bindComboBox('profile-color-scheme');
|
||||||
|
this.bindComboBox('profile-power-mode');
|
||||||
|
this.bindComboBox('profile-power-profile');
|
||||||
|
}
|
||||||
|
this.bindSwitch('profile-high-priority');
|
||||||
|
|
||||||
|
// Connect all effect settings.
|
||||||
|
this._ALL_EFFECTS.forEach(effect => {
|
||||||
|
const [minMajor, minMinor] = effect.getMinShellVersion();
|
||||||
|
if (utils.shellVersionIsAtLeast(minMajor, minMinor)) {
|
||||||
|
this.bindSwitch(`${effect.getNick()}-enable-effect`);
|
||||||
|
effect.bindPreferences(this);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update the label in the profile-select button.
|
||||||
|
this._updateProfileButton();
|
||||||
|
}
|
||||||
|
|
||||||
|
// This updates the label of the profile-selection button according to the currently
|
||||||
|
// active profile. It's called whenever the active profile is changed or whenever a
|
||||||
|
// configuration option of the profile is changed.
|
||||||
|
_updateProfileButton() {
|
||||||
|
this._builder.get_object('choose-profile-button').label =
|
||||||
|
this._profileManager.getProfileName(this.getProfileSettings());
|
||||||
|
}
|
||||||
|
|
||||||
|
// This updates the list of available profiles in the dropdown of the profile-selection
|
||||||
|
// button. It's called whenever one of the configuration option of the currently active
|
||||||
|
// profile is changed, or whenever a profile is added / removed.
|
||||||
|
_updateProfileMenu() {
|
||||||
|
|
||||||
|
// First, clear the menu section.
|
||||||
|
const profileSection = this._builder.get_object('profile-section');
|
||||||
|
profileSection.remove_all();
|
||||||
|
|
||||||
|
// Then add an entry for each available profile.
|
||||||
|
this._profileManager.getProfiles().forEach(profile => {
|
||||||
|
const label = this._profileManager.getProfileName(profile.settings);
|
||||||
|
const item = Gio.MenuItem.new(label, 'prefs.active-profile');
|
||||||
|
item.set_action_and_target_value('prefs.active-profile',
|
||||||
|
GLib.Variant.new_string(profile.path));
|
||||||
|
profileSection.append_item(item);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// This wrapper connects a given callback to a profile settings key. Use this instead of
|
||||||
|
// the direct connect() call on the profile settings to make sure that the callback is
|
||||||
|
// disconnected when the active profile changes.
|
||||||
|
_connectProfileSetting(key, callback) {
|
||||||
|
this._profileConnections.push(this.getProfileSettings().connect(key, callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is called whenever the currently edited effect profile changes. It unbinds all
|
||||||
|
// callbacks bound with the above method before.
|
||||||
|
_disconnectProfileSettings() {
|
||||||
|
this._profileConnections.forEach(c => this.getProfileSettings().disconnect(c));
|
||||||
|
this._profileConnections = [];
|
||||||
|
}
|
||||||
|
|
||||||
// Searches for a reset button for the given settings key and make it reset the settings
|
// Searches for a reset button for the given settings key and make it reset the settings
|
||||||
// key when clicked.
|
// key when clicked.
|
||||||
_bindResetButton(settingsKey) {
|
_bindResetButton(settingsKey) {
|
||||||
const resetButton = this._builder.get_object('reset-' + settingsKey);
|
const resetButton = this._builder.get_object('reset-' + settingsKey);
|
||||||
if (resetButton) {
|
if (resetButton && !resetButton._isConnected) {
|
||||||
resetButton.connect('clicked', () => {
|
resetButton.connect('clicked', () => {
|
||||||
this._settings.reset(settingsKey);
|
this.getProfileSettings().reset(settingsKey);
|
||||||
});
|
});
|
||||||
|
resetButton._isConnected = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,7 +891,10 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
const object = this._builder.get_object(settingsKey);
|
const object = this._builder.get_object(settingsKey);
|
||||||
|
|
||||||
if (object) {
|
if (object) {
|
||||||
this._settings.bind(settingsKey, object, property, Gio.SettingsBindFlags.DEFAULT);
|
// Unbind any previous binding (potentially to a previously edited profile).
|
||||||
|
Gio.Settings.unbind(object, property);
|
||||||
|
this.getProfileSettings().bind(settingsKey, object, property,
|
||||||
|
Gio.SettingsBindFlags.DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._bindResetButton(settingsKey);
|
this._bindResetButton(settingsKey);
|
||||||
@@ -589,8 +923,7 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
_previewEffect(effect) {
|
_previewEffect(effect) {
|
||||||
|
|
||||||
// Set the to-be-previewed effect.
|
// Set the to-be-previewed effect.
|
||||||
this.getSettings().set_string('open-preview-effect', effect.getNick());
|
this._settings.set_string('preview-effect', effect.getNick());
|
||||||
this.getSettings().set_string('close-preview-effect', effect.getNick());
|
|
||||||
|
|
||||||
// Make sure that the window.show() firther below "sees" this change.
|
// Make sure that the window.show() firther below "sees" this change.
|
||||||
Gio.Settings.sync();
|
Gio.Settings.sync();
|
||||||
@@ -641,34 +974,6 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
window.show_all();
|
window.show_all();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initializes template widgets used by the preferences dialog.
|
|
||||||
_registerCustomClasses() {
|
|
||||||
|
|
||||||
// If we are not using libadwaita, each effect page is based on a template widget.
|
|
||||||
// This template contains the title and the preview button.
|
|
||||||
if (!utils.isADW() && GObject.type_from_name('BurnMyWindowsEffectPage') == null) {
|
|
||||||
BurnMyWindowsEffectPage = GObject.registerClass(
|
|
||||||
{
|
|
||||||
GTypeName: 'BurnMyWindowsEffectPage',
|
|
||||||
Template: `resource:///ui/${utils.getUIDir()}/effectPage.ui`,
|
|
||||||
InternalChildren: ['label', 'button'],
|
|
||||||
},
|
|
||||||
class BurnMyWindowsEffectPage extends Gtk.Box { // ------------------------------
|
|
||||||
_init(effect, dialog) {
|
|
||||||
super._init();
|
|
||||||
|
|
||||||
// Set the effect's name as label.
|
|
||||||
this._label.label = effect.getLabel();
|
|
||||||
|
|
||||||
// Open the preview window once the preview button is clicked.
|
|
||||||
this._button.connect('clicked', () => {
|
|
||||||
dialog._previewEffect(effect);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is used for setting up the translations.
|
// This is used for setting up the translations.
|
||||||
@@ -684,3 +989,11 @@ function buildPrefsWidget() {
|
|||||||
var dialog = new PreferencesDialog();
|
var dialog = new PreferencesDialog();
|
||||||
return dialog.getWidget();
|
return dialog.getWidget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If using libadwaita, this method is called. In this case, the primary widget of the
|
||||||
|
// preferences dialog is an Adw.PreferencesPage, which we directly add to the window.
|
||||||
|
function fillPreferencesWindow(window) {
|
||||||
|
window.set_default_size(650, 750);
|
||||||
|
var dialog = new PreferencesDialog();
|
||||||
|
window.add(dialog.getWidget());
|
||||||
|
}
|
||||||
@@ -7,10 +7,6 @@
|
|||||||
{
|
{
|
||||||
"name": "Maxence Sebald",
|
"name": "Maxence Sebald",
|
||||||
"url": ""
|
"url": ""
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Dennis ten Hoove",
|
|
||||||
"url": "https://github.com/dennis1248"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"silver": [
|
"silver": [
|
||||||
@@ -18,10 +14,6 @@
|
|||||||
"name": "@danielheadbang",
|
"name": "@danielheadbang",
|
||||||
"url": "https://github.com/danielheadbang"
|
"url": "https://github.com/danielheadbang"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "@MRR-dev",
|
|
||||||
"url": "https://github.com/MRR-dev"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Jorge Castro",
|
"name": "Jorge Castro",
|
||||||
"url": "https://github.com/castrojo"
|
"url": "https://github.com/castrojo"
|
||||||
@@ -29,11 +21,27 @@
|
|||||||
],
|
],
|
||||||
"bronze": [
|
"bronze": [
|
||||||
{
|
{
|
||||||
"name": "Angel Brielez",
|
"name": "@SubOptimal",
|
||||||
"url": "https://github.com/AngelBrielez"
|
"url": "https://github.com/SubOptimal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@vlazic",
|
||||||
|
"url": "https://github.com/vlazic"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"past": [
|
"past": [
|
||||||
|
{
|
||||||
|
"name": "Dennis ten Hoove",
|
||||||
|
"url": "https://github.com/dennis1248"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@MRR-dev",
|
||||||
|
"url": "https://github.com/MRR-dev"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Angel Brielez",
|
||||||
|
"url": "https://github.com/AngelBrielez"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "@taconomix",
|
"name": "@taconomix",
|
||||||
"url": "https://github.com/taconomix"
|
"url": "https://github.com/taconomix"
|
||||||
|
|||||||
@@ -4,12 +4,12 @@
|
|||||||
[
|
[
|
||||||
"tcreeper.earth@gmail.com",
|
"tcreeper.earth@gmail.com",
|
||||||
"TCr3",
|
"TCr3",
|
||||||
24
|
23
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"muhaaliss@pm.me",
|
"muhaaliss@pm.me",
|
||||||
"Muha Aliss",
|
"Muha Aliss",
|
||||||
59
|
52
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -18,26 +18,30 @@
|
|||||||
[
|
[
|
||||||
"hazap@hotmail.com",
|
"hazap@hotmail.com",
|
||||||
"Moo",
|
"Moo",
|
||||||
50
|
43
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Portuguese (Brazil)": [
|
||||||
|
[
|
||||||
|
"mr-isaac@ig.com.br",
|
||||||
|
"Isaac Dias",
|
||||||
|
77
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"German": [
|
"German": [
|
||||||
[
|
|
||||||
"juri26@outlook.de",
|
|
||||||
"jagfwajgf",
|
|
||||||
1
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
"atalanttore@googlemail.com",
|
"atalanttore@googlemail.com",
|
||||||
"Ettore Atalan",
|
"Ettore Atalan",
|
||||||
2
|
1
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"code@simonschneegans.de",
|
"code@simonschneegans.de",
|
||||||
"Simon Schneegans",
|
"Simon Schneegans",
|
||||||
92
|
119
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -46,7 +50,7 @@
|
|||||||
[
|
[
|
||||||
"phlostically@mailinator.com",
|
"phlostically@mailinator.com",
|
||||||
"phlostically",
|
"phlostically",
|
||||||
81
|
72
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -57,25 +61,25 @@
|
|||||||
"\u041c\u0438\u0441\u0442\u0435\u0440 \u041f\u0435\u0440\u0435\u0432\u043e\u0434",
|
"\u041c\u0438\u0441\u0442\u0435\u0440 \u041f\u0435\u0440\u0435\u0432\u043e\u0434",
|
||||||
11
|
11
|
||||||
],
|
],
|
||||||
[
|
|
||||||
"lenemter@gmail.com",
|
|
||||||
"lenemter",
|
|
||||||
16
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
"ddaudix@gmail.com",
|
"ddaudix@gmail.com",
|
||||||
"Daudix UFO",
|
"Daudix UFO",
|
||||||
32
|
31
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"eg.ermakov2016@yandex.ru",
|
"eg.ermakov2016@yandex.ru",
|
||||||
"\u0415\u0433\u043e\u0440 \u0415\u0440\u043c\u0430\u043a\u043e\u0432",
|
"\u0415\u0433\u043e\u0440 \u0415\u0440\u043c\u0430\u043a\u043e\u0432",
|
||||||
39
|
33
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"franigoyt@gmail.com",
|
"franigoyt@gmail.com",
|
||||||
"ANIGO R. (AR)",
|
"ANIGO R. (AR)",
|
||||||
56
|
49
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"lenemter@gmail.com",
|
||||||
|
"lenemter",
|
||||||
|
50
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -84,16 +88,30 @@
|
|||||||
[
|
[
|
||||||
"softexpert@gmail.com",
|
"softexpert@gmail.com",
|
||||||
"SoftExpert",
|
"SoftExpert",
|
||||||
100
|
126
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Ukrainian": [
|
"Ukrainian": [
|
||||||
|
[
|
||||||
|
"911us@duck.com",
|
||||||
|
"Petro S.",
|
||||||
|
44
|
||||||
|
],
|
||||||
[
|
[
|
||||||
"yuridm@gmail.com",
|
"yuridm@gmail.com",
|
||||||
"\u042e\u0440\u0456\u0439 \u0414\u043c\u0438\u0442\u0440\u0435\u043d\u043a\u043e",
|
"\u042e\u0440\u0456\u0439 \u0414\u043c\u0438\u0442\u0440\u0435\u043d\u043a\u043e",
|
||||||
53
|
48
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Japanese": [
|
||||||
|
[
|
||||||
|
"ryuichi.ya220@gmail.com",
|
||||||
|
"Ryan Y",
|
||||||
|
79
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -112,7 +130,7 @@
|
|||||||
[
|
[
|
||||||
"jiri.doubravsky@gmail.com",
|
"jiri.doubravsky@gmail.com",
|
||||||
"Ji\u0159\u00ed Doubravsk\u00fd",
|
"Ji\u0159\u00ed Doubravsk\u00fd",
|
||||||
69
|
60
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -126,12 +144,21 @@
|
|||||||
[
|
[
|
||||||
"dyegoaurelio@gmail.com",
|
"dyegoaurelio@gmail.com",
|
||||||
"dyegoaurelio",
|
"dyegoaurelio",
|
||||||
12
|
8
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"pedro.hvn.2018@gmail.com",
|
"pedro.hvn.2018@gmail.com",
|
||||||
"KrulesExGamer",
|
"KrulesExGamer",
|
||||||
78
|
70
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Hungarian": [
|
||||||
|
[
|
||||||
|
"superh552@gmail.com",
|
||||||
|
"KinteLiX",
|
||||||
|
79
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -140,7 +167,7 @@
|
|||||||
[
|
[
|
||||||
"hvusvvnkl12345@gmail.com",
|
"hvusvvnkl12345@gmail.com",
|
||||||
"\u05d9\u05d4\u05d5\u05d3\u05d4 \u05d0\u05dc\u05d9\u05e1\u05e3",
|
"\u05d9\u05d4\u05d5\u05d3\u05d4 \u05d0\u05dc\u05d9\u05e1\u05e3",
|
||||||
38
|
37
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -149,12 +176,17 @@
|
|||||||
[
|
[
|
||||||
"sto@tutanota.de",
|
"sto@tutanota.de",
|
||||||
"WaldiS",
|
"WaldiS",
|
||||||
7
|
4
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"gnu.ewm@protonmail.com",
|
||||||
|
"gnu-ewm",
|
||||||
|
10
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"pwrzonca@gmail.com",
|
"pwrzonca@gmail.com",
|
||||||
"Pawe\u0142 Rzo\u0144ca",
|
"Pawe\u0142 Rzo\u0144ca",
|
||||||
85
|
77
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -168,12 +200,17 @@
|
|||||||
[
|
[
|
||||||
"albano_battistella@hotmail.com",
|
"albano_battistella@hotmail.com",
|
||||||
"albanobattistella",
|
"albanobattistella",
|
||||||
104
|
127
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Arabic": [
|
"Arabic": [
|
||||||
|
[
|
||||||
|
"hamzah.abusamak@gmail.com",
|
||||||
|
"bonbonboi",
|
||||||
|
5
|
||||||
|
],
|
||||||
[
|
[
|
||||||
"dabsantamer@yahoo.com",
|
"dabsantamer@yahoo.com",
|
||||||
"tamer dab",
|
"tamer dab",
|
||||||
@@ -182,17 +219,12 @@
|
|||||||
[
|
[
|
||||||
"yamen.malik2@gmail.com",
|
"yamen.malik2@gmail.com",
|
||||||
"Yamen Malik",
|
"Yamen Malik",
|
||||||
8
|
7
|
||||||
],
|
|
||||||
[
|
|
||||||
"hamzah.abusamak@gmail.com",
|
|
||||||
"bonbonboi",
|
|
||||||
8
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"fawaz27000@hotmail.com",
|
"fawaz27000@hotmail.com",
|
||||||
"fawaz006",
|
"fawaz006",
|
||||||
76
|
68
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -201,7 +233,7 @@
|
|||||||
[
|
[
|
||||||
"xxmn77@gmail.com",
|
"xxmn77@gmail.com",
|
||||||
"X\u0259yyam Qocayev",
|
"X\u0259yyam Qocayev",
|
||||||
76
|
67
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -210,7 +242,7 @@
|
|||||||
[
|
[
|
||||||
"randompsyduck@duck.com",
|
"randompsyduck@duck.com",
|
||||||
"Sir-Ivysaur",
|
"Sir-Ivysaur",
|
||||||
87
|
75
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -224,7 +256,7 @@
|
|||||||
[
|
[
|
||||||
"vistausss@fastmail.com",
|
"vistausss@fastmail.com",
|
||||||
"Heimen Stoffels",
|
"Heimen Stoffels",
|
||||||
104
|
127
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -235,15 +267,10 @@
|
|||||||
"Jorge C",
|
"Jorge C",
|
||||||
5
|
5
|
||||||
],
|
],
|
||||||
[
|
|
||||||
"dev.n47os@aleeas.com",
|
|
||||||
"Ulices",
|
|
||||||
6
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
"fitojb@ubuntu.com",
|
"fitojb@ubuntu.com",
|
||||||
"Adolfo Jayme Barrientos",
|
"Adolfo Jayme Barrientos",
|
||||||
9
|
7
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"andres.segarra.aparicio@gmail.com",
|
"andres.segarra.aparicio@gmail.com",
|
||||||
@@ -253,12 +280,17 @@
|
|||||||
[
|
[
|
||||||
"fran-carro@hotmail.es",
|
"fran-carro@hotmail.es",
|
||||||
"gallegonovato",
|
"gallegonovato",
|
||||||
16
|
14
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"dev.n47os@aleeas.com",
|
||||||
|
"Ulices",
|
||||||
|
40
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"oscfdezdz@tuta.io",
|
"oscfdezdz@tuta.io",
|
||||||
"\u00d3scar Fern\u00e1ndez D\u00edaz",
|
"\u00d3scar Fern\u00e1ndez D\u00edaz",
|
||||||
69
|
60
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -267,32 +299,32 @@
|
|||||||
[
|
[
|
||||||
"matshot03@gmail.com",
|
"matshot03@gmail.com",
|
||||||
"Mathis Chabrier",
|
"Mathis Chabrier",
|
||||||
4
|
2
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"redxxiii@zaclys.net",
|
"redxxiii@zaclys.net",
|
||||||
"Reda",
|
"Reda",
|
||||||
13
|
10
|
||||||
],
|
|
||||||
[
|
|
||||||
"softexpert@gmail.com",
|
|
||||||
"SoftExpert",
|
|
||||||
16
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"mathieu.bousquet2@gmail.com",
|
|
||||||
"Mathieu B.",
|
|
||||||
28
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"theo.remon+weblate@uswery.eu",
|
"theo.remon+weblate@uswery.eu",
|
||||||
"Th\u00e9o Remon",
|
"Th\u00e9o Remon",
|
||||||
30
|
22
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"mathieu.bousquet2@gmail.com",
|
||||||
|
"Mathieu B.",
|
||||||
|
26
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"bonnemainsnathan@gmail.com",
|
"bonnemainsnathan@gmail.com",
|
||||||
"Nathan",
|
"Nathan",
|
||||||
42
|
38
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"softexpert@gmail.com",
|
||||||
|
"SoftExpert",
|
||||||
|
52
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -306,12 +338,12 @@
|
|||||||
[
|
[
|
||||||
"droidbittin@gmail.com",
|
"droidbittin@gmail.com",
|
||||||
"Luna Jernberg",
|
"Luna Jernberg",
|
||||||
10
|
9
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"swedishsailfishosuser@tutanota.com",
|
"swedishsailfishosuser@tutanota.com",
|
||||||
"Kristoffer Grundstr\u00f6m",
|
"Kristoffer Grundstr\u00f6m",
|
||||||
55
|
48
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -320,7 +352,7 @@
|
|||||||
[
|
[
|
||||||
"eshagh094@gmail.com",
|
"eshagh094@gmail.com",
|
||||||
"Eshagh shahidani",
|
"Eshagh shahidani",
|
||||||
72
|
65
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -329,7 +361,7 @@
|
|||||||
[
|
[
|
||||||
"jiri.gronroos@iki.fi",
|
"jiri.gronroos@iki.fi",
|
||||||
"Jiri Gr\u00f6nroos",
|
"Jiri Gr\u00f6nroos",
|
||||||
54
|
47
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -338,7 +370,7 @@
|
|||||||
[
|
[
|
||||||
"darkcircle.0426@gmail.com",
|
"darkcircle.0426@gmail.com",
|
||||||
"Seong-ho Cho",
|
"Seong-ho Cho",
|
||||||
74
|
92
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -347,7 +379,7 @@
|
|||||||
[
|
[
|
||||||
"jose1711@gmail.com",
|
"jose1711@gmail.com",
|
||||||
"Jose Riha",
|
"Jose Riha",
|
||||||
82
|
73
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -358,25 +390,20 @@
|
|||||||
"Celeste Liu",
|
"Celeste Liu",
|
||||||
3
|
3
|
||||||
],
|
],
|
||||||
[
|
|
||||||
"ourmicroid@outlook.com",
|
|
||||||
"joe",
|
|
||||||
4
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
"lyuutau@outlook.com",
|
"lyuutau@outlook.com",
|
||||||
"\u5218\u97ec",
|
"\u5218\u97ec",
|
||||||
35
|
34
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"poonsters6@gmail.com",
|
"poonsters6@gmail.com",
|
||||||
"merelymyself",
|
"merelymyself",
|
||||||
39
|
38
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"aerowolf@tom.com",
|
"aerowolf@tom.com",
|
||||||
"aerowolf",
|
"aerowolf",
|
||||||
49
|
42
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -390,7 +417,7 @@
|
|||||||
[
|
[
|
||||||
"epost@anotheragency.no",
|
"epost@anotheragency.no",
|
||||||
"Allan Nordh\u00f8y",
|
"Allan Nordh\u00f8y",
|
||||||
47
|
44
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
/*
|
|
||||||
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
|
||||||
SPDX-License-Identifier: CC0-1.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
.pill-button {
|
|
||||||
border-radius: 9999px;
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
row {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.effect-row {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.effect-row-header,
|
||||||
|
.effect-row list {
|
||||||
|
padding: 8px;
|
||||||
|
border: 0 solid @borders;
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.revealer-arrow {
|
||||||
|
margin-right: 6px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* These are only used if not using libadwaita */
|
||||||
|
|
||||||
|
.effect-row {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.effect-row-header,
|
||||||
|
.effect-row list {
|
||||||
|
padding: 8px;
|
||||||
|
border: 0 solid @borders;
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.revealer-arrow {
|
||||||
|
margin-right: 6px;
|
||||||
|
transition: transform 250ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.revealer-arrow.revealed {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="16"
|
||||||
|
height="16"
|
||||||
|
version="1.1"
|
||||||
|
id="svg859"
|
||||||
|
sodipodi:docname="bmw-copy-effects-symbolic.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs863" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview861"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:zoom="39.949625"
|
||||||
|
inkscape:cx="3.1915194"
|
||||||
|
inkscape:cy="6.7334801"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1163"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg859">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid963" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<g
|
||||||
|
fill="#222222"
|
||||||
|
id="g951"
|
||||||
|
transform="rotate(-90,8.5,8.5)">
|
||||||
|
<path
|
||||||
|
id="path949"
|
||||||
|
d="M 11,5 H 10 C 9.742188,5 9.472656,5.128906 9.28125,5.3125 L 9,5.59375 V 0 H 7 V 5.59375 L 6.71875,5.3125 C 6.527344,5.128906 6.257812,5 6,5 H 5 V 6 C 5,6 5.089844,6.550781 5.28125,6.75 L 8,9.40625 10.71875,6.75 C 10.910156,6.550781 11,6.308594 11,6 Z m 0,0 M 6,2 H 3 C 2,2 2,3 2,3 v 10 c 0,0 0,1 1,1 h 11 c 1,0 1,-1 1,-1 v -3 c 0.14,0 0.28,0 0.41,-0.03 C 16.32,9.78 17,8.97 17,8 17,6.9 16.1,6 15,6 V 3 C 15,2 14,2 14,2 h -4 v 2 h 3 v 1 h -1 v 6 h 1 v 1 H 4 V 4 H 6 Z M 16,8 C 16,8.41 15.73,8.75 15.38,8.91 15.26,8.96 15.14,9 15,9 14.45,9 14,8.55 14,8 c 0,-0.55 0.45,-1 1,-1 0.55,0 1,0.45 1,1 z" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 11.574219 0.402344 l -2.574219 2.597656 l 3.984375 4.074219 l 2.648437 -2.671875 c 0.484376 -0.484375 0.425782 -1.515625 0 -1.941406 l -2.058593 -2.058594 c -0.4375 -0.4375002 -1.441407 -0.554688 -2 0 z m -3.574219 3.597656 l -8 8 v 4 h 4.058594 l 7.925781 -7.925781 z m 0 0" fill="#222222"/></svg>
|
||||||
|
After Width: | Height: | Size: 436 B |
@@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="16"
|
||||||
|
height="16"
|
||||||
|
version="1.1"
|
||||||
|
id="svg859"
|
||||||
|
sodipodi:docname="bmw-paste-effects-symbolic.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs863" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview861"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:zoom="30.619781"
|
||||||
|
inkscape:cx="14.02688"
|
||||||
|
inkscape:cy="7.5114841"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1163"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg859">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid963" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<g
|
||||||
|
fill="#222222"
|
||||||
|
id="g951"
|
||||||
|
transform="rotate(-90,11.5,5.5)">
|
||||||
|
<path
|
||||||
|
id="path949"
|
||||||
|
d="M 11,5 H 10 C 9.742188,5 9.472656,5.128906 9.28125,5.3125 L 9,5.59375 V 1 H 7 V 5.59375 L 6.71875,5.3125 C 6.527344,5.128906 6.257812,5 6,5 H 5 V 6 C 5,6 5.089844,6.550781 5.28125,6.75 L 8,9.40625 10.71875,6.75 C 10.910156,6.550781 11,6.308594 11,6 Z M 16,2 C 16,2.41 15.73,2.75 15.38,2.91 15.26,2.96 15.14,3 15,3 14.45,3 14,2.55 14,2 c 0,-0.55 0.45,-1 1,-1 0.55,0 1,0.45 1,1 z m -3,-4 v 1 h -1 v 6 h 1 v 1 h -1 c 0,1 0,1 -1,2 h 3 c 1,0 1,-1 1,-1 V 4 C 15.14,4 15.28,4 15.41,3.97 16.32,3.78 17,2.97 17,2 17,0.9 16.1,0 15,0 V -3 C 15,-4 14,-4 14,-4 9.9636199,-4 6.886735,-4 3,-4 2,-4 2,-3 2,-3 V 7 C 2,7 2,8 3,8 H 5.048681 C 4,7 4,7 4,6 v -8 c 3.0556612,0 6.334851,0 9,0 z" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
height="16px"
|
||||||
|
viewBox="0 0 16 16"
|
||||||
|
width="16px"
|
||||||
|
version="1.1"
|
||||||
|
id="svg880"
|
||||||
|
sodipodi:docname="bmw-select-app-symbolic.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs884" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview882"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:zoom="57.412587"
|
||||||
|
inkscape:cx="8.0905604"
|
||||||
|
inkscape:cy="8.0992692"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1163"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg880">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid975" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<path
|
||||||
|
d="m 7,11 v 5 h 2 v -5 m 2,-2 h 5 V 7 H 11 M 9,5 V 0 H 7 V 5 M 5.0431967,7 H 0 v 2 h 4.9715524"
|
||||||
|
fill="#222222"
|
||||||
|
id="path878"
|
||||||
|
sodipodi:nodetypes="cccccccccccccccc" />
|
||||||
|
<path
|
||||||
|
id="path966"
|
||||||
|
d="M 14.708984 10 L 12.580078 10 C 12.074974 11.149358 11.149798 12.075226 10 12.580078 L 10 14.707031 C 12.252335 14.032781 14.034893 12.252099 14.708984 10 z " />
|
||||||
|
<path
|
||||||
|
id="path2645"
|
||||||
|
d="M 10 1.2929688 L 10 3.4199219 C 11.149798 3.9247737 12.074974 4.8506419 12.580078 6 L 14.708984 6 C 14.034893 3.7479009 12.252335 1.9672199 10 1.2929688 z " />
|
||||||
|
<path
|
||||||
|
id="path2107"
|
||||||
|
d="M 3.421875 10 L 1.2910156 10 C 1.965107 12.252099 3.7476652 14.032781 6 14.707031 L 6 12.580078 C 4.8504712 12.075345 3.9270579 11.148985 3.421875 10 z " />
|
||||||
|
<path
|
||||||
|
id="path2456"
|
||||||
|
d="M 6 1.2929688 C 3.7476652 1.9672199 1.965107 3.7479009 1.2910156 6 L 3.421875 6 C 3.9270579 4.8510155 4.8504712 3.9246556 6 3.4199219 L 6 1.2929688 z " />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,13 @@
|
|||||||
|
<!--
|
||||||
|
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
|
-->
|
||||||
|
|
||||||
|
<node>
|
||||||
|
<interface name="org.gnome.shell.extensions.BurnMyWindows">
|
||||||
|
<method name="PickWindow" />
|
||||||
|
<signal name="WindowPicked">
|
||||||
|
<arg name="window" type="s" />
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
</node>
|
||||||
@@ -31,7 +31,7 @@ void main() {
|
|||||||
float progress = uForOpening ? 1.0 - uProgress : uProgress;
|
float progress = uForOpening ? 1.0 - uProgress : uProgress;
|
||||||
|
|
||||||
// Draw the individual shard layers.
|
// Draw the individual shard layers.
|
||||||
for (float i = 0; i < SHARD_LAYERS; ++i) {
|
for (float i = 0.0; i < SHARD_LAYERS; ++i) {
|
||||||
|
|
||||||
// To enable drawing shards outside of the window bounds, the actor was scaled
|
// To enable drawing shards outside of the window bounds, the actor was scaled
|
||||||
// by ACTOR_SCALE. Here we scale and move the texture coordinates so that the
|
// by ACTOR_SCALE. Here we scale and move the texture coordinates so that the
|
||||||
@@ -51,8 +51,8 @@ void main() {
|
|||||||
|
|
||||||
// Move down each layer a bit.
|
// Move down each layer a bit.
|
||||||
float gravity =
|
float gravity =
|
||||||
(uForOpening ? -1.0 : 1.0) * uGravity * 0.1 * (i + 1) * progress * progress;
|
(uForOpening ? -1.0 : 1.0) * uGravity * 0.1 * (i + 1.0) * progress * progress;
|
||||||
coords += vec2(0, gravity);
|
coords += vec2(0.0, gravity);
|
||||||
|
|
||||||
// Restore correct position.
|
// Restore correct position.
|
||||||
coords += uEpicenter;
|
coords += uEpicenter;
|
||||||
@@ -66,10 +66,10 @@ void main() {
|
|||||||
// the bin of the current shard.
|
// the bin of the current shard.
|
||||||
float shardGroup = floor(shardMap.g * SHARD_LAYERS * 0.999);
|
float shardGroup = floor(shardMap.g * SHARD_LAYERS * 0.999);
|
||||||
|
|
||||||
if (shardGroup == i && (shardMap.x - pow(progress + 0.1, 2)) > 0.0) {
|
if (shardGroup == i && (shardMap.x - pow(progress + 0.1, 2.0)) > 0.0) {
|
||||||
oColor = getInputColor(coords);
|
oColor = getInputColor(coords);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setOutputColor(oColor);
|
setOutputColor(oColor);
|
||||||
}
|
}
|
||||||
|
|||||||