diff --git a/.clang-format b/.clang-format index 7e68b37..07cf790 100644 --- a/.clang-format +++ b/.clang-format @@ -1,4 +1,6 @@ BasedOnStyle: Google AlignConsecutiveAssignments: true +AlignAfterOpenBracket: Align +ContinuationIndentWidth: 2 KeepEmptyLinesAtTheStartOfBlocks: true ColumnLimit: 90 \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index e101616..77d9834 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -6,7 +6,7 @@ open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username 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 -liberapay: # Replace with a single Liberapay username +liberapay: # Schneegans issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: ['https://www.paypal.com/donate/?hosted_button_id=3F7UFL8KLVPXE'] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 85b8528..b849c90 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -17,14 +17,13 @@ Steps to reproduce the behavior: 4. See error You may also check the output of GNOME Shell for any error messages. -This can be done with the following terminal command: +This can be done with the following terminal command. +Execute this in a terminal and observe the output while reproducing the bug. +```bash journalctl -f -o cat | grep -E 'burn-my-windows|' ``` -## Expected Behavior -A clear and concise description of what you expected to happen. - ## System _Please complete the following information:_ - Linux distribution [e.g. Ubuntu 21.04] diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index fcd10c7..425a5a3 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,16 +1,14 @@ --- -name: Feature Request +name: General Feature Request about: Suggest an idea for the Burn-My-Windows Extension. title: '' -labels: enhancement +labels: 'feature request' assignees: '' --- -## The Motivation -A clear and concise description of use-case. - -## The Solution -A clear and concise description of what you want to happen. +## The Idea +A clear and concise description of your idea. +If applicable, feel free to add screenshots or mock-ups to illustrate your idea! ## The Alternatives -A clear and concise description of any alternative solutions or features you've considered. +Are there alternative solutions or features you've considered? diff --git a/.github/ISSUE_TEMPLATE/new_effect.md b/.github/ISSUE_TEMPLATE/new_effect.md new file mode 100644 index 0000000..15fbfb9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new_effect.md @@ -0,0 +1,17 @@ +--- +name: New Effect +about: Suggest a new effect for the Burn-My-Windows Extension. +title: '' +labels: 'new effect' +assignees: '' +--- + +## The Idea +Please describe your idea as detailed as possible. +It would be great if you could add a drawing or any other kind of mock-up to illustrate your idea! + +## Window Closing vs. Window Opening +Make sure to describe how the effect could be reversed, so how should a window disappear and how should it appear. + +## References +It would be great if you could provide some video references (e.g. YouTube links) if your idea is based on something which - for example - exists in movies. \ No newline at end of file diff --git a/.github/workflows/badges.yml b/.github/workflows/badges.yml new file mode 100644 index 0000000..7a43da6 --- /dev/null +++ b/.github/workflows/badges.yml @@ -0,0 +1,40 @@ +name: Badges + +on: + push: + branches: + - main + +jobs: + update-badges: + name: Update Badges + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + - name: Download cloc + run: sudo apt-get update -y && sudo apt-get install -y cloc + - name: Get the Numbers + run: | + echo "CODE_LINES=$(scripts/cloc.sh --loc)" >> $GITHUB_ENV + echo "COMMENT_LINES=$(scripts/cloc.sh --percentage)%" >> $GITHUB_ENV + - name: Create Lines-of-Code-Badge + uses: schneegans/dynamic-badges-action@v1.2.0 + with: + auth: ${{ secrets.GIST_SECRET }} + gistID: 8cf45f23253ff09b21196e7271378762 + filename: loc.json + label: Lines of Code + message: ${{ env.CODE_LINES }} + color: lightgrey + labelColor: 303030 + - name: Create Comments-Badge + uses: schneegans/dynamic-badges-action@v1.2.0 + with: + auth: ${{ secrets.GIST_SECRET }} + gistID: 8cf45f23253ff09b21196e7271378762 + filename: comments.json + label: Comments + message: ${{ env.COMMENT_LINES }} + color: green + labelColor: 303030 diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 022a327..71d9e76 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -76,7 +76,35 @@ jobs: ( contains(github.ref, 'main') && !contains(github.event.head_commit.message, '[no-ci]') ) || ( contains(github.ref, 'develop') && !contains(github.event.head_commit.message, '[no-ci]') ) || contains(github.event.head_commit.message, '[run-ci]') + strategy: + fail-fast: false + matrix: + version: + - '32' + - '33' + - '34' + - '35' + - '36' + session: + - 'gnome-xsession' + - 'gnome-wayland-nested' steps: - uses: actions/checkout@v2 + - name: Download Dependencies + run: | + sudo apt update -qq + sudo apt install gettext -qq - name: Build Burn-My-Windows run: make + - name: Test Burn-My-Windows + run: sudo $GITHUB_WORKSPACE/tests/run-test.sh -v ${{ matrix.version }} -s ${{ matrix.session }} + - uses: actions/upload-artifact@v2 + if: failure() + with: + name: log_${{ matrix.version }}_${{ matrix.session }} + path: fail.log + - uses: actions/upload-artifact@v2 + if: failure() + with: + name: screen_${{ matrix.version }}_${{ matrix.session }} + path: fail.png \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 3e1a74e..044375b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,7 +6,7 @@ on: - '**' jobs: - source_code: + extension_bundle: name: Extension Bundle runs-on: ubuntu-latest steps: @@ -20,10 +20,9 @@ jobs: run: | make zip - name: Upload Release - uses: svenstaro/upload-release-action@v1-release + uses: svenstaro/upload-release-action@2.2.1 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: burn-my-windows@schneegans.github.com.zip - asset_name: burn-my-windows@schneegans.github.com.zip tag: ${{ github.ref }} overwrite: true diff --git a/.gitignore b/.gitignore index 77585ec..11da693 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ *.blend1 *.blend2 *.blend3 +/locale /schemas/gschemas.compiled /resources/burn-my-windows.gresource /resources/burn-my-windows.gresource.xml \ No newline at end of file diff --git a/Makefile b/Makefile index 6dc34d4..4931975 100644 --- a/Makefile +++ b/Makefile @@ -1,51 +1,111 @@ SHELL := /bin/bash -JS_FILES = $(shell find -type f -and \( -name "*.js" \)) +# We define these here to make the makefile easier to port to another extension. +NAME := burn-my-windows +DOMAIN := schneegans.github.com +ZIP_NAME := $(NAME)@$(DOMAIN).zip + +# Some of the recipes below depend on some of these files. +JS_FILES = $(shell find -type f -and \( -name "*.js" \)) +UI_FILES = $(shell find -type f -and \( -name "*.ui" \)) RESOURCE_FILES = $(shell find resources -mindepth 2 -type f) +LOCALES_PO = $(wildcard po/*.po) +LOCALES_MO = $(patsubst po/%.po,locale/%/LC_MESSAGES/$(NAME).mo,$(LOCALES_PO)) -.PHONY: zip install uninstall clean +# These files will be included in the extension zip file. +ZIP_CONTENT = $(JS_FILES) $(LOCALES_MO) resources/$(NAME).gresource \ + schemas/gschemas.compiled metadata.json LICENSE -zip: burn-my-windows@schneegans.github.com.zip +# These seven recipes can be invoked by the user. +.PHONY: zip install uninstall pot clean test references -install: burn-my-windows@schneegans.github.com.zip - gnome-extensions install "burn-my-windows@schneegans.github.com.zip" --force +# The zip recipes only bundles the extension without installing it. +zip: $(ZIP_NAME) + +# The install recipes creates the extension zip and installs it. +install: $(ZIP_NAME) + gnome-extensions install "$(ZIP_NAME)" --force @echo "Extension installed successfully! Now restart the Shell ('Alt'+'F2', then 'r')." +# This uninstalls the previously installed extension. uninstall: - gnome-extensions uninstall "burn-my-windows@schneegans.github.com" + gnome-extensions uninstall "$(NAME)@$(DOMAIN)" +# Use gettext to generate a translation template file. +pot: $(JS_FILES) $(UI_FILES) + @echo "Generating '$(NAME).pot'..." + @xgettext --from-code=UTF-8 \ + --add-comments=Translators \ + --copyright-holder="Simon Schneegans" \ + --package-name="$(NAME)" \ + --output=po/$(NAME).pot \ + $(JS_FILES) $(UI_FILES) + +# This runs several tests in containerized versions of GNOME Shell. +test: + @ for version in 32 33 34 35 36 ; do \ + for session in "gnome-xsession" "gnome-wayland-nested" ; do \ + echo ; \ + echo "Running Tests on Fedora $$version ($$session)." ; \ + echo ; \ + ./tests/run-test.sh -s $$session -v $$version ; \ + done \ + done + +# This re-generates all reference images required by the tests. +references: + @ for version in 32 33 34 35 36 ; do \ + for session in "gnome-xsession" "gnome-wayland-nested" ; do \ + echo ; \ + echo "Generating References for Fedora $$version ($$session)." ; \ + echo ; \ + ./tests/generate-references.sh -s $$session -v $$version ; \ + done \ + done + +# This removes all temporary files created with the other recipes. clean: - rm -rf \ - burn-my-windows@schneegans.github.com.zip \ - resources/burn-my-windows.gresource \ - resources/burn-my-windows.gresource.xml \ - schemas/gschemas.compiled + rm -rf $(ZIP_NAME) \ + resources/$(NAME).gresource \ + resources/$(NAME).gresource.xml \ + schemas/gschemas.compiled \ + locale -burn-my-windows@schneegans.github.com.zip: schemas/gschemas.compiled resources/burn-my-windows.gresource $(JS_FILES) - @# Check if the VERSION variable was passed and set version to it - @if [[ "$(VERSION)" != "" ]]; then \ - sed -i "s| \"version\":.*| \"version\": $(VERSION)|g" metadata.json; \ - fi - @# TODO Maybe echo version number of the release that was built, in order to facilitate double-checking before publishing it? - +# This bundles the extension and checks whether it is small enough to be uploaded to +# extensions.gnome.org. We do not use "gnome-extensions pack" for this, as this is not +# readily available on the GitHub runners. +$(ZIP_NAME): $(ZIP_CONTENT) @echo "Packing zip file..." - @rm --force burn-my-windows@schneegans.github.com.zip - @zip -r burn-my-windows@schneegans.github.com.zip -- *.js src/*.js resources/burn-my-windows.gresource schemas/gschemas.compiled metadata.json LICENSE - + @rm --force $(ZIP_NAME) + @zip $(ZIP_NAME) -- $(ZIP_CONTENT) + @#Check if the zip size is too big to be uploaded - @if [[ "$$(stat -c %s burn-my-windows@schneegans.github.com.zip)" -gt 4096000 ]]; then \ - echo "ERROR! The extension is too big to be uploaded to the extensions website, keep it smaller than 4096 KB!"; exit 1; \ - fi + @SIZE=$$(unzip -Zt $(ZIP_NAME) | awk '{print $$3}') ; \ + if [[ $$SIZE -gt 5242880 ]]; then \ + echo "ERROR! The extension is too big to be uploaded to" \ + "the extensions website, keep it smaller than 5 MB!"; \ + exit 1; \ + fi -resources/burn-my-windows.gresource: resources/burn-my-windows.gresource.xml +# Compiles the gschemas.compiled file from the gschema.xml file. +schemas/gschemas.compiled: schemas/org.gnome.shell.extensions.$(NAME).gschema.xml + @echo "Compiling schemas..." + @glib-compile-schemas schemas + +# Compiles the gresource file from the gresources.xml. +resources/$(NAME).gresource: resources/$(NAME).gresource.xml @echo "Compiling resources..." - @glib-compile-resources --sourcedir="resources" --generate resources/burn-my-windows.gresource.xml + @glib-compile-resources --sourcedir="resources" --generate resources/$(NAME).gresource.xml -resources/burn-my-windows.gresource.xml: $(RESOURCE_FILES) +# Generates the gresources.xml based on all files in the resources subdirectory. +resources/$(NAME).gresource.xml: $(RESOURCE_FILES) @echo "Creating resources xml..." @FILES=$$(find "resources" -mindepth 2 -type f -printf "%P\n" | xargs -i echo "{}") ; \ - echo " $$FILES " > resources/burn-my-windows.gresource.xml + echo " $$FILES " \ + > resources/$(NAME).gresource.xml -schemas/gschemas.compiled: schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml - @echo "Compiling schemas..." - @glib-compile-schemas schemas \ No newline at end of file +# Compiles all *.po files to *.mo files. +locale/%/LC_MESSAGES/$(NAME).mo: po/%.po + @echo "Compiling $@" + @mkdir -p locale/$*/LC_MESSAGES + @msgfmt -c -o $@ $< diff --git a/README.md b/README.md index 34dad0d..64d1be4 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,17 @@ -# 🔥 Set GNOME Shell on Fire! +

+ +

+

🔥 Set GNOME Shell on Fire!

+ +

+
- + + + +

When I released the [Desktop Cube Extension](https://github.com/Schneegans/Desktop-Cube/), 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)! @@ -25,7 +34,7 @@ Effect | Preview ## 💞 These People _love_ this Extension -While coding new features is the most awesome way to contribute, providing financial support will help me stay motivated to invest my spare time to keep the project alive in the future. +While [coding new features](docs/how-to-create-new-effects.md) or [translating the extension](https://hosted.weblate.org/engage/burn-my-windows/) are the most awesome ways to contribute, providing financial support will help me stay motivated to invest my spare time to keep the project alive in the future.

🥇 Current Gold Sponsors

@@ -34,17 +43,20 @@ While coding new features is the most awesome way to contribute, providing finan

🥈 Current Silver Sponsors

+ tj3k
@MRR-dev
Jorge Castro

🥉 Current Bronze Sponsors

- Be the first! + @danielheadbang

🏅 Previous Sponsors and One-Time Donators

+ @MrTomRod
+ Pouhiou
DAPREMONT Christophe
@manero6
@RickStanley
@@ -116,7 +128,7 @@ gnome-extensions enable burn-my-windows@schneegans.github.com ## :octocat: I want to contribute! That's great! -Most likely, you want to [create a new effect](docs/how-to-create-new-effects.md)? +Most likely, you want to [create a new effect](docs/how-to-create-new-effects.md) or to [translate the extension](https://hosted.weblate.org/engage/burn-my-windows/)? Here are some basic rules to get you started: Commits should start with a Capital letter and should be written in present tense (e.g. __:tada: Add cool new feature__ instead of __:tada: Added cool new feature__). You should also start your commit message with **one** applicable emoji. diff --git a/assets/bmw10.svg b/assets/bmw10.svg new file mode 100644 index 0000000..d648b8f --- /dev/null +++ b/assets/bmw10.svg @@ -0,0 +1,3795 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Burn-My-Windows 10adds a new effect:BROKEN GLASS diff --git a/assets/teaser.svg b/assets/teaser.svg new file mode 100644 index 0000000..779ce28 --- /dev/null +++ b/assets/teaser.svg @@ -0,0 +1,54986 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/changelog.md b/docs/changelog.md index a8bd78d..195ffc5 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,18 +1,94 @@ # Changelog of the Burn-My-Windows Extension -## [Burn My Window 10](https://github.com/schneegans/Burn-My-Windows/releases/tag/v10) +## [Burn My Window 14](https://github.com/schneegans/Burn-My-Windows/releases/tag/v14) -**Release Date:** TBD +**Release Date:** 2022-03-29 + +#### Enhancements + +* Reduced the lower animation time limits for all effects to 100 ms. This should now allow for very snappy animations! +* A completely new Russian translation. Thank you, ANIGO R.! + +#### Bug Fixes + +* Fixed the version check for GNOME Shell `42.rc` (before it only worked on `42.alpha` and `42.beta`) + + +## [Burn My Window 13](https://github.com/schneegans/Burn-My-Windows/releases/tag/v13) + +**Release Date:** 2022-03-27 + +#### Enhancements + +* The continuous integration tests have been significantly enhanced. Now, all window-open and window-close animations are visually tested on all supported GNOME versions and on X11 / Wayland (summing up to a total of 136 test cases). +* Many translation updates, including a completely new Turkish and Chinese translation. A BIG THANKS to all translators! + +#### Other Changes + +* Removed the Liberapay donation option as it does not work properly. + +#### Bug Fixes + +* Fixed the version check for GNOME Shell 42. + +## [Burn My Window 12](https://github.com/schneegans/Burn-My-Windows/releases/tag/v12) + +**Release Date:** 2022-02-19 #### New Features +* Added initial support for GNOME Shell 42. +* The preferences dialog now uses libadwaita on GNOME Shell 42. + +#### Enhancements + +* Added [Liberapay](https://liberapay.com/Schneegans) to the sponsorship options. + +## [Burn My Window 11](https://github.com/schneegans/Burn-My-Windows/releases/tag/v11) + +**Release Date:** 2022-02-03 + +#### New Features + +* Added an about-dialog which shows all translators and sponsors. + +#### Enhancements + +* There are several new translations! Thanks a lot to all the translators! We now have translations for: + * German + * English + * Czech + * Dutch + * French + * Italian + * Norwegian Bokmål + * Spanish +* A new issue template for suggesting new effects has been added. + +#### Fixes + +* Fixed an issue which caused corrupted windows when trying to maximize windows while the window-open animation was still running (#82, #86, #91). + +## [Burn My Window 10](https://github.com/schneegans/Burn-My-Windows/releases/tag/v10) + +**Release Date:** 2022-01-31 + +#### New Features + + + +* **Effects for Window Opening.** You can now select effects which are applied on newly opened windows! I expect that there are some bugs left, so please [report any issue you find](https://github.com/Schneegans/Burn-My-Windows/issues)! * **New Effect: Broken Glass.** Shatter your windows into a shower sharp shards! This effect can be configured so that the shards fly away from your mouse pointer position! -* The effect-configuration pages of the preferences dialog now have **Preview Buttons** which con be used to, well, preview the current settings (without having to enable the effect first). +* **Preview Buttons** have been added to the effect-configuration pages of the preferences dialog. These can be used to, well, preview the current settings (without having to enable the effect first). +* **Translations!** It is now possible to [translate the preferences dialog](https://hosted.weblate.org/engage/burn-my-windows/). There is already a finished German translation, and in-progress translations to Italian and Norwegian Bokmål. +* **A "Vertical Overshooting" option** was added to the Matrix Effect: This can add some vertical variation to the start and end position of the letter drops. #### Other Enhancements * Added a menu entry with a link to the guide for creating new effect types. -* Added a new option to the Matrix Effect: **Vertical Overshooting**: This can add some vertical variation to the start and end position of the letter drops. +* Thanks to improved timing, the default animation time of several effects could be reduced. +* The README now shows the current lines of code and the current comment percentage using my [dynamic-badges-action](https://github.com/Schneegans/dynamic-badges-action). +* **Add advanced CI tests:** For each commit to `main`, it is now tested whether the extension can be installed and if the preferences dialog can be shown on GNOME Shell 3.36, 3.38, 40, and 41. Both, X11 and Wayland are checked. ## [Burn My Window 9](https://github.com/schneegans/Burn-My-Windows/releases/tag/v9) diff --git a/docs/how-to-create-new-effects.md b/docs/how-to-create-new-effects.md index c1a14f5..7392f69 100644 --- a/docs/how-to-create-new-effects.md +++ b/docs/how-to-create-new-effects.md @@ -34,14 +34,14 @@ Of course, you can replace any occurrence of this name and its nick `simple-fade Three simple steps are required to create a new effect. You will have to ... -1. add a preferences key for enabling the effect, +1. add preferences keys for enabling the effect, 2. create an additional effects class, and finally 3. register the new effect in two places. ### 1. Expanding the Schema -For enabling the new effect, the boolean settings key `simple-fade-close-effect` is required. -In this example, we also add an integer valued settings key for storing the animation time of the new effect and a floating point value for storing another property of the effect - we will use them later in the tutorial. +For enabling the new effect, the boolean settings keys `simple-fade-open-effect`, `simple-fade-close-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. 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 remember to replace `simple-fade` with your custom name! @@ -56,6 +56,12 @@ Just remember to replace `simple-fade` with your custom name! Use the Simple Fade effect for window closing. + + false +

Simple Fade Open Effect + Use the Simple Fade effect for window opening. + + 1500 Simple Fade Animation Time @@ -146,16 +152,26 @@ var SimpleFade = class SimpleFade { // ---------------------------------------------------------------- API for extension.js // This is called from extension.js whenever a window is closed with this effect. - static createShader(actor, settings) { - return new Shader(settings); + static createShader(actor, settings, forOpening) { + return new Shader(settings, forOpening); } - // This is also called from extension.js. It is used to tweak the ongoing transition of - // the actor - usually windows are faded to transparency and scaled down slightly by - // GNOME Shell. For each property, you can set a "from", "to", and a "mode". For this - // effect, windows should neither be scaled nor faded. - static getCloseTransition(actor, settings) { - return {'opacity': {to: 255}, 'scale-x': {to: 1.0}, 'scale-y': {to: 1.0}}; + // The tweakTransition() is called from extension.js to tweak a window's open / close + // transitions - usually windows are faded in / out and scaled up / down by GNOME Shell. + // The parameter 'forOpening' is set to true if this is called for a window-open + // transition, for a window-close transition it is set to false. The modes can be set to + // any value from here: https://gjs-docs.gnome.org/clutter8~8_api/clutter.animationmode. + // The only required property is 'opacity', even if it transitions from 1.0 to 1.0. The + // current value of the opacity transition is passed as uProgress to the shader. + // Tweaking the actor's scale during the transition only works properly for GNOME 3.38+. + + // For this effect, windows should neither be scaled nor faded. + static tweakTransition(actor, settings, forOpening) { + return { + 'opacity': {from: 255, to: 255, mode: 4}, + 'scale-x': {from: 1.0, to: 1.0, mode: 4}, + 'scale-y': {from: 1.0, to: 1.0, mode: 4} + }; } } @@ -172,7 +188,7 @@ if (utils.isInShellProcess()) { const shaderSnippets = Me.imports.src.shaderSnippets; Shader = GObject.registerClass({}, class Shader extends Clutter.ShaderEffect { - _init(settings) { + _init(settings, forOpening) { super._init({shader_type: Clutter.ShaderType.FRAGMENT_SHADER}); this.set_shader_source(` @@ -197,8 +213,10 @@ if (utils.isInShellProcess()) { // Radial distance from window edge to the window's center. float dist = length(cogl_tex_coord_in[0].st - 0.5) * 2.0 / sqrt(2.0); - // This gradually dissolves from [1..0] from the outside to the center. - float mask = (1.0 - uProgress * (1.0 + FADE_WIDTH) - dist + FADE_WIDTH) / FADE_WIDTH; + // This gradually dissolves from [1..0] from the outside to the center. We + // switch the direction for opening and closing. + float progress = ${forOpening ? '1.0 - uProgress' : 'uProgress'}; + float mask = (1.0 - progress * (1.0 + FADE_WIDTH) - dist + FADE_WIDTH) / FADE_WIDTH; // Make the mask smoother. mask = smoothstep(0, 1, mask); @@ -324,7 +342,7 @@ Remember to replace any occurrence of `simple-fade` with your effect's nick-name 1 - Reset to Default Value + Reset to Default Value @@ -372,7 +390,7 @@ Remember to replace any occurrence of `simple-fade` with your effect's nick-name 1 - Reset to Default Value + Reset to Default Value @@ -457,7 +475,7 @@ Remember to replace any occurrence of `simple-fade` with your effect's nick-name edit-clear-symbolic - Reset to Default Value + Reset to Default Value @@ -496,7 +514,7 @@ Remember to replace any occurrence of `simple-fade` with your effect's nick-name edit-clear-symbolic - Reset to Default Value + Reset to Default Value diff --git a/docs/pics/bmw10.jpg b/docs/pics/bmw10.jpg new file mode 100644 index 0000000..21fae0b Binary files /dev/null and b/docs/pics/bmw10.jpg differ diff --git a/docs/pics/teaser.jpg b/docs/pics/teaser.jpg new file mode 100644 index 0000000..4110690 Binary files /dev/null and b/docs/pics/teaser.jpg differ diff --git a/extension.js b/extension.js index e9dd32a..76e366b 100644 --- a/extension.js +++ b/extension.js @@ -15,6 +15,7 @@ const {Clutter, Gio, Meta} = imports.gi; +const Main = imports.ui.main; const Workspace = imports.ui.workspace.Workspace; const WindowManager = imports.ui.windowManager.WindowManager; @@ -44,13 +45,12 @@ const ALL_EFFECTS = [ ]; ////////////////////////////////////////////////////////////////////////////////////////// -// This extensions modifies the window-close animation to look like the window was set // -// on fire. There are also a few other effects available. All of them are implemented // -// using GLSL shaders which are applied to the window's Clutter.Actor. The extension is // -// actually very simple, most of the complexity comes from the fact that GNOME Shell // -// usually does not show an animation when a window is closed in the overview. Several // -// methods need to be monkey-patched to get this working. For more details, read the // -// other comments in this file... // +// This extensions modifies the window-close and window-open animations with all kinds // +// of effects. The effects are implemented using GLSL shaders which are applied to the // +// window's Clutter.Actor. The extension is actually very simple, much of the // +// complexity comes from the fact that GNOME Shell usually does not show an animation // +// when a window is closed in the overview. Several methods need to be monkey-patched // +// to get this working. For more details, read the other comments in this file... // ////////////////////////////////////////////////////////////////////////////////////////// class Extension { @@ -68,70 +68,193 @@ class Extension { // Store a reference to the settings object. this._settings = ExtensionUtils.getSettings(); - // This will store an item of ALL_EFFECTS which was used the last time a window was - // closed. - this._effect = 0; + // This will store an item of ALL_EFFECTS array which was used the last time a window + // was opened / closed. + this._currentEffect = 0; - // We will monkey-patch these three methods. Let's store the original ones. - this._origWindowRemoved = Workspace.prototype._windowRemoved; - this._origDoRemoveWindow = Workspace.prototype._doRemoveWindow; - this._origAddWindowClone = Workspace.prototype._addWindowClone; - this._origShouldAnimateActor = WindowManager.prototype._shouldAnimateActor; + // We will use extensionThis to refer to the extension inside the patched methods. + const extensionThis = this; + + // We will monkey-patch these methods. Let's store the original ones. + this._origAddWindowClone = Workspace.prototype._addWindowClone; + this._origWindowRemoved = Workspace.prototype._windowRemoved; + this._origDoRemoveWindow = Workspace.prototype._doRemoveWindow; + this._origShouldAnimateActor = WindowManager.prototype._shouldAnimateActor; + this._origWaitForOverviewToHide = WindowManager.prototype._waitForOverviewToHide; // We will also override these animation times. this._origWindowTime = imports.ui.windowManager.DESTROY_WINDOW_ANIMATION_TIME; this._origDialogTime = imports.ui.windowManager.DIALOG_DESTROY_WINDOW_ANIMATION_TIME; - // Reset the dialog destroy time if the corresponding setting gets disabled. - this._settings.connect('changed::destroy-dialogs', () => { - if (!this._settings.get_boolean('destroy-dialogs')) { - imports.ui.windowManager.DIALOG_DESTROY_WINDOW_ANIMATION_TIME = - this._origDialogTime; + + // ------------------------------------------------ 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: + // https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1449 + // AFAIK, overriding this method is not possible as it's called by a signal to + // which it is bound via the bind() method. To tweak the async transition + // anyways, we override the actors ease() method once - the next time it will be + // called by the _mapWindow(), we will intercept it! + this._windowCreatedConnection = + global.display.connect('window-created', (d, metaWin) => { + let actor = metaWin.get_compositor_private(); + + const orig = actor.ease; + actor.ease = function(...params) { + orig.apply(actor, params); + actor.ease = orig; + + // There are cases where the ease() is called prior to mapping the actor. If + // the actor is not yet mapped, we defer the effect creation. + if (actor.mapped) { + extensionThis._setupEffect(actor, true); + } else { + const connectionID = actor.connect('notify::mapped', () => { + extensionThis._setupEffect(actor, true); + actor.disconnect(connectionID); + }); + } + }; + }); + + // 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 + // of the actor. However, if we are in the overview, we have to enlarge the clone of + // the window as well. + Workspace.prototype._addWindowClone = function(...params) { + const result = extensionThis._origAddWindowClone.apply(this, params); + + // The parameters of this method changed a bit through the versions... + let realWindow, clone; + + if (utils.shellVersionIs(3, 36)) { + clone = result[0]; + realWindow = clone.realWindow; + } else if (utils.shellVersionIs(3, 38)) { + clone = result._windowContainer; + realWindow = params[0].get_compositor_private(); + } else { + clone = result.window_container; + realWindow = params[0].get_compositor_private(); } + + // Syncing the real window's scale with the scale of its clone only works on GNOME + // Shell 3.38+. So effects cannot scale windows in the overview of GNOME 3.36... + if (utils.shellVersionIsAtLeast(3, 38)) { + const xID = realWindow.connect('notify::scale-x', () => { + if (realWindow.scale_x > 0 && clone.allocation.get_size()[0] > 0) { + clone.scale_x = realWindow.scale_x; + } + }); + + const yID = realWindow.connect('notify::scale-y', () => { + if (realWindow.scale_y > 0 && clone.allocation.get_size()[1] > 0) { + clone.scale_y = realWindow.scale_y; + } + }); + + clone.connect('destroy', () => { + realWindow.disconnect(xID); + realWindow.disconnect(yID); + }); + } + + // 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 + // but not _doRemoveWindow. The latter is required to trigger the repositioning of + // 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/main/js/ui/workspace.js#L1415 + if (utils.shellVersionIs(3, 36)) { + clone.connect('destroy', () => this._doRemoveWindow(clone.metaWindow)); + } + + return result; + }; + + // Usually, windows are faded in after the overview is completely hidden. We enable + // window-open animations by not waiting for this. + WindowManager.prototype._waitForOverviewToHide = async function() { + 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#L1125 + 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 is 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#L1549 + // 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); }); - // We will use extensionThis to refer to the extension inside the patched methods of - // the WorkspacesView. - const extensionThis = this; + // 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 + // actually faded out. To do this, _windowRemoved and _doRemoveWindow now check + // 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 _destroyWindow of the WindowManager sets the transitions up and should take + // care of removing the actors at the end of the transitions. + // https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1299 + Workspace.prototype._windowRemoved = function(ws, metaWin) { + if (extensionThis._shouldDestroy(this, metaWin)) { + extensionThis._origWindowRemoved.apply(this, [ws, metaWin]); + } + }; - // This class is only available in GNOME Shell 3.38+. So no transition tweaking in - // GNOME Shell 3.36, but this is not used by any effect available there anyways for - // now... + // https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1178 + Workspace.prototype._doRemoveWindow = function(metaWin) { + if (extensionThis._shouldDestroy(this, metaWin)) { + extensionThis._origDoRemoveWindow.apply(this, [metaWin]); + } + }; + + // With the code below, we hide the window-overlay (icon, label, close button) in the + // overview once the close-animation is running. As the WindowPreview class is only + // available on GNOME 3.38 and beyond, we cannot hide the overlay on GNOME 3.36. if (WindowPreview) { + + // We will monkey-patch these methods. this._origDeleteAll = WindowPreview.prototype._deleteAll; this._origRestack = WindowPreview.prototype._restack; this._origInit = WindowPreview.prototype._init; - // This is required, else WindowPreview's _restack() which is called by the - // "this.overlayEnabled = false", sometimes tries to access an already delete - // WindowPreview. - WindowPreview.prototype._restack = function() { - if (!this._closeRequested) { - // Call the original method. - extensionThis._origRestack.apply(this); - } - }; - - // When a window is removed from the overview, we need adjust the transitions of the - // window clone according to the chosen effect. We do this in the 'unmanaged' signal - // of the WindowPreview's Meta.Window. This is not ideal, as it does not work for - // dialogs which close themselves... Maybe there's a better way? + // Whenever a WindowPreview is created, we connect to the referenced Meta.Window's + // 'unmanaged' signal to hide the overlay. WindowPreview.prototype._init = function(...params) { - // Call the original method. extensionThis._origInit.apply(this, params); - // When the user clicks the X in the overview, the window is not deleted - // immediately. However, as soon as the window is really deleted, we need to - // adjust the transition of its clone. + // Hide the window's icon, name, and close button. const connectionID = this.metaWindow.connect('unmanaged', () => { if (this.window_container) { - // Hide the window's icon, name, and close button. this.overlayEnabled = false; this._icon.visible = false; - - const transitionConfig = extensionThis._effect.getCloseTransition( - this.window_container, extensionThis._settings); - extensionThis._tweakTransitions(this.window_container, transitionConfig); } }); @@ -150,149 +273,16 @@ class Extension { extensionThis._origDeleteAll.apply(this); } }; - } - // 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 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/main/js/ui/workspace.js#L1415 - if (utils.shellVersionIs(3, 36)) { - Workspace.prototype._addWindowClone = function(...params) { - const [clone, overlay] = extensionThis._origAddWindowClone.apply(this, params); - clone.connect('destroy', () => this._doRemoveWindow(clone.metaWindow)); - return [clone, overlay]; + // This is required, else WindowPreview's _restack() which is called by the + // "this.overlayEnabled = false", sometimes tries to access an already delete + // WindowPreview. + WindowPreview.prototype._restack = function() { + if (!this._closeRequested) { + extensionThis._origRestack.apply(this); + } }; } - - // These three method overrides are mega-hacky! They are only required to make the - // fire animation work in the overview. Usually, windows are not faded when 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 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 - // _destroyWindow of the WindowManager sets the transitions up and should take care of - // removing the actors at the end of the transitions. - // https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1299 - Workspace.prototype._windowRemoved = function(ws, metaWin) { - if (extensionThis._shouldDestroy(this, metaWin)) { - extensionThis._origWindowRemoved.apply(this, [ws, metaWin]); - } - }; - - // https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1178 - Workspace.prototype._doRemoveWindow = function(metaWin) { - if (extensionThis._shouldDestroy(this, metaWin)) { - extensionThis._origDoRemoveWindow.apply(this, [metaWin]); - } - }; - - // Here comes the ULTRA-HACK: The method below is called (amongst others) by the - // _destroyWindow method of the WindowManager. Usually, it returns false when we are - // in the overview. This prevents the window-close animation. As we cannot - // monkey-patch the _destroyWindow method itself, we check inside the method below - // whether it was called by _destroyWindow. 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#L1125 - WindowManager.prototype._shouldAnimateActor = function(...params) { - if ((new Error()).stack.split('\n')[1].includes('_destroyWindow@')) { - return true; - } - return extensionThis._origShouldAnimateActor.apply(this, params); - }; - - // The close animation is set up in WindowManager's _destroyWindow: - // https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1549 - // 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) => { - // The _destroyWindow method of WindowManager, which was called right before this - // one, set up the window close animation. This usually fades-out the window and - // scales it a bit down. If no transition is in progress, something unexpected - // happened. We rather try not to burn the window! - const transition = actor.get_transition('scale-y'); - if (!transition) { - return; - } - - // We do nothing if a dialog got closed and we should not burn them. - const shouldDestroyDialogs = this._settings.get_boolean('destroy-dialogs'); - const isDialogWindow = - actor.meta_window.window_type == Meta.WindowType.MODAL_DIALOG || - actor.meta_window.window_type == Meta.WindowType.DIALOG; - - // If an effect is to be previewed, we have to affect dialogs es well. This is - // because the preview window is a dialog window... - const previewNick = this._settings.get_string('close-preview-effect'); - - if (isDialogWindow && !shouldDestroyDialogs && previewNick == '') { - return; - } - - // Now we have to choose an effect. - this._effect = null; - - // First we check if an effect is to be previewed. - if (previewNick != '') { - this._effect = ALL_EFFECTS.find(Effect => { - return Effect.getNick() == previewNick; - }); - - // Only preview the effect once. - this._settings.set_string('close-preview-effect', ''); - - } else { - - // Else we choose a random effect from all enabled effects. Therefore, we first - // create a list of all currently enabled effects. - const enabled = ALL_EFFECTS.filter(Effect => { - return this._settings.get_boolean(`${Effect.getNick()}-close-effect`); - }); - - // And then choose a random effect. - if (enabled.length > 0) { - this._effect = enabled[Math.floor(Math.random() * enabled.length)]; - } - } - - // If nothing was enabled, we have to do nothing :) - if (this._effect == null) { - return; - } - - // The effect usually will choose to override the present transitions on the actor. - const transitionConfig = this._effect.getCloseTransition(actor, this._settings); - this._tweakTransitions(actor, transitionConfig); - - // Add a cool shader to our window actor! - const shader = this._effect.createShader(actor, this._settings); - - if (shader) { - actor.add_effect(shader); - - // Update uniforms at each frame. - transition.connect('new-frame', (t) => { - shader.set_uniform_value('uProgress', t.get_progress()); - shader.set_uniform_value('uTime', 0.001 * t.get_elapsed_time()); - shader.set_uniform_value('uSizeX', actor.width); - shader.set_uniform_value('uSizeY', actor.height); - }); - } - - // 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... - const duration = transition.get_duration(); - if (isDialogWindow && shouldDestroyDialogs) { - imports.ui.windowManager.DIALOG_DESTROY_WINDOW_ANIMATION_TIME = duration; - } else { - imports.ui.windowManager.DESTROY_WINDOW_ANIMATION_TIME = duration; - } - }); } // This function could be called after the extension is uninstalled, disabled in GNOME @@ -302,13 +292,15 @@ class Extension { // Unregister our resources. Gio.resources_unregister(this._resources); - // Restore the original behavior. + // Restore the original window-open and window-close animations. global.window_manager.disconnect(this._destroyConnection); + global.display.disconnect(this._windowCreatedConnection); - Workspace.prototype._windowRemoved = this._origWindowRemoved; - Workspace.prototype._doRemoveWindow = this._origDoRemoveWindow; - Workspace.prototype._addWindowClone = this._origAddWindowClone; - WindowManager.prototype._shouldAnimateActor = this._origShouldAnimateActor; + Workspace.prototype._addWindowClone = this._origAddWindowClone; + Workspace.prototype._windowRemoved = this._origWindowRemoved; + Workspace.prototype._doRemoveWindow = this._origDoRemoveWindow; + WindowManager.prototype._shouldAnimateActor = this._origShouldAnimateActor; + WindowManager.prototype._waitForOverviewToHide = this._origWaitForOverviewToHide; imports.ui.windowManager.DESTROY_WINDOW_ANIMATION_TIME = this._origWindowTime; imports.ui.windowManager.DIALOG_DESTROY_WINDOW_ANIMATION_TIME = this._origDialogTime; @@ -324,6 +316,190 @@ class Extension { // ----------------------------------------------------------------------- private stuff + // This method adds one of the configured effects to the given actor. If forOpening is + // set to true, a effect from the enabled window-open animations is chosen, else an + // enabled window-close animation is used. This will also tweak the transitions of the + // given actor (e.g. scale it up if required). + _setupEffect(actor, forOpening) { + + // Only add effects to normal windows and dialog windows. + const isNormalWindow = actor.meta_window.window_type == Meta.WindowType.NORMAL; + const isDialogWindow = + actor.meta_window.window_type == Meta.WindowType.MODAL_DIALOG || + actor.meta_window.window_type == Meta.WindowType.DIALOG; + + if (!isNormalWindow && !isDialogWindow) { + return; + } + + // We do nothing if a dialog got closed and we should not burn them. + const shouldDestroyDialogs = this._settings.get_boolean('destroy-dialogs'); + + // If an effect is to be previewed however, we have to affect dialogs es well. This is + // because the preview window is a dialog window... + const action = forOpening ? 'open' : 'close'; + const previewNick = this._settings.get_string(action + '-preview-effect'); + + if (isDialogWindow && !shouldDestroyDialogs && previewNick == '') { + this._fixAnimationTimes(isDialogWindow, forOpening, null); + return; + } + + // ------------------------------------------------------------------ choose an effect + + // Now we chose a random effect from all enabled effects. + this._currentEffect = null; + + // First we check if an effect is to be previewed. + if (previewNick != '') { + this._currentEffect = ALL_EFFECTS.find(Effect => { + return 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 = ALL_EFFECTS.filter(Effect => { + return this._settings.get_boolean(`${Effect.getNick()}-${action}-effect`); + }); + + // And then choose a random effect. + if (enabled.length > 0) { + this._currentEffect = enabled[Math.floor(Math.random() * enabled.length)]; + } + } + + // If nothing was enabled, we have to do nothing :) + if (this._currentEffect == null) { + this._fixAnimationTimes(isDialogWindow, forOpening, null); + return; + } + + // ----------------------------------------------------------- tweak actor transitions + + // 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. + const testMode = this._settings.get_boolean('test-mode'); + + // The following is used to tweak the ongoing transitions of a window actor. Usually + // windows are faded in / out scaled up / down slightly by GNOME Shell. Here, we allow + // modifications to this behavior by the effects. + const config = this._currentEffect.tweakTransition(actor, this._settings, forOpening); + const duration = testMode ? + 5000 : + this._settings.get_int(this._currentEffect.getNick() + '-animation-time'); + + // All animations are relative to the window's center. + actor.set_pivot_point(0.5, 0.5); + + // This goes through all properties given in the config object and tweaks any ongoing + // transitions accordingly. If there is no ongoing transition for a given property, a + // new one is set up. + 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) { + const middle = (config[property].to + config[property].from) / 2; + transition.set_duration(duration); + transition.set_to(testMode ? middle : config[property].to); + transition.set_from(testMode ? middle : config[property].from); + transition.set_progress_mode(config[property].mode); + } + } + + // 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 = this._currentEffect.createShader(actor, this._settings, forOpening); + + if (shader) { + // 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; + } + + // First remove any old effect. + actor.remove_effect_by_name(`burn-my-windows-effect`); + actor.add_effect_with_name(`burn-my-windows-effect`, shader); + + // Update uniforms at each frame. + transition.connect('new-frame', (t) => { + shader.set_uniform_value('uProgress', testMode ? 0.5 : t.get_progress()); + shader.set_uniform_value('uTime', + testMode ? duration / 2 : 0.001 * t.get_elapsed_time()); + shader.set_uniform_value('uSizeX', actor.width); + shader.set_uniform_value('uSizeY', actor.height); + }); + + // Remove the effect if the animation finished or was interrupted. + if (forOpening) { + transition.connect('stopped', () => { + actor.remove_effect_by_name(`burn-my-windows-effect`); + }); + } + } + + // 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 // for Workspace.prototype._windowRemoved above for an explanation. _shouldDestroy(workspace, metaWindow) { @@ -341,42 +517,6 @@ class Extension { return false; } - - // This is used to tweak the ongoing transitions of a window actor. This is either the - // actual actor of the Meta.Window or a clone in the overview. Usually windows are faded - // to transparency and scaled down slightly by GNOME Shell. Here, we allow modifications - // to this behavior by the effects. - _tweakTransitions(actor, config) { - const duration = this._settings.get_int(this._effect.getNick() + '-animation-time'); - - for (const property in config) { - const from = config[property].from; - const to = config[property].to; - const mode = config[property].mode; - - const transition = actor.get_transition(property); - - if (transition) { - transition.set_duration(duration); - - if (to != undefined) transition.set_to(to); - if (from != undefined) transition.set_from(from); - if (mode != undefined) transition.set_progress_mode(mode); - - } else { - - if (from != undefined) actor[property] = from; - - if (to != undefined) { - actor.save_easing_state(); - actor.set_easing_duration(duration) - if (mode != undefined) actor.set_easing_mode(mode); - actor[property] = to; - actor.restore_easing_state(); - } - } - } - } } // This function is called once when the extension is loaded, not enabled. diff --git a/metadata.json b/metadata.json index 565736f..64e63e3 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "uuid": "burn-my-windows@schneegans.github.com", - "description": "Disintegrate your apps with style.", + "description": "Disintegrate your windows with style.", "name": "Burn My Windows", "gettext-domain": "burn-my-windows", "settings-schema": "org.gnome.shell.extensions.burn-my-windows", @@ -8,8 +8,9 @@ "3.36", "3.38", "40", - "41" + "41", + "42" ], "url": "https://github.com/Schneegans/Burn-My-Windows", - "version": 10 + "version": 15 } \ No newline at end of file diff --git a/po/burn-my-windows.pot b/po/burn-my-windows.pot new file mode 100644 index 0000000..7695442 --- /dev/null +++ b/po/burn-my-windows.pot @@ -0,0 +1,297 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Simon Schneegans +# This file is distributed under the same license as the Burn-My-Windows package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Burn-My-Windows\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-02-18 20:33+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: prefs.js:111 +msgid "Effect Options" +msgstr "" + +#: prefs.js:139 +msgid "Go Back" +msgstr "" + +#: prefs.js:181 +msgid "General Options" +msgstr "" + +#: prefs.js:276 +msgid "Gold Sponsors" +msgstr "" + +#: prefs.js:279 +msgid "Silver Sponsors" +msgstr "" + +#: prefs.js:282 +msgid "Bronze Sponsors" +msgstr "" + +#: prefs.js:285 +msgid "Past Sponsors" +msgstr "" + +#. Translators: %s will be replaced by the effect's name. +#: prefs.js:512 +#, javascript-format +msgid "Preview for %s" +msgstr "" + +#: prefs.js:534 +msgid "Close this Window to Preview the Effect!" +msgstr "" + +#: src/BrokenGlass.js:57 +msgid "Broken Glass" +msgstr "" + +#: src/TVEffect.js:56 +msgid "TV Effect" +msgstr "" + +#: src/TRexAttack.js:56 +msgid "T-Rex Attack" +msgstr "" + +#: src/Wisps.js:55 +msgid "Wisps" +msgstr "" + +#: src/Fire.js:58 +msgid "Fire" +msgstr "" + +#: src/Fire.js:130 +msgid "Default Fire" +msgstr "" + +#: src/Fire.js:140 +msgid "Hell Fire" +msgstr "" + +#: src/Fire.js:150 +msgid "Dark and Smutty" +msgstr "" + +#: src/Fire.js:160 +msgid "Cold Breeze" +msgstr "" + +#: src/Fire.js:170 +msgid "Santa is Coming" +msgstr "" + +#: src/EnergizeA.js:54 +msgid "Energize A" +msgstr "" + +#: src/EnergizeB.js:54 +msgid "Energize B" +msgstr "" + +#: src/Matrix.js:58 +msgid "Matrix" +msgstr "" + +#: resources/ui/common/main-menu.ui:6 +msgid "Visit Homepage" +msgstr "" + +#: resources/ui/common/main-menu.ui:10 +msgid "View Changelog" +msgstr "" + +#: resources/ui/common/main-menu.ui:16 +msgid "Report a Bug" +msgstr "" + +#: resources/ui/common/main-menu.ui:20 +msgid "Create an Effect" +msgstr "" + +#: resources/ui/common/main-menu.ui:24 +msgid "Translate" +msgstr "" + +#: resources/ui/common/main-menu.ui:28 +msgid "Donate" +msgstr "" + +#: resources/ui/common/main-menu.ui:45 +msgid "About Burn-My-Windows" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:24 resources/ui/gtk4/BrokenGlass.ui:24 +#: resources/ui/gtk4/Wisps.ui:24 resources/ui/gtk4/Fire.ui:49 +#: resources/ui/gtk4/TRexAttack.ui:24 resources/ui/gtk4/TVEffect.ui:24 +#: resources/ui/gtk4/EnergizeA.ui:24 resources/ui/gtk4/EnergizeB.ui:24 +#: resources/ui/gtk3/Wisps.ui:42 resources/ui/gtk3/Fire.ui:93 +#: resources/ui/gtk3/TVEffect.ui:35 resources/ui/gtk3/EnergizeA.ui:42 +#: resources/ui/gtk3/EnergizeB.ui:42 +msgid "Animation Time [ms]" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:52 resources/ui/gtk4/Matrix.ui:98 +#: resources/ui/gtk4/Matrix.ui:144 resources/ui/gtk4/Matrix.ui:190 +#: resources/ui/gtk4/Matrix.ui:224 resources/ui/gtk4/Matrix.ui:258 +#: resources/ui/gtk4/BrokenGlass.ui:52 resources/ui/gtk4/BrokenGlass.ui:98 +#: resources/ui/gtk4/BrokenGlass.ui:144 resources/ui/gtk4/BrokenGlass.ui:190 +#: resources/ui/gtk4/BrokenGlass.ui:244 resources/ui/gtk4/Wisps.ui:52 +#: resources/ui/gtk4/Wisps.ui:98 resources/ui/gtk4/Wisps.ui:132 +#: resources/ui/gtk4/Fire.ui:77 resources/ui/gtk4/Fire.ui:123 +#: resources/ui/gtk4/Fire.ui:169 resources/ui/gtk4/Fire.ui:222 +#: resources/ui/gtk4/Fire.ui:280 resources/ui/gtk4/TRexAttack.ui:52 +#: resources/ui/gtk4/TRexAttack.ui:98 resources/ui/gtk4/TRexAttack.ui:144 +#: resources/ui/gtk4/TRexAttack.ui:190 resources/ui/gtk4/TRexAttack.ui:224 +#: resources/ui/gtk4/TVEffect.ui:52 resources/ui/gtk4/TVEffect.ui:86 +#: resources/ui/gtk4/EnergizeA.ui:52 resources/ui/gtk4/EnergizeA.ui:98 +#: resources/ui/gtk4/EnergizeA.ui:132 resources/ui/gtk4/EnergizeB.ui:52 +#: resources/ui/gtk4/EnergizeB.ui:98 resources/ui/gtk4/EnergizeB.ui:132 +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/Wisps.ui:68 +#: resources/ui/gtk3/Wisps.ui:117 resources/ui/gtk3/Wisps.ui:160 +#: resources/ui/gtk3/Fire.ui:119 resources/ui/gtk3/Fire.ui:167 +#: resources/ui/gtk3/Fire.ui:215 resources/ui/gtk3/Fire.ui:277 +#: resources/ui/gtk3/Fire.ui:345 resources/ui/gtk3/TVEffect.ui:61 +#: resources/ui/gtk3/TVEffect.ui:104 resources/ui/gtk3/EnergizeA.ui:68 +#: resources/ui/gtk3/EnergizeA.ui:117 resources/ui/gtk3/EnergizeA.ui:160 +#: resources/ui/gtk3/EnergizeB.ui:68 resources/ui/gtk3/EnergizeB.ui:117 +#: resources/ui/gtk3/EnergizeB.ui:160 resources/ui/gtk3/prefs.ui:219 +msgid "Reset to Default Value" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:70 resources/ui/gtk4/BrokenGlass.ui:70 +#: resources/ui/gtk4/Wisps.ui:70 resources/ui/gtk4/Fire.ui:95 +#: resources/ui/gtk4/EnergizeA.ui:70 resources/ui/gtk4/EnergizeB.ui:70 +#: resources/ui/gtk3/Wisps.ui:91 resources/ui/gtk3/Fire.ui:141 +#: resources/ui/gtk3/EnergizeA.ui:91 resources/ui/gtk3/EnergizeB.ui:91 +msgid "Scale" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:116 +msgid "Randomness" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:162 +msgid "Vertical Overshooting" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:208 +msgid "Trail Color" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:242 +msgid "Tip Color" +msgstr "" + +#: resources/ui/gtk4/BrokenGlass.ui:116 +msgid "Gravity" +msgstr "" + +#: resources/ui/gtk4/BrokenGlass.ui:162 +msgid "Blow Force" +msgstr "" + +#: resources/ui/gtk4/BrokenGlass.ui:212 +msgid "Shatter From Pointer Location" +msgstr "" + +#: resources/ui/gtk4/BrokenGlass.ui:221 +msgid "" +"The shards will fly away from where your mouse pointer was when closing the " +"window." +msgstr "" + +#: resources/ui/gtk4/Wisps.ui:116 resources/ui/gtk4/TVEffect.ui:70 +#: resources/ui/gtk4/EnergizeA.ui:116 resources/ui/gtk4/EnergizeB.ui:116 +#: resources/ui/gtk3/Wisps.ui:139 resources/ui/gtk3/TVEffect.ui:83 +#: resources/ui/gtk3/EnergizeA.ui:139 resources/ui/gtk3/EnergizeB.ui:139 +msgid "Color" +msgstr "" + +#: resources/ui/gtk4/Fire.ui:25 resources/ui/gtk3/Fire.ui:49 +msgid "Presets" +msgstr "" + +#: resources/ui/gtk4/Fire.ui:141 resources/ui/gtk3/Fire.ui:189 +msgid "Speed" +msgstr "" + +#: resources/ui/gtk4/Fire.ui:191 resources/ui/gtk3/Fire.ui:241 +msgid "3D Noise" +msgstr "" + +#: resources/ui/gtk4/Fire.ui:200 resources/ui/gtk3/Fire.ui:250 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "" + +#: resources/ui/gtk4/Fire.ui:240 resources/ui/gtk3/Fire.ui:300 +msgid "Gradient" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:70 +msgid "Claw Scratch Scale" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:116 +msgid "Claw Scratch Count" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:162 +msgid "Warp Effect" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:208 +msgid "Flash Color" +msgstr "" + +#: resources/ui/gtk4/effectPage.ui:37 resources/ui/gtk3/effectPage.ui:37 +msgid "Preview this Effect" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:28 resources/ui/gtk3/prefs.ui:35 +msgid "Welcome to Burn-My-Windows!" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:39 resources/ui/gtk3/prefs.ui:46 +msgid "If you like this extension, recommend it to your friends :)" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:66 resources/ui/gtk3/prefs.ui:74 +msgid "Open Window Animation" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:75 resources/ui/gtk4/prefs.ui:119 +#: resources/ui/gtk3/prefs.ui:83 resources/ui/gtk3/prefs.ui:147 +msgid "If multiple are selected, one is chosen randomly." +msgstr "" + +#: resources/ui/gtk4/prefs.ui:90 resources/ui/gtk4/prefs.ui:134 +#: resources/ui/gtk3/prefs.ui:104 resources/ui/gtk3/prefs.ui:168 +msgid "Choose Effects" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:110 resources/ui/gtk3/prefs.ui:138 +msgid "Close Window Animation" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:150 resources/ui/gtk3/prefs.ui:198 +msgid "Also Add Effects to Dialogs" +msgstr "" + +#: resources/ui/gtk3/Fire.ui:63 +msgid "Choose a Preset" +msgstr "" diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..a02d3ad --- /dev/null +++ b/po/cs.po @@ -0,0 +1,306 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Simon Schneegans +# This file is distributed under the same license as the Burn-My-Windows package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Burn-My-Windows\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-02-18 20:33+0100\n" +"PO-Revision-Date: 2022-02-02 19:55+0000\n" +"Last-Translator: Jiří Doubravský \n" +"Language-Team: Czech \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 4.11-dev\n" + +#: prefs.js:111 +msgid "Effect Options" +msgstr "" + +#: prefs.js:139 +msgid "Go Back" +msgstr "" + +#: prefs.js:181 +msgid "General Options" +msgstr "Obecné možnosti" + +#: prefs.js:276 +msgid "Gold Sponsors" +msgstr "" + +#: prefs.js:279 +msgid "Silver Sponsors" +msgstr "" + +#: prefs.js:282 +msgid "Bronze Sponsors" +msgstr "" + +#: prefs.js:285 +msgid "Past Sponsors" +msgstr "" + +#. Translators: %s will be replaced by the effect's name. +#: prefs.js:512 +#, javascript-format +msgid "Preview for %s" +msgstr "Náhled %s" + +#: prefs.js:534 +msgid "Close this Window to Preview the Effect!" +msgstr "Zavřete toto okno, pokud chcete vidět efekt!" + +#: src/BrokenGlass.js:57 +msgid "Broken Glass" +msgstr "Střepy" + +#: src/TVEffect.js:56 +msgid "TV Effect" +msgstr "Televize" + +#: src/TRexAttack.js:56 +msgid "T-Rex Attack" +msgstr "Tyrannosaurus" + +#: src/Wisps.js:55 +msgid "Wisps" +msgstr "Obláčky" + +#: src/Fire.js:58 +msgid "Fire" +msgstr "Oheň" + +#: src/Fire.js:130 +msgid "Default Fire" +msgstr "Výchozí oheň" + +#: src/Fire.js:140 +msgid "Hell Fire" +msgstr "Pekelný oheň" + +#: src/Fire.js:150 +msgid "Dark and Smutty" +msgstr "Temný" + +#: src/Fire.js:160 +msgid "Cold Breeze" +msgstr "Studený vánek" + +#: src/Fire.js:170 +msgid "Santa is Coming" +msgstr "Santa přichází" + +#: src/EnergizeA.js:54 +msgid "Energize A" +msgstr "Energizovat A" + +#: src/EnergizeB.js:54 +msgid "Energize B" +msgstr "Energizovat B" + +#: src/Matrix.js:58 +msgid "Matrix" +msgstr "Matrix" + +#: resources/ui/common/main-menu.ui:6 +msgid "Visit Homepage" +msgstr "Navštívit web" + +#: resources/ui/common/main-menu.ui:10 +msgid "View Changelog" +msgstr "Zobrazit historii změn" + +#: resources/ui/common/main-menu.ui:16 +msgid "Report a Bug" +msgstr "Ohlásit chybu" + +#: resources/ui/common/main-menu.ui:20 +msgid "Create an Effect" +msgstr "Vytvořit efekt" + +#: resources/ui/common/main-menu.ui:24 +msgid "Translate" +msgstr "Přeložit" + +#: resources/ui/common/main-menu.ui:28 +msgid "Donate" +msgstr "Přispět" + +#: resources/ui/common/main-menu.ui:45 +msgid "About Burn-My-Windows" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:24 resources/ui/gtk4/BrokenGlass.ui:24 +#: resources/ui/gtk4/Wisps.ui:24 resources/ui/gtk4/Fire.ui:49 +#: resources/ui/gtk4/TRexAttack.ui:24 resources/ui/gtk4/TVEffect.ui:24 +#: resources/ui/gtk4/EnergizeA.ui:24 resources/ui/gtk4/EnergizeB.ui:24 +#: resources/ui/gtk3/Wisps.ui:42 resources/ui/gtk3/Fire.ui:93 +#: resources/ui/gtk3/TVEffect.ui:35 resources/ui/gtk3/EnergizeA.ui:42 +#: resources/ui/gtk3/EnergizeB.ui:42 +msgid "Animation Time [ms]" +msgstr "Délka animace [ms]" + +#: resources/ui/gtk4/Matrix.ui:52 resources/ui/gtk4/Matrix.ui:98 +#: resources/ui/gtk4/Matrix.ui:144 resources/ui/gtk4/Matrix.ui:190 +#: resources/ui/gtk4/Matrix.ui:224 resources/ui/gtk4/Matrix.ui:258 +#: resources/ui/gtk4/BrokenGlass.ui:52 resources/ui/gtk4/BrokenGlass.ui:98 +#: resources/ui/gtk4/BrokenGlass.ui:144 resources/ui/gtk4/BrokenGlass.ui:190 +#: resources/ui/gtk4/BrokenGlass.ui:244 resources/ui/gtk4/Wisps.ui:52 +#: resources/ui/gtk4/Wisps.ui:98 resources/ui/gtk4/Wisps.ui:132 +#: resources/ui/gtk4/Fire.ui:77 resources/ui/gtk4/Fire.ui:123 +#: resources/ui/gtk4/Fire.ui:169 resources/ui/gtk4/Fire.ui:222 +#: resources/ui/gtk4/Fire.ui:280 resources/ui/gtk4/TRexAttack.ui:52 +#: resources/ui/gtk4/TRexAttack.ui:98 resources/ui/gtk4/TRexAttack.ui:144 +#: resources/ui/gtk4/TRexAttack.ui:190 resources/ui/gtk4/TRexAttack.ui:224 +#: resources/ui/gtk4/TVEffect.ui:52 resources/ui/gtk4/TVEffect.ui:86 +#: resources/ui/gtk4/EnergizeA.ui:52 resources/ui/gtk4/EnergizeA.ui:98 +#: resources/ui/gtk4/EnergizeA.ui:132 resources/ui/gtk4/EnergizeB.ui:52 +#: resources/ui/gtk4/EnergizeB.ui:98 resources/ui/gtk4/EnergizeB.ui:132 +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/Wisps.ui:68 +#: resources/ui/gtk3/Wisps.ui:117 resources/ui/gtk3/Wisps.ui:160 +#: resources/ui/gtk3/Fire.ui:119 resources/ui/gtk3/Fire.ui:167 +#: resources/ui/gtk3/Fire.ui:215 resources/ui/gtk3/Fire.ui:277 +#: resources/ui/gtk3/Fire.ui:345 resources/ui/gtk3/TVEffect.ui:61 +#: resources/ui/gtk3/TVEffect.ui:104 resources/ui/gtk3/EnergizeA.ui:68 +#: resources/ui/gtk3/EnergizeA.ui:117 resources/ui/gtk3/EnergizeA.ui:160 +#: resources/ui/gtk3/EnergizeB.ui:68 resources/ui/gtk3/EnergizeB.ui:117 +#: resources/ui/gtk3/EnergizeB.ui:160 resources/ui/gtk3/prefs.ui:219 +msgid "Reset to Default Value" +msgstr "Obnovit výchozí hodnoty" + +#: resources/ui/gtk4/Matrix.ui:70 resources/ui/gtk4/BrokenGlass.ui:70 +#: resources/ui/gtk4/Wisps.ui:70 resources/ui/gtk4/Fire.ui:95 +#: resources/ui/gtk4/EnergizeA.ui:70 resources/ui/gtk4/EnergizeB.ui:70 +#: resources/ui/gtk3/Wisps.ui:91 resources/ui/gtk3/Fire.ui:141 +#: resources/ui/gtk3/EnergizeA.ui:91 resources/ui/gtk3/EnergizeB.ui:91 +msgid "Scale" +msgstr "Měřítko" + +#: resources/ui/gtk4/Matrix.ui:116 +msgid "Randomness" +msgstr "Nahodilost" + +#: resources/ui/gtk4/Matrix.ui:162 +#, fuzzy +msgid "Vertical Overshooting" +msgstr "Vertikální přestřelení" + +#: resources/ui/gtk4/Matrix.ui:208 +msgid "Trail Color" +msgstr "Barva ohonu" + +#: resources/ui/gtk4/Matrix.ui:242 +msgid "Tip Color" +msgstr "Barva hrotu" + +#: resources/ui/gtk4/BrokenGlass.ui:116 +msgid "Gravity" +msgstr "Gravitace" + +#: resources/ui/gtk4/BrokenGlass.ui:162 +msgid "Blow Force" +msgstr "Síla úderu" + +#: resources/ui/gtk4/BrokenGlass.ui:212 +msgid "Shatter From Pointer Location" +msgstr "Roztříštění od místa ukazatele" + +#: resources/ui/gtk4/BrokenGlass.ui:221 +msgid "" +"The shards will fly away from where your mouse pointer was when closing the " +"window." +msgstr "Střepy odletí z místa, kde byl ukazatel myši při zavírání okna." + +#: resources/ui/gtk4/Wisps.ui:116 resources/ui/gtk4/TVEffect.ui:70 +#: resources/ui/gtk4/EnergizeA.ui:116 resources/ui/gtk4/EnergizeB.ui:116 +#: resources/ui/gtk3/Wisps.ui:139 resources/ui/gtk3/TVEffect.ui:83 +#: resources/ui/gtk3/EnergizeA.ui:139 resources/ui/gtk3/EnergizeB.ui:139 +msgid "Color" +msgstr "Barva" + +#: resources/ui/gtk4/Fire.ui:25 resources/ui/gtk3/Fire.ui:49 +msgid "Presets" +msgstr "Předvolby" + +#: resources/ui/gtk4/Fire.ui:141 resources/ui/gtk3/Fire.ui:189 +msgid "Speed" +msgstr "Rychlost" + +#: resources/ui/gtk4/Fire.ui:191 resources/ui/gtk3/Fire.ui:241 +msgid "3D Noise" +msgstr "3D šum" + +#: resources/ui/gtk4/Fire.ui:200 resources/ui/gtk3/Fire.ui:250 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "Vytvoří dynamičtejší efekt, ale potřebuje k tomu silnější GPU" + +#: resources/ui/gtk4/Fire.ui:240 resources/ui/gtk3/Fire.ui:300 +msgid "Gradient" +msgstr "Přechod" + +#: resources/ui/gtk4/TRexAttack.ui:70 +msgid "Claw Scratch Scale" +msgstr "Velikost škrábanců od drápů" + +#: resources/ui/gtk4/TRexAttack.ui:116 +msgid "Claw Scratch Count" +msgstr "Počet škrábanců" + +#: resources/ui/gtk4/TRexAttack.ui:162 +msgid "Warp Effect" +msgstr "Efekt zakřivení" + +#: resources/ui/gtk4/TRexAttack.ui:208 +msgid "Flash Color" +msgstr "Barva blesku" + +#: resources/ui/gtk4/effectPage.ui:37 resources/ui/gtk3/effectPage.ui:37 +msgid "Preview this Effect" +msgstr "Náhled efektu" + +#: resources/ui/gtk4/prefs.ui:28 resources/ui/gtk3/prefs.ui:35 +msgid "Welcome to Burn-My-Windows!" +msgstr "Vítá Vás Burn-My-Windows!" + +#: resources/ui/gtk4/prefs.ui:39 resources/ui/gtk3/prefs.ui:46 +msgid "If you like this extension, recommend it to your friends :)" +msgstr "Pokud se vám líbí tento doplňek, doporučte jej přátelům :-)" + +#: resources/ui/gtk4/prefs.ui:66 resources/ui/gtk3/prefs.ui:74 +msgid "Open Window Animation" +msgstr "Animace při otevírání okna" + +#: resources/ui/gtk4/prefs.ui:75 resources/ui/gtk4/prefs.ui:119 +#: resources/ui/gtk3/prefs.ui:83 resources/ui/gtk3/prefs.ui:147 +msgid "If multiple are selected, one is chosen randomly." +msgstr "Pokud vyberete více, budou se střídat náhodně." + +#: resources/ui/gtk4/prefs.ui:90 resources/ui/gtk4/prefs.ui:134 +#: resources/ui/gtk3/prefs.ui:104 resources/ui/gtk3/prefs.ui:168 +msgid "Choose Effects" +msgstr "Vyberte efekty" + +#: resources/ui/gtk4/prefs.ui:110 resources/ui/gtk3/prefs.ui:138 +msgid "Close Window Animation" +msgstr "Animace při zavírání okna" + +#: resources/ui/gtk4/prefs.ui:150 resources/ui/gtk3/prefs.ui:198 +msgid "Also Add Effects to Dialogs" +msgstr "Použít efekt i na dialogová okna" + +#: resources/ui/gtk3/Fire.ui:63 +msgid "Choose a Preset" +msgstr "Vyberte předvolbu" + +#~ msgid "Via PayPal" +#~ msgstr "skrze PayPal" + +#~ msgid "Via GitHub" +#~ msgstr "skrze GitHub" diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..1887958 --- /dev/null +++ b/po/de.po @@ -0,0 +1,310 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Simon Schneegans +# This file is distributed under the same license as the Burn-My-Windows package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Burn-My-Windows\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-02-18 20:33+0100\n" +"PO-Revision-Date: 2022-02-18 19:40+0000\n" +"Last-Translator: Simon Schneegans \n" +"Language-Team: German \n" +"Language: de\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.11-dev\n" + +#: prefs.js:111 +msgid "Effect Options" +msgstr "Effektoptionen" + +#: prefs.js:139 +msgid "Go Back" +msgstr "Zurück" + +#: prefs.js:181 +msgid "General Options" +msgstr "Allgemeine Optionen" + +#: prefs.js:276 +msgid "Gold Sponsors" +msgstr "Gold-Sponsoren" + +#: prefs.js:279 +msgid "Silver Sponsors" +msgstr "Silber-Sponsoren" + +#: prefs.js:282 +msgid "Bronze Sponsors" +msgstr "Bronze-Sponsoren" + +#: prefs.js:285 +msgid "Past Sponsors" +msgstr "Ehemalige Sponsoren" + +#. Translators: %s will be replaced by the effect's name. +#: prefs.js:512 +#, javascript-format +msgid "Preview for %s" +msgstr "Vorschau für %s" + +#: prefs.js:534 +msgid "Close this Window to Preview the Effect!" +msgstr "Schließen Sie dieses Fenster, um eine Vorschau des Effekts anzuzeigen!" + +#: src/BrokenGlass.js:57 +msgid "Broken Glass" +msgstr "Glassplitter" + +#: src/TVEffect.js:56 +msgid "TV Effect" +msgstr "TV-Effekt" + +#: src/TRexAttack.js:56 +msgid "T-Rex Attack" +msgstr "T-Rex-Angriff" + +#: src/Wisps.js:55 +msgid "Wisps" +msgstr "Irrlichter" + +#: src/Fire.js:58 +msgid "Fire" +msgstr "Feuer" + +#: src/Fire.js:130 +msgid "Default Fire" +msgstr "Standardfeuer" + +#: src/Fire.js:140 +msgid "Hell Fire" +msgstr "Höllenfeuer" + +#: src/Fire.js:150 +msgid "Dark and Smutty" +msgstr "Dunkel und schmutzig" + +#: src/Fire.js:160 +msgid "Cold Breeze" +msgstr "Kalte Brise" + +#: src/Fire.js:170 +msgid "Santa is Coming" +msgstr "Weihnachtsgrüße" + +#: src/EnergizeA.js:54 +msgid "Energize A" +msgstr "Energie A" + +#: src/EnergizeB.js:54 +msgid "Energize B" +msgstr "Energie B" + +#: src/Matrix.js:58 +msgid "Matrix" +msgstr "Matrix" + +#: resources/ui/common/main-menu.ui:6 +msgid "Visit Homepage" +msgstr "Homepage besuchen" + +#: resources/ui/common/main-menu.ui:10 +msgid "View Changelog" +msgstr "Changelog anzeigen" + +#: resources/ui/common/main-menu.ui:16 +msgid "Report a Bug" +msgstr "Fehler melden" + +#: resources/ui/common/main-menu.ui:20 +msgid "Create an Effect" +msgstr "Einen Effekt hinzufügen" + +#: resources/ui/common/main-menu.ui:24 +msgid "Translate" +msgstr "Übersetzen" + +#: resources/ui/common/main-menu.ui:28 +msgid "Donate" +msgstr "Spenden" + +#: resources/ui/common/main-menu.ui:45 +msgid "About Burn-My-Windows" +msgstr "Über Burn-My-Windows" + +#: resources/ui/gtk4/Matrix.ui:24 resources/ui/gtk4/BrokenGlass.ui:24 +#: resources/ui/gtk4/Wisps.ui:24 resources/ui/gtk4/Fire.ui:49 +#: resources/ui/gtk4/TRexAttack.ui:24 resources/ui/gtk4/TVEffect.ui:24 +#: resources/ui/gtk4/EnergizeA.ui:24 resources/ui/gtk4/EnergizeB.ui:24 +#: resources/ui/gtk3/Wisps.ui:42 resources/ui/gtk3/Fire.ui:93 +#: resources/ui/gtk3/TVEffect.ui:35 resources/ui/gtk3/EnergizeA.ui:42 +#: resources/ui/gtk3/EnergizeB.ui:42 +msgid "Animation Time [ms]" +msgstr "Animationszeit [ms]" + +#: resources/ui/gtk4/Matrix.ui:52 resources/ui/gtk4/Matrix.ui:98 +#: resources/ui/gtk4/Matrix.ui:144 resources/ui/gtk4/Matrix.ui:190 +#: resources/ui/gtk4/Matrix.ui:224 resources/ui/gtk4/Matrix.ui:258 +#: resources/ui/gtk4/BrokenGlass.ui:52 resources/ui/gtk4/BrokenGlass.ui:98 +#: resources/ui/gtk4/BrokenGlass.ui:144 resources/ui/gtk4/BrokenGlass.ui:190 +#: resources/ui/gtk4/BrokenGlass.ui:244 resources/ui/gtk4/Wisps.ui:52 +#: resources/ui/gtk4/Wisps.ui:98 resources/ui/gtk4/Wisps.ui:132 +#: resources/ui/gtk4/Fire.ui:77 resources/ui/gtk4/Fire.ui:123 +#: resources/ui/gtk4/Fire.ui:169 resources/ui/gtk4/Fire.ui:222 +#: resources/ui/gtk4/Fire.ui:280 resources/ui/gtk4/TRexAttack.ui:52 +#: resources/ui/gtk4/TRexAttack.ui:98 resources/ui/gtk4/TRexAttack.ui:144 +#: resources/ui/gtk4/TRexAttack.ui:190 resources/ui/gtk4/TRexAttack.ui:224 +#: resources/ui/gtk4/TVEffect.ui:52 resources/ui/gtk4/TVEffect.ui:86 +#: resources/ui/gtk4/EnergizeA.ui:52 resources/ui/gtk4/EnergizeA.ui:98 +#: resources/ui/gtk4/EnergizeA.ui:132 resources/ui/gtk4/EnergizeB.ui:52 +#: resources/ui/gtk4/EnergizeB.ui:98 resources/ui/gtk4/EnergizeB.ui:132 +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/Wisps.ui:68 +#: resources/ui/gtk3/Wisps.ui:117 resources/ui/gtk3/Wisps.ui:160 +#: resources/ui/gtk3/Fire.ui:119 resources/ui/gtk3/Fire.ui:167 +#: resources/ui/gtk3/Fire.ui:215 resources/ui/gtk3/Fire.ui:277 +#: resources/ui/gtk3/Fire.ui:345 resources/ui/gtk3/TVEffect.ui:61 +#: resources/ui/gtk3/TVEffect.ui:104 resources/ui/gtk3/EnergizeA.ui:68 +#: resources/ui/gtk3/EnergizeA.ui:117 resources/ui/gtk3/EnergizeA.ui:160 +#: resources/ui/gtk3/EnergizeB.ui:68 resources/ui/gtk3/EnergizeB.ui:117 +#: resources/ui/gtk3/EnergizeB.ui:160 resources/ui/gtk3/prefs.ui:219 +msgid "Reset to Default Value" +msgstr "Auf Standardwert zurücksetzen" + +#: resources/ui/gtk4/Matrix.ui:70 resources/ui/gtk4/BrokenGlass.ui:70 +#: resources/ui/gtk4/Wisps.ui:70 resources/ui/gtk4/Fire.ui:95 +#: resources/ui/gtk4/EnergizeA.ui:70 resources/ui/gtk4/EnergizeB.ui:70 +#: resources/ui/gtk3/Wisps.ui:91 resources/ui/gtk3/Fire.ui:141 +#: resources/ui/gtk3/EnergizeA.ui:91 resources/ui/gtk3/EnergizeB.ui:91 +msgid "Scale" +msgstr "Größe" + +#: resources/ui/gtk4/Matrix.ui:116 +msgid "Randomness" +msgstr "Zufälligkeit" + +#: resources/ui/gtk4/Matrix.ui:162 +msgid "Vertical Overshooting" +msgstr "Vertikales Überschießen" + +#: resources/ui/gtk4/Matrix.ui:208 +msgid "Trail Color" +msgstr "Farbe der Spur" + +#: resources/ui/gtk4/Matrix.ui:242 +msgid "Tip Color" +msgstr "Farbe der Spitze" + +#: resources/ui/gtk4/BrokenGlass.ui:116 +msgid "Gravity" +msgstr "Schwerkraft" + +#: resources/ui/gtk4/BrokenGlass.ui:162 +msgid "Blow Force" +msgstr "Schlagkraft" + +#: resources/ui/gtk4/BrokenGlass.ui:212 +msgid "Shatter From Pointer Location" +msgstr "Von Mauszeigerposition zerbrechen" + +#: resources/ui/gtk4/BrokenGlass.ui:221 +msgid "" +"The shards will fly away from where your mouse pointer was when closing the " +"window." +msgstr "" +"Die Scherben fliegen von der Stelle weg, an der sich Ihr Mauszeiger beim " +"Schließen des Fensters befand." + +#: resources/ui/gtk4/Wisps.ui:116 resources/ui/gtk4/TVEffect.ui:70 +#: resources/ui/gtk4/EnergizeA.ui:116 resources/ui/gtk4/EnergizeB.ui:116 +#: resources/ui/gtk3/Wisps.ui:139 resources/ui/gtk3/TVEffect.ui:83 +#: resources/ui/gtk3/EnergizeA.ui:139 resources/ui/gtk3/EnergizeB.ui:139 +msgid "Color" +msgstr "Farbe" + +#: resources/ui/gtk4/Fire.ui:25 resources/ui/gtk3/Fire.ui:49 +msgid "Presets" +msgstr "Voreinstellungen" + +#: resources/ui/gtk4/Fire.ui:141 resources/ui/gtk3/Fire.ui:189 +msgid "Speed" +msgstr "Geschwindigkeit" + +#: resources/ui/gtk4/Fire.ui:191 resources/ui/gtk3/Fire.ui:241 +msgid "3D Noise" +msgstr "3D-Rauschen" + +#: resources/ui/gtk4/Fire.ui:200 resources/ui/gtk3/Fire.ui:250 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "Erzeugt ein dynamischeres Feuer, erfordert jedoch mehr GPU-Leistung." + +#: resources/ui/gtk4/Fire.ui:240 resources/ui/gtk3/Fire.ui:300 +msgid "Gradient" +msgstr "Farbverlauf" + +#: resources/ui/gtk4/TRexAttack.ui:70 +msgid "Claw Scratch Scale" +msgstr "Kratzergröße" + +#: resources/ui/gtk4/TRexAttack.ui:116 +msgid "Claw Scratch Count" +msgstr "Kratzeranzahl" + +#: resources/ui/gtk4/TRexAttack.ui:162 +msgid "Warp Effect" +msgstr "Warp-Effekt" + +#: resources/ui/gtk4/TRexAttack.ui:208 +msgid "Flash Color" +msgstr "Blitzfarbe" + +#: resources/ui/gtk4/effectPage.ui:37 resources/ui/gtk3/effectPage.ui:37 +msgid "Preview this Effect" +msgstr "Vorschau dieses Effekts" + +#: resources/ui/gtk4/prefs.ui:28 resources/ui/gtk3/prefs.ui:35 +msgid "Welcome to Burn-My-Windows!" +msgstr "Willkommen bei Burn-My-Windows!" + +#: resources/ui/gtk4/prefs.ui:39 resources/ui/gtk3/prefs.ui:46 +msgid "If you like this extension, recommend it to your friends :)" +msgstr "Wenn Sie diese Erweiterung mögen, empfehlen Sie sie Ihren Freunden :)" + +#: resources/ui/gtk4/prefs.ui:66 resources/ui/gtk3/prefs.ui:74 +msgid "Open Window Animation" +msgstr "Fenster-Öffnen-Animation" + +#: resources/ui/gtk4/prefs.ui:75 resources/ui/gtk4/prefs.ui:119 +#: resources/ui/gtk3/prefs.ui:83 resources/ui/gtk3/prefs.ui:147 +msgid "If multiple are selected, one is chosen randomly." +msgstr "Wenn mehrere ausgewählt sind, wird eine zufällig ausgewählt." + +#: resources/ui/gtk4/prefs.ui:90 resources/ui/gtk4/prefs.ui:134 +#: resources/ui/gtk3/prefs.ui:104 resources/ui/gtk3/prefs.ui:168 +msgid "Choose Effects" +msgstr "Effekte auswählen" + +#: resources/ui/gtk4/prefs.ui:110 resources/ui/gtk3/prefs.ui:138 +msgid "Close Window Animation" +msgstr "Fenster-Schließen-Animation" + +#: resources/ui/gtk4/prefs.ui:150 resources/ui/gtk3/prefs.ui:198 +msgid "Also Add Effects to Dialogs" +msgstr "Effekte auch zu Dialogen hinzufügen" + +#: resources/ui/gtk3/Fire.ui:63 +msgid "Choose a Preset" +msgstr "Wählen Sie eine Voreinstellung" + +#~ msgid "Via PayPal" +#~ msgstr "Mit PayPal" + +#~ msgid "Via GitHub" +#~ msgstr "Mit GitHub" + +#~ msgid "Create a Custom Effect" +#~ msgstr "Einen neuen Effekt erstellen" diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..ba5ed3d --- /dev/null +++ b/po/es.po @@ -0,0 +1,307 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Simon Schneegans +# This file is distributed under the same license as the Burn-My-Windows package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Burn-My-Windows\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-02-18 20:33+0100\n" +"PO-Revision-Date: 2022-03-15 06:54+0000\n" +"Last-Translator: Adolfo Jayme Barrientos \n" +"Language-Team: Spanish \n" +"Language: es\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.12-dev\n" + +#: prefs.js:111 +msgid "Effect Options" +msgstr "Opciones de efecto" + +#: prefs.js:139 +msgid "Go Back" +msgstr "Volver" + +#: prefs.js:181 +msgid "General Options" +msgstr "Opciones generales" + +#: prefs.js:276 +msgid "Gold Sponsors" +msgstr "Patrocinadores de oro" + +#: prefs.js:279 +msgid "Silver Sponsors" +msgstr "Patrocinadores de plata" + +#: prefs.js:282 +msgid "Bronze Sponsors" +msgstr "Patrocinadores de bronce" + +#: prefs.js:285 +msgid "Past Sponsors" +msgstr "Patrocinadores anteriores" + +#. Translators: %s will be replaced by the effect's name. +#: prefs.js:512 +#, javascript-format +msgid "Preview for %s" +msgstr "Previsualización de %s" + +#: prefs.js:534 +msgid "Close this Window to Preview the Effect!" +msgstr "¡Cierre esta ventana para ver el efecto!" + +#: src/BrokenGlass.js:57 +msgid "Broken Glass" +msgstr "Cristales rotos" + +#: src/TVEffect.js:56 +msgid "TV Effect" +msgstr "Efecto televisor" + +#: src/TRexAttack.js:56 +msgid "T-Rex Attack" +msgstr "Ataque de T-Rex" + +#: src/Wisps.js:55 +msgid "Wisps" +msgstr "Chispas" + +#: src/Fire.js:58 +msgid "Fire" +msgstr "Fuego" + +#: src/Fire.js:130 +msgid "Default Fire" +msgstr "Fuego predeterminado" + +#: src/Fire.js:140 +msgid "Hell Fire" +msgstr "Fuego infernal" + +#: src/Fire.js:150 +msgid "Dark and Smutty" +msgstr "Oscuro y obsceno" + +#: src/Fire.js:160 +msgid "Cold Breeze" +msgstr "Brisa fría" + +#: src/Fire.js:170 +msgid "Santa is Coming" +msgstr "Viene Papá Noel" + +#: src/EnergizeA.js:54 +msgid "Energize A" +msgstr "Energizar A" + +#: src/EnergizeB.js:54 +msgid "Energize B" +msgstr "Energizar B" + +#: src/Matrix.js:58 +msgid "Matrix" +msgstr "Matrix" + +#: resources/ui/common/main-menu.ui:6 +msgid "Visit Homepage" +msgstr "Visitar la página web" + +#: resources/ui/common/main-menu.ui:10 +msgid "View Changelog" +msgstr "Ver registro de cambios" + +#: resources/ui/common/main-menu.ui:16 +msgid "Report a Bug" +msgstr "Informar de un error" + +#: resources/ui/common/main-menu.ui:20 +msgid "Create an Effect" +msgstr "Crear un efecto" + +#: resources/ui/common/main-menu.ui:24 +msgid "Translate" +msgstr "Traducir" + +#: resources/ui/common/main-menu.ui:28 +msgid "Donate" +msgstr "Donar" + +#: resources/ui/common/main-menu.ui:45 +msgid "About Burn-My-Windows" +msgstr "Acerca de Burn-My-Windows" + +#: resources/ui/gtk4/Matrix.ui:24 resources/ui/gtk4/BrokenGlass.ui:24 +#: resources/ui/gtk4/Wisps.ui:24 resources/ui/gtk4/Fire.ui:49 +#: resources/ui/gtk4/TRexAttack.ui:24 resources/ui/gtk4/TVEffect.ui:24 +#: resources/ui/gtk4/EnergizeA.ui:24 resources/ui/gtk4/EnergizeB.ui:24 +#: resources/ui/gtk3/Wisps.ui:42 resources/ui/gtk3/Fire.ui:93 +#: resources/ui/gtk3/TVEffect.ui:35 resources/ui/gtk3/EnergizeA.ui:42 +#: resources/ui/gtk3/EnergizeB.ui:42 +msgid "Animation Time [ms]" +msgstr "Tiempo de animación [ms]" + +#: resources/ui/gtk4/Matrix.ui:52 resources/ui/gtk4/Matrix.ui:98 +#: resources/ui/gtk4/Matrix.ui:144 resources/ui/gtk4/Matrix.ui:190 +#: resources/ui/gtk4/Matrix.ui:224 resources/ui/gtk4/Matrix.ui:258 +#: resources/ui/gtk4/BrokenGlass.ui:52 resources/ui/gtk4/BrokenGlass.ui:98 +#: resources/ui/gtk4/BrokenGlass.ui:144 resources/ui/gtk4/BrokenGlass.ui:190 +#: resources/ui/gtk4/BrokenGlass.ui:244 resources/ui/gtk4/Wisps.ui:52 +#: resources/ui/gtk4/Wisps.ui:98 resources/ui/gtk4/Wisps.ui:132 +#: resources/ui/gtk4/Fire.ui:77 resources/ui/gtk4/Fire.ui:123 +#: resources/ui/gtk4/Fire.ui:169 resources/ui/gtk4/Fire.ui:222 +#: resources/ui/gtk4/Fire.ui:280 resources/ui/gtk4/TRexAttack.ui:52 +#: resources/ui/gtk4/TRexAttack.ui:98 resources/ui/gtk4/TRexAttack.ui:144 +#: resources/ui/gtk4/TRexAttack.ui:190 resources/ui/gtk4/TRexAttack.ui:224 +#: resources/ui/gtk4/TVEffect.ui:52 resources/ui/gtk4/TVEffect.ui:86 +#: resources/ui/gtk4/EnergizeA.ui:52 resources/ui/gtk4/EnergizeA.ui:98 +#: resources/ui/gtk4/EnergizeA.ui:132 resources/ui/gtk4/EnergizeB.ui:52 +#: resources/ui/gtk4/EnergizeB.ui:98 resources/ui/gtk4/EnergizeB.ui:132 +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/Wisps.ui:68 +#: resources/ui/gtk3/Wisps.ui:117 resources/ui/gtk3/Wisps.ui:160 +#: resources/ui/gtk3/Fire.ui:119 resources/ui/gtk3/Fire.ui:167 +#: resources/ui/gtk3/Fire.ui:215 resources/ui/gtk3/Fire.ui:277 +#: resources/ui/gtk3/Fire.ui:345 resources/ui/gtk3/TVEffect.ui:61 +#: resources/ui/gtk3/TVEffect.ui:104 resources/ui/gtk3/EnergizeA.ui:68 +#: resources/ui/gtk3/EnergizeA.ui:117 resources/ui/gtk3/EnergizeA.ui:160 +#: resources/ui/gtk3/EnergizeB.ui:68 resources/ui/gtk3/EnergizeB.ui:117 +#: resources/ui/gtk3/EnergizeB.ui:160 resources/ui/gtk3/prefs.ui:219 +msgid "Reset to Default Value" +msgstr "Restablecer al valor predeterminado" + +#: resources/ui/gtk4/Matrix.ui:70 resources/ui/gtk4/BrokenGlass.ui:70 +#: resources/ui/gtk4/Wisps.ui:70 resources/ui/gtk4/Fire.ui:95 +#: resources/ui/gtk4/EnergizeA.ui:70 resources/ui/gtk4/EnergizeB.ui:70 +#: resources/ui/gtk3/Wisps.ui:91 resources/ui/gtk3/Fire.ui:141 +#: resources/ui/gtk3/EnergizeA.ui:91 resources/ui/gtk3/EnergizeB.ui:91 +msgid "Scale" +msgstr "Escala" + +#: resources/ui/gtk4/Matrix.ui:116 +msgid "Randomness" +msgstr "Aleatoriedad" + +#: resources/ui/gtk4/Matrix.ui:162 +msgid "Vertical Overshooting" +msgstr "Superposición vertical" + +#: resources/ui/gtk4/Matrix.ui:208 +msgid "Trail Color" +msgstr "Color de la estela" + +#: resources/ui/gtk4/Matrix.ui:242 +msgid "Tip Color" +msgstr "Color de la punta" + +#: resources/ui/gtk4/BrokenGlass.ui:116 +msgid "Gravity" +msgstr "Gravedad" + +#: resources/ui/gtk4/BrokenGlass.ui:162 +msgid "Blow Force" +msgstr "Fuerza del golpe" + +#: resources/ui/gtk4/BrokenGlass.ui:212 +msgid "Shatter From Pointer Location" +msgstr "Fragmentar desde la ubicación del puntero" + +#: resources/ui/gtk4/BrokenGlass.ui:221 +msgid "" +"The shards will fly away from where your mouse pointer was when closing the " +"window." +msgstr "" +"Los fragmentos saldrán volando desde donde estaba el puntero del ratón al " +"cerrar la ventana." + +#: resources/ui/gtk4/Wisps.ui:116 resources/ui/gtk4/TVEffect.ui:70 +#: resources/ui/gtk4/EnergizeA.ui:116 resources/ui/gtk4/EnergizeB.ui:116 +#: resources/ui/gtk3/Wisps.ui:139 resources/ui/gtk3/TVEffect.ui:83 +#: resources/ui/gtk3/EnergizeA.ui:139 resources/ui/gtk3/EnergizeB.ui:139 +msgid "Color" +msgstr "Color" + +#: resources/ui/gtk4/Fire.ui:25 resources/ui/gtk3/Fire.ui:49 +msgid "Presets" +msgstr "Preselecciones" + +#: resources/ui/gtk4/Fire.ui:141 resources/ui/gtk3/Fire.ui:189 +msgid "Speed" +msgstr "Velocidad" + +#: resources/ui/gtk4/Fire.ui:191 resources/ui/gtk3/Fire.ui:241 +msgid "3D Noise" +msgstr "Ruido 3D" + +#: resources/ui/gtk4/Fire.ui:200 resources/ui/gtk3/Fire.ui:250 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "Crea un fuego más dinámico pero requiere más potencia de la GPU." + +#: resources/ui/gtk4/Fire.ui:240 resources/ui/gtk3/Fire.ui:300 +msgid "Gradient" +msgstr "Degradado" + +#: resources/ui/gtk4/TRexAttack.ui:70 +msgid "Claw Scratch Scale" +msgstr "Escala de arañazos de garras" + +#: resources/ui/gtk4/TRexAttack.ui:116 +msgid "Claw Scratch Count" +msgstr "Número de arañazos de garras" + +#: resources/ui/gtk4/TRexAttack.ui:162 +msgid "Warp Effect" +msgstr "Efecto distorsión" + +#: resources/ui/gtk4/TRexAttack.ui:208 +msgid "Flash Color" +msgstr "Color del flash" + +#: resources/ui/gtk4/effectPage.ui:37 resources/ui/gtk3/effectPage.ui:37 +msgid "Preview this Effect" +msgstr "Previsualizar este efecto" + +#: resources/ui/gtk4/prefs.ui:28 resources/ui/gtk3/prefs.ui:35 +msgid "Welcome to Burn-My-Windows!" +msgstr "Le damos la bienvenida a Burn-My-Windows." + +#: resources/ui/gtk4/prefs.ui:39 resources/ui/gtk3/prefs.ui:46 +msgid "If you like this extension, recommend it to your friends :)" +msgstr "Si le gusta esta extensión, recomiéndela a sus amistades :)" + +#: resources/ui/gtk4/prefs.ui:66 resources/ui/gtk3/prefs.ui:74 +msgid "Open Window Animation" +msgstr "Animación al abrir la ventana" + +#: resources/ui/gtk4/prefs.ui:75 resources/ui/gtk4/prefs.ui:119 +#: resources/ui/gtk3/prefs.ui:83 resources/ui/gtk3/prefs.ui:147 +msgid "If multiple are selected, one is chosen randomly." +msgstr "Si se seleccionan varios, se elige uno al azar." + +#: resources/ui/gtk4/prefs.ui:90 resources/ui/gtk4/prefs.ui:134 +#: resources/ui/gtk3/prefs.ui:104 resources/ui/gtk3/prefs.ui:168 +msgid "Choose Effects" +msgstr "Elegir efectos" + +#: resources/ui/gtk4/prefs.ui:110 resources/ui/gtk3/prefs.ui:138 +msgid "Close Window Animation" +msgstr "Animación al cerrar la ventana" + +#: resources/ui/gtk4/prefs.ui:150 resources/ui/gtk3/prefs.ui:198 +msgid "Also Add Effects to Dialogs" +msgstr "Añadir también efectos a los diálogos" + +#: resources/ui/gtk3/Fire.ui:63 +msgid "Choose a Preset" +msgstr "Elija una preselección" + +#~ msgid "Via PayPal" +#~ msgstr "Vía PayPal" + +#~ msgid "Via GitHub" +#~ msgstr "Vía GitHub" diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..94aada3 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,309 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Simon Schneegans +# This file is distributed under the same license as the Burn-My-Windows package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Burn-My-Windows\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-02-18 20:33+0100\n" +"PO-Revision-Date: 2022-02-21 11:58+0000\n" +"Last-Translator: Nathan \n" +"Language-Team: French \n" +"Language: fr\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.11-dev\n" + +#: prefs.js:111 +msgid "Effect Options" +msgstr "Options de l'effet" + +#: prefs.js:139 +msgid "Go Back" +msgstr "Retour" + +#: prefs.js:181 +msgid "General Options" +msgstr "Options générales" + +#: prefs.js:276 +msgid "Gold Sponsors" +msgstr "Sponsors Or" + +#: prefs.js:279 +msgid "Silver Sponsors" +msgstr "Sponsors Argent" + +#: prefs.js:282 +msgid "Bronze Sponsors" +msgstr "Sponsors Bronze" + +#: prefs.js:285 +msgid "Past Sponsors" +msgstr "Anciens Sponsors" + +#. Translators: %s will be replaced by the effect's name. +#: prefs.js:512 +#, javascript-format +msgid "Preview for %s" +msgstr "Aperçu pour %s" + +#: prefs.js:534 +msgid "Close this Window to Preview the Effect!" +msgstr "Fermez cette fenêtre pour un aperçu de l'effet !" + +#: src/BrokenGlass.js:57 +msgid "Broken Glass" +msgstr "Verre brisé" + +#: src/TVEffect.js:56 +msgid "TV Effect" +msgstr "Effet TV" + +#: src/TRexAttack.js:56 +msgid "T-Rex Attack" +msgstr "Attaque de T-Rex" + +#: src/Wisps.js:55 +msgid "Wisps" +msgstr "Volutes" + +#: src/Fire.js:58 +msgid "Fire" +msgstr "Feu" + +#: src/Fire.js:130 +msgid "Default Fire" +msgstr "Feu par défaut" + +#: src/Fire.js:140 +msgid "Hell Fire" +msgstr "Feu de l'enfer" + +#: src/Fire.js:150 +msgid "Dark and Smutty" +msgstr "Sombre et ténébreux" + +#: src/Fire.js:160 +msgid "Cold Breeze" +msgstr "Brise froide" + +#: src/Fire.js:170 +msgid "Santa is Coming" +msgstr "Le Père Noël arrive" + +#: src/EnergizeA.js:54 +msgid "Energize A" +msgstr "Énergie A" + +#: src/EnergizeB.js:54 +msgid "Energize B" +msgstr "Énergie B" + +#: src/Matrix.js:58 +msgid "Matrix" +msgstr "Matrix" + +#: resources/ui/common/main-menu.ui:6 +msgid "Visit Homepage" +msgstr "Visiter la page d'accueil" + +#: resources/ui/common/main-menu.ui:10 +msgid "View Changelog" +msgstr "Voir le journal des modifications" + +#: resources/ui/common/main-menu.ui:16 +msgid "Report a Bug" +msgstr "Signaler un bug" + +#: resources/ui/common/main-menu.ui:20 +msgid "Create an Effect" +msgstr "Créer un effet" + +#: resources/ui/common/main-menu.ui:24 +msgid "Translate" +msgstr "Traduire" + +#: resources/ui/common/main-menu.ui:28 +msgid "Donate" +msgstr "Faire un don" + +#: resources/ui/common/main-menu.ui:45 +msgid "About Burn-My-Windows" +msgstr "À propos de Burn-My-Windows" + +#: resources/ui/gtk4/Matrix.ui:24 resources/ui/gtk4/BrokenGlass.ui:24 +#: resources/ui/gtk4/Wisps.ui:24 resources/ui/gtk4/Fire.ui:49 +#: resources/ui/gtk4/TRexAttack.ui:24 resources/ui/gtk4/TVEffect.ui:24 +#: resources/ui/gtk4/EnergizeA.ui:24 resources/ui/gtk4/EnergizeB.ui:24 +#: resources/ui/gtk3/Wisps.ui:42 resources/ui/gtk3/Fire.ui:93 +#: resources/ui/gtk3/TVEffect.ui:35 resources/ui/gtk3/EnergizeA.ui:42 +#: resources/ui/gtk3/EnergizeB.ui:42 +msgid "Animation Time [ms]" +msgstr "Durée de l'animation (ms)" + +#: resources/ui/gtk4/Matrix.ui:52 resources/ui/gtk4/Matrix.ui:98 +#: resources/ui/gtk4/Matrix.ui:144 resources/ui/gtk4/Matrix.ui:190 +#: resources/ui/gtk4/Matrix.ui:224 resources/ui/gtk4/Matrix.ui:258 +#: resources/ui/gtk4/BrokenGlass.ui:52 resources/ui/gtk4/BrokenGlass.ui:98 +#: resources/ui/gtk4/BrokenGlass.ui:144 resources/ui/gtk4/BrokenGlass.ui:190 +#: resources/ui/gtk4/BrokenGlass.ui:244 resources/ui/gtk4/Wisps.ui:52 +#: resources/ui/gtk4/Wisps.ui:98 resources/ui/gtk4/Wisps.ui:132 +#: resources/ui/gtk4/Fire.ui:77 resources/ui/gtk4/Fire.ui:123 +#: resources/ui/gtk4/Fire.ui:169 resources/ui/gtk4/Fire.ui:222 +#: resources/ui/gtk4/Fire.ui:280 resources/ui/gtk4/TRexAttack.ui:52 +#: resources/ui/gtk4/TRexAttack.ui:98 resources/ui/gtk4/TRexAttack.ui:144 +#: resources/ui/gtk4/TRexAttack.ui:190 resources/ui/gtk4/TRexAttack.ui:224 +#: resources/ui/gtk4/TVEffect.ui:52 resources/ui/gtk4/TVEffect.ui:86 +#: resources/ui/gtk4/EnergizeA.ui:52 resources/ui/gtk4/EnergizeA.ui:98 +#: resources/ui/gtk4/EnergizeA.ui:132 resources/ui/gtk4/EnergizeB.ui:52 +#: resources/ui/gtk4/EnergizeB.ui:98 resources/ui/gtk4/EnergizeB.ui:132 +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/Wisps.ui:68 +#: resources/ui/gtk3/Wisps.ui:117 resources/ui/gtk3/Wisps.ui:160 +#: resources/ui/gtk3/Fire.ui:119 resources/ui/gtk3/Fire.ui:167 +#: resources/ui/gtk3/Fire.ui:215 resources/ui/gtk3/Fire.ui:277 +#: resources/ui/gtk3/Fire.ui:345 resources/ui/gtk3/TVEffect.ui:61 +#: resources/ui/gtk3/TVEffect.ui:104 resources/ui/gtk3/EnergizeA.ui:68 +#: resources/ui/gtk3/EnergizeA.ui:117 resources/ui/gtk3/EnergizeA.ui:160 +#: resources/ui/gtk3/EnergizeB.ui:68 resources/ui/gtk3/EnergizeB.ui:117 +#: resources/ui/gtk3/EnergizeB.ui:160 resources/ui/gtk3/prefs.ui:219 +msgid "Reset to Default Value" +msgstr "Réinitialiser à la valeur par défaut" + +#: resources/ui/gtk4/Matrix.ui:70 resources/ui/gtk4/BrokenGlass.ui:70 +#: resources/ui/gtk4/Wisps.ui:70 resources/ui/gtk4/Fire.ui:95 +#: resources/ui/gtk4/EnergizeA.ui:70 resources/ui/gtk4/EnergizeB.ui:70 +#: resources/ui/gtk3/Wisps.ui:91 resources/ui/gtk3/Fire.ui:141 +#: resources/ui/gtk3/EnergizeA.ui:91 resources/ui/gtk3/EnergizeB.ui:91 +msgid "Scale" +msgstr "Échelle" + +#: resources/ui/gtk4/Matrix.ui:116 +msgid "Randomness" +msgstr "Aléatoire" + +#: resources/ui/gtk4/Matrix.ui:162 +msgid "Vertical Overshooting" +msgstr "Dépassement vertical" + +#: resources/ui/gtk4/Matrix.ui:208 +msgid "Trail Color" +msgstr "Couleur de la traîne" + +#: resources/ui/gtk4/Matrix.ui:242 +msgid "Tip Color" +msgstr "Couleur de la pointe" + +#: resources/ui/gtk4/BrokenGlass.ui:116 +msgid "Gravity" +msgstr "Gravité" + +#: resources/ui/gtk4/BrokenGlass.ui:162 +msgid "Blow Force" +msgstr "Force d'explosion" + +#: resources/ui/gtk4/BrokenGlass.ui:212 +msgid "Shatter From Pointer Location" +msgstr "Briser à partir de la position du curseur" + +#: resources/ui/gtk4/BrokenGlass.ui:221 +msgid "" +"The shards will fly away from where your mouse pointer was when closing the " +"window." +msgstr "" +"Les éclats s'envoleront de l'endroit où se trouvait le pointeur de votre " +"souris lorsque vous fermez la fenêtre." + +#: resources/ui/gtk4/Wisps.ui:116 resources/ui/gtk4/TVEffect.ui:70 +#: resources/ui/gtk4/EnergizeA.ui:116 resources/ui/gtk4/EnergizeB.ui:116 +#: resources/ui/gtk3/Wisps.ui:139 resources/ui/gtk3/TVEffect.ui:83 +#: resources/ui/gtk3/EnergizeA.ui:139 resources/ui/gtk3/EnergizeB.ui:139 +msgid "Color" +msgstr "Couleur" + +#: resources/ui/gtk4/Fire.ui:25 resources/ui/gtk3/Fire.ui:49 +msgid "Presets" +msgstr "Préréglages" + +#: resources/ui/gtk4/Fire.ui:141 resources/ui/gtk3/Fire.ui:189 +msgid "Speed" +msgstr "Vitesse" + +#: resources/ui/gtk4/Fire.ui:191 resources/ui/gtk3/Fire.ui:241 +msgid "3D Noise" +msgstr "Bruit 3D" + +#: resources/ui/gtk4/Fire.ui:200 resources/ui/gtk3/Fire.ui:250 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "" +"Crée un feu plus dynamique mais demande plus de puissance de la carte " +"graphique." + +#: resources/ui/gtk4/Fire.ui:240 resources/ui/gtk3/Fire.ui:300 +msgid "Gradient" +msgstr "Gradient" + +#: resources/ui/gtk4/TRexAttack.ui:70 +msgid "Claw Scratch Scale" +msgstr "Échelle de griffe" + +#: resources/ui/gtk4/TRexAttack.ui:116 +msgid "Claw Scratch Count" +msgstr "Nombre de coups" + +#: resources/ui/gtk4/TRexAttack.ui:162 +msgid "Warp Effect" +msgstr "Effet de distorsion" + +#: resources/ui/gtk4/TRexAttack.ui:208 +msgid "Flash Color" +msgstr "Couleur du flash" + +#: resources/ui/gtk4/effectPage.ui:37 resources/ui/gtk3/effectPage.ui:37 +msgid "Preview this Effect" +msgstr "Voir l'aperçu de cet effet" + +#: resources/ui/gtk4/prefs.ui:28 resources/ui/gtk3/prefs.ui:35 +msgid "Welcome to Burn-My-Windows!" +msgstr "Bienvenue dans Burn-My-Windows !" + +#: resources/ui/gtk4/prefs.ui:39 resources/ui/gtk3/prefs.ui:46 +msgid "If you like this extension, recommend it to your friends :)" +msgstr "Si vous aimez cette extension, recommandez-la à vos amis :)" + +#: resources/ui/gtk4/prefs.ui:66 resources/ui/gtk3/prefs.ui:74 +msgid "Open Window Animation" +msgstr "Animation d'ouverture de fenêtre" + +#: resources/ui/gtk4/prefs.ui:75 resources/ui/gtk4/prefs.ui:119 +#: resources/ui/gtk3/prefs.ui:83 resources/ui/gtk3/prefs.ui:147 +msgid "If multiple are selected, one is chosen randomly." +msgstr "Si plusieurs sont sélectionnés, un est choisi au hasard." + +#: resources/ui/gtk4/prefs.ui:90 resources/ui/gtk4/prefs.ui:134 +#: resources/ui/gtk3/prefs.ui:104 resources/ui/gtk3/prefs.ui:168 +msgid "Choose Effects" +msgstr "Choisir les effets" + +#: resources/ui/gtk4/prefs.ui:110 resources/ui/gtk3/prefs.ui:138 +msgid "Close Window Animation" +msgstr "Animation de fermeture de fenêtre" + +#: resources/ui/gtk4/prefs.ui:150 resources/ui/gtk3/prefs.ui:198 +msgid "Also Add Effects to Dialogs" +msgstr "Appliquer également les effets aux boîtes de dialogue" + +#: resources/ui/gtk3/Fire.ui:63 +msgid "Choose a Preset" +msgstr "Sélectionner un préréglage" + +#~ msgid "Via PayPal" +#~ msgstr "Via PayPal" + +#~ msgid "Via GitHub" +#~ msgstr "Via GitHub" diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..5ec4db2 --- /dev/null +++ b/po/it.po @@ -0,0 +1,307 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Simon Schneegans +# This file is distributed under the same license as the Burn-My-Windows package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Burn-My-Windows\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-02-18 20:33+0100\n" +"PO-Revision-Date: 2022-02-28 12:56+0000\n" +"Last-Translator: albanobattistella \n" +"Language-Team: Italian \n" +"Language: it\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.11.1-dev\n" + +#: prefs.js:111 +msgid "Effect Options" +msgstr "Opzioni effetto" + +#: prefs.js:139 +msgid "Go Back" +msgstr "Indietro" + +#: prefs.js:181 +msgid "General Options" +msgstr "Opzioni generali" + +#: prefs.js:276 +msgid "Gold Sponsors" +msgstr "Sponsor d'oro" + +#: prefs.js:279 +msgid "Silver Sponsors" +msgstr "Sponsor d'argento" + +#: prefs.js:282 +msgid "Bronze Sponsors" +msgstr "Sponsor di bronzo" + +#: prefs.js:285 +msgid "Past Sponsors" +msgstr "Sponsor passati" + +#. Translators: %s will be replaced by the effect's name. +#: prefs.js:512 +#, javascript-format +msgid "Preview for %s" +msgstr "Anteprima per %s" + +#: prefs.js:534 +msgid "Close this Window to Preview the Effect!" +msgstr "Chiudi questa finestra per visualizzare in anteprima l'effetto!" + +#: src/BrokenGlass.js:57 +msgid "Broken Glass" +msgstr "Vetro rotto" + +#: src/TVEffect.js:56 +msgid "TV Effect" +msgstr "Effetto TV" + +#: src/TRexAttack.js:56 +msgid "T-Rex Attack" +msgstr "Attacco T-Rex" + +#: src/Wisps.js:55 +msgid "Wisps" +msgstr "Scintille" + +#: src/Fire.js:58 +msgid "Fire" +msgstr "Fuoco" + +#: src/Fire.js:130 +msgid "Default Fire" +msgstr "Fuoco predefinito" + +#: src/Fire.js:140 +msgid "Hell Fire" +msgstr "Fuoco Infernale" + +#: src/Fire.js:150 +msgid "Dark and Smutty" +msgstr "Scuro e Tenebroso" + +#: src/Fire.js:160 +msgid "Cold Breeze" +msgstr "Brezza Fredda" + +#: src/Fire.js:170 +msgid "Santa is Coming" +msgstr "Babbo Natale sta arrivando" + +#: src/EnergizeA.js:54 +msgid "Energize A" +msgstr "Energia A" + +#: src/EnergizeB.js:54 +msgid "Energize B" +msgstr "Energia B" + +#: src/Matrix.js:58 +msgid "Matrix" +msgstr "Matrix" + +#: resources/ui/common/main-menu.ui:6 +msgid "Visit Homepage" +msgstr "Visita la home page" + +#: resources/ui/common/main-menu.ui:10 +msgid "View Changelog" +msgstr "Visualizza Changelog" + +#: resources/ui/common/main-menu.ui:16 +msgid "Report a Bug" +msgstr "Segnala un bug" + +#: resources/ui/common/main-menu.ui:20 +msgid "Create an Effect" +msgstr "Crea un effetto" + +#: resources/ui/common/main-menu.ui:24 +msgid "Translate" +msgstr "Traduci" + +#: resources/ui/common/main-menu.ui:28 +msgid "Donate" +msgstr "Donare" + +#: resources/ui/common/main-menu.ui:45 +msgid "About Burn-My-Windows" +msgstr "Informazioni su Burn-My-Windows" + +#: resources/ui/gtk4/Matrix.ui:24 resources/ui/gtk4/BrokenGlass.ui:24 +#: resources/ui/gtk4/Wisps.ui:24 resources/ui/gtk4/Fire.ui:49 +#: resources/ui/gtk4/TRexAttack.ui:24 resources/ui/gtk4/TVEffect.ui:24 +#: resources/ui/gtk4/EnergizeA.ui:24 resources/ui/gtk4/EnergizeB.ui:24 +#: resources/ui/gtk3/Wisps.ui:42 resources/ui/gtk3/Fire.ui:93 +#: resources/ui/gtk3/TVEffect.ui:35 resources/ui/gtk3/EnergizeA.ui:42 +#: resources/ui/gtk3/EnergizeB.ui:42 +msgid "Animation Time [ms]" +msgstr "Tempo animazione [ms]" + +#: resources/ui/gtk4/Matrix.ui:52 resources/ui/gtk4/Matrix.ui:98 +#: resources/ui/gtk4/Matrix.ui:144 resources/ui/gtk4/Matrix.ui:190 +#: resources/ui/gtk4/Matrix.ui:224 resources/ui/gtk4/Matrix.ui:258 +#: resources/ui/gtk4/BrokenGlass.ui:52 resources/ui/gtk4/BrokenGlass.ui:98 +#: resources/ui/gtk4/BrokenGlass.ui:144 resources/ui/gtk4/BrokenGlass.ui:190 +#: resources/ui/gtk4/BrokenGlass.ui:244 resources/ui/gtk4/Wisps.ui:52 +#: resources/ui/gtk4/Wisps.ui:98 resources/ui/gtk4/Wisps.ui:132 +#: resources/ui/gtk4/Fire.ui:77 resources/ui/gtk4/Fire.ui:123 +#: resources/ui/gtk4/Fire.ui:169 resources/ui/gtk4/Fire.ui:222 +#: resources/ui/gtk4/Fire.ui:280 resources/ui/gtk4/TRexAttack.ui:52 +#: resources/ui/gtk4/TRexAttack.ui:98 resources/ui/gtk4/TRexAttack.ui:144 +#: resources/ui/gtk4/TRexAttack.ui:190 resources/ui/gtk4/TRexAttack.ui:224 +#: resources/ui/gtk4/TVEffect.ui:52 resources/ui/gtk4/TVEffect.ui:86 +#: resources/ui/gtk4/EnergizeA.ui:52 resources/ui/gtk4/EnergizeA.ui:98 +#: resources/ui/gtk4/EnergizeA.ui:132 resources/ui/gtk4/EnergizeB.ui:52 +#: resources/ui/gtk4/EnergizeB.ui:98 resources/ui/gtk4/EnergizeB.ui:132 +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/Wisps.ui:68 +#: resources/ui/gtk3/Wisps.ui:117 resources/ui/gtk3/Wisps.ui:160 +#: resources/ui/gtk3/Fire.ui:119 resources/ui/gtk3/Fire.ui:167 +#: resources/ui/gtk3/Fire.ui:215 resources/ui/gtk3/Fire.ui:277 +#: resources/ui/gtk3/Fire.ui:345 resources/ui/gtk3/TVEffect.ui:61 +#: resources/ui/gtk3/TVEffect.ui:104 resources/ui/gtk3/EnergizeA.ui:68 +#: resources/ui/gtk3/EnergizeA.ui:117 resources/ui/gtk3/EnergizeA.ui:160 +#: resources/ui/gtk3/EnergizeB.ui:68 resources/ui/gtk3/EnergizeB.ui:117 +#: resources/ui/gtk3/EnergizeB.ui:160 resources/ui/gtk3/prefs.ui:219 +msgid "Reset to Default Value" +msgstr "Ripristina valore predefinito" + +#: resources/ui/gtk4/Matrix.ui:70 resources/ui/gtk4/BrokenGlass.ui:70 +#: resources/ui/gtk4/Wisps.ui:70 resources/ui/gtk4/Fire.ui:95 +#: resources/ui/gtk4/EnergizeA.ui:70 resources/ui/gtk4/EnergizeB.ui:70 +#: resources/ui/gtk3/Wisps.ui:91 resources/ui/gtk3/Fire.ui:141 +#: resources/ui/gtk3/EnergizeA.ui:91 resources/ui/gtk3/EnergizeB.ui:91 +msgid "Scale" +msgstr "Scala" + +#: resources/ui/gtk4/Matrix.ui:116 +msgid "Randomness" +msgstr "Casuale" + +#: resources/ui/gtk4/Matrix.ui:162 +msgid "Vertical Overshooting" +msgstr "Sovrapposizione Verticale" + +#: resources/ui/gtk4/Matrix.ui:208 +msgid "Trail Color" +msgstr "Colore della pista" + +#: resources/ui/gtk4/Matrix.ui:242 +msgid "Tip Color" +msgstr "Colore della Punta" + +#: resources/ui/gtk4/BrokenGlass.ui:116 +msgid "Gravity" +msgstr "Gravità" + +#: resources/ui/gtk4/BrokenGlass.ui:162 +msgid "Blow Force" +msgstr "Forza Esplosiva" + +#: resources/ui/gtk4/BrokenGlass.ui:212 +msgid "Shatter From Pointer Location" +msgstr "Frammento dalla posizione del puntatore" + +#: resources/ui/gtk4/BrokenGlass.ui:221 +msgid "" +"The shards will fly away from where your mouse pointer was when closing the " +"window." +msgstr "" +"I frammenti voleranno fuori dal punto in cui si trovava il puntatore del " +"mouse quando chiudi la finestra." + +#: resources/ui/gtk4/Wisps.ui:116 resources/ui/gtk4/TVEffect.ui:70 +#: resources/ui/gtk4/EnergizeA.ui:116 resources/ui/gtk4/EnergizeB.ui:116 +#: resources/ui/gtk3/Wisps.ui:139 resources/ui/gtk3/TVEffect.ui:83 +#: resources/ui/gtk3/EnergizeA.ui:139 resources/ui/gtk3/EnergizeB.ui:139 +msgid "Color" +msgstr "Colore" + +#: resources/ui/gtk4/Fire.ui:25 resources/ui/gtk3/Fire.ui:49 +msgid "Presets" +msgstr "Preimpostazioni" + +#: resources/ui/gtk4/Fire.ui:141 resources/ui/gtk3/Fire.ui:189 +msgid "Speed" +msgstr "Velocità" + +#: resources/ui/gtk4/Fire.ui:191 resources/ui/gtk3/Fire.ui:241 +msgid "3D Noise" +msgstr "Rumore 3D" + +#: resources/ui/gtk4/Fire.ui:200 resources/ui/gtk3/Fire.ui:250 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "Crea un fuoco più dinamico ma richiede più potenza della GPU." + +#: resources/ui/gtk4/Fire.ui:240 resources/ui/gtk3/Fire.ui:300 +msgid "Gradient" +msgstr "Gradiente" + +#: resources/ui/gtk4/TRexAttack.ui:70 +msgid "Claw Scratch Scale" +msgstr "Scala ad Artiglio" + +#: resources/ui/gtk4/TRexAttack.ui:116 +msgid "Claw Scratch Count" +msgstr "Numero di colpi" + +#: resources/ui/gtk4/TRexAttack.ui:162 +msgid "Warp Effect" +msgstr "Effetto Distorsione" + +#: resources/ui/gtk4/TRexAttack.ui:208 +msgid "Flash Color" +msgstr "Colore Flash" + +#: resources/ui/gtk4/effectPage.ui:37 resources/ui/gtk3/effectPage.ui:37 +msgid "Preview this Effect" +msgstr "Anteprima di questo effetto" + +#: resources/ui/gtk4/prefs.ui:28 resources/ui/gtk3/prefs.ui:35 +msgid "Welcome to Burn-My-Windows!" +msgstr "Benvenuto in Burn-My-Windows!" + +#: resources/ui/gtk4/prefs.ui:39 resources/ui/gtk3/prefs.ui:46 +msgid "If you like this extension, recommend it to your friends :)" +msgstr "Se ti piace questa estensione, consigliala ai tuoi amici :)" + +#: resources/ui/gtk4/prefs.ui:66 resources/ui/gtk3/prefs.ui:74 +msgid "Open Window Animation" +msgstr "Animazione all'apertura della finestra" + +#: resources/ui/gtk4/prefs.ui:75 resources/ui/gtk4/prefs.ui:119 +#: resources/ui/gtk3/prefs.ui:83 resources/ui/gtk3/prefs.ui:147 +msgid "If multiple are selected, one is chosen randomly." +msgstr "Se ne vengono selezionati multipli, uno viene scelto a caso." + +#: resources/ui/gtk4/prefs.ui:90 resources/ui/gtk4/prefs.ui:134 +#: resources/ui/gtk3/prefs.ui:104 resources/ui/gtk3/prefs.ui:168 +msgid "Choose Effects" +msgstr "Scegli Effetti" + +#: resources/ui/gtk4/prefs.ui:110 resources/ui/gtk3/prefs.ui:138 +msgid "Close Window Animation" +msgstr "Animazione alla chiusura della finestra" + +#: resources/ui/gtk4/prefs.ui:150 resources/ui/gtk3/prefs.ui:198 +msgid "Also Add Effects to Dialogs" +msgstr "Aggiungi anche effetti ai dialoghi" + +#: resources/ui/gtk3/Fire.ui:63 +msgid "Choose a Preset" +msgstr "Scegli un predefinito" + +#~ msgid "Via PayPal" +#~ msgstr "Tramite PayPal" + +#~ msgid "Via GitHub" +#~ msgstr "Tramite GitHub" diff --git a/po/nb_NO.po b/po/nb_NO.po new file mode 100644 index 0000000..fbf6a26 --- /dev/null +++ b/po/nb_NO.po @@ -0,0 +1,305 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Simon Schneegans +# This file is distributed under the same license as the Burn-My-Windows package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Burn-My-Windows\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-02-18 20:33+0100\n" +"PO-Revision-Date: 2022-01-29 12:30+0000\n" +"Last-Translator: Allan Nordhøy \n" +"Language-Team: Norwegian Bokmål \n" +"Language: nb_NO\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.11-dev\n" + +#: prefs.js:111 +msgid "Effect Options" +msgstr "" + +#: prefs.js:139 +msgid "Go Back" +msgstr "" + +#: prefs.js:181 +msgid "General Options" +msgstr "" + +#: prefs.js:276 +msgid "Gold Sponsors" +msgstr "" + +#: prefs.js:279 +msgid "Silver Sponsors" +msgstr "" + +#: prefs.js:282 +msgid "Bronze Sponsors" +msgstr "" + +#: prefs.js:285 +msgid "Past Sponsors" +msgstr "" + +#. Translators: %s will be replaced by the effect's name. +#: prefs.js:512 +#, javascript-format +msgid "Preview for %s" +msgstr "" + +#: prefs.js:534 +msgid "Close this Window to Preview the Effect!" +msgstr "" + +#: src/BrokenGlass.js:57 +msgid "Broken Glass" +msgstr "" + +#: src/TVEffect.js:56 +msgid "TV Effect" +msgstr "" + +#: src/TRexAttack.js:56 +msgid "T-Rex Attack" +msgstr "" + +#: src/Wisps.js:55 +msgid "Wisps" +msgstr "" + +#: src/Fire.js:58 +msgid "Fire" +msgstr "" + +#: src/Fire.js:130 +msgid "Default Fire" +msgstr "" + +#: src/Fire.js:140 +msgid "Hell Fire" +msgstr "" + +#: src/Fire.js:150 +msgid "Dark and Smutty" +msgstr "" + +#: src/Fire.js:160 +msgid "Cold Breeze" +msgstr "" + +#: src/Fire.js:170 +msgid "Santa is Coming" +msgstr "" + +#: src/EnergizeA.js:54 +msgid "Energize A" +msgstr "" + +#: src/EnergizeB.js:54 +msgid "Energize B" +msgstr "" + +#: src/Matrix.js:58 +msgid "Matrix" +msgstr "" + +#: resources/ui/common/main-menu.ui:6 +msgid "Visit Homepage" +msgstr "" + +#: resources/ui/common/main-menu.ui:10 +msgid "View Changelog" +msgstr "" + +#: resources/ui/common/main-menu.ui:16 +msgid "Report a Bug" +msgstr "" + +#: resources/ui/common/main-menu.ui:20 +msgid "Create an Effect" +msgstr "" + +#: resources/ui/common/main-menu.ui:24 +msgid "Translate" +msgstr "Oversett" + +#: resources/ui/common/main-menu.ui:28 +msgid "Donate" +msgstr "Doner" + +#: resources/ui/common/main-menu.ui:45 +msgid "About Burn-My-Windows" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:24 resources/ui/gtk4/BrokenGlass.ui:24 +#: resources/ui/gtk4/Wisps.ui:24 resources/ui/gtk4/Fire.ui:49 +#: resources/ui/gtk4/TRexAttack.ui:24 resources/ui/gtk4/TVEffect.ui:24 +#: resources/ui/gtk4/EnergizeA.ui:24 resources/ui/gtk4/EnergizeB.ui:24 +#: resources/ui/gtk3/Wisps.ui:42 resources/ui/gtk3/Fire.ui:93 +#: resources/ui/gtk3/TVEffect.ui:35 resources/ui/gtk3/EnergizeA.ui:42 +#: resources/ui/gtk3/EnergizeB.ui:42 +msgid "Animation Time [ms]" +msgstr "Animasjonstid [ms]" + +#: resources/ui/gtk4/Matrix.ui:52 resources/ui/gtk4/Matrix.ui:98 +#: resources/ui/gtk4/Matrix.ui:144 resources/ui/gtk4/Matrix.ui:190 +#: resources/ui/gtk4/Matrix.ui:224 resources/ui/gtk4/Matrix.ui:258 +#: resources/ui/gtk4/BrokenGlass.ui:52 resources/ui/gtk4/BrokenGlass.ui:98 +#: resources/ui/gtk4/BrokenGlass.ui:144 resources/ui/gtk4/BrokenGlass.ui:190 +#: resources/ui/gtk4/BrokenGlass.ui:244 resources/ui/gtk4/Wisps.ui:52 +#: resources/ui/gtk4/Wisps.ui:98 resources/ui/gtk4/Wisps.ui:132 +#: resources/ui/gtk4/Fire.ui:77 resources/ui/gtk4/Fire.ui:123 +#: resources/ui/gtk4/Fire.ui:169 resources/ui/gtk4/Fire.ui:222 +#: resources/ui/gtk4/Fire.ui:280 resources/ui/gtk4/TRexAttack.ui:52 +#: resources/ui/gtk4/TRexAttack.ui:98 resources/ui/gtk4/TRexAttack.ui:144 +#: resources/ui/gtk4/TRexAttack.ui:190 resources/ui/gtk4/TRexAttack.ui:224 +#: resources/ui/gtk4/TVEffect.ui:52 resources/ui/gtk4/TVEffect.ui:86 +#: resources/ui/gtk4/EnergizeA.ui:52 resources/ui/gtk4/EnergizeA.ui:98 +#: resources/ui/gtk4/EnergizeA.ui:132 resources/ui/gtk4/EnergizeB.ui:52 +#: resources/ui/gtk4/EnergizeB.ui:98 resources/ui/gtk4/EnergizeB.ui:132 +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/Wisps.ui:68 +#: resources/ui/gtk3/Wisps.ui:117 resources/ui/gtk3/Wisps.ui:160 +#: resources/ui/gtk3/Fire.ui:119 resources/ui/gtk3/Fire.ui:167 +#: resources/ui/gtk3/Fire.ui:215 resources/ui/gtk3/Fire.ui:277 +#: resources/ui/gtk3/Fire.ui:345 resources/ui/gtk3/TVEffect.ui:61 +#: resources/ui/gtk3/TVEffect.ui:104 resources/ui/gtk3/EnergizeA.ui:68 +#: resources/ui/gtk3/EnergizeA.ui:117 resources/ui/gtk3/EnergizeA.ui:160 +#: resources/ui/gtk3/EnergizeB.ui:68 resources/ui/gtk3/EnergizeB.ui:117 +#: resources/ui/gtk3/EnergizeB.ui:160 resources/ui/gtk3/prefs.ui:219 +msgid "Reset to Default Value" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:70 resources/ui/gtk4/BrokenGlass.ui:70 +#: resources/ui/gtk4/Wisps.ui:70 resources/ui/gtk4/Fire.ui:95 +#: resources/ui/gtk4/EnergizeA.ui:70 resources/ui/gtk4/EnergizeB.ui:70 +#: resources/ui/gtk3/Wisps.ui:91 resources/ui/gtk3/Fire.ui:141 +#: resources/ui/gtk3/EnergizeA.ui:91 resources/ui/gtk3/EnergizeB.ui:91 +msgid "Scale" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:116 +msgid "Randomness" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:162 +msgid "Vertical Overshooting" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:208 +msgid "Trail Color" +msgstr "" + +#: resources/ui/gtk4/Matrix.ui:242 +msgid "Tip Color" +msgstr "" + +#: resources/ui/gtk4/BrokenGlass.ui:116 +msgid "Gravity" +msgstr "" + +#: resources/ui/gtk4/BrokenGlass.ui:162 +msgid "Blow Force" +msgstr "" + +#: resources/ui/gtk4/BrokenGlass.ui:212 +msgid "Shatter From Pointer Location" +msgstr "" + +#: resources/ui/gtk4/BrokenGlass.ui:221 +msgid "" +"The shards will fly away from where your mouse pointer was when closing the " +"window." +msgstr "" + +#: resources/ui/gtk4/Wisps.ui:116 resources/ui/gtk4/TVEffect.ui:70 +#: resources/ui/gtk4/EnergizeA.ui:116 resources/ui/gtk4/EnergizeB.ui:116 +#: resources/ui/gtk3/Wisps.ui:139 resources/ui/gtk3/TVEffect.ui:83 +#: resources/ui/gtk3/EnergizeA.ui:139 resources/ui/gtk3/EnergizeB.ui:139 +msgid "Color" +msgstr "" + +#: resources/ui/gtk4/Fire.ui:25 resources/ui/gtk3/Fire.ui:49 +msgid "Presets" +msgstr "" + +#: resources/ui/gtk4/Fire.ui:141 resources/ui/gtk3/Fire.ui:189 +msgid "Speed" +msgstr "" + +#: resources/ui/gtk4/Fire.ui:191 resources/ui/gtk3/Fire.ui:241 +msgid "3D Noise" +msgstr "" + +#: resources/ui/gtk4/Fire.ui:200 resources/ui/gtk3/Fire.ui:250 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "" + +#: resources/ui/gtk4/Fire.ui:240 resources/ui/gtk3/Fire.ui:300 +msgid "Gradient" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:70 +msgid "Claw Scratch Scale" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:116 +msgid "Claw Scratch Count" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:162 +msgid "Warp Effect" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:208 +msgid "Flash Color" +msgstr "" + +#: resources/ui/gtk4/effectPage.ui:37 resources/ui/gtk3/effectPage.ui:37 +msgid "Preview this Effect" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:28 resources/ui/gtk3/prefs.ui:35 +msgid "Welcome to Burn-My-Windows!" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:39 resources/ui/gtk3/prefs.ui:46 +msgid "If you like this extension, recommend it to your friends :)" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:66 resources/ui/gtk3/prefs.ui:74 +msgid "Open Window Animation" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:75 resources/ui/gtk4/prefs.ui:119 +#: resources/ui/gtk3/prefs.ui:83 resources/ui/gtk3/prefs.ui:147 +msgid "If multiple are selected, one is chosen randomly." +msgstr "" + +#: resources/ui/gtk4/prefs.ui:90 resources/ui/gtk4/prefs.ui:134 +#: resources/ui/gtk3/prefs.ui:104 resources/ui/gtk3/prefs.ui:168 +msgid "Choose Effects" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:110 resources/ui/gtk3/prefs.ui:138 +msgid "Close Window Animation" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:150 resources/ui/gtk3/prefs.ui:198 +msgid "Also Add Effects to Dialogs" +msgstr "" + +#: resources/ui/gtk3/Fire.ui:63 +msgid "Choose a Preset" +msgstr "" + +#~ msgid "Via PayPal" +#~ msgstr "med PayPal" + +#~ msgid "Via GitHub" +#~ msgstr "på GitHub" diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..e416410 --- /dev/null +++ b/po/nl.po @@ -0,0 +1,308 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Simon Schneegans +# This file is distributed under the same license as the Burn-My-Windows package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Burn-My-Windows\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-02-18 20:33+0100\n" +"PO-Revision-Date: 2022-02-21 11:58+0000\n" +"Last-Translator: Heimen Stoffels \n" +"Language-Team: Dutch \n" +"Language: nl\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.11-dev\n" + +#: prefs.js:111 +msgid "Effect Options" +msgstr "Effectvoorkeuren" + +#: prefs.js:139 +msgid "Go Back" +msgstr "Scherm sluiten" + +#: prefs.js:181 +msgid "General Options" +msgstr "Algemene voorkeuren" + +#: prefs.js:276 +msgid "Gold Sponsors" +msgstr "Gouden sponsoren" + +#: prefs.js:279 +msgid "Silver Sponsors" +msgstr "Zilveren sponsoren" + +#: prefs.js:282 +msgid "Bronze Sponsors" +msgstr "Bronzen sponsoren" + +#: prefs.js:285 +msgid "Past Sponsors" +msgstr "Voormalige sponsoren" + +#. Translators: %s will be replaced by the effect's name. +#: prefs.js:512 +#, javascript-format +msgid "Preview for %s" +msgstr "%s-voorvertoning" + +#: prefs.js:534 +msgid "Close this Window to Preview the Effect!" +msgstr "Sluit dit venster om het effect voor te vertonen." + +#: src/BrokenGlass.js:57 +msgid "Broken Glass" +msgstr "Gebroken glas" + +#: src/TVEffect.js:56 +msgid "TV Effect" +msgstr "Tv-effect" + +#: src/TRexAttack.js:56 +msgid "T-Rex Attack" +msgstr "T-Rex-aanval" + +#: src/Wisps.js:55 +msgid "Wisps" +msgstr "Dwaallicht" + +#: src/Fire.js:58 +msgid "Fire" +msgstr "Vuur" + +#: src/Fire.js:130 +msgid "Default Fire" +msgstr "Normaal vuur" + +#: src/Fire.js:140 +msgid "Hell Fire" +msgstr "Hellevuur" + +#: src/Fire.js:150 +msgid "Dark and Smutty" +msgstr "Donker en zwart" + +#: src/Fire.js:160 +msgid "Cold Breeze" +msgstr "Koude wind" + +#: src/Fire.js:170 +msgid "Santa is Coming" +msgstr "Kerstmanvuur" + +#: src/EnergizeA.js:54 +msgid "Energize A" +msgstr "Stimulatie A" + +#: src/EnergizeB.js:54 +msgid "Energize B" +msgstr "Stimulatie B" + +#: src/Matrix.js:58 +msgid "Matrix" +msgstr "Matrix" + +#: resources/ui/common/main-menu.ui:6 +msgid "Visit Homepage" +msgstr "Website openen" + +#: resources/ui/common/main-menu.ui:10 +msgid "View Changelog" +msgstr "Wijzigingslog bekijken" + +#: resources/ui/common/main-menu.ui:16 +msgid "Report a Bug" +msgstr "Bug melden" + +#: resources/ui/common/main-menu.ui:20 +msgid "Create an Effect" +msgstr "Effect creëren" + +#: resources/ui/common/main-menu.ui:24 +msgid "Translate" +msgstr "Vertalen" + +#: resources/ui/common/main-menu.ui:28 +msgid "Donate" +msgstr "Doneren" + +#: resources/ui/common/main-menu.ui:45 +msgid "About Burn-My-Windows" +msgstr "Over Burn-My-Windows" + +#: resources/ui/gtk4/Matrix.ui:24 resources/ui/gtk4/BrokenGlass.ui:24 +#: resources/ui/gtk4/Wisps.ui:24 resources/ui/gtk4/Fire.ui:49 +#: resources/ui/gtk4/TRexAttack.ui:24 resources/ui/gtk4/TVEffect.ui:24 +#: resources/ui/gtk4/EnergizeA.ui:24 resources/ui/gtk4/EnergizeB.ui:24 +#: resources/ui/gtk3/Wisps.ui:42 resources/ui/gtk3/Fire.ui:93 +#: resources/ui/gtk3/TVEffect.ui:35 resources/ui/gtk3/EnergizeA.ui:42 +#: resources/ui/gtk3/EnergizeB.ui:42 +msgid "Animation Time [ms]" +msgstr "Animatieduur [in ms]" + +#: resources/ui/gtk4/Matrix.ui:52 resources/ui/gtk4/Matrix.ui:98 +#: resources/ui/gtk4/Matrix.ui:144 resources/ui/gtk4/Matrix.ui:190 +#: resources/ui/gtk4/Matrix.ui:224 resources/ui/gtk4/Matrix.ui:258 +#: resources/ui/gtk4/BrokenGlass.ui:52 resources/ui/gtk4/BrokenGlass.ui:98 +#: resources/ui/gtk4/BrokenGlass.ui:144 resources/ui/gtk4/BrokenGlass.ui:190 +#: resources/ui/gtk4/BrokenGlass.ui:244 resources/ui/gtk4/Wisps.ui:52 +#: resources/ui/gtk4/Wisps.ui:98 resources/ui/gtk4/Wisps.ui:132 +#: resources/ui/gtk4/Fire.ui:77 resources/ui/gtk4/Fire.ui:123 +#: resources/ui/gtk4/Fire.ui:169 resources/ui/gtk4/Fire.ui:222 +#: resources/ui/gtk4/Fire.ui:280 resources/ui/gtk4/TRexAttack.ui:52 +#: resources/ui/gtk4/TRexAttack.ui:98 resources/ui/gtk4/TRexAttack.ui:144 +#: resources/ui/gtk4/TRexAttack.ui:190 resources/ui/gtk4/TRexAttack.ui:224 +#: resources/ui/gtk4/TVEffect.ui:52 resources/ui/gtk4/TVEffect.ui:86 +#: resources/ui/gtk4/EnergizeA.ui:52 resources/ui/gtk4/EnergizeA.ui:98 +#: resources/ui/gtk4/EnergizeA.ui:132 resources/ui/gtk4/EnergizeB.ui:52 +#: resources/ui/gtk4/EnergizeB.ui:98 resources/ui/gtk4/EnergizeB.ui:132 +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/Wisps.ui:68 +#: resources/ui/gtk3/Wisps.ui:117 resources/ui/gtk3/Wisps.ui:160 +#: resources/ui/gtk3/Fire.ui:119 resources/ui/gtk3/Fire.ui:167 +#: resources/ui/gtk3/Fire.ui:215 resources/ui/gtk3/Fire.ui:277 +#: resources/ui/gtk3/Fire.ui:345 resources/ui/gtk3/TVEffect.ui:61 +#: resources/ui/gtk3/TVEffect.ui:104 resources/ui/gtk3/EnergizeA.ui:68 +#: resources/ui/gtk3/EnergizeA.ui:117 resources/ui/gtk3/EnergizeA.ui:160 +#: resources/ui/gtk3/EnergizeB.ui:68 resources/ui/gtk3/EnergizeB.ui:117 +#: resources/ui/gtk3/EnergizeB.ui:160 resources/ui/gtk3/prefs.ui:219 +msgid "Reset to Default Value" +msgstr "Standaardwaarde herstellen" + +#: resources/ui/gtk4/Matrix.ui:70 resources/ui/gtk4/BrokenGlass.ui:70 +#: resources/ui/gtk4/Wisps.ui:70 resources/ui/gtk4/Fire.ui:95 +#: resources/ui/gtk4/EnergizeA.ui:70 resources/ui/gtk4/EnergizeB.ui:70 +#: resources/ui/gtk3/Wisps.ui:91 resources/ui/gtk3/Fire.ui:141 +#: resources/ui/gtk3/EnergizeA.ui:91 resources/ui/gtk3/EnergizeB.ui:91 +msgid "Scale" +msgstr "Schaal" + +#: resources/ui/gtk4/Matrix.ui:116 +msgid "Randomness" +msgstr "Willekeurigheid" + +#: resources/ui/gtk4/Matrix.ui:162 +msgid "Vertical Overshooting" +msgstr "Verticale verspringing" + +#: resources/ui/gtk4/Matrix.ui:208 +msgid "Trail Color" +msgstr "Sleepspoorkleur" + +#: resources/ui/gtk4/Matrix.ui:242 +msgid "Tip Color" +msgstr "Piekkleur" + +#: resources/ui/gtk4/BrokenGlass.ui:116 +msgid "Gravity" +msgstr "Zwaartekracht" + +#: resources/ui/gtk4/BrokenGlass.ui:162 +msgid "Blow Force" +msgstr "Windkracht" + +#: resources/ui/gtk4/BrokenGlass.ui:212 +msgid "Shatter From Pointer Location" +msgstr "Uiteenvallen bij cursorpositie" + +#: resources/ui/gtk4/BrokenGlass.ui:221 +msgid "" +"The shards will fly away from where your mouse pointer was when closing the " +"window." +msgstr "" +"De stukken vliegen weg vanaf de cursorpositie na het sluiten van een venster." + +#: resources/ui/gtk4/Wisps.ui:116 resources/ui/gtk4/TVEffect.ui:70 +#: resources/ui/gtk4/EnergizeA.ui:116 resources/ui/gtk4/EnergizeB.ui:116 +#: resources/ui/gtk3/Wisps.ui:139 resources/ui/gtk3/TVEffect.ui:83 +#: resources/ui/gtk3/EnergizeA.ui:139 resources/ui/gtk3/EnergizeB.ui:139 +msgid "Color" +msgstr "Kleur" + +#: resources/ui/gtk4/Fire.ui:25 resources/ui/gtk3/Fire.ui:49 +msgid "Presets" +msgstr "Voorinstellingen" + +#: resources/ui/gtk4/Fire.ui:141 resources/ui/gtk3/Fire.ui:189 +msgid "Speed" +msgstr "Snelheid" + +#: resources/ui/gtk4/Fire.ui:191 resources/ui/gtk3/Fire.ui:241 +msgid "3D Noise" +msgstr "3D-ruis" + +#: resources/ui/gtk4/Fire.ui:200 resources/ui/gtk3/Fire.ui:250 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "Zorgt voor een speels vuur, maar vereist meer computerkracht." + +#: resources/ui/gtk4/Fire.ui:240 resources/ui/gtk3/Fire.ui:300 +msgid "Gradient" +msgstr "Verloop" + +#: resources/ui/gtk4/TRexAttack.ui:70 +msgid "Claw Scratch Scale" +msgstr "Schaal van pootkrabben" + +#: resources/ui/gtk4/TRexAttack.ui:116 +msgid "Claw Scratch Count" +msgstr "Aantal pootkrabben" + +#: resources/ui/gtk4/TRexAttack.ui:162 +msgid "Warp Effect" +msgstr "Vervormingseffect" + +#: resources/ui/gtk4/TRexAttack.ui:208 +msgid "Flash Color" +msgstr "Flitskleur" + +#: resources/ui/gtk4/effectPage.ui:37 resources/ui/gtk3/effectPage.ui:37 +msgid "Preview this Effect" +msgstr "Voorvertonen" + +#: resources/ui/gtk4/prefs.ui:28 resources/ui/gtk3/prefs.ui:35 +msgid "Welcome to Burn-My-Windows!" +msgstr "Welkom bij ‘Burn-My-Windows’!" + +#: resources/ui/gtk4/prefs.ui:39 resources/ui/gtk3/prefs.ui:46 +msgid "If you like this extension, recommend it to your friends :)" +msgstr "" +"Als u deze uitbreiding leuk vindt, deel hem dan met vrienden en kennissen. :)" + +#: resources/ui/gtk4/prefs.ui:66 resources/ui/gtk3/prefs.ui:74 +msgid "Open Window Animation" +msgstr "Animatie bij openen van vensters" + +#: resources/ui/gtk4/prefs.ui:75 resources/ui/gtk4/prefs.ui:119 +#: resources/ui/gtk3/prefs.ui:83 resources/ui/gtk3/prefs.ui:147 +msgid "If multiple are selected, one is chosen randomly." +msgstr "" +"Als er meerdere effecten zijn geselecteerd, dan wordt er willekeurig gekozen." + +#: resources/ui/gtk4/prefs.ui:90 resources/ui/gtk4/prefs.ui:134 +#: resources/ui/gtk3/prefs.ui:104 resources/ui/gtk3/prefs.ui:168 +msgid "Choose Effects" +msgstr "Kies de effecten" + +#: resources/ui/gtk4/prefs.ui:110 resources/ui/gtk3/prefs.ui:138 +msgid "Close Window Animation" +msgstr "Animatie bij sluiten van vensters" + +#: resources/ui/gtk4/prefs.ui:150 resources/ui/gtk3/prefs.ui:198 +msgid "Also Add Effects to Dialogs" +msgstr "Dialoogvensters ook voorzien van effecten" + +#: resources/ui/gtk3/Fire.ui:63 +msgid "Choose a Preset" +msgstr "Kies een voorinstelling" + +#~ msgid "Via PayPal" +#~ msgstr "Via PayPal" + +#~ msgid "Via GitHub" +#~ msgstr "Via GitHub" diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..062e8cc --- /dev/null +++ b/po/ru.po @@ -0,0 +1,304 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Simon Schneegans +# This file is distributed under the same license as the Burn-My-Windows package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Burn-My-Windows\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-02-18 20:33+0100\n" +"PO-Revision-Date: 2022-03-29 18:24+0000\n" +"Last-Translator: ANIGO R. (AR) \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.12-dev\n" + +#: prefs.js:111 +msgid "Effect Options" +msgstr "Параметры эффекта" + +#: prefs.js:139 +msgid "Go Back" +msgstr "Назад" + +#: prefs.js:181 +msgid "General Options" +msgstr "Общие настройки" + +#: prefs.js:276 +msgid "Gold Sponsors" +msgstr "Золотые спонсоры" + +#: prefs.js:279 +msgid "Silver Sponsors" +msgstr "Серебряные спонсоры" + +#: prefs.js:282 +msgid "Bronze Sponsors" +msgstr "Бронзовые спонсоры" + +#: prefs.js:285 +msgid "Past Sponsors" +msgstr "Прошлые спонсоры" + +#. Translators: %s will be replaced by the effect's name. +#: prefs.js:512 +#, javascript-format +msgid "Preview for %s" +msgstr "Предварительный просмотр %s" + +#: prefs.js:534 +msgid "Close this Window to Preview the Effect!" +msgstr "Закройте это окно для предварительного просмотра эффекта!" + +#: src/BrokenGlass.js:57 +msgid "Broken Glass" +msgstr "Разбитое стекло" + +#: src/TVEffect.js:56 +msgid "TV Effect" +msgstr "Телевизионный эффект" + +#: src/TRexAttack.js:56 +msgid "T-Rex Attack" +msgstr "T-Rex атака" + +#: src/Wisps.js:55 +msgid "Wisps" +msgstr "Огоньки" + +#: src/Fire.js:58 +msgid "Fire" +msgstr "Огонь" + +#: src/Fire.js:130 +msgid "Default Fire" +msgstr "по умолчанию FIRE" + +#: src/Fire.js:140 +msgid "Hell Fire" +msgstr "Адский Огонь" + +#: src/Fire.js:150 +msgid "Dark and Smutty" +msgstr "Тёмный и развратный" + +#: src/Fire.js:160 +msgid "Cold Breeze" +msgstr "Холодный ветер" + +#: src/Fire.js:170 +msgid "Santa is Coming" +msgstr "Дед мороз приходит" + +#: src/EnergizeA.js:54 +msgid "Energize A" +msgstr "Заряжение A" + +#: src/EnergizeB.js:54 +msgid "Energize B" +msgstr "Энергия B" + +#: src/Matrix.js:58 +msgid "Matrix" +msgstr "Матрица" + +#: resources/ui/common/main-menu.ui:6 +msgid "Visit Homepage" +msgstr "Перейти на главную страницу" + +#: resources/ui/common/main-menu.ui:10 +msgid "View Changelog" +msgstr "Просмотреть список изменений" + +#: resources/ui/common/main-menu.ui:16 +msgid "Report a Bug" +msgstr "Сообщить об ошибке" + +#: resources/ui/common/main-menu.ui:20 +msgid "Create an Effect" +msgstr "Создать эффект" + +#: resources/ui/common/main-menu.ui:24 +msgid "Translate" +msgstr "Перевести" + +#: resources/ui/common/main-menu.ui:28 +msgid "Donate" +msgstr "Пожертвовать" + +#: resources/ui/common/main-menu.ui:45 +msgid "About Burn-My-Windows" +msgstr "О Burn-My-Windows" + +#: resources/ui/gtk4/Matrix.ui:24 resources/ui/gtk4/BrokenGlass.ui:24 +#: resources/ui/gtk4/Wisps.ui:24 resources/ui/gtk4/Fire.ui:49 +#: resources/ui/gtk4/TRexAttack.ui:24 resources/ui/gtk4/TVEffect.ui:24 +#: resources/ui/gtk4/EnergizeA.ui:24 resources/ui/gtk4/EnergizeB.ui:24 +#: resources/ui/gtk3/Wisps.ui:42 resources/ui/gtk3/Fire.ui:93 +#: resources/ui/gtk3/TVEffect.ui:35 resources/ui/gtk3/EnergizeA.ui:42 +#: resources/ui/gtk3/EnergizeB.ui:42 +msgid "Animation Time [ms]" +msgstr "Время анимации (mc)" + +#: resources/ui/gtk4/Matrix.ui:52 resources/ui/gtk4/Matrix.ui:98 +#: resources/ui/gtk4/Matrix.ui:144 resources/ui/gtk4/Matrix.ui:190 +#: resources/ui/gtk4/Matrix.ui:224 resources/ui/gtk4/Matrix.ui:258 +#: resources/ui/gtk4/BrokenGlass.ui:52 resources/ui/gtk4/BrokenGlass.ui:98 +#: resources/ui/gtk4/BrokenGlass.ui:144 resources/ui/gtk4/BrokenGlass.ui:190 +#: resources/ui/gtk4/BrokenGlass.ui:244 resources/ui/gtk4/Wisps.ui:52 +#: resources/ui/gtk4/Wisps.ui:98 resources/ui/gtk4/Wisps.ui:132 +#: resources/ui/gtk4/Fire.ui:77 resources/ui/gtk4/Fire.ui:123 +#: resources/ui/gtk4/Fire.ui:169 resources/ui/gtk4/Fire.ui:222 +#: resources/ui/gtk4/Fire.ui:280 resources/ui/gtk4/TRexAttack.ui:52 +#: resources/ui/gtk4/TRexAttack.ui:98 resources/ui/gtk4/TRexAttack.ui:144 +#: resources/ui/gtk4/TRexAttack.ui:190 resources/ui/gtk4/TRexAttack.ui:224 +#: resources/ui/gtk4/TVEffect.ui:52 resources/ui/gtk4/TVEffect.ui:86 +#: resources/ui/gtk4/EnergizeA.ui:52 resources/ui/gtk4/EnergizeA.ui:98 +#: resources/ui/gtk4/EnergizeA.ui:132 resources/ui/gtk4/EnergizeB.ui:52 +#: resources/ui/gtk4/EnergizeB.ui:98 resources/ui/gtk4/EnergizeB.ui:132 +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/Wisps.ui:68 +#: resources/ui/gtk3/Wisps.ui:117 resources/ui/gtk3/Wisps.ui:160 +#: resources/ui/gtk3/Fire.ui:119 resources/ui/gtk3/Fire.ui:167 +#: resources/ui/gtk3/Fire.ui:215 resources/ui/gtk3/Fire.ui:277 +#: resources/ui/gtk3/Fire.ui:345 resources/ui/gtk3/TVEffect.ui:61 +#: resources/ui/gtk3/TVEffect.ui:104 resources/ui/gtk3/EnergizeA.ui:68 +#: resources/ui/gtk3/EnergizeA.ui:117 resources/ui/gtk3/EnergizeA.ui:160 +#: resources/ui/gtk3/EnergizeB.ui:68 resources/ui/gtk3/EnergizeB.ui:117 +#: resources/ui/gtk3/EnergizeB.ui:160 resources/ui/gtk3/prefs.ui:219 +msgid "Reset to Default Value" +msgstr "Сброс на значение по умолчанию" + +#: resources/ui/gtk4/Matrix.ui:70 resources/ui/gtk4/BrokenGlass.ui:70 +#: resources/ui/gtk4/Wisps.ui:70 resources/ui/gtk4/Fire.ui:95 +#: resources/ui/gtk4/EnergizeA.ui:70 resources/ui/gtk4/EnergizeB.ui:70 +#: resources/ui/gtk3/Wisps.ui:91 resources/ui/gtk3/Fire.ui:141 +#: resources/ui/gtk3/EnergizeA.ui:91 resources/ui/gtk3/EnergizeB.ui:91 +msgid "Scale" +msgstr "Масштаб" + +#: resources/ui/gtk4/Matrix.ui:116 +msgid "Randomness" +msgstr "Случайность" + +#: resources/ui/gtk4/Matrix.ui:162 +msgid "Vertical Overshooting" +msgstr "Вертикальное превышение" + +#: resources/ui/gtk4/Matrix.ui:208 +msgid "Trail Color" +msgstr "Цвет следа" + +#: resources/ui/gtk4/Matrix.ui:242 +msgid "Tip Color" +msgstr "Цвет наконечника" + +#: resources/ui/gtk4/BrokenGlass.ui:116 +msgid "Gravity" +msgstr "Сила тяжести" + +#: resources/ui/gtk4/BrokenGlass.ui:162 +msgid "Blow Force" +msgstr "Сила удара" + +#: resources/ui/gtk4/BrokenGlass.ui:212 +msgid "Shatter From Pointer Location" +msgstr "Разбить из местоположения указателя" + +#: resources/ui/gtk4/BrokenGlass.ui:221 +msgid "" +"The shards will fly away from where your mouse pointer was when closing the " +"window." +msgstr "" +"Осколки разлетятся в стороны от того места, где находился указатель мыши при " +"закрытии окна." + +#: resources/ui/gtk4/Wisps.ui:116 resources/ui/gtk4/TVEffect.ui:70 +#: resources/ui/gtk4/EnergizeA.ui:116 resources/ui/gtk4/EnergizeB.ui:116 +#: resources/ui/gtk3/Wisps.ui:139 resources/ui/gtk3/TVEffect.ui:83 +#: resources/ui/gtk3/EnergizeA.ui:139 resources/ui/gtk3/EnergizeB.ui:139 +msgid "Color" +msgstr "Цвет" + +#: resources/ui/gtk4/Fire.ui:25 resources/ui/gtk3/Fire.ui:49 +msgid "Presets" +msgstr "Заготовки" + +#: resources/ui/gtk4/Fire.ui:141 resources/ui/gtk3/Fire.ui:189 +msgid "Speed" +msgstr "Скорость" + +#: resources/ui/gtk4/Fire.ui:191 resources/ui/gtk3/Fire.ui:241 +msgid "3D Noise" +msgstr "3D Шум" + +#: resources/ui/gtk4/Fire.ui:200 resources/ui/gtk3/Fire.ui:250 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "Создает более динамичный огонь, но требует большей мощности GPU." + +#: resources/ui/gtk4/Fire.ui:240 resources/ui/gtk3/Fire.ui:300 +msgid "Gradient" +msgstr "Градиент" + +#: resources/ui/gtk4/TRexAttack.ui:70 +msgid "Claw Scratch Scale" +msgstr "царапины" + +#: resources/ui/gtk4/TRexAttack.ui:116 +msgid "Claw Scratch Count" +msgstr "Количество царапин от когтей" + +#: resources/ui/gtk4/TRexAttack.ui:162 +msgid "Warp Effect" +msgstr "Эффект искривления" + +#: resources/ui/gtk4/TRexAttack.ui:208 +msgid "Flash Color" +msgstr "Цвет вспышки" + +#: resources/ui/gtk4/effectPage.ui:37 resources/ui/gtk3/effectPage.ui:37 +msgid "Preview this Effect" +msgstr "Предварительный просмотр этого эффекта" + +#: resources/ui/gtk4/prefs.ui:28 resources/ui/gtk3/prefs.ui:35 +msgid "Welcome to Burn-My-Windows!" +msgstr "Добро пожаловать в Burn-My-Windows!" + +#: resources/ui/gtk4/prefs.ui:39 resources/ui/gtk3/prefs.ui:46 +msgid "If you like this extension, recommend it to your friends :)" +msgstr "" +"Если вам нравится это расширение, порекомендуйте или поделитесь его своим " +"друзьям :)" + +#: resources/ui/gtk4/prefs.ui:66 resources/ui/gtk3/prefs.ui:74 +msgid "Open Window Animation" +msgstr "Анимация открытого окна" + +#: resources/ui/gtk4/prefs.ui:75 resources/ui/gtk4/prefs.ui:119 +#: resources/ui/gtk3/prefs.ui:83 resources/ui/gtk3/prefs.ui:147 +msgid "If multiple are selected, one is chosen randomly." +msgstr "Если выбрано несколько, то один выбирается случайным образом." + +#: resources/ui/gtk4/prefs.ui:90 resources/ui/gtk4/prefs.ui:134 +#: resources/ui/gtk3/prefs.ui:104 resources/ui/gtk3/prefs.ui:168 +msgid "Choose Effects" +msgstr "Выберите эффекты" + +#: resources/ui/gtk4/prefs.ui:110 resources/ui/gtk3/prefs.ui:138 +msgid "Close Window Animation" +msgstr "Анимация закрытия окна" + +#: resources/ui/gtk4/prefs.ui:150 resources/ui/gtk3/prefs.ui:198 +msgid "Also Add Effects to Dialogs" +msgstr "Также добавьте эффекты к диалогам" + +#: resources/ui/gtk3/Fire.ui:63 +msgid "Choose a Preset" +msgstr "Выберите заготовку" diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..6d988e0 --- /dev/null +++ b/po/tr.po @@ -0,0 +1,301 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Simon Schneegans +# This file is distributed under the same license as the Burn-My-Windows package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Burn-My-Windows\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-02-18 20:33+0100\n" +"PO-Revision-Date: 2022-03-21 05:57+0000\n" +"Last-Translator: Muha Aliss \n" +"Language-Team: Turkish \n" +"Language: tr\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.12-dev\n" + +#: prefs.js:111 +msgid "Effect Options" +msgstr "Efekt Seçenekleri" + +#: prefs.js:139 +msgid "Go Back" +msgstr "Geri Dön" + +#: prefs.js:181 +msgid "General Options" +msgstr "Genel Ayarlar" + +#: prefs.js:276 +msgid "Gold Sponsors" +msgstr "Altın Sponsorlar" + +#: prefs.js:279 +msgid "Silver Sponsors" +msgstr "Gümüş Sponsorlar" + +#: prefs.js:282 +msgid "Bronze Sponsors" +msgstr "Bronz Sponsorlar" + +#: prefs.js:285 +msgid "Past Sponsors" +msgstr "Eski Sponsorlar" + +#. Translators: %s will be replaced by the effect's name. +#: prefs.js:512 +#, javascript-format +msgid "Preview for %s" +msgstr "%s ön izleme" + +#: prefs.js:534 +msgid "Close this Window to Preview the Effect!" +msgstr "Efekti Ön izlemek İçin Bu Pencereyi Kapatın!" + +#: src/BrokenGlass.js:57 +msgid "Broken Glass" +msgstr "Kırılan Cam" + +#: src/TVEffect.js:56 +msgid "TV Effect" +msgstr "TV Efekti" + +#: src/TRexAttack.js:56 +msgid "T-Rex Attack" +msgstr "T-Rex Saldırısı" + +#: src/Wisps.js:55 +msgid "Wisps" +msgstr "" + +#: src/Fire.js:58 +msgid "Fire" +msgstr "Ateş" + +#: src/Fire.js:130 +msgid "Default Fire" +msgstr "Varsayılan Ateş" + +#: src/Fire.js:140 +msgid "Hell Fire" +msgstr "Cehennem Ateşi" + +#: src/Fire.js:150 +msgid "Dark and Smutty" +msgstr "Karanlık ve Sürmeli" + +#: src/Fire.js:160 +msgid "Cold Breeze" +msgstr "Soğuk Esinti" + +#: src/Fire.js:170 +msgid "Santa is Coming" +msgstr "Noel Baba Geliyor" + +#: src/EnergizeA.js:54 +msgid "Energize A" +msgstr "Enerji A" + +#: src/EnergizeB.js:54 +msgid "Energize B" +msgstr "Enerji B" + +#: src/Matrix.js:58 +msgid "Matrix" +msgstr "Matrix" + +#: resources/ui/common/main-menu.ui:6 +msgid "Visit Homepage" +msgstr "Ana Sayfaya Git" + +#: resources/ui/common/main-menu.ui:10 +msgid "View Changelog" +msgstr "Değişim Günlüğü" + +#: resources/ui/common/main-menu.ui:16 +msgid "Report a Bug" +msgstr "Hata Bildir" + +#: resources/ui/common/main-menu.ui:20 +msgid "Create an Effect" +msgstr "Efekt Oluştur" + +#: resources/ui/common/main-menu.ui:24 +msgid "Translate" +msgstr "Çevir" + +#: resources/ui/common/main-menu.ui:28 +msgid "Donate" +msgstr "Bağış" + +#: resources/ui/common/main-menu.ui:45 +msgid "About Burn-My-Windows" +msgstr "Burn-My-Windows Hakkında" + +#: resources/ui/gtk4/Matrix.ui:24 resources/ui/gtk4/BrokenGlass.ui:24 +#: resources/ui/gtk4/Wisps.ui:24 resources/ui/gtk4/Fire.ui:49 +#: resources/ui/gtk4/TRexAttack.ui:24 resources/ui/gtk4/TVEffect.ui:24 +#: resources/ui/gtk4/EnergizeA.ui:24 resources/ui/gtk4/EnergizeB.ui:24 +#: resources/ui/gtk3/Wisps.ui:42 resources/ui/gtk3/Fire.ui:93 +#: resources/ui/gtk3/TVEffect.ui:35 resources/ui/gtk3/EnergizeA.ui:42 +#: resources/ui/gtk3/EnergizeB.ui:42 +msgid "Animation Time [ms]" +msgstr "Animasyon Süresi [ms]" + +#: resources/ui/gtk4/Matrix.ui:52 resources/ui/gtk4/Matrix.ui:98 +#: resources/ui/gtk4/Matrix.ui:144 resources/ui/gtk4/Matrix.ui:190 +#: resources/ui/gtk4/Matrix.ui:224 resources/ui/gtk4/Matrix.ui:258 +#: resources/ui/gtk4/BrokenGlass.ui:52 resources/ui/gtk4/BrokenGlass.ui:98 +#: resources/ui/gtk4/BrokenGlass.ui:144 resources/ui/gtk4/BrokenGlass.ui:190 +#: resources/ui/gtk4/BrokenGlass.ui:244 resources/ui/gtk4/Wisps.ui:52 +#: resources/ui/gtk4/Wisps.ui:98 resources/ui/gtk4/Wisps.ui:132 +#: resources/ui/gtk4/Fire.ui:77 resources/ui/gtk4/Fire.ui:123 +#: resources/ui/gtk4/Fire.ui:169 resources/ui/gtk4/Fire.ui:222 +#: resources/ui/gtk4/Fire.ui:280 resources/ui/gtk4/TRexAttack.ui:52 +#: resources/ui/gtk4/TRexAttack.ui:98 resources/ui/gtk4/TRexAttack.ui:144 +#: resources/ui/gtk4/TRexAttack.ui:190 resources/ui/gtk4/TRexAttack.ui:224 +#: resources/ui/gtk4/TVEffect.ui:52 resources/ui/gtk4/TVEffect.ui:86 +#: resources/ui/gtk4/EnergizeA.ui:52 resources/ui/gtk4/EnergizeA.ui:98 +#: resources/ui/gtk4/EnergizeA.ui:132 resources/ui/gtk4/EnergizeB.ui:52 +#: resources/ui/gtk4/EnergizeB.ui:98 resources/ui/gtk4/EnergizeB.ui:132 +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/Wisps.ui:68 +#: resources/ui/gtk3/Wisps.ui:117 resources/ui/gtk3/Wisps.ui:160 +#: resources/ui/gtk3/Fire.ui:119 resources/ui/gtk3/Fire.ui:167 +#: resources/ui/gtk3/Fire.ui:215 resources/ui/gtk3/Fire.ui:277 +#: resources/ui/gtk3/Fire.ui:345 resources/ui/gtk3/TVEffect.ui:61 +#: resources/ui/gtk3/TVEffect.ui:104 resources/ui/gtk3/EnergizeA.ui:68 +#: resources/ui/gtk3/EnergizeA.ui:117 resources/ui/gtk3/EnergizeA.ui:160 +#: resources/ui/gtk3/EnergizeB.ui:68 resources/ui/gtk3/EnergizeB.ui:117 +#: resources/ui/gtk3/EnergizeB.ui:160 resources/ui/gtk3/prefs.ui:219 +msgid "Reset to Default Value" +msgstr "Varsayılan Değere Sıfırla" + +#: resources/ui/gtk4/Matrix.ui:70 resources/ui/gtk4/BrokenGlass.ui:70 +#: resources/ui/gtk4/Wisps.ui:70 resources/ui/gtk4/Fire.ui:95 +#: resources/ui/gtk4/EnergizeA.ui:70 resources/ui/gtk4/EnergizeB.ui:70 +#: resources/ui/gtk3/Wisps.ui:91 resources/ui/gtk3/Fire.ui:141 +#: resources/ui/gtk3/EnergizeA.ui:91 resources/ui/gtk3/EnergizeB.ui:91 +msgid "Scale" +msgstr "Ölçek" + +#: resources/ui/gtk4/Matrix.ui:116 +msgid "Randomness" +msgstr "Rastgelelik" + +#: resources/ui/gtk4/Matrix.ui:162 +msgid "Vertical Overshooting" +msgstr "Dikey Taşma" + +#: resources/ui/gtk4/Matrix.ui:208 +msgid "Trail Color" +msgstr "İz Rengi" + +#: resources/ui/gtk4/Matrix.ui:242 +msgid "Tip Color" +msgstr "Yazı Rengi" + +#: resources/ui/gtk4/BrokenGlass.ui:116 +msgid "Gravity" +msgstr "Yer Çekimi" + +#: resources/ui/gtk4/BrokenGlass.ui:162 +msgid "Blow Force" +msgstr "Darbe Kuvveti" + +#: resources/ui/gtk4/BrokenGlass.ui:212 +msgid "Shatter From Pointer Location" +msgstr "İşaretçi Konumundan Parçalanma" + +#: resources/ui/gtk4/BrokenGlass.ui:221 +msgid "" +"The shards will fly away from where your mouse pointer was when closing the " +"window." +msgstr "" +"Parçalar, pencereyi kapatırken fare işaretçinizin bulunduğu yerden uzağa " +"uçacaktır." + +#: resources/ui/gtk4/Wisps.ui:116 resources/ui/gtk4/TVEffect.ui:70 +#: resources/ui/gtk4/EnergizeA.ui:116 resources/ui/gtk4/EnergizeB.ui:116 +#: resources/ui/gtk3/Wisps.ui:139 resources/ui/gtk3/TVEffect.ui:83 +#: resources/ui/gtk3/EnergizeA.ui:139 resources/ui/gtk3/EnergizeB.ui:139 +msgid "Color" +msgstr "Renk" + +#: resources/ui/gtk4/Fire.ui:25 resources/ui/gtk3/Fire.ui:49 +msgid "Presets" +msgstr "Şablon" + +#: resources/ui/gtk4/Fire.ui:141 resources/ui/gtk3/Fire.ui:189 +msgid "Speed" +msgstr "Hız" + +#: resources/ui/gtk4/Fire.ui:191 resources/ui/gtk3/Fire.ui:241 +msgid "3D Noise" +msgstr "" + +#: resources/ui/gtk4/Fire.ui:200 resources/ui/gtk3/Fire.ui:250 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "Daha dinamik bir ateş oluşturur ancak daha fazla GPU gücü gerektirir." + +#: resources/ui/gtk4/Fire.ui:240 resources/ui/gtk3/Fire.ui:300 +msgid "Gradient" +msgstr "Gradyan" + +#: resources/ui/gtk4/TRexAttack.ui:70 +msgid "Claw Scratch Scale" +msgstr "Pençe Çizik Ölçeği" + +#: resources/ui/gtk4/TRexAttack.ui:116 +msgid "Claw Scratch Count" +msgstr "Pençe Çizik Sayısı" + +#: resources/ui/gtk4/TRexAttack.ui:162 +msgid "Warp Effect" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:208 +msgid "Flash Color" +msgstr "Flaş Rengi" + +#: resources/ui/gtk4/effectPage.ui:37 resources/ui/gtk3/effectPage.ui:37 +msgid "Preview this Effect" +msgstr "Bu Efekti Önizle" + +#: resources/ui/gtk4/prefs.ui:28 resources/ui/gtk3/prefs.ui:35 +msgid "Welcome to Burn-My-Windows!" +msgstr "Burn-My-Windows'a Hoş Geldiniz!" + +#: resources/ui/gtk4/prefs.ui:39 resources/ui/gtk3/prefs.ui:46 +msgid "If you like this extension, recommend it to your friends :)" +msgstr "Bu uzantıyı beğendiyseniz, arkadaşlarınıza tavsiye edin :)" + +#: resources/ui/gtk4/prefs.ui:66 resources/ui/gtk3/prefs.ui:74 +msgid "Open Window Animation" +msgstr "Pencere Animasyonunu Aç" + +#: resources/ui/gtk4/prefs.ui:75 resources/ui/gtk4/prefs.ui:119 +#: resources/ui/gtk3/prefs.ui:83 resources/ui/gtk3/prefs.ui:147 +msgid "If multiple are selected, one is chosen randomly." +msgstr "Birden fazla seçilirse, rastgele biri uygulanır." + +#: resources/ui/gtk4/prefs.ui:90 resources/ui/gtk4/prefs.ui:134 +#: resources/ui/gtk3/prefs.ui:104 resources/ui/gtk3/prefs.ui:168 +msgid "Choose Effects" +msgstr "Efektleri Seçin" + +#: resources/ui/gtk4/prefs.ui:110 resources/ui/gtk3/prefs.ui:138 +msgid "Close Window Animation" +msgstr "Pencere Animasyonunu Kapat" + +#: resources/ui/gtk4/prefs.ui:150 resources/ui/gtk3/prefs.ui:198 +msgid "Also Add Effects to Dialogs" +msgstr "Ayrıca Diyaloglara Efektler Ekle" + +#: resources/ui/gtk3/Fire.ui:63 +msgid "Choose a Preset" +msgstr "Bir Şablon Seçin" diff --git a/po/zh_Hans.po b/po/zh_Hans.po new file mode 100644 index 0000000..c0f38ab --- /dev/null +++ b/po/zh_Hans.po @@ -0,0 +1,322 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Simon Schneegans +# This file is distributed under the same license as the Burn-My-Windows package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Burn-My-Windows\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-02-18 20:33+0100\n" +"PO-Revision-Date: 2022-03-01 15:05+0000\n" +"Last-Translator: 刘韬 \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\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.11.1-dev\n" + +#: prefs.js:111 +#, fuzzy +msgid "Effect Options" +msgstr "效果选项" + +#: prefs.js:139 +msgid "Go Back" +msgstr "" + +#: prefs.js:181 +#, fuzzy +msgid "General Options" +msgstr "一般选项" + +#: prefs.js:276 +#, fuzzy +msgid "Gold Sponsors" +msgstr "金牌赞助商" + +#: prefs.js:279 +#, fuzzy +msgid "Silver Sponsors" +msgstr "银牌赞助商" + +#: prefs.js:282 +#, fuzzy +msgid "Bronze Sponsors" +msgstr "铜牌赞助商" + +#: prefs.js:285 +#, fuzzy +msgid "Past Sponsors" +msgstr "往届赞助商" + +#. Translators: %s will be replaced by the effect's name. +#: prefs.js:512 +#, fuzzy, javascript-format +msgid "Preview for %s" +msgstr "%s 的预览" + +#: prefs.js:534 +#, fuzzy +msgid "Close this Window to Preview the Effect!" +msgstr "关闭此窗口,预览效果!" + +#: src/BrokenGlass.js:57 +#, fuzzy +msgid "Broken Glass" +msgstr "破碎的玻璃" + +#: src/TVEffect.js:56 +#, fuzzy +msgid "TV Effect" +msgstr "电视效果" + +#: src/TRexAttack.js:56 +#, fuzzy +msgid "T-Rex Attack" +msgstr "霸王龙攻击" + +#: src/Wisps.js:55 +msgid "Wisps" +msgstr "" + +#: src/Fire.js:58 +msgid "Fire" +msgstr "" + +#: src/Fire.js:130 +msgid "Default Fire" +msgstr "" + +#: src/Fire.js:140 +#, fuzzy +msgid "Hell Fire" +msgstr "地狱之火" + +#: src/Fire.js:150 +#, fuzzy +msgid "Dark and Smutty" +msgstr "黑暗和污秽" + +#: src/Fire.js:160 +#, fuzzy +msgid "Cold Breeze" +msgstr "寒风" + +#: src/Fire.js:170 +#, fuzzy +msgid "Santa is Coming" +msgstr "圣诞老人来了" + +#: src/EnergizeA.js:54 +msgid "Energize A" +msgstr "" + +#: src/EnergizeB.js:54 +msgid "Energize B" +msgstr "" + +#: src/Matrix.js:58 +msgid "Matrix" +msgstr "矩阵" + +#: resources/ui/common/main-menu.ui:6 +msgid "Visit Homepage" +msgstr "访问主页" + +#: resources/ui/common/main-menu.ui:10 +msgid "View Changelog" +msgstr "查看更新日志" + +#: resources/ui/common/main-menu.ui:16 +msgid "Report a Bug" +msgstr "报告错误" + +#: resources/ui/common/main-menu.ui:20 +#, fuzzy +msgid "Create an Effect" +msgstr "创建效果" + +#: resources/ui/common/main-menu.ui:24 +msgid "Translate" +msgstr "翻译" + +#: resources/ui/common/main-menu.ui:28 +msgid "Donate" +msgstr "捐赠" + +#: resources/ui/common/main-menu.ui:45 +msgid "About Burn-My-Windows" +msgstr "关于 Burn-My-Windows" + +#: resources/ui/gtk4/Matrix.ui:24 resources/ui/gtk4/BrokenGlass.ui:24 +#: resources/ui/gtk4/Wisps.ui:24 resources/ui/gtk4/Fire.ui:49 +#: resources/ui/gtk4/TRexAttack.ui:24 resources/ui/gtk4/TVEffect.ui:24 +#: resources/ui/gtk4/EnergizeA.ui:24 resources/ui/gtk4/EnergizeB.ui:24 +#: resources/ui/gtk3/Wisps.ui:42 resources/ui/gtk3/Fire.ui:93 +#: resources/ui/gtk3/TVEffect.ui:35 resources/ui/gtk3/EnergizeA.ui:42 +#: resources/ui/gtk3/EnergizeB.ui:42 +#, fuzzy +msgid "Animation Time [ms]" +msgstr "动画时间 [毫秒]" + +#: resources/ui/gtk4/Matrix.ui:52 resources/ui/gtk4/Matrix.ui:98 +#: resources/ui/gtk4/Matrix.ui:144 resources/ui/gtk4/Matrix.ui:190 +#: resources/ui/gtk4/Matrix.ui:224 resources/ui/gtk4/Matrix.ui:258 +#: resources/ui/gtk4/BrokenGlass.ui:52 resources/ui/gtk4/BrokenGlass.ui:98 +#: resources/ui/gtk4/BrokenGlass.ui:144 resources/ui/gtk4/BrokenGlass.ui:190 +#: resources/ui/gtk4/BrokenGlass.ui:244 resources/ui/gtk4/Wisps.ui:52 +#: resources/ui/gtk4/Wisps.ui:98 resources/ui/gtk4/Wisps.ui:132 +#: resources/ui/gtk4/Fire.ui:77 resources/ui/gtk4/Fire.ui:123 +#: resources/ui/gtk4/Fire.ui:169 resources/ui/gtk4/Fire.ui:222 +#: resources/ui/gtk4/Fire.ui:280 resources/ui/gtk4/TRexAttack.ui:52 +#: resources/ui/gtk4/TRexAttack.ui:98 resources/ui/gtk4/TRexAttack.ui:144 +#: resources/ui/gtk4/TRexAttack.ui:190 resources/ui/gtk4/TRexAttack.ui:224 +#: resources/ui/gtk4/TVEffect.ui:52 resources/ui/gtk4/TVEffect.ui:86 +#: resources/ui/gtk4/EnergizeA.ui:52 resources/ui/gtk4/EnergizeA.ui:98 +#: resources/ui/gtk4/EnergizeA.ui:132 resources/ui/gtk4/EnergizeB.ui:52 +#: resources/ui/gtk4/EnergizeB.ui:98 resources/ui/gtk4/EnergizeB.ui:132 +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/Wisps.ui:68 +#: resources/ui/gtk3/Wisps.ui:117 resources/ui/gtk3/Wisps.ui:160 +#: resources/ui/gtk3/Fire.ui:119 resources/ui/gtk3/Fire.ui:167 +#: resources/ui/gtk3/Fire.ui:215 resources/ui/gtk3/Fire.ui:277 +#: resources/ui/gtk3/Fire.ui:345 resources/ui/gtk3/TVEffect.ui:61 +#: resources/ui/gtk3/TVEffect.ui:104 resources/ui/gtk3/EnergizeA.ui:68 +#: resources/ui/gtk3/EnergizeA.ui:117 resources/ui/gtk3/EnergizeA.ui:160 +#: resources/ui/gtk3/EnergizeB.ui:68 resources/ui/gtk3/EnergizeB.ui:117 +#: resources/ui/gtk3/EnergizeB.ui:160 resources/ui/gtk3/prefs.ui:219 +msgid "Reset to Default Value" +msgstr "重置为默认值" + +#: resources/ui/gtk4/Matrix.ui:70 resources/ui/gtk4/BrokenGlass.ui:70 +#: resources/ui/gtk4/Wisps.ui:70 resources/ui/gtk4/Fire.ui:95 +#: resources/ui/gtk4/EnergizeA.ui:70 resources/ui/gtk4/EnergizeB.ui:70 +#: resources/ui/gtk3/Wisps.ui:91 resources/ui/gtk3/Fire.ui:141 +#: resources/ui/gtk3/EnergizeA.ui:91 resources/ui/gtk3/EnergizeB.ui:91 +#, fuzzy +msgid "Scale" +msgstr "规模" + +#: resources/ui/gtk4/Matrix.ui:116 +#, fuzzy +msgid "Randomness" +msgstr "随机性" + +#: resources/ui/gtk4/Matrix.ui:162 +#, fuzzy +msgid "Vertical Overshooting" +msgstr "垂直过冲" + +#: resources/ui/gtk4/Matrix.ui:208 +#, fuzzy +msgid "Trail Color" +msgstr "尾迹颜色" + +#: resources/ui/gtk4/Matrix.ui:242 +#, fuzzy +msgid "Tip Color" +msgstr "提示颜色" + +#: resources/ui/gtk4/BrokenGlass.ui:116 +msgid "Gravity" +msgstr "重力" + +#: resources/ui/gtk4/BrokenGlass.ui:162 +#, fuzzy +msgid "Blow Force" +msgstr "吹力" + +#: resources/ui/gtk4/BrokenGlass.ui:212 +msgid "Shatter From Pointer Location" +msgstr "" + +#: resources/ui/gtk4/BrokenGlass.ui:221 +msgid "" +"The shards will fly away from where your mouse pointer was when closing the " +"window." +msgstr "" + +#: resources/ui/gtk4/Wisps.ui:116 resources/ui/gtk4/TVEffect.ui:70 +#: resources/ui/gtk4/EnergizeA.ui:116 resources/ui/gtk4/EnergizeB.ui:116 +#: resources/ui/gtk3/Wisps.ui:139 resources/ui/gtk3/TVEffect.ui:83 +#: resources/ui/gtk3/EnergizeA.ui:139 resources/ui/gtk3/EnergizeB.ui:139 +msgid "Color" +msgstr "颜色" + +#: resources/ui/gtk4/Fire.ui:25 resources/ui/gtk3/Fire.ui:49 +msgid "Presets" +msgstr "预设" + +#: resources/ui/gtk4/Fire.ui:141 resources/ui/gtk3/Fire.ui:189 +msgid "Speed" +msgstr "速度" + +#: resources/ui/gtk4/Fire.ui:191 resources/ui/gtk3/Fire.ui:241 +#, fuzzy +msgid "3D Noise" +msgstr "3D 噪点" + +#: resources/ui/gtk4/Fire.ui:200 resources/ui/gtk3/Fire.ui:250 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "" + +#: resources/ui/gtk4/Fire.ui:240 resources/ui/gtk3/Fire.ui:300 +msgid "Gradient" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:70 +msgid "Claw Scratch Scale" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:116 +msgid "Claw Scratch Count" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:162 +msgid "Warp Effect" +msgstr "" + +#: resources/ui/gtk4/TRexAttack.ui:208 +msgid "Flash Color" +msgstr "" + +#: resources/ui/gtk4/effectPage.ui:37 resources/ui/gtk3/effectPage.ui:37 +msgid "Preview this Effect" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:28 resources/ui/gtk3/prefs.ui:35 +msgid "Welcome to Burn-My-Windows!" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:39 resources/ui/gtk3/prefs.ui:46 +msgid "If you like this extension, recommend it to your friends :)" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:66 resources/ui/gtk3/prefs.ui:74 +msgid "Open Window Animation" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:75 resources/ui/gtk4/prefs.ui:119 +#: resources/ui/gtk3/prefs.ui:83 resources/ui/gtk3/prefs.ui:147 +msgid "If multiple are selected, one is chosen randomly." +msgstr "" + +#: resources/ui/gtk4/prefs.ui:90 resources/ui/gtk4/prefs.ui:134 +#: resources/ui/gtk3/prefs.ui:104 resources/ui/gtk3/prefs.ui:168 +msgid "Choose Effects" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:110 resources/ui/gtk3/prefs.ui:138 +msgid "Close Window Animation" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:150 resources/ui/gtk3/prefs.ui:198 +msgid "Also Add Effects to Dialogs" +msgstr "" + +#: resources/ui/gtk3/Fire.ui:63 +msgid "Choose a Preset" +msgstr "" diff --git a/prefs.js b/prefs.js index 5e18e8f..12b48ff 100644 --- a/prefs.js +++ b/prefs.js @@ -14,6 +14,17 @@ 'use strict'; const {Gio, Gtk, Gdk, GLib, GObject} = imports.gi; +const ByteArray = imports.byteArray; + +// libadwaita is available starting with GNOME Shell 42. +let Adw = null; +try { + Adw = imports.gi.Adw; +} catch (e) { + // Nothing to do. +} + +const _ = imports.gettext.domain('burn-my-windows').gettext; const ExtensionUtils = imports.misc.extensionUtils; const Me = imports.misc.extensionUtils.getCurrentExtension(); @@ -54,13 +65,11 @@ var PreferencesDialog = class PreferencesDialog { const styleProvider = Gtk.CssProvider.new(); styleProvider.load_from_resource('/css/gtk.css'); if (utils.isGTK4()) { - Gtk.StyleContext.add_provider_for_display( - Gdk.Display.get_default(), styleProvider, - Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); + Gtk.StyleContext.add_provider_for_display(Gdk.Display.get_default(), styleProvider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); } else { - Gtk.StyleContext.add_provider_for_screen( - Gdk.Screen.get_default(), styleProvider, - Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); + Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), styleProvider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); } // Make sure custom icons are found. @@ -84,26 +93,116 @@ var PreferencesDialog = class PreferencesDialog { // Bind general options properties. this.bindSwitch('destroy-dialogs'); - // Add all other effect pages. - const stack = this._builder.get_object('main-stack'); - ALL_EFFECTS.forEach(Effect => { - const [minMajor, minMinor] = Effect.getMinShellVersion(); - if (utils.shellVersionIsAtLeast(minMajor, minMinor)) { - const page = new BurnMyWindowsEffectPage(Effect, this); + // Starting with GNOME Shell 42, the settings dialog uses libadwaita. We have to use a + // different layout, as the stack sidebar looks pretty ugly with the included + // Adw.Clamp... + if (utils.shellVersionIsAtLeast(42, 'beta')) { - // Add the Effect's preferences (if any). - const preferences = Effect.getPreferences(this); - if (preferences) { - this.gtkBoxAppend(page, preferences); + // This is our top-level widget which we will return later. + this._widget = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL}); + + // Add the general options page to the settings dialog. + const generalPrefs = this._builder.get_object('general-prefs'); + this.gtkBoxAppend(this._widget, generalPrefs); + + // Then add a preferences group with action rows to open the effect subpages. + const group = new Adw.PreferencesGroup({title: _('Effect Options')}); + this.gtkBoxAppend(this._widget, group); + + ALL_EFFECTS.forEach(Effect => { + const [minMajor, minMinor] = Effect.getMinShellVersion(); + if (utils.shellVersionIsAtLeast(minMajor, minMinor)) { + + const row = new Adw.ActionRow({title: Effect.getLabel(), activatable: true}); + row.add_suffix(new Gtk.Image({icon_name: 'go-next-symbolic'})); + + // Open a subpage with the effect's settings. + row.connect('activated', () => { + const page = new BurnMyWindowsEffectPage(Effect, this); + page.valign = Gtk.Align.CENTER; + page.margin_top = 10; + page.margin_bottom = 10; + page.margin_start = 10; + page.margin_end = 10; + + // Add the Effect's preferences (if any). + const preferences = Effect.getPreferences(this); + if (preferences) { + this.gtkBoxAppend(page, preferences); + } + + // Add a button for back navigation. + const backButton = new Gtk.Button({ + halign: Gtk.Align.CENTER, + label: _('Go Back'), + }); + backButton.add_css_class('suggested-action'); + backButton.add_css_class('pill-button'); + backButton.connect('clicked', () => { + row.get_root().close_subpage(); + }); + + this.gtkBoxAppend(page, backButton); + + // Wrap the preferences group in an Adw.Clamp. + const clamp = new Adw.Clamp({ + child: page, + maximum_size: 600, + tightening_threshold: 400, + }); + + // Open the subpage on click. + row.get_root().present_subpage(clamp); + }); + + group.add(row); } + }); - stack.add_titled(page, Effect.getNick(), Effect.getLabel()); - } - }); + } + // On older GNOME versions, we use a StackSidebar. + else { - // This is our top-level widget which we will return later. - this._widget = this._builder.get_object('settings-widget'); + // 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. + 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()); + } + }); + } // Some things can only be done once the widget is shown as we do not have access to // the toplevel widget before. @@ -117,26 +216,103 @@ var PreferencesDialog = class PreferencesDialog { { // Add the menu button to the title bar. const menu = this._builder.get_object('menu-button'); - window.get_titlebar().pack_end(menu); + + // Starting with GNOME Shell 42, we have to hack our way through the widget tree + // of the Adw.PreferencesWindow... + if (utils.shellVersionIsAtLeast(42, 'beta')) { + const header = this._findWidgetByType(window.get_content(), Adw.HeaderBar); + header.pack_end(menu); + + // Allow closing of the sub pages. + window.can_navigate_back = true; + } else { + window.get_titlebar().pack_end(menu); + } // Populate the menu with actions. const group = Gio.SimpleActionGroup.new(); window.insert_action_group('prefs', group); - const addAction = (name, uri) => { + const addURIAction = (name, uri) => { const action = Gio.SimpleAction.new(name, null); action.connect('activate', () => Gtk.show_uri(null, uri, Gdk.CURRENT_TIME)); group.add_action(action); }; // clang-format off - addAction('homepage', 'https://github.com/Schneegans/Burn-My-Windows'); - addAction('changelog', 'https://github.com/Schneegans/Burn-My-Windows/blob/main/docs/changelog.md'); - addAction('bugs', 'https://github.com/Schneegans/Burn-My-Windows/issues'); - addAction('new-effect', 'https://github.com/Schneegans/Burn-My-Windows/blob/main/docs/how-to-create-new-effects.md'); - addAction('donate-paypal', 'https://www.paypal.com/donate/?hosted_button_id=3F7UFL8KLVPXE'); - addAction('donate-github', 'https://github.com/sponsors/Schneegans'); + 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('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('donate-paypal', 'https://www.paypal.com/donate/?hosted_button_id=3F7UFL8KLVPXE'); + addURIAction('donate-github', 'https://github.com/sponsors/Schneegans'); // clang-format on + + // Add the about dialog. + const aboutAction = Gio.SimpleAction.new('about', null); + aboutAction.connect('activate', () => { + // The JSON report format from weblate is a bit weird. Here we extract all + // unique names from the translation report. + const translators = new Set(); + this._getJSONResource('/credits/translators.json').forEach(i => { + for (const j of Object.values(i)) { + j.forEach(k => translators.add(k[1])); + } + }); + + const sponsors = this._getJSONResource('/credits/sponsors.json'); + + const dialog = new Gtk.AboutDialog({transient_for: window, modal: true}); + dialog.set_logo_icon_name('burn-my-windows-symbolic'); + dialog.set_program_name(`Burn-My-Windows ${Me.metadata.version}`); + dialog.set_website('https://github.com/Schneegans/Burn-My-Windows'); + dialog.set_authors(['Simon Schneegans']); + dialog.set_copyright('© 2022 Simon Schneegans'); + dialog.set_translator_credits([...translators].join('\n')); + if (sponsors.gold.length > 0) { + dialog.add_credit_section(_('Gold Sponsors'), sponsors.gold); + } + if (sponsors.silver.length > 0) { + dialog.add_credit_section(_('Silver Sponsors'), sponsors.silver); + } + if (sponsors.bronze.length > 0) { + dialog.add_credit_section(_('Bronze Sponsors'), sponsors.bronze); + } + if (sponsors.past.length > 0) { + dialog.add_credit_section(_('Past Sponsors'), sponsors.past); + } + dialog.set_license_type(Gtk.License.GPL_3_0); + + if (utils.isGTK4()) { + dialog.show(); + } else { + dialog.show_all(); + } + }); + group.add_action(aboutAction); + } + + // Populate the open-effects drop-down menu. + { + const menu = this._builder.get_object('open-effect-menu'); + const group = Gio.SimpleActionGroup.new(); + window.insert_action_group('open-effects', group); + + ALL_EFFECTS.forEach(Effect => { + const [minMajor, minMinor] = Effect.getMinShellVersion(); + if (utils.shellVersionIsAtLeast(minMajor, minMinor)) { + const nick = Effect.getNick(); + const label = Effect.getLabel(); + const actionName = nick + '-open-effect'; + const fullName = 'open-effects.' + actionName; + + const action = this._settings.create_action(actionName); + group.add_action(action); + + menu.append_item(Gio.MenuItem.new(label, fullName)); + } + }); } // Populate the close-effects drop-down menu. @@ -277,74 +453,111 @@ var PreferencesDialog = class PreferencesDialog { this._bindResetButton(settingsKey); } + // Reads the contents of a JSON file contained in the global resources archive. The data + // is parsed and returned as a JavaScript object / array. + _getJSONResource(path) { + const data = Gio.resources_lookup_data(path, 0); + const string = ByteArray.toString(ByteArray.fromGBytes(data)); + return JSON.parse(string); + } + + // This traverses the widget tree below the given parent recursively and returns the + // first widget of the given type. + _findWidgetByType(parent, type) { + for (const child of [...parent]) { + if (child instanceof type) return child; + + const match = this._findWidgetByType(child, type); + if (match) return match; + } + + return null; + } + // Initializes template widgets used by the preferences dialog. _registerCustomClasses() { // Each effect page is based on a template widget. This template contains the title // and the preview button. - // clang-format off - BurnMyWindowsEffectPage = - GObject.registerClass({ - GTypeName: 'BurnMyWindowsEffectPage', - Template: `resource:///ui/${utils.getGTKString()}/effectPage.ui`, - InternalChildren: ['label', 'button'], - }, - class BurnMyWindowsEffectPage extends Gtk.Box { - _init(Effect, dialog) { - super._init(); + if (GObject.type_from_name('BurnMyWindowsEffectPage') == null) { + BurnMyWindowsEffectPage = GObject.registerClass( + { + GTypeName: 'BurnMyWindowsEffectPage', + Template: `resource:///ui/${utils.getGTKString()}/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(); + // 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', () => { + // Open the preview window once the preview button is clicked. + this._button.connect('clicked', () => { + // Set the to-be-previewed effect. + dialog.getSettings().set_string('open-preview-effect', Effect.getNick()); + dialog.getSettings().set_string('close-preview-effect', Effect.getNick()); - // Set the to-be-previewed effect. - dialog.getSettings().set_string('close-preview-effect', Effect.getNick()); + // Make sure that the window.show() firther below "sees" this change. + Gio.Settings.sync(); - // Create the preview-window. - const window = new Gtk.Window({ - title: `Preview for ${Effect.getLabel()}`, - default_width: 800, - default_height: 450, - modal: true, - transient_for: utils.isGTK4() ? this._button.get_root() : - this._button.get_toplevel() + // Create the preview-window. + const window = new Gtk.Window({ + // Translators: %s will be replaced by the effect's name. + title: _('Preview for %s').replace('%s', Effect.getLabel()), + default_width: 800, + default_height: 450, + modal: true, + transient_for: utils.isGTK4() ? this._button.get_root() : + this._button.get_toplevel() + }); + + // Add a header bar to the window. + if (utils.isGTK4()) { + const header = Gtk.HeaderBar.new(); + window.set_titlebar(header); + } + + const box = new Gtk.Box({ + orientation: Gtk.Orientation.VERTICAL, + valign: Gtk.Align.CENTER, + spacing: 10, + margin_start: 50, + margin_end: 50 + }); + + const label = Gtk.Label.new(_('Close this Window to Preview the Effect!')); + label.wrap = true; + label.justify = Gtk.Justification.CENTER; + label.get_style_context().add_class('large-title'); + + const image = new Gtk.Image({ + icon_name: 'burn-my-windows-symbolic', + pixel_size: 128, + }); + + dialog.gtkBoxAppend(box, image); + dialog.gtkBoxAppend(box, label); + + if (utils.isGTK4()) { + window.set_child(box); + window.show(); + } else { + window.add(box); + window.show_all(); + } }); - - const box = new Gtk.Box({ - orientation: Gtk.Orientation.VERTICAL, - valign: Gtk.Align.CENTER, - spacing: 10, - }); - - const label = Gtk.Label.new('Close this Window to Preview the Effect!'); - label.get_style_context().add_class('large-title'); - - const image = new Gtk.Image({ - icon_name: 'burn-my-windows-symbolic', - pixel_size: 128, - }); - - dialog.gtkBoxAppend(box, image); - dialog.gtkBoxAppend(box, label); - - if (utils.isGTK4()) { - window.set_child(box); - } else { - window.add(box); - } - - window.show(); - }); - } - }); - // clang-format on + } + }); + } } } -// Nothing to do for now... -function init() {} +// This is used for setting up the translations. +function init() { + ExtensionUtils.initTranslations(); +} // This function is called when the preferences window is created to build and return a // Gtk widget. We create a new instance of the PreferencesDialog class each time this diff --git a/resources/credits/README.md b/resources/credits/README.md new file mode 100644 index 0000000..2c3e17d --- /dev/null +++ b/resources/credits/README.md @@ -0,0 +1 @@ +The `translators.json` file is directly exported from weblate. \ No newline at end of file diff --git a/resources/credits/sponsors.json b/resources/credits/sponsors.json new file mode 100644 index 0000000..cee580f --- /dev/null +++ b/resources/credits/sponsors.json @@ -0,0 +1,20 @@ +{ + "gold": [ + "Dennis ten Hoove" + ], + "silver": [ + "tj3k", + "@MRR-dev", + "Jorge Castro" + ], + "bronze": [ + "@danielheadbang" + ], + "past": [ + "@MrTomRod", + "Pouhiou", + "DAPREMONT Christophe", + "@manero6", + "@RickStanley" + ] +} \ No newline at end of file diff --git a/resources/credits/translators.json b/resources/credits/translators.json new file mode 100644 index 0000000..c3329bb --- /dev/null +++ b/resources/credits/translators.json @@ -0,0 +1,117 @@ +[ + { + "Norwegian Bokm\u00e5l": [ + [ + "epost@anotheragency.no", + "Allan Nordh\u00f8y", + 3 + ] + ] + }, + { + "Dutch": [ + [ + "vistausss@fastmail.com", + "Heimen Stoffels", + 65 + ] + ] + }, + { + "Russian": [ + [ + "franigoyt@gmail.com", + "ANIGO R. (AR)", + 59 + ] + ] + }, + { + "Czech": [ + [ + "jiri.doubravsky@gmail.com", + "Ji\u0159\u00ed Doubravsk\u00fd", + 70 + ] + ] + }, + { + "Turkish": [ + [ + "muhaaliss@pm.me", + "Muha Aliss", + 57 + ] + ] + }, + { + "Italian": [ + [ + "mario03@gmail.com", + "Mario", + 1 + ], + [ + "albano_battistella@hotmail.com", + "albanobattistella", + 63 + ] + ] + }, + { + "Chinese (Simplified)": [ + [ + "lyuutau@outlook.com", + "\u5218\u97ec", + 36 + ] + ] + }, + { + "German": [ + [ + "code@simonschneegans.de", + "Simon Schneegans", + 59 + ] + ] + }, + { + "French": [ + [ + "redxxiii@zaclys.net", + "Reda", + 13 + ], + [ + "theo.remon+weblate@uswery.eu", + "Th\u00e9o Remon", + 24 + ], + [ + "bonnemainsnathan@gmail.com", + "Nathan", + 42 + ] + ] + }, + { + "Spanish": [ + [ + "ulicesah@gmail.com", + "Ulices", + 7 + ], + [ + "fitojb@ubuntu.com", + "Adolfo Jayme Barrientos", + 11 + ], + [ + "oscfdezdz@tuta.io", + "\u00d3scar Fern\u00e1ndez D\u00edaz", + 55 + ] + ] + } +] \ No newline at end of file diff --git a/resources/ui/common/main-menu.ui b/resources/ui/common/main-menu.ui index 0d8a0b8..b0baa6c 100644 --- a/resources/ui/common/main-menu.ui +++ b/resources/ui/common/main-menu.ui @@ -1,5 +1,5 @@ - +
@@ -17,20 +17,30 @@ prefs.bugs - Create a Custom Effect + Create an Effect prefs.new-effect + + Translate + prefs.translate + Donate - Via PayPal + PayPal prefs.donate-paypal - Via GitHub + GitHub prefs.donate-github
+
+ + About Burn-My-Windows + prefs.about + +
\ No newline at end of file diff --git a/resources/ui/gtk3/EnergizeA.ui b/resources/ui/gtk3/EnergizeA.ui index 79afebc..181a88f 100644 --- a/resources/ui/gtk3/EnergizeA.ui +++ b/resources/ui/gtk3/EnergizeA.ui @@ -1,10 +1,10 @@ - + 10000 - 500 - 10 + 100 + 1 100 @@ -65,7 +65,7 @@ 1
- Reset to Default Value + Reset to Default Value @@ -114,7 +114,7 @@ 1
- Reset to Default Value + Reset to Default Value @@ -157,7 +157,7 @@ 1 - Reset to Default Value + Reset to Default Value diff --git a/resources/ui/gtk3/EnergizeB.ui b/resources/ui/gtk3/EnergizeB.ui index 051821d..b7a8835 100644 --- a/resources/ui/gtk3/EnergizeB.ui +++ b/resources/ui/gtk3/EnergizeB.ui @@ -1,10 +1,10 @@ - + 10000 - 500 - 10 + 100 + 1 100 @@ -65,7 +65,7 @@ 1 - Reset to Default Value + Reset to Default Value @@ -114,7 +114,7 @@ 1 - Reset to Default Value + Reset to Default Value @@ -157,7 +157,7 @@ 1 - Reset to Default Value + Reset to Default Value diff --git a/resources/ui/gtk3/Fire.ui b/resources/ui/gtk3/Fire.ui index 4b43025..5a337bf 100644 --- a/resources/ui/gtk3/Fire.ui +++ b/resources/ui/gtk3/Fire.ui @@ -1,10 +1,10 @@ - + 10000 - 500 - 10 + 100 + 1 100 @@ -116,7 +116,7 @@ 1 - Reset to Default Value + Reset to Default Value @@ -164,7 +164,7 @@ 1 - Reset to Default Value + Reset to Default Value @@ -212,7 +212,7 @@ 1 - Reset to Default Value + Reset to Default Value @@ -274,7 +274,7 @@ 1 - Reset to Default Value + Reset to Default Value @@ -342,7 +342,7 @@ 1 - Reset to Default Value + Reset to Default Value diff --git a/resources/ui/gtk3/TVEffect.ui b/resources/ui/gtk3/TVEffect.ui index adebe01..f7ef186 100644 --- a/resources/ui/gtk3/TVEffect.ui +++ b/resources/ui/gtk3/TVEffect.ui @@ -1,5 +1,5 @@ - + 5000 @@ -58,7 +58,7 @@ 1 - Reset to Default Value + Reset to Default Value @@ -101,7 +101,7 @@ 1 - Reset to Default Value + Reset to Default Value diff --git a/resources/ui/gtk3/Wisps.ui b/resources/ui/gtk3/Wisps.ui index ff096ae..38c9595 100644 --- a/resources/ui/gtk3/Wisps.ui +++ b/resources/ui/gtk3/Wisps.ui @@ -1,10 +1,10 @@ - + 10000 - 500 - 10 + 100 + 1 100 @@ -65,7 +65,7 @@ 1 - Reset to Default Value + Reset to Default Value @@ -114,7 +114,7 @@ 1 - Reset to Default Value + Reset to Default Value @@ -157,7 +157,7 @@ 1 - Reset to Default Value + Reset to Default Value diff --git a/resources/ui/gtk3/effectPage.ui b/resources/ui/gtk3/effectPage.ui index 2ec5311..cb02379 100644 --- a/resources/ui/gtk3/effectPage.ui +++ b/resources/ui/gtk3/effectPage.ui @@ -1,13 +1,9 @@ - +