diff --git a/Makefile b/Makefile index ba8fdbc..dc44ed1 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ DOMAIN := schneegans.github.com ZIP_NAME := $(NAME)@$(DOMAIN).zip # Some of the recipes below depend on some of these files. -JS_FILES = $(wildcard src/*.js extension.js prefs.js) +JS_FILES = $(wildcard src/*.js src/*/*.js extension.js prefs.js) UI_FILES = $(shell find resources -type f -and \( -name "*.ui" \)) RESOURCE_FILES = $(shell find resources -mindepth 2 -type f) LOCALES_PO = $(wildcard po/*.po) @@ -91,7 +91,7 @@ $(ZIP_NAME): $(ZIP_CONTENT) fi # Compiles the gschemas.compiled file from the gschema.xml file. -schemas/gschemas.compiled: schemas/org.gnome.shell.extensions.$(NAME).gschema.xml +schemas/gschemas.compiled: schemas/org.gnome.shell.extensions.$(NAME).gschema.xml schemas/org.gnome.shell.extensions.$(NAME)-profile.gschema.xml @echo "Compiling schemas..." @glib-compile-schemas schemas diff --git a/docs/changelog.md b/docs/changelog.md index 296954e..7deb67b 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -5,6 +5,35 @@ SPDX-License-Identifier: CC-BY-4.0 # Changelog of the Burn-My-Windows Extension +## [Burn My Windows 27](https://github.com/schneegans/Burn-My-Windows/releases/tag/v27) + +**Release Date:** TBD + +#### New Features + +* **Effect Profiles:** It is now possible to create _effect profiles_. Each profile contains a different set of effect settings. You can choose for each profile under which circumstances it will be used. Currently, these constraints are supported: + - Application name + - Animation type (open close) + - Window type (normal, dialog) + - Desktop style (light, dark) + - Power mode (plugged-in, on battery) + - Power profile (power saver, balanced, performance) + + This allows for a very detailed configuration of the extension. For instance, you can now... + - ... exclude specific applications from BMW effects + - ... select effects per-application + - ... use different configurations of the same effect for opening or closing windows + + The extension will attempt to migrate your previous settings to the new effect profile system. Depending on your previous configuration, you may have now one or two profiles to start with, but you can add an arbitrary amount of profiles. + + The effect profiles are available for all supported GNOME versions (that is GNOME 3.36, 3.38, 40, 41, 42, amd 43). + +#### Other Enhancements + +* As part of the effect profile implementation, the libadwaita-inspired preferences dialog layout got back-ported to all other supported GNOME versions. +* A notification is now shown in the settings dialog whenever the extension got updated. It contains a link to this changelog. +* Many translation updates. Thanks to all the translators! + ## [Burn My Windows 26](https://github.com/schneegans/Burn-My-Windows/releases/tag/v26) **Release Date:** 2023-02-04 diff --git a/docs/how-to-create-new-effects.md b/docs/how-to-create-new-effects.md index 3452fa1..36314f4 100644 --- a/docs/how-to-create-new-effects.md +++ b/docs/how-to-create-new-effects.md @@ -47,7 +47,7 @@ You will have to ... ### 1. Expanding the Schema -For enabling the new effect, the boolean settings keys `simple-fade-open-effect`, `simple-fade-close-effect`, and `simple-fade-animation-time` are required. +For enabling the new effect, the boolean settings keys `simple-fade-enable-effect` and `simple-fade-animation-time` are required. In this example, we also add a floating point value for storing another property of the effect - we will use them later in the tutorial. 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! @@ -57,16 +57,10 @@ Just remember to replace `simple-fade` with your custom name! - + false - Simple Fade Close Effect - Use the Simple Fade effect for window closing. - - - - false - Simple Fade Open Effect - Use the Simple Fade effect for window opening. + Simple Fade Enable Effect + Use the Simple Fade effect. @@ -84,7 +78,7 @@ Just remember to replace `simple-fade` with your custom name! ### 2. Creating the Effect Class -You will have to create a new GLSL file called `resources/shaders/simple-fade.frag` and a new JavaScript source file called `src/SimpleFade.js`. +You will have to create a new GLSL file called `resources/shaders/simple-fade.frag` and a new JavaScript source file called `src/effects/SimpleFade.js`. Simply paste the following source code to the respective file. Please study this code carefully, all of it is explained with inline comments. @@ -201,8 +195,9 @@ var SimpleFade = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time - // (e.g. '*-animation-time'). + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time + // (e.g. '*-animation-time'). Also, the shader file and the settings UI files should be + // named likes this. getNick() { return 'simple-fade'; } @@ -215,10 +210,9 @@ var SimpleFade = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // binds all properties to the settings and appends the page to the main stack of the - // preferences dialog. - getPreferences(dialog) { + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { // Empty for now... Code is added here later in the tutorial! return null; } @@ -245,7 +239,7 @@ Like this: ```javascript const ALL_EFFECTS = [ ... - new Me.imports.src.SimpleFade.SimpleFade(), + new Me.imports.src.effects.SimpleFade.SimpleFade(), ... ]; ``` @@ -271,9 +265,9 @@ There should be two sliders in this example: The animation duration and the widt If your effect supports GNOME Shell 3.3x _and_ GNOME Shell 40+, you will have to provide three `*.ui` files for this. This is because starting with GNOME Shell 40, the preference dialog uses GTK4, before it used to use GTK3. Starting with GNOME Shell 42, it uses `libadwaita` which requires different UI files again. -We will load the respective file in the `getPreferences()` method of your new effect class. +We will load the respective file in the `bindPreferences()` method of your new effect class. -Just save the code below to `resources/ui/gtk3/SimpleFade.ui`, `resources/ui/gtk4/SimpleFade.ui`, and `resources/ui/adw/SimpleFade.ui` respectively. +Just save the code below to `resources/ui/gtk3/simple-fade.ui`, `resources/ui/gtk4/simple-fade.ui`, and `resources/ui/adw/simple-fade.ui` respectively. Remember to replace any occurrence of `simple-fade` with your effect's nick-name!
@@ -317,10 +311,6 @@ SPDX-License-Identifier: GPL-3.0-or-later - 10 - 10 - 10 - 10 0 @@ -365,10 +355,6 @@ SPDX-License-Identifier: GPL-3.0-or-later - 10 - 10 - 10 - 10 0 @@ -647,21 +633,14 @@ SPDX-License-Identifier: GPL-3.0-or-later ### Loading the Preferences Page -In order to load the above `*.ui` files, add the following code to your effect's `getPreferences()` method. +In order to load the above `*.ui` files, add the following code to your effect's `bindPreferences()` method. ```javascript -static getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/SimpleFade.ui`); - +bindPreferences(dialog) { // These connect the settings to the UI elements. Have a look at prefs.js // on how to bind other types of UI elements. dialog.bindAdjustment('simple-fade-animation-time'); dialog.bindAdjustment('simple-fade-width'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('simple-fade-prefs'); } ``` diff --git a/extension.js b/extension.js index ead3dbe..4c300db 100644 --- a/extension.js +++ b/extension.js @@ -30,7 +30,10 @@ try { const ExtensionUtils = imports.misc.extensionUtils; const Me = imports.misc.extensionUtils.getCurrentExtension(); +const migrate = Me.imports.src.migrate; const utils = Me.imports.src.utils; +const ProfileManager = Me.imports.src.ProfileManager.ProfileManager; +const WindowPicker = Me.imports.src.WindowPicker.WindowPicker; ////////////////////////////////////////////////////////////////////////////////////////// // This extensions modifies the window-close and window-open animations with all kinds // @@ -51,26 +54,26 @@ class Extension { // New effects must be registered here and in prefs.js. this._ALL_EFFECTS = [ - new Me.imports.src.Apparition.Apparition(), - new Me.imports.src.BrokenGlass.BrokenGlass(), - new Me.imports.src.Doom.Doom(), - new Me.imports.src.EnergizeA.EnergizeA(), - new Me.imports.src.EnergizeB.EnergizeB(), - new Me.imports.src.Fire.Fire(), - new Me.imports.src.Glide.Glide(), - new Me.imports.src.Glitch.Glitch(), - new Me.imports.src.Hexagon.Hexagon(), - new Me.imports.src.Incinerate.Incinerate(), - new Me.imports.src.Matrix.Matrix(), - new Me.imports.src.Pixelate.Pixelate(), - new Me.imports.src.PixelWheel.PixelWheel(), - new Me.imports.src.PixelWipe.PixelWipe(), - new Me.imports.src.Portal.Portal(), - new Me.imports.src.SnapOfDisintegration.SnapOfDisintegration(), - new Me.imports.src.TRexAttack.TRexAttack(), - new Me.imports.src.TVEffect.TVEffect(), - new Me.imports.src.TVGlitch.TVGlitch(), - new Me.imports.src.Wisps.Wisps(), + new Me.imports.src.effects.Apparition.Apparition(), + new Me.imports.src.effects.BrokenGlass.BrokenGlass(), + new Me.imports.src.effects.Doom.Doom(), + new Me.imports.src.effects.EnergizeA.EnergizeA(), + new Me.imports.src.effects.EnergizeB.EnergizeB(), + new Me.imports.src.effects.Fire.Fire(), + new Me.imports.src.effects.Glide.Glide(), + new Me.imports.src.effects.Glitch.Glitch(), + new Me.imports.src.effects.Hexagon.Hexagon(), + new Me.imports.src.effects.Incinerate.Incinerate(), + new Me.imports.src.effects.Matrix.Matrix(), + new Me.imports.src.effects.Pixelate.Pixelate(), + new Me.imports.src.effects.PixelWheel.PixelWheel(), + new Me.imports.src.effects.PixelWipe.PixelWipe(), + new Me.imports.src.effects.Portal.Portal(), + new Me.imports.src.effects.SnapOfDisintegration.SnapOfDisintegration(), + new Me.imports.src.effects.TRexAttack.TRexAttack(), + new Me.imports.src.effects.TVEffect.TVEffect(), + new Me.imports.src.effects.TVGlitch.TVGlitch(), + new Me.imports.src.effects.Wisps.Wisps(), ]; // Load all of our resources. @@ -80,6 +83,36 @@ class Extension { // Store a reference to the settings object. this._settings = ExtensionUtils.getSettings(); + // Now we check whether the extension settings need to be migrated from a previous + // version. If this is the case, we defer the profile loading until this is finished. + const lastVersion = this._settings.get_int('last-extension-version'); + if (lastVersion < Me.metadata.version) { + if (lastVersion <= 26) { + // If the profile migration fails for some reason, the callback will create a + // default profile instead. + migrate.fromVersion26().finally(() => { + this._loadProfiles(); + this._settings.set_int('last-extension-version', Me.metadata.version); + }); + } + } else { + this._loadProfiles(); + } + + // We reload all effect profiles whenever the currently edited profile in the + // preferences dialog changes. This is most likely a bit too often, but it will also + // happen whenever a new profile is created and whenever an old profile is deleted. + this._settings.connect('changed::active-profile', () => { + this._loadProfiles(); + }); + + // This is used to get the desktop's color scheme. + this._shellSettings = new Gio.Settings({schema: 'org.gnome.desktop.interface'}); + + // Enable the window-picking D-Bus API for the preferences dialog. + this._windowPicker = new WindowPicker(); + this._windowPicker.export(); + // We will use extensionThis to refer to the extension inside the patched methods. const extensionThis = this; @@ -107,11 +140,6 @@ class Extension { this._origWaitForOverviewToHide = WindowManager.prototype._waitForOverviewToHide; this._origDestroyWindowDone = WindowManager.prototype._destroyWindowDone; - // 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; - - // ------------------------------------------------ patching the window-open animation // Here we add an effect to the window-open animation. This is done whenever a new @@ -338,6 +366,9 @@ class Extension { // Unregister our resources. Gio.resources_unregister(this._resources); + // Disable the window-picking D-Bus API. + this._windowPicker.unexport(); + // Restore the original window-open and window-close animations. global.window_manager.disconnect(this._destroyConnection); global.display.disconnect(this._windowCreatedConnection); @@ -349,9 +380,6 @@ class Extension { WindowManager.prototype._waitForOverviewToHide = this._origWaitForOverviewToHide; WindowManager.prototype._destroyWindowDone = this._origDestroyWindowDone; - imports.ui.windowManager.DESTROY_WINDOW_ANIMATION_TIME = this._origWindowTime; - imports.ui.windowManager.DIALOG_DESTROY_WINDOW_ANIMATION_TIME = this._origDialogTime; - if (WindowPreview) { WindowPreview.prototype._deleteAll = this._origDeleteAll; WindowPreview.prototype._restack = this._origRestack; @@ -363,13 +391,48 @@ 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). + // This loads all effect profiles and assigns a priority to each profile. Whenever a + // window is opened or closed, the matching effect profile with the highest priority + // will be chosen. + // This method is called whenever the currently edited profile in the/ preferences + // dialog changes. This is most likely a bit too often, but it will also happen whenever + // a new profile is created and whenever an old profile is deleted. + _loadProfiles() { + + // Get all currently available profiles. + const profileManager = new ProfileManager(); + this._profiles = profileManager.getProfiles(); + + // Whenever the properties of a profile is changed in the settings, we may have to + // resort all profiles according to their priority. + const updatePriority = (p) => { + p.priority = profileManager.getProfilePriority(p.settings); + this._profiles.sort((a, b) => b.priority - a.priority); + }; + + // For each profile, assign an initial priority and update the priority whenever a + // related setting changes. + this._profiles.forEach(p => { + p.priority = profileManager.getProfilePriority(p.settings); + p.settings.connect('changed::profile-app', () => updatePriority(p)); + p.settings.connect('changed::profile-animation-type', () => updatePriority(p)); + p.settings.connect('changed::profile-window-type', () => updatePriority(p)); + p.settings.connect('changed::profile-color-scheme', () => updatePriority(p)); + p.settings.connect('changed::profile-power-mode', () => updatePriority(p)); + p.settings.connect('changed::profile-power-profile', () => updatePriority(p)); + }); + + // Sort all profiles initially according to their initial priority. + this._profiles.sort((a, b) => b.priority - a.priority); + } + + // This method adds one of the configured effects to the given actor. First, a profile + // matching the current circumstances is chosen. Then a random effect from its enabled + // effects will be selected. 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. + // For now, we 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 || @@ -379,30 +442,6 @@ class Extension { 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, 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; - } - - // We may have to do nothing if running on battery power or if in power-save mode. - let disableOnBattery = - this._settings.get_boolean('disable-on-battery') && this._upowerProxy.OnBattery; - let disableOnPowerSave = this._settings.get_boolean('disable-on-power-save') && - this._powerProfilesProxy && this._powerProfilesProxy.ActiveProfile == 'power-saver'; - - if ((disableOnBattery || disableOnPowerSave) && previewNick == '') { - this._fixAnimationTimes(isDialogWindow, forOpening, null); - return; - } - // There is the weird case where an animation is already ongoing. This happens when a // window is closed which has been created before the session was started (e.g. when // GNOME Shell has been restarted in the meantime). @@ -413,39 +452,113 @@ class Extension { oldShader.returnToFactory(); } - // ------------------------------------------------------------------ choose an effect + // ----------------------------------------------- choose a profile and then an effect - // Now we chose a random effect from all enabled effects. - let effect = null; + // Usually, we use the effect profile with the highest priority which matches the + // current circumstances. From this profile, we choose a random effect. However, if an + // effect is to be previewed, we choose the currently edited profile regardless of the + // circumstances. + let profile = null; + let effect = null; + + // Hence, we first check if an effect is to be previewed. + const previewNick = this._settings.get_string('preview-effect'); - // First we check if an effect is to be previewed. if (previewNick != '') { - effect = this._ALL_EFFECTS.find(effect => effect.getNick() == previewNick); - - // Only preview the effect once. - this._settings.set_string(action + '-preview-effect', ''); + const activeProfile = this._settings.get_string('active-profile'); + effect = this._ALL_EFFECTS.find(effect => effect.getNick() == previewNick); + profile = this._profiles.find(p => p.path == activeProfile); + // Only preview the effect until the preview window is closed. + if (!profile || !forOpening) { + this._settings.set_string('preview-effect', ''); + } } - // Else we choose a random effect from all enabled effects. + // If no effect is previewed, we use the effect profile with the highest priority + // which matches the current circumstances. From this profile, we choose a random + // effect. else { - // Therefore, we first create a list of all currently enabled effects. - const enabled = this._ALL_EFFECTS.filter(effect => { - return this._settings.get_boolean(`${effect.getNick()}-${action}-effect`); + // These numbers match the indices in the Gtk.StringLists defined in the UI files + // (e.g. resources/ui/adw/prefs.ui). + const animationType = forOpening ? 1 : 2; + const windowType = isNormalWindow ? 1 : 2; + const powerMode = this._upowerProxy.OnBattery ? 1 : 2; + + // Get the first profile whose constraints match the circumstances. The list is + // sorted by priority, so we are good to take the first match. + profile = this._profiles.find(p => { + const profileApp = p.settings.get_string('profile-app'); + const profileAnimationType = p.settings.get_int('profile-animation-type'); + const profileWindowType = p.settings.get_int('profile-window-type'); + const profilePowerMode = p.settings.get_int('profile-power-mode'); + const profileColorScheme = p.settings.get_int('profile-color-scheme'); + const profilePowerProfile = p.settings.get_int('profile-power-profile'); + + // First we check whether the animation type, window type, and power mode are + // matching. + let matches = + (profileAnimationType == 0 || profileAnimationType == animationType) && + (profileWindowType == 0 || profileWindowType == windowType) && + (profilePowerMode == 0 || profilePowerMode == powerMode); + + // If that was the case, we also check the application name. + if (matches && profileApp != '') { + const app = actor.meta_window.get_wm_class().toLowerCase(); + + // Split app names at |, remove any whitespace, and transform to lower case. + const profileApps = + profileApp.split('|').map(item => item.trim().toLowerCase()); + matches = profileApps.includes(app); + } + + // If the profile is still matching, we also check the color scheme. + if (matches && profileColorScheme != 0 && utils.shellVersionIsAtLeast(42, 0)) { + const colorScheme = this._shellSettings.get_string('color-scheme'); + matches &= (profileColorScheme == 1 && colorScheme == 'default') || + (profileColorScheme == 2 && colorScheme == 'prefer-dark'); + } + + // Finally, we may also have to check the power profile. + if (matches && profilePowerProfile != 0 && this._powerProfilesProxy) { + const powerProfile = this._powerProfilesProxy.ActiveProfile; + + // To understand the numbers, please refer to the indices in the Gtk.StringList + // of the profile-power-profile Adw.ComboRow in resources/ui/adw/prefs.ui. + if (powerProfile == 'power-saver') { + matches &= profilePowerProfile == 1 || profilePowerProfile == 4; + } else if (powerProfile == 'balanced') { + matches &= profilePowerProfile == 2 || profilePowerProfile == 4 || + profilePowerProfile == 5; + } else { + matches &= profilePowerProfile == 3 || profilePowerProfile == 5; + } + } + + return matches; }); - // And then choose a random effect. - if (enabled.length > 0) { - effect = enabled[Math.floor(Math.random() * enabled.length)]; + // If we found a matching profile, choose a random effect from it. + if (profile) { + + // Create a list of all enabled effects of this profile. + const enabled = this._ALL_EFFECTS.filter(effect => { + return profile.settings.get_boolean(`${effect.getNick()}-enable-effect`); + }); + + // And then choose a random effect. + if (enabled.length > 0) { + effect = enabled[Math.floor(Math.random() * enabled.length)]; + } } } // If nothing was enabled, we have to do nothing :) - if (effect == null) { - this._fixAnimationTimes(isDialogWindow, forOpening, null); + if (!effect || !profile) { return; } + // ----------------------------------------------------------- tweak actor transitions // If we are currently performing integration test, all animations are set to a fixed @@ -456,17 +569,16 @@ class Extension { // windows are faded in / out scaled up / down slightly by GNOME Shell. Here, we tweak // the transitions so that nothing changes. The window stays opaque and is scaled to // actorScale. - const actorScale = effect.getActorScale(this._settings, forOpening, actor); + const actorScale = effect.getActorScale(profile.settings, forOpening, actor); // To make things deterministic during testing, we set the effect duration to 5 // seconds. const duration = - testMode ? 5000 : this._settings.get_int(effect.getNick() + '-animation-time'); + testMode ? 5000 : profile.settings.get_int(effect.getNick() + '-animation-time'); // All animations are relative to the window's center. actor.set_pivot_point(0.5, 0.5); - // We tweak the opacity and scale of the actor. If there is no ongoing transition for // a property, a new one is set up. const config = {'opacity': 255, 'scale-x': actorScale.x, 'scale-y': actorScale.y}; @@ -519,7 +631,6 @@ class Extension { const transition = actor.get_transition('opacity'); if (!transition) { - this._fixAnimationTimes(isDialogWindow, forOpening, null); utils.debug('Cannot setup shader without opacity transition.') return; } @@ -528,7 +639,8 @@ class Extension { actor.add_effect_with_name('burn-my-windows-effect', shader); // Set one-time uniforms. - shader.beginAnimation(this._settings, forOpening, duration * 0.001, actor); + shader.beginAnimation(profile.settings, forOpening, testMode, duration * 0.001, + actor); // Set other uniforms each frame. transition.connect('new-frame', (t) => { @@ -550,29 +662,6 @@ class Extension { } }); } - - // 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 diff --git a/po/burn-my-windows.pot b/po/burn-my-windows.pot index 3dc6415..68b12c2 100644 --- a/po/burn-my-windows.pot +++ b/po/burn-my-windows.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: burn-my-windows\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-23 13:21+0100\n" +"POT-Creation-Date: 2023-02-10 21:20+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,612 +17,726 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/Apparition.js:81 +#: src/ProfileManager.js:168 resources/ui/gtk4/prefs.ui:220 +#: resources/ui/gtk3/prefs.ui:265 resources/ui/adw/prefs.ui:103 +msgid "Opening Windows" +msgstr "" + +#: src/ProfileManager.js:169 resources/ui/gtk4/prefs.ui:221 +#: resources/ui/gtk3/prefs.ui:266 resources/ui/adw/prefs.ui:104 +msgid "Closing Windows" +msgstr "" + +#: src/ProfileManager.js:170 resources/ui/gtk4/prefs.ui:249 +#: resources/ui/gtk3/prefs.ui:294 resources/ui/adw/prefs.ui:118 +msgid "Normal Windows" +msgstr "" + +#: src/ProfileManager.js:171 resources/ui/gtk4/prefs.ui:250 +#: resources/ui/gtk3/prefs.ui:295 resources/ui/adw/prefs.ui:119 +msgid "Dialog Windows" +msgstr "" + +#: src/ProfileManager.js:172 resources/ui/gtk4/prefs.ui:278 +#: resources/ui/gtk3/prefs.ui:323 resources/ui/adw/prefs.ui:133 +msgid "Default Color Scheme" +msgstr "" + +#: src/ProfileManager.js:173 resources/ui/gtk4/prefs.ui:279 +#: resources/ui/gtk3/prefs.ui:324 resources/ui/adw/prefs.ui:134 +msgid "Dark Color Scheme" +msgstr "" + +#: src/ProfileManager.js:174 resources/ui/gtk4/prefs.ui:307 +#: resources/ui/gtk3/prefs.ui:352 resources/ui/adw/prefs.ui:148 +msgid "On Battery" +msgstr "" + +#: src/ProfileManager.js:175 resources/ui/gtk4/prefs.ui:308 +#: resources/ui/gtk3/prefs.ui:353 resources/ui/adw/prefs.ui:149 +msgid "Plugged In" +msgstr "" + +#: src/ProfileManager.js:176 resources/ui/gtk4/prefs.ui:336 +#: resources/ui/gtk3/prefs.ui:381 resources/ui/adw/prefs.ui:163 +msgid "Power-Saver Mode" +msgstr "" + +#: src/ProfileManager.js:177 resources/ui/gtk4/prefs.ui:337 +#: resources/ui/gtk3/prefs.ui:382 resources/ui/adw/prefs.ui:164 +msgid "Balanced Mode" +msgstr "" + +#: src/ProfileManager.js:178 resources/ui/gtk4/prefs.ui:338 +#: resources/ui/gtk3/prefs.ui:383 resources/ui/adw/prefs.ui:165 +msgid "Performance Mode" +msgstr "" + +#: src/ProfileManager.js:179 resources/ui/gtk4/prefs.ui:339 +#: resources/ui/gtk3/prefs.ui:384 resources/ui/adw/prefs.ui:166 +msgid "Power Saver or Balanced" +msgstr "" + +#: src/ProfileManager.js:180 resources/ui/gtk4/prefs.ui:340 +#: resources/ui/gtk3/prefs.ui:385 resources/ui/adw/prefs.ui:167 +msgid "Balanced or Performance" +msgstr "" + +#: src/ProfileManager.js:186 +msgid "Standard Profile" +msgstr "" + +#: src/effects/Apparition.js:78 msgid "Apparition" msgstr "" -#: src/BrokenGlass.js:139 +#: src/effects/BrokenGlass.js:137 msgid "Broken Glass" msgstr "" -#: src/Doom.js:88 +#: src/effects/Doom.js:88 msgid "Doom" msgstr "" -#: src/EnergizeA.js:80 +#: src/effects/EnergizeA.js:80 msgid "Energize A" msgstr "" -#: src/EnergizeB.js:81 +#: src/effects/EnergizeB.js:81 msgid "Energize B" msgstr "" -#: src/Fire.js:100 +#: src/effects/Fire.js:100 msgid "Fire" msgstr "" -#: src/Fire.js:155 +#: src/effects/Fire.js:154 msgid "Default Fire" msgstr "" -#: src/Fire.js:165 +#: src/effects/Fire.js:164 msgid "Hell Fire" msgstr "" -#: src/Fire.js:175 +#: src/effects/Fire.js:174 msgid "Dark and Smutty" msgstr "" -#: src/Fire.js:185 +#: src/effects/Fire.js:184 msgid "Cold Breeze" msgstr "" -#: src/Fire.js:195 +#: src/effects/Fire.js:194 msgid "Santa is Coming" msgstr "" -#: src/Glide.js:78 +#: src/effects/Glide.js:78 msgid "Glide" msgstr "" -#: src/Glitch.js:89 +#: src/effects/Glitch.js:86 msgid "Glitch" msgstr "" -#: src/Hexagon.js:98 +#: src/effects/Hexagon.js:94 msgid "Hexagon" msgstr "" -#: src/Incinerate.js:131 +#: src/effects/Incinerate.js:131 msgid "Incinerate" msgstr "" -#: src/Matrix.js:114 +#: src/effects/Matrix.js:114 msgid "Matrix" msgstr "" -#: src/Pixelate.js:74 +#: src/effects/Pixelate.js:74 msgid "Pixelate" msgstr "" -#: src/PixelWheel.js:74 +#: src/effects/PixelWheel.js:74 msgid "Pixel Wheel" msgstr "" -#: src/PixelWipe.js:100 +#: src/effects/PixelWipe.js:101 msgid "Pixel Wipe" msgstr "" -#: src/Portal.js:91 +#: src/effects/Portal.js:88 msgid "Portal" msgstr "" -#: src/SnapOfDisintegration.js:118 +#: src/effects/SnapOfDisintegration.js:114 msgid "Snap of Disintegration" msgstr "" -#: src/TRexAttack.js:116 +#: src/effects/TRexAttack.js:112 msgid "T-Rex Attack" msgstr "" -#: src/TVEffect.js:78 +#: src/effects/TVEffect.js:78 msgid "TV Effect" msgstr "" -#: src/TVGlitch.js:90 +#: src/effects/TVGlitch.js:87 msgid "TV Glitch" msgstr "" -#: src/Wisps.js:86 +#: src/effects/Wisps.js:82 msgid "Wisps" msgstr "" -#: prefs.js:140 -msgid "Effects" -msgstr "" - -#: prefs.js:182 resources/ui/gtk4/effectPage.ui:43 -#: resources/ui/gtk3/effectPage.ui:43 +#: prefs.js:247 msgid "Preview this effect" msgstr "" -#: prefs.js:217 -msgid "Use this effect when opening windows" +#: prefs.js:364 resources/ui/gtk4/prefs.ui:50 resources/ui/gtk3/prefs.ui:86 +msgid "Burn-My-Windows has been updated!" msgstr "" -#: prefs.js:218 -msgid "Use this effect when closing windows" +#: prefs.js:365 resources/ui/common/menus.ui:17 resources/ui/gtk4/prefs.ui:56 +#: resources/ui/gtk3/prefs.ui:96 +msgid "View Changelog" msgstr "" -#: prefs.js:244 -msgid "General Options" -msgstr "" - -#: prefs.js:349 prefs.js:381 +#: prefs.js:495 prefs.js:527 msgid "Gold Sponsors" msgstr "" -#: prefs.js:353 prefs.js:385 +#: prefs.js:499 prefs.js:531 msgid "Silver Sponsors" msgstr "" -#: prefs.js:357 prefs.js:389 +#: prefs.js:503 prefs.js:535 msgid "Bronze Sponsors" msgstr "" -#: prefs.js:361 prefs.js:393 +#: prefs.js:507 prefs.js:539 msgid "Past Sponsors" msgstr "" +#: prefs.js:584 +msgid "Delete this Profile?" +msgstr "" + +#: prefs.js:586 +msgid "" +"The current effect profile with all its effect settings will be permanently " +"lost." +msgstr "" + +#: prefs.js:591 +msgid "Cancel" +msgstr "" + +#: prefs.js:592 +msgid "Delete" +msgstr "" + #. Translators: %s will be replaced by the effect's name. -#: prefs.js:607 +#: prefs.js:921 #, javascript-format msgid "Preview for %s" msgstr "" -#: prefs.js:629 +#: prefs.js:943 msgid "Close this Window to Preview the Effect!" msgstr "" -#: resources/ui/common/main-menu.ui:12 +#: resources/ui/common/menus.ui:13 msgid "Visit Homepage" msgstr "" -#: resources/ui/common/main-menu.ui:16 -msgid "View Changelog" -msgstr "" - -#: resources/ui/common/main-menu.ui:22 +#: resources/ui/common/menus.ui:23 msgid "Report a Bug" msgstr "" -#: resources/ui/common/main-menu.ui:26 +#: resources/ui/common/menus.ui:27 msgid "Create an Effect" msgstr "" -#: resources/ui/common/main-menu.ui:30 +#: resources/ui/common/menus.ui:31 msgid "Translate" msgstr "" -#: resources/ui/common/main-menu.ui:34 +#: resources/ui/common/menus.ui:35 msgid "Donate" msgstr "" -#: resources/ui/common/main-menu.ui:47 +#: resources/ui/common/menus.ui:48 msgid "About Burn-My-Windows" msgstr "" -#: resources/ui/gtk4/Matrix.ui:30 resources/ui/gtk4/BrokenGlass.ui:30 -#: resources/ui/gtk4/Incinerate.ui:30 resources/ui/gtk4/Wisps.ui:30 -#: resources/ui/gtk4/Fire.ui:55 resources/ui/gtk4/SnapOfDisintegration.ui:30 -#: resources/ui/gtk4/Glide.ui:30 resources/ui/gtk4/PixelWipe.ui:30 -#: resources/ui/gtk4/TRexAttack.ui:30 resources/ui/gtk4/TVGlitch.ui:30 -#: resources/ui/gtk4/PixelWheel.ui:30 resources/ui/gtk4/Doom.ui:30 -#: resources/ui/gtk4/Glitch.ui:30 resources/ui/gtk4/TVEffect.ui:30 -#: resources/ui/gtk4/EnergizeA.ui:30 resources/ui/gtk4/Hexagon.ui:30 -#: resources/ui/gtk4/EnergizeB.ui:30 resources/ui/gtk4/Pixelate.ui:30 -#: resources/ui/gtk4/Apparition.ui:30 resources/ui/gtk4/Portal.ui:30 -#: resources/ui/gtk3/Incinerate.ui:55 resources/ui/gtk3/Wisps.ui:48 -#: resources/ui/gtk3/Fire.ui:99 resources/ui/gtk3/Glide.ui:69 -#: resources/ui/gtk3/PixelWipe.ui:55 resources/ui/gtk3/TVGlitch.ui:62 -#: resources/ui/gtk3/PixelWheel.ui:55 resources/ui/gtk3/Doom.ui:62 -#: resources/ui/gtk3/Glitch.ui:62 resources/ui/gtk3/TVEffect.ui:41 -#: resources/ui/gtk3/EnergizeA.ui:48 resources/ui/gtk3/Hexagon.ui:55 -#: resources/ui/gtk3/EnergizeB.ui:48 resources/ui/gtk3/Pixelate.ui:55 -#: resources/ui/gtk3/Apparition.ui:69 resources/ui/gtk3/Portal.ui:62 -#: resources/ui/adw/Matrix.ui:14 resources/ui/adw/BrokenGlass.ui:15 -#: resources/ui/adw/Incinerate.ui:14 resources/ui/adw/Wisps.ui:14 -#: resources/ui/adw/Fire.ui:30 resources/ui/adw/SnapOfDisintegration.ui:14 -#: resources/ui/adw/Glide.ui:14 resources/ui/adw/PixelWipe.ui:14 -#: resources/ui/adw/TRexAttack.ui:14 resources/ui/adw/TVGlitch.ui:14 -#: resources/ui/adw/PixelWheel.ui:14 resources/ui/adw/Doom.ui:14 -#: resources/ui/adw/Glitch.ui:14 resources/ui/adw/TVEffect.ui:14 -#: resources/ui/adw/EnergizeA.ui:14 resources/ui/adw/Hexagon.ui:14 -#: resources/ui/adw/EnergizeB.ui:15 resources/ui/adw/Pixelate.ui:14 -#: resources/ui/adw/Apparition.ui:15 resources/ui/adw/Portal.ui:14 +#: resources/ui/common/menus.ui:59 +msgid "Add New Profile..." +msgstr "" + +#: resources/ui/gtk4/broken-glass.ui:22 resources/ui/gtk4/tv-glitch.ui:23 +#: resources/ui/gtk4/glitch.ui:23 resources/ui/gtk4/matrix.ui:23 +#: resources/ui/gtk4/doom.ui:22 resources/ui/gtk4/trex.ui:23 +#: resources/ui/gtk4/wisps.ui:23 resources/ui/gtk4/energize-b.ui:23 +#: resources/ui/gtk4/pixel-wheel.ui:23 resources/ui/gtk4/glide.ui:23 +#: resources/ui/gtk4/apparition.ui:22 resources/ui/gtk4/portal.ui:23 +#: resources/ui/gtk4/incinerate.ui:23 resources/ui/gtk4/hexagon.ui:23 +#: resources/ui/gtk4/fire.ui:46 resources/ui/gtk4/pixel-wipe.ui:23 +#: resources/ui/gtk4/snap.ui:23 resources/ui/gtk4/energize-a.ui:23 +#: resources/ui/gtk4/pixelate.ui:23 resources/ui/gtk4/tv.ui:23 +#: resources/ui/gtk3/tv-glitch.ui:52 resources/ui/gtk3/glitch.ui:52 +#: resources/ui/gtk3/doom.ui:52 resources/ui/gtk3/wisps.ui:38 +#: resources/ui/gtk3/energize-b.ui:38 resources/ui/gtk3/pixel-wheel.ui:45 +#: resources/ui/gtk3/glide.ui:59 resources/ui/gtk3/apparition.ui:59 +#: resources/ui/gtk3/portal.ui:52 resources/ui/gtk3/incinerate.ui:45 +#: resources/ui/gtk3/hexagon.ui:45 resources/ui/gtk3/fire.ui:84 +#: resources/ui/gtk3/pixel-wipe.ui:45 resources/ui/gtk3/energize-a.ui:38 +#: resources/ui/gtk3/pixelate.ui:45 resources/ui/gtk3/tv.ui:31 +#: resources/ui/adw/broken-glass.ui:15 resources/ui/adw/tv-glitch.ui:14 +#: resources/ui/adw/glitch.ui:14 resources/ui/adw/matrix.ui:14 +#: resources/ui/adw/doom.ui:14 resources/ui/adw/trex.ui:14 +#: resources/ui/adw/wisps.ui:14 resources/ui/adw/energize-b.ui:15 +#: resources/ui/adw/pixel-wheel.ui:14 resources/ui/adw/glide.ui:14 +#: resources/ui/adw/apparition.ui:15 resources/ui/adw/portal.ui:14 +#: resources/ui/adw/incinerate.ui:14 resources/ui/adw/hexagon.ui:14 +#: resources/ui/adw/fire.ui:30 resources/ui/adw/pixel-wipe.ui:14 +#: resources/ui/adw/snap.ui:14 resources/ui/adw/energize-a.ui:14 +#: resources/ui/adw/pixelate.ui:14 resources/ui/adw/tv.ui:14 msgid "Animation Time [ms]" msgstr "" -#: resources/ui/gtk4/Matrix.ui:58 resources/ui/gtk4/Matrix.ui:104 -#: resources/ui/gtk4/Matrix.ui:150 resources/ui/gtk4/Matrix.ui:196 -#: resources/ui/gtk4/Matrix.ui:230 resources/ui/gtk4/Matrix.ui:264 -#: resources/ui/gtk4/BrokenGlass.ui:58 resources/ui/gtk4/BrokenGlass.ui:104 -#: resources/ui/gtk4/BrokenGlass.ui:150 resources/ui/gtk4/BrokenGlass.ui:196 -#: resources/ui/gtk4/BrokenGlass.ui:250 resources/ui/gtk4/Incinerate.ui:58 -#: resources/ui/gtk4/Incinerate.ui:104 resources/ui/gtk4/Incinerate.ui:150 -#: resources/ui/gtk4/Incinerate.ui:203 resources/ui/gtk4/Incinerate.ui:237 -#: resources/ui/gtk4/Wisps.ui:58 resources/ui/gtk4/Wisps.ui:104 -#: resources/ui/gtk4/Wisps.ui:138 resources/ui/gtk4/Fire.ui:83 -#: resources/ui/gtk4/Fire.ui:129 resources/ui/gtk4/Fire.ui:175 -#: resources/ui/gtk4/Fire.ui:228 resources/ui/gtk4/Fire.ui:286 -#: resources/ui/gtk4/Glide.ui:58 resources/ui/gtk4/Glide.ui:104 -#: resources/ui/gtk4/Glide.ui:150 resources/ui/gtk4/Glide.ui:196 -#: resources/ui/gtk4/Glide.ui:242 resources/ui/gtk4/PixelWipe.ui:58 -#: resources/ui/gtk4/PixelWipe.ui:104 resources/ui/gtk4/TRexAttack.ui:58 -#: resources/ui/gtk4/TRexAttack.ui:104 resources/ui/gtk4/TRexAttack.ui:150 -#: resources/ui/gtk4/TRexAttack.ui:196 resources/ui/gtk4/TRexAttack.ui:230 -#: resources/ui/gtk4/TVGlitch.ui:58 resources/ui/gtk4/TVGlitch.ui:104 -#: resources/ui/gtk4/TVGlitch.ui:150 resources/ui/gtk4/TVGlitch.ui:196 -#: resources/ui/gtk4/TVGlitch.ui:230 resources/ui/gtk4/PixelWheel.ui:58 -#: resources/ui/gtk4/PixelWheel.ui:104 resources/ui/gtk4/PixelWheel.ui:150 -#: resources/ui/gtk4/Doom.ui:58 resources/ui/gtk4/Doom.ui:104 -#: resources/ui/gtk4/Doom.ui:150 resources/ui/gtk4/Doom.ui:196 -#: resources/ui/gtk4/Glitch.ui:58 resources/ui/gtk4/Glitch.ui:104 -#: resources/ui/gtk4/Glitch.ui:150 resources/ui/gtk4/Glitch.ui:196 -#: resources/ui/gtk4/Glitch.ui:230 resources/ui/gtk4/TVEffect.ui:58 -#: resources/ui/gtk4/TVEffect.ui:92 resources/ui/gtk4/EnergizeA.ui:58 -#: resources/ui/gtk4/EnergizeA.ui:104 resources/ui/gtk4/EnergizeA.ui:138 -#: resources/ui/gtk4/Hexagon.ui:58 resources/ui/gtk4/Hexagon.ui:104 -#: resources/ui/gtk4/Hexagon.ui:150 resources/ui/gtk4/Hexagon.ui:184 -#: resources/ui/gtk4/Hexagon.ui:218 resources/ui/gtk4/Hexagon.ui:271 -#: resources/ui/gtk4/EnergizeB.ui:58 resources/ui/gtk4/EnergizeB.ui:104 -#: resources/ui/gtk4/EnergizeB.ui:138 resources/ui/gtk4/Pixelate.ui:58 -#: resources/ui/gtk4/Pixelate.ui:104 resources/ui/gtk4/Pixelate.ui:150 -#: resources/ui/gtk4/prefs.ui:172 resources/ui/gtk4/prefs.ui:206 -#: resources/ui/gtk4/prefs.ui:240 resources/ui/gtk4/Apparition.ui:58 -#: resources/ui/gtk4/Apparition.ui:104 resources/ui/gtk4/Apparition.ui:150 -#: resources/ui/gtk4/Apparition.ui:196 resources/ui/gtk4/Apparition.ui:242 -#: resources/ui/gtk4/Portal.ui:58 resources/ui/gtk4/Portal.ui:104 -#: resources/ui/gtk4/Portal.ui:150 resources/ui/gtk4/Portal.ui:196 -#: resources/ui/gtk4/Portal.ui:230 resources/ui/gtk3/Incinerate.ui:81 -#: resources/ui/gtk3/Incinerate.ui:130 resources/ui/gtk3/Incinerate.ui:179 -#: resources/ui/gtk3/Incinerate.ui:241 resources/ui/gtk3/Incinerate.ui:284 -#: resources/ui/gtk3/Wisps.ui:74 resources/ui/gtk3/Wisps.ui:123 -#: resources/ui/gtk3/Wisps.ui:166 resources/ui/gtk3/Fire.ui:125 -#: resources/ui/gtk3/Fire.ui:173 resources/ui/gtk3/Fire.ui:221 -#: resources/ui/gtk3/Fire.ui:283 resources/ui/gtk3/Fire.ui:351 -#: resources/ui/gtk3/Glide.ui:95 resources/ui/gtk3/Glide.ui:144 -#: resources/ui/gtk3/Glide.ui:193 resources/ui/gtk3/Glide.ui:242 -#: resources/ui/gtk3/Glide.ui:291 resources/ui/gtk3/PixelWipe.ui:81 -#: resources/ui/gtk3/PixelWipe.ui:130 resources/ui/gtk3/TVGlitch.ui:88 -#: resources/ui/gtk3/TVGlitch.ui:137 resources/ui/gtk3/TVGlitch.ui:186 -#: resources/ui/gtk3/TVGlitch.ui:235 resources/ui/gtk3/TVGlitch.ui:278 -#: resources/ui/gtk3/PixelWheel.ui:81 resources/ui/gtk3/PixelWheel.ui:130 -#: resources/ui/gtk3/PixelWheel.ui:179 resources/ui/gtk3/Doom.ui:88 -#: resources/ui/gtk3/Doom.ui:137 resources/ui/gtk3/Doom.ui:186 -#: resources/ui/gtk3/Doom.ui:235 resources/ui/gtk3/Glitch.ui:88 -#: resources/ui/gtk3/Glitch.ui:137 resources/ui/gtk3/Glitch.ui:186 -#: resources/ui/gtk3/Glitch.ui:235 resources/ui/gtk3/Glitch.ui:278 -#: resources/ui/gtk3/TVEffect.ui:67 resources/ui/gtk3/TVEffect.ui:110 -#: resources/ui/gtk3/EnergizeA.ui:74 resources/ui/gtk3/EnergizeA.ui:123 -#: resources/ui/gtk3/EnergizeA.ui:166 resources/ui/gtk3/Hexagon.ui:81 -#: resources/ui/gtk3/Hexagon.ui:130 resources/ui/gtk3/Hexagon.ui:179 -#: resources/ui/gtk3/Hexagon.ui:222 resources/ui/gtk3/Hexagon.ui:265 -#: resources/ui/gtk3/Hexagon.ui:327 resources/ui/gtk3/EnergizeB.ui:74 -#: resources/ui/gtk3/EnergizeB.ui:123 resources/ui/gtk3/EnergizeB.ui:166 -#: resources/ui/gtk3/Pixelate.ui:81 resources/ui/gtk3/Pixelate.ui:130 -#: resources/ui/gtk3/Pixelate.ui:179 resources/ui/gtk3/prefs.ui:225 -#: resources/ui/gtk3/prefs.ui:269 resources/ui/gtk3/prefs.ui:313 -#: resources/ui/gtk3/Apparition.ui:95 resources/ui/gtk3/Apparition.ui:144 -#: resources/ui/gtk3/Apparition.ui:193 resources/ui/gtk3/Apparition.ui:242 -#: resources/ui/gtk3/Apparition.ui:291 resources/ui/gtk3/Portal.ui:89 -#: resources/ui/gtk3/Portal.ui:139 resources/ui/gtk3/Portal.ui:189 -#: resources/ui/gtk3/Portal.ui:239 resources/ui/gtk3/Portal.ui:282 -#: resources/ui/adw/Matrix.ui:36 resources/ui/adw/Matrix.ui:69 -#: resources/ui/adw/Matrix.ui:102 resources/ui/adw/Matrix.ui:135 -#: resources/ui/adw/Matrix.ui:160 resources/ui/adw/Matrix.ui:185 -#: resources/ui/adw/BrokenGlass.ui:37 resources/ui/adw/BrokenGlass.ui:70 -#: resources/ui/adw/BrokenGlass.ui:103 resources/ui/adw/BrokenGlass.ui:136 -#: resources/ui/adw/BrokenGlass.ui:159 resources/ui/adw/Incinerate.ui:36 -#: resources/ui/adw/Incinerate.ui:69 resources/ui/adw/Incinerate.ui:102 -#: resources/ui/adw/Incinerate.ui:125 resources/ui/adw/Incinerate.ui:150 -#: resources/ui/adw/Wisps.ui:36 resources/ui/adw/Wisps.ui:69 -#: resources/ui/adw/Wisps.ui:94 resources/ui/adw/Fire.ui:52 -#: resources/ui/adw/Fire.ui:85 resources/ui/adw/Fire.ui:118 -#: resources/ui/adw/Fire.ui:141 resources/ui/adw/Fire.ui:199 -#: resources/ui/adw/Glide.ui:36 resources/ui/adw/Glide.ui:69 -#: resources/ui/adw/Glide.ui:102 resources/ui/adw/Glide.ui:135 -#: resources/ui/adw/Glide.ui:168 resources/ui/adw/PixelWipe.ui:36 -#: resources/ui/adw/PixelWipe.ui:69 resources/ui/adw/TRexAttack.ui:36 -#: resources/ui/adw/TRexAttack.ui:69 resources/ui/adw/TRexAttack.ui:102 -#: resources/ui/adw/TRexAttack.ui:135 resources/ui/adw/TRexAttack.ui:160 -#: resources/ui/adw/TVGlitch.ui:36 resources/ui/adw/TVGlitch.ui:69 -#: resources/ui/adw/TVGlitch.ui:102 resources/ui/adw/TVGlitch.ui:135 -#: resources/ui/adw/TVGlitch.ui:160 resources/ui/adw/PixelWheel.ui:36 -#: resources/ui/adw/PixelWheel.ui:69 resources/ui/adw/PixelWheel.ui:102 -#: resources/ui/adw/Doom.ui:36 resources/ui/adw/Doom.ui:69 -#: resources/ui/adw/Doom.ui:102 resources/ui/adw/Doom.ui:135 -#: resources/ui/adw/Glitch.ui:36 resources/ui/adw/Glitch.ui:69 -#: resources/ui/adw/Glitch.ui:102 resources/ui/adw/Glitch.ui:135 -#: resources/ui/adw/Glitch.ui:160 resources/ui/adw/TVEffect.ui:36 -#: resources/ui/adw/TVEffect.ui:61 resources/ui/adw/EnergizeA.ui:36 -#: resources/ui/adw/EnergizeA.ui:69 resources/ui/adw/EnergizeA.ui:94 -#: resources/ui/adw/Hexagon.ui:36 resources/ui/adw/Hexagon.ui:69 -#: resources/ui/adw/Hexagon.ui:102 resources/ui/adw/Hexagon.ui:127 -#: resources/ui/adw/Hexagon.ui:152 resources/ui/adw/Hexagon.ui:175 -#: resources/ui/adw/EnergizeB.ui:37 resources/ui/adw/EnergizeB.ui:70 -#: resources/ui/adw/EnergizeB.ui:95 resources/ui/adw/Pixelate.ui:36 -#: resources/ui/adw/Pixelate.ui:69 resources/ui/adw/Pixelate.ui:102 -#: resources/ui/adw/prefs.ui:63 resources/ui/adw/prefs.ui:85 -#: resources/ui/adw/prefs.ui:107 resources/ui/adw/Apparition.ui:37 -#: resources/ui/adw/Apparition.ui:70 resources/ui/adw/Apparition.ui:103 -#: resources/ui/adw/Apparition.ui:136 resources/ui/adw/Apparition.ui:169 -#: resources/ui/adw/Portal.ui:36 resources/ui/adw/Portal.ui:69 -#: resources/ui/adw/Portal.ui:102 resources/ui/adw/Portal.ui:135 -#: resources/ui/adw/Portal.ui:160 +#: resources/ui/gtk4/broken-glass.ui:50 resources/ui/gtk4/broken-glass.ui:96 +#: resources/ui/gtk4/broken-glass.ui:142 resources/ui/gtk4/broken-glass.ui:188 +#: resources/ui/gtk4/broken-glass.ui:244 resources/ui/gtk4/tv-glitch.ui:51 +#: resources/ui/gtk4/tv-glitch.ui:97 resources/ui/gtk4/tv-glitch.ui:143 +#: resources/ui/gtk4/tv-glitch.ui:189 resources/ui/gtk4/tv-glitch.ui:226 +#: resources/ui/gtk4/glitch.ui:51 resources/ui/gtk4/glitch.ui:97 +#: resources/ui/gtk4/glitch.ui:143 resources/ui/gtk4/glitch.ui:189 +#: resources/ui/gtk4/glitch.ui:226 resources/ui/gtk4/matrix.ui:51 +#: resources/ui/gtk4/matrix.ui:97 resources/ui/gtk4/matrix.ui:143 +#: resources/ui/gtk4/matrix.ui:189 resources/ui/gtk4/matrix.ui:226 +#: resources/ui/gtk4/matrix.ui:263 resources/ui/gtk4/doom.ui:50 +#: resources/ui/gtk4/doom.ui:96 resources/ui/gtk4/doom.ui:142 +#: resources/ui/gtk4/doom.ui:188 resources/ui/gtk4/trex.ui:51 +#: resources/ui/gtk4/trex.ui:97 resources/ui/gtk4/trex.ui:143 +#: resources/ui/gtk4/trex.ui:189 resources/ui/gtk4/trex.ui:226 +#: resources/ui/gtk4/wisps.ui:51 resources/ui/gtk4/wisps.ui:97 +#: resources/ui/gtk4/wisps.ui:134 resources/ui/gtk4/energize-b.ui:51 +#: resources/ui/gtk4/energize-b.ui:97 resources/ui/gtk4/energize-b.ui:134 +#: resources/ui/gtk4/pixel-wheel.ui:51 resources/ui/gtk4/pixel-wheel.ui:97 +#: resources/ui/gtk4/pixel-wheel.ui:143 resources/ui/gtk4/glide.ui:51 +#: resources/ui/gtk4/glide.ui:97 resources/ui/gtk4/glide.ui:143 +#: resources/ui/gtk4/glide.ui:189 resources/ui/gtk4/glide.ui:235 +#: resources/ui/gtk4/apparition.ui:50 resources/ui/gtk4/apparition.ui:96 +#: resources/ui/gtk4/apparition.ui:142 resources/ui/gtk4/apparition.ui:188 +#: resources/ui/gtk4/apparition.ui:234 resources/ui/gtk4/portal.ui:51 +#: resources/ui/gtk4/portal.ui:97 resources/ui/gtk4/portal.ui:143 +#: resources/ui/gtk4/portal.ui:189 resources/ui/gtk4/portal.ui:226 +#: resources/ui/gtk4/incinerate.ui:51 resources/ui/gtk4/incinerate.ui:97 +#: resources/ui/gtk4/incinerate.ui:143 resources/ui/gtk4/incinerate.ui:198 +#: resources/ui/gtk4/incinerate.ui:235 resources/ui/gtk4/hexagon.ui:51 +#: resources/ui/gtk4/hexagon.ui:97 resources/ui/gtk4/hexagon.ui:143 +#: resources/ui/gtk4/hexagon.ui:180 resources/ui/gtk4/hexagon.ui:217 +#: resources/ui/gtk4/hexagon.ui:272 resources/ui/gtk4/fire.ui:74 +#: resources/ui/gtk4/fire.ui:120 resources/ui/gtk4/fire.ui:166 +#: resources/ui/gtk4/fire.ui:221 resources/ui/gtk4/fire.ui:280 +#: resources/ui/gtk4/pixel-wipe.ui:51 resources/ui/gtk4/pixel-wipe.ui:97 +#: resources/ui/gtk4/energize-a.ui:51 resources/ui/gtk4/energize-a.ui:97 +#: resources/ui/gtk4/energize-a.ui:134 resources/ui/gtk4/pixelate.ui:51 +#: resources/ui/gtk4/pixelate.ui:97 resources/ui/gtk4/pixelate.ui:143 +#: resources/ui/gtk4/tv.ui:51 resources/ui/gtk4/tv.ui:88 +#: resources/ui/gtk3/tv-glitch.ui:78 resources/ui/gtk3/tv-glitch.ui:123 +#: resources/ui/gtk3/tv-glitch.ui:168 resources/ui/gtk3/tv-glitch.ui:213 +#: resources/ui/gtk3/tv-glitch.ui:255 resources/ui/gtk3/glitch.ui:78 +#: resources/ui/gtk3/glitch.ui:123 resources/ui/gtk3/glitch.ui:168 +#: resources/ui/gtk3/glitch.ui:213 resources/ui/gtk3/glitch.ui:255 +#: resources/ui/gtk3/doom.ui:78 resources/ui/gtk3/doom.ui:123 +#: resources/ui/gtk3/doom.ui:168 resources/ui/gtk3/doom.ui:213 +#: resources/ui/gtk3/wisps.ui:64 resources/ui/gtk3/wisps.ui:109 +#: resources/ui/gtk3/wisps.ui:151 resources/ui/gtk3/energize-b.ui:64 +#: resources/ui/gtk3/energize-b.ui:109 resources/ui/gtk3/energize-b.ui:151 +#: resources/ui/gtk3/pixel-wheel.ui:71 resources/ui/gtk3/pixel-wheel.ui:116 +#: resources/ui/gtk3/pixel-wheel.ui:161 resources/ui/gtk3/glide.ui:85 +#: resources/ui/gtk3/glide.ui:130 resources/ui/gtk3/glide.ui:175 +#: resources/ui/gtk3/glide.ui:220 resources/ui/gtk3/glide.ui:265 +#: resources/ui/gtk3/apparition.ui:85 resources/ui/gtk3/apparition.ui:130 +#: resources/ui/gtk3/apparition.ui:175 resources/ui/gtk3/apparition.ui:220 +#: resources/ui/gtk3/apparition.ui:265 resources/ui/gtk3/portal.ui:78 +#: resources/ui/gtk3/portal.ui:123 resources/ui/gtk3/portal.ui:168 +#: resources/ui/gtk3/portal.ui:213 resources/ui/gtk3/portal.ui:255 +#: resources/ui/gtk3/incinerate.ui:71 resources/ui/gtk3/incinerate.ui:116 +#: resources/ui/gtk3/incinerate.ui:161 resources/ui/gtk3/incinerate.ui:220 +#: resources/ui/gtk3/incinerate.ui:262 resources/ui/gtk3/hexagon.ui:71 +#: resources/ui/gtk3/hexagon.ui:116 resources/ui/gtk3/hexagon.ui:161 +#: resources/ui/gtk3/hexagon.ui:203 resources/ui/gtk3/hexagon.ui:245 +#: resources/ui/gtk3/hexagon.ui:304 resources/ui/gtk3/fire.ui:110 +#: resources/ui/gtk3/fire.ui:154 resources/ui/gtk3/fire.ui:198 +#: resources/ui/gtk3/fire.ui:257 resources/ui/gtk3/fire.ui:321 +#: resources/ui/gtk3/pixel-wipe.ui:71 resources/ui/gtk3/pixel-wipe.ui:116 +#: resources/ui/gtk3/energize-a.ui:64 resources/ui/gtk3/energize-a.ui:109 +#: resources/ui/gtk3/energize-a.ui:151 resources/ui/gtk3/pixelate.ui:71 +#: resources/ui/gtk3/pixelate.ui:116 resources/ui/gtk3/pixelate.ui:161 +#: resources/ui/gtk3/tv.ui:57 resources/ui/gtk3/tv.ui:99 +#: resources/ui/adw/broken-glass.ui:37 resources/ui/adw/broken-glass.ui:70 +#: resources/ui/adw/broken-glass.ui:103 resources/ui/adw/broken-glass.ui:136 +#: resources/ui/adw/broken-glass.ui:159 resources/ui/adw/tv-glitch.ui:36 +#: resources/ui/adw/tv-glitch.ui:69 resources/ui/adw/tv-glitch.ui:102 +#: resources/ui/adw/tv-glitch.ui:135 resources/ui/adw/tv-glitch.ui:160 +#: resources/ui/adw/glitch.ui:36 resources/ui/adw/glitch.ui:69 +#: resources/ui/adw/glitch.ui:102 resources/ui/adw/glitch.ui:135 +#: resources/ui/adw/glitch.ui:160 resources/ui/adw/matrix.ui:36 +#: resources/ui/adw/matrix.ui:69 resources/ui/adw/matrix.ui:102 +#: resources/ui/adw/matrix.ui:135 resources/ui/adw/matrix.ui:160 +#: resources/ui/adw/matrix.ui:185 resources/ui/adw/doom.ui:36 +#: resources/ui/adw/doom.ui:69 resources/ui/adw/doom.ui:102 +#: resources/ui/adw/doom.ui:135 resources/ui/adw/trex.ui:36 +#: resources/ui/adw/trex.ui:69 resources/ui/adw/trex.ui:102 +#: resources/ui/adw/trex.ui:135 resources/ui/adw/trex.ui:160 +#: resources/ui/adw/wisps.ui:36 resources/ui/adw/wisps.ui:69 +#: resources/ui/adw/wisps.ui:94 resources/ui/adw/energize-b.ui:37 +#: resources/ui/adw/energize-b.ui:70 resources/ui/adw/energize-b.ui:95 +#: resources/ui/adw/pixel-wheel.ui:36 resources/ui/adw/pixel-wheel.ui:69 +#: resources/ui/adw/pixel-wheel.ui:102 resources/ui/adw/glide.ui:36 +#: resources/ui/adw/glide.ui:69 resources/ui/adw/glide.ui:102 +#: resources/ui/adw/glide.ui:135 resources/ui/adw/glide.ui:168 +#: resources/ui/adw/apparition.ui:37 resources/ui/adw/apparition.ui:70 +#: resources/ui/adw/apparition.ui:103 resources/ui/adw/apparition.ui:136 +#: resources/ui/adw/apparition.ui:169 resources/ui/adw/portal.ui:36 +#: resources/ui/adw/portal.ui:69 resources/ui/adw/portal.ui:102 +#: resources/ui/adw/portal.ui:135 resources/ui/adw/portal.ui:160 +#: resources/ui/adw/incinerate.ui:36 resources/ui/adw/incinerate.ui:69 +#: resources/ui/adw/incinerate.ui:102 resources/ui/adw/incinerate.ui:125 +#: resources/ui/adw/incinerate.ui:150 resources/ui/adw/hexagon.ui:36 +#: resources/ui/adw/hexagon.ui:69 resources/ui/adw/hexagon.ui:102 +#: resources/ui/adw/hexagon.ui:127 resources/ui/adw/hexagon.ui:152 +#: resources/ui/adw/hexagon.ui:175 resources/ui/adw/fire.ui:52 +#: resources/ui/adw/fire.ui:85 resources/ui/adw/fire.ui:118 +#: resources/ui/adw/fire.ui:141 resources/ui/adw/fire.ui:199 +#: resources/ui/adw/pixel-wipe.ui:36 resources/ui/adw/pixel-wipe.ui:69 +#: resources/ui/adw/energize-a.ui:36 resources/ui/adw/energize-a.ui:69 +#: resources/ui/adw/energize-a.ui:94 resources/ui/adw/pixelate.ui:36 +#: resources/ui/adw/pixelate.ui:69 resources/ui/adw/pixelate.ui:102 +#: resources/ui/adw/tv.ui:36 resources/ui/adw/tv.ui:61 msgid "Reset to Default Value" msgstr "" -#: resources/ui/gtk4/Matrix.ui:76 resources/ui/gtk4/BrokenGlass.ui:76 -#: resources/ui/gtk4/Incinerate.ui:76 resources/ui/gtk4/Wisps.ui:76 -#: resources/ui/gtk4/Fire.ui:101 resources/ui/gtk4/SnapOfDisintegration.ui:76 -#: resources/ui/gtk4/Glide.ui:76 resources/ui/gtk4/TVGlitch.ui:76 -#: resources/ui/gtk4/Glitch.ui:76 resources/ui/gtk4/EnergizeA.ui:76 -#: resources/ui/gtk4/Hexagon.ui:76 resources/ui/gtk4/EnergizeB.ui:76 -#: resources/ui/gtk3/Incinerate.ui:104 resources/ui/gtk3/Wisps.ui:97 -#: resources/ui/gtk3/Fire.ui:147 resources/ui/gtk3/Glide.ui:118 -#: resources/ui/gtk3/TVGlitch.ui:111 resources/ui/gtk3/Glitch.ui:111 -#: resources/ui/gtk3/EnergizeA.ui:97 resources/ui/gtk3/Hexagon.ui:104 -#: resources/ui/gtk3/EnergizeB.ui:97 resources/ui/adw/Matrix.ui:47 -#: resources/ui/adw/BrokenGlass.ui:48 resources/ui/adw/Incinerate.ui:47 -#: resources/ui/adw/Wisps.ui:47 resources/ui/adw/Fire.ui:63 -#: resources/ui/adw/SnapOfDisintegration.ui:47 resources/ui/adw/Glide.ui:47 -#: resources/ui/adw/TVGlitch.ui:47 resources/ui/adw/Glitch.ui:47 -#: resources/ui/adw/EnergizeA.ui:47 resources/ui/adw/Hexagon.ui:47 -#: resources/ui/adw/EnergizeB.ui:48 +#: resources/ui/gtk4/broken-glass.ui:68 resources/ui/gtk4/tv-glitch.ui:69 +#: resources/ui/gtk4/glitch.ui:69 resources/ui/gtk4/matrix.ui:69 +#: resources/ui/gtk4/wisps.ui:69 resources/ui/gtk4/energize-b.ui:69 +#: resources/ui/gtk4/glide.ui:69 resources/ui/gtk4/incinerate.ui:69 +#: resources/ui/gtk4/hexagon.ui:69 resources/ui/gtk4/fire.ui:92 +#: resources/ui/gtk4/snap.ui:69 resources/ui/gtk4/energize-a.ui:69 +#: resources/ui/gtk3/tv-glitch.ui:97 resources/ui/gtk3/glitch.ui:97 +#: resources/ui/gtk3/wisps.ui:83 resources/ui/gtk3/energize-b.ui:83 +#: resources/ui/gtk3/glide.ui:104 resources/ui/gtk3/incinerate.ui:90 +#: resources/ui/gtk3/hexagon.ui:90 resources/ui/gtk3/fire.ui:128 +#: resources/ui/gtk3/energize-a.ui:83 resources/ui/adw/broken-glass.ui:48 +#: resources/ui/adw/tv-glitch.ui:47 resources/ui/adw/glitch.ui:47 +#: resources/ui/adw/matrix.ui:47 resources/ui/adw/wisps.ui:47 +#: resources/ui/adw/energize-b.ui:48 resources/ui/adw/glide.ui:47 +#: resources/ui/adw/incinerate.ui:47 resources/ui/adw/hexagon.ui:47 +#: resources/ui/adw/fire.ui:63 resources/ui/adw/snap.ui:47 +#: resources/ui/adw/energize-a.ui:47 msgid "Scale" msgstr "" -#: resources/ui/gtk4/Matrix.ui:122 resources/ui/gtk4/Apparition.ui:76 -#: resources/ui/gtk3/Apparition.ui:118 resources/ui/adw/Matrix.ui:80 -#: resources/ui/adw/Apparition.ui:48 -msgid "Randomness" -msgstr "" - -#: resources/ui/gtk4/Matrix.ui:168 resources/ui/adw/Matrix.ui:113 -msgid "Vertical Overshooting" -msgstr "" - -#: resources/ui/gtk4/Matrix.ui:214 resources/ui/adw/Matrix.ui:146 -msgid "Trail Color" -msgstr "" - -#: resources/ui/gtk4/Matrix.ui:248 resources/ui/adw/Matrix.ui:171 -msgid "Tip Color" -msgstr "" - -#: resources/ui/gtk4/BrokenGlass.ui:122 resources/ui/adw/BrokenGlass.ui:81 +#: resources/ui/gtk4/broken-glass.ui:114 resources/ui/adw/broken-glass.ui:81 msgid "Gravity" msgstr "" -#: resources/ui/gtk4/BrokenGlass.ui:168 resources/ui/adw/BrokenGlass.ui:114 +#: resources/ui/gtk4/broken-glass.ui:160 resources/ui/adw/broken-glass.ui:114 msgid "Blow Force" msgstr "" -#: resources/ui/gtk4/BrokenGlass.ui:218 resources/ui/adw/BrokenGlass.ui:147 +#: resources/ui/gtk4/broken-glass.ui:210 resources/ui/adw/broken-glass.ui:147 msgid "Shatter From Pointer Location" msgstr "" -#: resources/ui/gtk4/BrokenGlass.ui:227 resources/ui/adw/BrokenGlass.ui:148 +#: resources/ui/gtk4/broken-glass.ui:219 resources/ui/adw/broken-glass.ui:148 msgid "" "The shards will fly away from where your mouse pointer was when closing the " "window." msgstr "" -#: resources/ui/gtk4/Incinerate.ui:122 resources/ui/gtk3/Incinerate.ui:153 -#: resources/ui/adw/Incinerate.ui:80 -msgid "Turbulence" -msgstr "" - -#: resources/ui/gtk4/Incinerate.ui:172 resources/ui/gtk3/Incinerate.ui:205 -#: resources/ui/adw/Incinerate.ui:113 -msgid "Start at Pointer" -msgstr "" - -#: resources/ui/gtk4/Incinerate.ui:181 resources/ui/gtk3/Incinerate.ui:214 -#: resources/ui/adw/Incinerate.ui:114 -msgid "If disabled, a random location will be chosen." -msgstr "" - -#: resources/ui/gtk4/Incinerate.ui:221 resources/ui/gtk4/Wisps.ui:122 -#: resources/ui/gtk4/SnapOfDisintegration.ui:122 -#: resources/ui/gtk4/TVGlitch.ui:214 resources/ui/gtk4/Glitch.ui:214 -#: resources/ui/gtk4/TVEffect.ui:76 resources/ui/gtk4/EnergizeA.ui:122 -#: resources/ui/gtk4/EnergizeB.ui:122 resources/ui/gtk4/Portal.ui:214 -#: resources/ui/gtk3/Incinerate.ui:263 resources/ui/gtk3/Wisps.ui:145 -#: resources/ui/gtk3/TVGlitch.ui:257 resources/ui/gtk3/Glitch.ui:257 -#: resources/ui/gtk3/TVEffect.ui:89 resources/ui/gtk3/EnergizeA.ui:145 -#: resources/ui/gtk3/EnergizeB.ui:145 resources/ui/gtk3/Portal.ui:261 -#: resources/ui/adw/Incinerate.ui:136 resources/ui/adw/Wisps.ui:80 -#: resources/ui/adw/SnapOfDisintegration.ui:80 resources/ui/adw/TVGlitch.ui:146 -#: resources/ui/adw/Glitch.ui:146 resources/ui/adw/TVEffect.ui:47 -#: resources/ui/adw/EnergizeA.ui:80 resources/ui/adw/EnergizeB.ui:81 -#: resources/ui/adw/Portal.ui:146 -msgid "Color" -msgstr "" - -#: resources/ui/gtk4/Fire.ui:31 resources/ui/gtk3/Fire.ui:55 -#: resources/ui/adw/Fire.ui:14 -msgid "Presets" -msgstr "" - -#: resources/ui/gtk4/Fire.ui:147 resources/ui/gtk4/TVGlitch.ui:168 -#: resources/ui/gtk4/Glitch.ui:168 resources/ui/gtk3/Fire.ui:195 -#: resources/ui/gtk3/TVGlitch.ui:209 resources/ui/gtk3/Glitch.ui:209 -#: resources/ui/adw/Fire.ui:96 resources/ui/adw/TVGlitch.ui:113 -#: resources/ui/adw/Glitch.ui:113 -msgid "Speed" -msgstr "" - -#: resources/ui/gtk4/Fire.ui:197 resources/ui/gtk3/Fire.ui:247 -#: resources/ui/adw/Fire.ui:129 -msgid "3D Noise" -msgstr "" - -#: resources/ui/gtk4/Fire.ui:206 resources/ui/gtk3/Fire.ui:256 -#: resources/ui/adw/Fire.ui:130 -msgid "Creates a more dynamic fire but requires more GPU power." -msgstr "" - -#: resources/ui/gtk4/Fire.ui:246 resources/ui/gtk3/Fire.ui:306 -#: resources/ui/adw/Fire.ui:152 -msgid "Gradient" -msgstr "" - -#: resources/ui/gtk4/Glide.ui:122 resources/ui/gtk3/Glide.ui:167 -#: resources/ui/adw/Glide.ui:80 -msgid "Squish" -msgstr "" - -#: resources/ui/gtk4/Glide.ui:168 resources/ui/gtk3/Glide.ui:216 -#: resources/ui/adw/Glide.ui:113 -msgid "Tilt" -msgstr "" - -#: resources/ui/gtk4/Glide.ui:214 resources/ui/gtk3/Glide.ui:265 -#: resources/ui/adw/Glide.ui:146 -msgid "Shift" -msgstr "" - -#: resources/ui/gtk4/PixelWipe.ui:76 resources/ui/gtk4/PixelWheel.ui:122 -#: resources/ui/gtk4/Doom.ui:168 resources/ui/gtk4/Pixelate.ui:122 -#: resources/ui/gtk3/PixelWipe.ui:104 resources/ui/gtk3/PixelWheel.ui:153 -#: resources/ui/gtk3/Doom.ui:209 resources/ui/gtk3/Pixelate.ui:153 -#: resources/ui/adw/PixelWipe.ui:47 resources/ui/adw/PixelWheel.ui:80 -#: resources/ui/adw/Doom.ui:113 resources/ui/adw/Pixelate.ui:80 -msgid "Pixel Size" -msgstr "" - -#: resources/ui/gtk4/TRexAttack.ui:76 resources/ui/adw/TRexAttack.ui:47 -msgid "Claw Scratch Scale" -msgstr "" - -#: resources/ui/gtk4/TRexAttack.ui:122 resources/ui/adw/TRexAttack.ui:80 -msgid "Claw Scratch Count" -msgstr "" - -#: resources/ui/gtk4/TRexAttack.ui:168 resources/ui/adw/TRexAttack.ui:113 -msgid "Warp Effect" -msgstr "" - -#: resources/ui/gtk4/TRexAttack.ui:214 resources/ui/adw/TRexAttack.ui:146 -msgid "Flash Color" -msgstr "" - -#: resources/ui/gtk4/TVGlitch.ui:122 resources/ui/gtk4/Glitch.ui:122 -#: resources/ui/gtk3/TVGlitch.ui:160 resources/ui/gtk3/Glitch.ui:160 -#: resources/ui/adw/TVGlitch.ui:80 resources/ui/adw/Glitch.ui:80 +#: resources/ui/gtk4/tv-glitch.ui:115 resources/ui/gtk4/glitch.ui:115 +#: resources/ui/gtk3/tv-glitch.ui:142 resources/ui/gtk3/glitch.ui:142 +#: resources/ui/adw/tv-glitch.ui:80 resources/ui/adw/glitch.ui:80 msgid "Strength" msgstr "" -#: resources/ui/gtk4/PixelWheel.ui:76 resources/ui/gtk3/PixelWheel.ui:104 -#: resources/ui/adw/PixelWheel.ui:47 -msgid "Spoke Count" +#: resources/ui/gtk4/tv-glitch.ui:161 resources/ui/gtk4/glitch.ui:161 +#: resources/ui/gtk4/fire.ui:138 resources/ui/gtk3/tv-glitch.ui:187 +#: resources/ui/gtk3/glitch.ui:187 resources/ui/gtk3/fire.ui:172 +#: resources/ui/adw/tv-glitch.ui:113 resources/ui/adw/glitch.ui:113 +#: resources/ui/adw/fire.ui:96 +msgid "Speed" msgstr "" -#: resources/ui/gtk4/Doom.ui:76 resources/ui/gtk3/Doom.ui:111 -#: resources/ui/adw/Doom.ui:47 +#: resources/ui/gtk4/tv-glitch.ui:207 resources/ui/gtk4/glitch.ui:207 +#: resources/ui/gtk4/wisps.ui:115 resources/ui/gtk4/energize-b.ui:115 +#: resources/ui/gtk4/portal.ui:207 resources/ui/gtk4/incinerate.ui:216 +#: resources/ui/gtk4/snap.ui:115 resources/ui/gtk4/energize-a.ui:115 +#: resources/ui/gtk4/tv.ui:69 resources/ui/gtk3/tv-glitch.ui:231 +#: resources/ui/gtk3/glitch.ui:231 resources/ui/gtk3/wisps.ui:127 +#: resources/ui/gtk3/energize-b.ui:127 resources/ui/gtk3/portal.ui:231 +#: resources/ui/gtk3/incinerate.ui:238 resources/ui/gtk3/energize-a.ui:127 +#: resources/ui/gtk3/tv.ui:75 resources/ui/adw/tv-glitch.ui:146 +#: resources/ui/adw/glitch.ui:146 resources/ui/adw/wisps.ui:80 +#: resources/ui/adw/energize-b.ui:81 resources/ui/adw/portal.ui:146 +#: resources/ui/adw/incinerate.ui:136 resources/ui/adw/snap.ui:80 +#: resources/ui/adw/energize-a.ui:80 resources/ui/adw/tv.ui:47 +msgid "Color" +msgstr "" + +#: resources/ui/gtk4/matrix.ui:115 resources/ui/gtk4/apparition.ui:68 +#: resources/ui/gtk3/apparition.ui:104 resources/ui/adw/matrix.ui:80 +#: resources/ui/adw/apparition.ui:48 +msgid "Randomness" +msgstr "" + +#: resources/ui/gtk4/matrix.ui:161 resources/ui/adw/matrix.ui:113 +msgid "Vertical Overshooting" +msgstr "" + +#: resources/ui/gtk4/matrix.ui:207 resources/ui/adw/matrix.ui:146 +msgid "Trail Color" +msgstr "" + +#: resources/ui/gtk4/matrix.ui:244 resources/ui/adw/matrix.ui:171 +msgid "Tip Color" +msgstr "" + +#: resources/ui/gtk4/doom.ui:68 resources/ui/gtk3/doom.ui:97 +#: resources/ui/adw/doom.ui:47 msgid "Horizontal Scale" msgstr "" -#: resources/ui/gtk4/Doom.ui:122 resources/ui/gtk3/Doom.ui:160 -#: resources/ui/adw/Doom.ui:80 +#: resources/ui/gtk4/doom.ui:114 resources/ui/gtk3/doom.ui:142 +#: resources/ui/adw/doom.ui:80 msgid "Vertical Scale" msgstr "" -#: resources/ui/gtk4/Hexagon.ui:122 resources/ui/gtk3/Hexagon.ui:153 -#: resources/ui/adw/Hexagon.ui:80 -msgid "Mesh Line Width" +#: resources/ui/gtk4/doom.ui:160 resources/ui/gtk4/pixel-wheel.ui:115 +#: resources/ui/gtk4/pixel-wipe.ui:69 resources/ui/gtk4/pixelate.ui:115 +#: resources/ui/gtk3/doom.ui:187 resources/ui/gtk3/pixel-wheel.ui:135 +#: resources/ui/gtk3/pixel-wipe.ui:90 resources/ui/gtk3/pixelate.ui:135 +#: resources/ui/adw/doom.ui:113 resources/ui/adw/pixel-wheel.ui:80 +#: resources/ui/adw/pixel-wipe.ui:47 resources/ui/adw/pixelate.ui:80 +msgid "Pixel Size" msgstr "" -#: resources/ui/gtk4/Hexagon.ui:168 resources/ui/gtk3/Hexagon.ui:201 -#: resources/ui/adw/Hexagon.ui:113 -msgid "Line Color" +#: resources/ui/gtk4/trex.ui:69 resources/ui/adw/trex.ui:47 +msgid "Claw Scratch Scale" msgstr "" -#: resources/ui/gtk4/Hexagon.ui:202 resources/ui/gtk3/Hexagon.ui:244 -#: resources/ui/adw/Hexagon.ui:138 -msgid "Glow Color" +#: resources/ui/gtk4/trex.ui:115 resources/ui/adw/trex.ui:80 +msgid "Claw Scratch Count" msgstr "" -#: resources/ui/gtk4/Hexagon.ui:240 resources/ui/gtk3/Hexagon.ui:291 -#: resources/ui/adw/Hexagon.ui:163 -msgid "Additive Blending" +#: resources/ui/gtk4/trex.ui:161 resources/ui/adw/trex.ui:113 +msgid "Warp Effect" msgstr "" -#: resources/ui/gtk4/Hexagon.ui:249 resources/ui/gtk3/Hexagon.ui:300 -#: resources/ui/adw/Hexagon.ui:164 -msgid "You may want to enable this for dark window themes." +#: resources/ui/gtk4/trex.ui:207 resources/ui/adw/trex.ui:146 +msgid "Flash Color" msgstr "" -#: resources/ui/gtk4/Pixelate.ui:76 resources/ui/gtk3/Pixelate.ui:104 -#: resources/ui/adw/Pixelate.ui:47 -msgid "Noise" +#: resources/ui/gtk4/pixel-wheel.ui:69 resources/ui/gtk3/pixel-wheel.ui:90 +#: resources/ui/adw/pixel-wheel.ui:47 +msgid "Spoke Count" msgstr "" -#: resources/ui/gtk4/prefs.ui:34 resources/ui/gtk3/prefs.ui:41 -#: resources/ui/adw/prefs.ui:31 -msgid "Welcome to Burn-My-Windows!" +#: resources/ui/gtk4/glide.ui:115 resources/ui/gtk3/glide.ui:149 +#: resources/ui/adw/glide.ui:80 +msgid "Squish" msgstr "" -#: resources/ui/gtk4/prefs.ui:45 resources/ui/gtk3/prefs.ui:52 -#: resources/ui/adw/prefs.ui:42 -msgid "If you like this extension, recommend it to your friends :)" +#: resources/ui/gtk4/glide.ui:161 resources/ui/gtk3/glide.ui:194 +#: resources/ui/adw/glide.ui:113 +msgid "Tilt" msgstr "" -#: resources/ui/gtk4/prefs.ui:72 resources/ui/gtk3/prefs.ui:80 -msgid "Open Window Animation" +#: resources/ui/gtk4/glide.ui:207 resources/ui/gtk3/glide.ui:239 +#: resources/ui/adw/glide.ui:146 +msgid "Shift" msgstr "" -#: resources/ui/gtk4/prefs.ui:81 resources/ui/gtk4/prefs.ui:125 -#: resources/ui/gtk3/prefs.ui:89 resources/ui/gtk3/prefs.ui:153 -msgid "If multiple are selected, one is chosen randomly." -msgstr "" - -#: resources/ui/gtk4/prefs.ui:96 resources/ui/gtk4/prefs.ui:140 -#: resources/ui/gtk3/prefs.ui:110 resources/ui/gtk3/prefs.ui:174 -msgid "Choose Effects" -msgstr "" - -#: resources/ui/gtk4/prefs.ui:116 resources/ui/gtk3/prefs.ui:144 -msgid "Close Window Animation" -msgstr "" - -#: resources/ui/gtk4/prefs.ui:156 resources/ui/gtk3/prefs.ui:204 -#: resources/ui/adw/prefs.ui:52 -msgid "Also Add Effects to Dialogs" -msgstr "" - -#: resources/ui/gtk4/prefs.ui:190 resources/ui/gtk3/prefs.ui:248 -#: resources/ui/adw/prefs.ui:74 -msgid "Disable on Battery Power" -msgstr "" - -#: resources/ui/gtk4/prefs.ui:224 resources/ui/gtk3/prefs.ui:292 -#: resources/ui/adw/prefs.ui:96 -msgid "Disable in Power-Save Mode" -msgstr "" - -#: resources/ui/gtk4/Apparition.ui:122 resources/ui/gtk3/Apparition.ui:167 -#: resources/ui/adw/Apparition.ui:81 +#: resources/ui/gtk4/apparition.ui:114 resources/ui/gtk3/apparition.ui:149 +#: resources/ui/adw/apparition.ui:81 msgid "Twirl Intensity" msgstr "" -#: resources/ui/gtk4/Apparition.ui:168 resources/ui/gtk3/Apparition.ui:216 -#: resources/ui/adw/Apparition.ui:114 +#: resources/ui/gtk4/apparition.ui:160 resources/ui/gtk3/apparition.ui:194 +#: resources/ui/adw/apparition.ui:114 msgid "Shake Intensity" msgstr "" -#: resources/ui/gtk4/Apparition.ui:214 resources/ui/gtk3/Apparition.ui:265 -#: resources/ui/adw/Apparition.ui:147 +#: resources/ui/gtk4/apparition.ui:206 resources/ui/gtk3/apparition.ui:239 +#: resources/ui/adw/apparition.ui:147 msgid "Suction Intensity" msgstr "" -#: resources/ui/gtk4/Portal.ui:76 resources/ui/gtk3/Portal.ui:162 -#: resources/ui/adw/Portal.ui:80 +#: resources/ui/gtk4/portal.ui:69 resources/ui/gtk3/portal.ui:142 +#: resources/ui/adw/portal.ui:80 msgid "Whirling" msgstr "" -#: resources/ui/gtk4/Portal.ui:122 resources/ui/gtk3/Portal.ui:112 -#: resources/ui/adw/Portal.ui:47 +#: resources/ui/gtk4/portal.ui:115 resources/ui/gtk3/portal.ui:97 +#: resources/ui/adw/portal.ui:47 msgid "Rotation Speed" msgstr "" -#: resources/ui/gtk4/Portal.ui:168 resources/ui/gtk3/Portal.ui:212 -#: resources/ui/adw/Portal.ui:113 +#: resources/ui/gtk4/portal.ui:161 resources/ui/gtk3/portal.ui:187 +#: resources/ui/adw/portal.ui:113 msgid "Details" msgstr "" -#: resources/ui/gtk3/Fire.ui:69 resources/ui/adw/Fire.ui:19 +#: resources/ui/gtk4/incinerate.ui:115 resources/ui/gtk3/incinerate.ui:135 +#: resources/ui/adw/incinerate.ui:80 +msgid "Turbulence" +msgstr "" + +#: resources/ui/gtk4/incinerate.ui:165 resources/ui/gtk3/incinerate.ui:183 +#: resources/ui/adw/incinerate.ui:113 +msgid "Start at Pointer" +msgstr "" + +#: resources/ui/gtk4/incinerate.ui:174 resources/ui/gtk3/incinerate.ui:192 +#: resources/ui/adw/incinerate.ui:114 +msgid "If disabled, a random location will be chosen." +msgstr "" + +#: resources/ui/gtk4/hexagon.ui:115 resources/ui/gtk3/hexagon.ui:135 +#: resources/ui/adw/hexagon.ui:80 +msgid "Mesh Line Width" +msgstr "" + +#: resources/ui/gtk4/hexagon.ui:161 resources/ui/gtk3/hexagon.ui:179 +#: resources/ui/adw/hexagon.ui:113 +msgid "Line Color" +msgstr "" + +#: resources/ui/gtk4/hexagon.ui:198 resources/ui/gtk3/hexagon.ui:221 +#: resources/ui/adw/hexagon.ui:138 +msgid "Glow Color" +msgstr "" + +#: resources/ui/gtk4/hexagon.ui:239 resources/ui/gtk3/hexagon.ui:267 +#: resources/ui/adw/hexagon.ui:163 +msgid "Additive Blending" +msgstr "" + +#: resources/ui/gtk4/hexagon.ui:248 resources/ui/gtk3/hexagon.ui:276 +#: resources/ui/adw/hexagon.ui:164 +msgid "You may want to enable this for dark window themes." +msgstr "" + +#: resources/ui/gtk4/fire.ui:22 resources/ui/gtk3/fire.ui:44 +#: resources/ui/adw/fire.ui:14 +msgid "Presets" +msgstr "" + +#: resources/ui/gtk4/fire.ui:188 resources/ui/gtk3/fire.ui:220 +#: resources/ui/adw/fire.ui:129 +msgid "3D Noise" +msgstr "" + +#: resources/ui/gtk4/fire.ui:197 resources/ui/gtk3/fire.ui:229 +#: resources/ui/adw/fire.ui:130 +msgid "Creates a more dynamic fire but requires more GPU power." +msgstr "" + +#: resources/ui/gtk4/fire.ui:239 resources/ui/gtk3/fire.ui:276 +#: resources/ui/adw/fire.ui:152 +msgid "Gradient" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:82 resources/ui/gtk3/prefs.ui:124 +#: resources/ui/adw/prefs.ui:224 +msgid "Effect Settings" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:92 resources/ui/gtk3/prefs.ui:134 +#: resources/ui/adw/prefs.ui:225 +msgid "If multiple are selected, one is chosen randomly." +msgstr "" + +#: resources/ui/gtk4/prefs.ui:132 resources/ui/gtk3/prefs.ui:172 +#: resources/ui/adw/prefs.ui:65 +msgid "Effect Profile Constraints" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:142 resources/ui/gtk3/prefs.ui:182 +#: resources/ui/adw/prefs.ui:66 +msgid "Define when the current effect settings should be used." +msgstr "" + +#: resources/ui/gtk4/prefs.ui:166 resources/ui/gtk3/prefs.ui:206 +#: resources/ui/adw/prefs.ui:70 +msgid "Application" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:184 resources/ui/gtk4/prefs.ui:219 +#: resources/ui/gtk4/prefs.ui:248 resources/ui/gtk4/prefs.ui:277 +#: resources/ui/gtk4/prefs.ui:306 resources/ui/gtk4/prefs.ui:335 +#: resources/ui/gtk3/prefs.ui:224 resources/ui/gtk3/prefs.ui:264 +#: resources/ui/gtk3/prefs.ui:293 resources/ui/gtk3/prefs.ui:322 +#: resources/ui/gtk3/prefs.ui:351 resources/ui/gtk3/prefs.ui:380 +#: resources/ui/adw/prefs.ui:81 resources/ui/adw/prefs.ui:102 +#: resources/ui/adw/prefs.ui:117 resources/ui/adw/prefs.ui:132 +#: resources/ui/adw/prefs.ui:147 resources/ui/adw/prefs.ui:162 +msgid "Any" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:208 resources/ui/gtk3/prefs.ui:253 +#: resources/ui/adw/prefs.ui:98 +msgid "Animation Type" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:237 resources/ui/gtk3/prefs.ui:282 +#: resources/ui/adw/prefs.ui:113 +msgid "Window Type" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:266 resources/ui/gtk3/prefs.ui:311 +#: resources/ui/adw/prefs.ui:128 +msgid "Color Scheme" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:295 resources/ui/gtk3/prefs.ui:340 +#: resources/ui/adw/prefs.ui:143 +msgid "Power Mode" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:324 resources/ui/gtk3/prefs.ui:369 +#: resources/ui/adw/prefs.ui:158 +msgid "Power Profile" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:356 resources/ui/gtk3/prefs.ui:401 +#: resources/ui/adw/prefs.ui:179 +msgid "Advanced Profile Options" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:387 resources/ui/gtk3/prefs.ui:432 +#: resources/ui/adw/prefs.ui:183 +msgid "High Priority" +msgstr "" + +#: resources/ui/gtk4/prefs.ui:396 resources/ui/gtk3/prefs.ui:441 +#: resources/ui/adw/prefs.ui:184 +msgid "" +"Force using this profile even if it has less constraints than another " +"matching profile." +msgstr "" + +#: resources/ui/gtk4/prefs.ui:428 resources/ui/gtk3/prefs.ui:473 +#: resources/ui/adw/prefs.ui:204 +msgid "Delete this Profile..." +msgstr "" + +#: resources/ui/gtk4/pixelate.ui:69 resources/ui/gtk3/pixelate.ui:90 +#: resources/ui/adw/pixelate.ui:47 +msgid "Noise" +msgstr "" + +#: resources/ui/gtk3/fire.ui:58 resources/ui/adw/fire.ui:19 msgid "Choose a Preset" msgstr "" diff --git a/prefs.js b/prefs.js index fc64ba1..8768093 100644 --- a/prefs.js +++ b/prefs.js @@ -29,9 +29,7 @@ const _ = imports.gettext.domain('burn-my-windows').gettext; const ExtensionUtils = imports.misc.extensionUtils; const Me = imports.misc.extensionUtils.getCurrentExtension(); const utils = Me.imports.src.utils; - -// This template widget class is defined at the bottom of this file. -var BurnMyWindowsEffectPage = null; +const ProfileManager = Me.imports.src.ProfileManager.ProfileManager; ////////////////////////////////////////////////////////////////////////////////////////// // The preferences dialog is organized in pages, each of which is loaded from a // @@ -47,41 +45,45 @@ var PreferencesDialog = class PreferencesDialog { // New effects must be registered here and in extension.js. this._ALL_EFFECTS = [ - new Me.imports.src.Apparition.Apparition(), - new Me.imports.src.BrokenGlass.BrokenGlass(), - new Me.imports.src.Doom.Doom(), - new Me.imports.src.EnergizeA.EnergizeA(), - new Me.imports.src.EnergizeB.EnergizeB(), - new Me.imports.src.Fire.Fire(), - new Me.imports.src.Glide.Glide(), - new Me.imports.src.Glitch.Glitch(), - new Me.imports.src.Hexagon.Hexagon(), - new Me.imports.src.Incinerate.Incinerate(), - new Me.imports.src.Matrix.Matrix(), - new Me.imports.src.Pixelate.Pixelate(), - new Me.imports.src.PixelWheel.PixelWheel(), - new Me.imports.src.PixelWipe.PixelWipe(), - new Me.imports.src.Portal.Portal(), - new Me.imports.src.SnapOfDisintegration.SnapOfDisintegration(), - new Me.imports.src.TRexAttack.TRexAttack(), - new Me.imports.src.TVEffect.TVEffect(), - new Me.imports.src.TVGlitch.TVGlitch(), - new Me.imports.src.Wisps.Wisps(), + new Me.imports.src.effects.Apparition.Apparition(), + new Me.imports.src.effects.BrokenGlass.BrokenGlass(), + new Me.imports.src.effects.Doom.Doom(), + new Me.imports.src.effects.EnergizeA.EnergizeA(), + new Me.imports.src.effects.EnergizeB.EnergizeB(), + new Me.imports.src.effects.Fire.Fire(), + new Me.imports.src.effects.Glide.Glide(), + new Me.imports.src.effects.Glitch.Glitch(), + new Me.imports.src.effects.Hexagon.Hexagon(), + new Me.imports.src.effects.Incinerate.Incinerate(), + new Me.imports.src.effects.Matrix.Matrix(), + new Me.imports.src.effects.Pixelate.Pixelate(), + new Me.imports.src.effects.PixelWheel.PixelWheel(), + new Me.imports.src.effects.PixelWipe.PixelWipe(), + new Me.imports.src.effects.Portal.Portal(), + new Me.imports.src.effects.SnapOfDisintegration.SnapOfDisintegration(), + new Me.imports.src.effects.TRexAttack.TRexAttack(), + new Me.imports.src.effects.TVEffect.TVEffect(), + new Me.imports.src.effects.TVGlitch.TVGlitch(), + new Me.imports.src.effects.Wisps.Wisps(), ]; // Load all of our resources. this._resources = Gio.Resource.load(Me.path + '/resources/burn-my-windows.gresource'); Gio.resources_register(this._resources); - // Load the CSS file for the settings dialog. - 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); - } else { - Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), styleProvider, - Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); + // Load the CSS file for the settings dialog. If using libadwaita, we do not need an + // additional style sheet. + if (!utils.isADW()) { + const provider = Gtk.CssProvider.new(); + if (utils.isGTK4()) { + provider.load_from_resource('/css/gtk4.css'); + Gtk.StyleContext.add_provider_for_display( + Gdk.Display.get_default(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); + } else { + provider.load_from_resource('/css/gtk3.css'); + Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), provider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); + } } // Make sure custom icons are found. @@ -91,21 +93,25 @@ var PreferencesDialog = class PreferencesDialog { Gtk.IconTheme.get_default().add_resource_path('/img'); } - // Register the template widgets used in the settings dialog. - this._registerCustomClasses(); - - // Store a reference to the settings object. - this._settings = ExtensionUtils.getSettings(); - // Load the general user interface files. this._builder = new Gtk.Builder(); - this._builder.add_from_resource(`/ui/common/main-menu.ui`); + this._builder.add_from_resource(`/ui/common/menus.ui`); this._builder.add_from_resource(`/ui/${utils.getUIDir()}/prefs.ui`); - // Bind general options properties. - this.bindSwitch('destroy-dialogs'); - this.bindSwitch('disable-on-battery'); - this.bindSwitch('disable-on-power-save'); + // Store a reference to the general settings object. + this._settings = ExtensionUtils.getSettings(); + + // This tracks all available effect profiles. + this._profileManager = new ProfileManager(); + + // This is used to track all connections to properties of the current effect profile. + // Whenever the current effect profile changes, all connections are disconnected. + this._profileConnections = []; + + // Load the current effect profile. If there is none, we create a default profile. + this._settings.connect('changed::active-profile', () => { + this._loadActiveProfile(); + }); // Check whether the power profiles daemon is available - if not, we hide the // corresponding settings row. @@ -121,34 +127,144 @@ var PreferencesDialog = class PreferencesDialog { // Maybe the service is masked... } - this._builder.get_object('disable-on-power-save-row').set_visible(hasPowerProfiles); + let powerProfileRow = this._builder.get_object('profile-power-profile'); + if (!utils.isADW()) { + powerProfileRow = powerProfileRow.get_parent().get_parent(); + } + powerProfileRow.set_visible(hasPowerProfiles); - // Starting with GNOME Shell 42, the settings dialog uses libadwaita (at least most of - // the time - it seems that pop!_OS does not support libadwaita even on GNOME 42). We - // have to use a different layout, as the stack sidebar looks pretty ugly with the - // included Adw.Clamp... - if (utils.isADW()) { + // The global color scheme is only available starting with GNOME Shell 42. We hide the + // corresponding settings row on older versions. + let colorSchemeRow = this._builder.get_object('profile-color-scheme'); + if (!utils.isADW()) { + colorSchemeRow = colorSchemeRow.get_parent().get_parent(); + } + colorSchemeRow.set_visible(utils.shellVersionIsAtLeast(42, 0)); - // This is our top-level widget which we will return later. - this._widget = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL}); + // Wire up the window picker of the profile editor. Whenever the app-chooser button is + // clicked, we call a method of the extension which will initiate the window picking. + this._builder.get_object('profile-choose-app-button').connect('clicked', () => { + Gio.DBus.session.call('org.gnome.Shell', + '/org/gnome/shell/extensions/BurnMyWindows', + 'org.gnome.shell.extensions.BurnMyWindows', 'PickWindow', + null, null, Gio.DBusCallFlags.NO_AUTO_START, -1, null, null); + }); - // Add the general options page to the settings dialog. - const generalPrefs = this._builder.get_object('general-prefs'); - this.gtkBoxAppend(this._widget, generalPrefs); + // If the window picking was successful, this D-Bus signal will be emitted. If a + // window was picked, we add it to the list of window name. + this._dbusConnection = Gio.DBus.session.signal_subscribe( + 'org.gnome.Shell', 'org.gnome.shell.extensions.BurnMyWindows', 'WindowPicked', + '/org/gnome/shell/extensions/BurnMyWindows', null, Gio.DBusSignalFlags.NONE, + (conn, sender, obj_path, iface, signal, params) => { + const val = params.get_child_value(0).get_string()[0]; + if (val != 'window-not-found') { + const entry = this._builder.get_object('profile-app'); - // Then add a preferences group for the effect expander rows. - const group = new Adw.PreferencesGroup({title: _('Effects')}); - this.gtkBoxAppend(this._widget, group); + // Split the current value at each |, trim spaces, and remove empty components. + let apps = entry.text.split('|').map(item => item.trim()).filter(v => v != ''); - // This stores all expander rows for the effects. We use this to implement the - // accordion-functionality of the effect settings. - this._effectRows = []; + // If the list is empty, we simply use the name of the picked window. + if (apps.length == 0) { + entry.text = val; + } else { - // Now add all the rows. - this._ALL_EFFECTS.forEach(effect => { - const [minMajor, minMinor] = effect.getMinShellVersion(); - if (utils.shellVersionIsAtLeast(minMajor, minMinor)) { - const row = effect.getPreferences(this); + // Else we append the new application name, remove any duplicates, and sort + // the resulting list alphabetically. + apps.push(val); + apps = [...new Set(apps)].sort(); + entry.text = apps.join(' | '); + } + } + }); + + // If using libadwaita, the visibility of the profile-editor Adw.Flap is controlled + // using bindings in the ui file. On GTK3 and GTK4 we have to wire up this toggling + // here since we are using a Gtk.Stack instead of an Adw.Flap. + if (!utils.isADW()) { + const profileEditorButton = this._builder.get_object('edit-profile-button'); + profileEditorButton.connect('toggled', b => { + if (b.active) { + this._builder.get_object('general-prefs') + .set_visible_child(this._builder.get_object('profile-editor')); + } else { + this._builder.get_object('general-prefs') + .set_visible_child(this._builder.get_object('effect-editor')); + } + }); + } + + // This is our top-level widget which we will return later. + this._widget = this._builder.get_object('general-prefs'); + + // Then add a preferences group for the effect expander rows. + const group = this._builder.get_object('effects-group'); + + // This stores all expander rows for the effects. We use this to implement the + // accordion-like behavior of the effect settings. + this._effectRows = []; + + if (!utils.isADW()) { + group.connect('row-activated', (g, row) => { + this._effectRows.forEach(r => { + if (r == row) { + if (r._revealer.get_reveal_child()) { + r._revealer.set_reveal_child(false); + r._arrow.get_style_context().remove_class('revealed'); + } else { + r._revealer.set_reveal_child(true); + r._arrow.get_style_context().add_class('revealed'); + } + } else { + r._revealer.set_reveal_child(false); + r._arrow.get_style_context().remove_class('revealed'); + } + }); + }); + } + + // Now add all the rows. + this._ALL_EFFECTS.forEach(effect => { + const [minMajor, minMinor] = effect.getMinShellVersion(); + if (utils.shellVersionIsAtLeast(minMajor, minMinor)) { + + const uiFile = `/ui/${utils.getUIDir()}/${effect.getNick()}.ui`; + const [hasPrefs] = Gio.resources_get_info(uiFile, 0); + + // Add the settings page to the builder. + if (hasPrefs) { + this._builder.add_from_resource(uiFile); + } + + // The preview button. + let previewButton; + if (utils.isGTK4()) { + previewButton = Gtk.Button.new_from_icon_name('bmw-preview-symbolic'); + } else { + previewButton = Gtk.Button.new_from_icon_name('bmw-preview-symbolic', 1); + } + previewButton.get_style_context().add_class('circular'); + previewButton.get_style_context().add_class('flat'); + previewButton.set_tooltip_text(_('Preview this effect')); + previewButton.set_valign(Gtk.Align.CENTER); + previewButton.connect('clicked', () => { + this._previewEffect(effect); + }); + + // The toggle button for enabling and disabling the effect. + const button = Gtk.Switch.new(); + button.set_valign(Gtk.Align.CENTER); + this._builder.expose_object(`${effect.getNick()}-enable-effect`, button); + + if (utils.isADW()) { + + let row; + if (hasPrefs) { + + // Add the effect's preferences (if any). + row = this._builder.get_object(`${effect.getNick()}-prefs`); + } else if (utils.isADW()) { + row = Adw.ActionRow.new(); + } // On older versions of Adw (e.g. on GNOME Shell <43), the set_use_markup() does // not yet exist. @@ -161,112 +277,69 @@ var PreferencesDialog = class PreferencesDialog { // Un-expand any previously expanded effect row. This way we ensure that there // is only one expanded row at any time. - row.connect('notify::expanded', currentRow => { - if (currentRow.get_expanded()) { - this._effectRows.forEach(row => { - if (row != currentRow) { - row.set_expanded(false); - } - }); - } - }); - - // Add three buttons on the right. - const box = new Gtk.Box(); - box.set_spacing(8); - - // The preview button. - const previewButton = Gtk.Button.new_from_icon_name('bmw-preview-symbolic'); - previewButton.add_css_class('circular'); - previewButton.add_css_class('flat'); - previewButton.set_tooltip_text(_('Preview this effect')); - previewButton.set_valign(Gtk.Align.CENTER); - box.append(previewButton); - - previewButton.connect('clicked', () => { - this._previewEffect(effect); - }); - - // Now add the two toggle buttons for enabling and disabling the effect. - const addToggle = (action, tooltip) => { - const button = Gtk.ToggleButton.new(); - button.set_action_name( - `${action}-effects.${effect.getNick()}-${action}-effect`); - button.set_child( - Gtk.Image.new_from_icon_name(`bmw-window-${action}-symbolic`)); - button.set_tooltip_text(tooltip); - button.set_valign(Gtk.Align.CENTER); - - // We switch some class when the button is enabled in order to make it more - // apparent which effects are currently in use. - button.add_css_class('circular'); - button.add_css_class('flat'); - button.connect('toggled', button => { - if (button.active) { - button.add_css_class('suggested-action'); - button.remove_css_class('flat'); - } else { - button.remove_css_class('suggested-action'); - button.add_css_class('flat'); + if (hasPrefs) { + row.connect('notify::expanded', currentRow => { + if (currentRow.get_expanded()) { + this._effectRows.forEach(row => { + if (row != currentRow) { + row.set_expanded(false); + } + }); } }); - - box.append(button); - }; - - addToggle('open', _('Use this effect when opening windows')); - addToggle('close', _('Use this effect when closing windows')); - - row.add_action(box); - group.add(row); - - this._effectRows.push(row); - } - }); - } - // On older GNOME versions, we use a StackSidebar. The code below works both, on GTK3 - // and GTK4. - else { - - // This is our top-level widget which we will return later. - this._widget = new Gtk.Box({ - orientation: Gtk.Orientation.HORIZONTAL, - }); - - const stack = new Gtk.Stack({ - transition_type: Gtk.StackTransitionType.SLIDE_UP_DOWN, - }); - - // Add the general options page. - const generalPage = this._builder.get_object('general-prefs'); - generalPage.margin_start = 60; - generalPage.margin_end = 60; - stack.add_titled(generalPage, 'general', _('General Options')); - - this.gtkBoxAppend(this._widget, new Gtk.StackSidebar({stack: stack})); - this.gtkBoxAppend(this._widget, stack); - - // Add all other effect pages. - this._ALL_EFFECTS.forEach(effect => { - const [minMajor, minMinor] = effect.getMinShellVersion(); - if (utils.shellVersionIsAtLeast(minMajor, minMinor)) { - - const page = new BurnMyWindowsEffectPage(effect, this); - page.margin_start = 60; - page.margin_end = 60; - page.margin_top = 60; - page.margin_bottom = 60; - - // Add the effect's preferences (if any). - const preferences = effect.getPreferences(this); - if (preferences) { - this.gtkBoxAppend(page, preferences); + this._effectRows.push(row); } - stack.add_titled(page, effect.getNick(), effect.getLabel()); + row.add_action(previewButton); + row.add_prefix(button); + + group.add(row); + + + } else { + + const row = new Gtk.ListBoxRow(); + row.get_style_context().add_class('effect-row'); + + const container = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL}); + + const header = new Gtk.Box({spacing: 12}); + header.get_style_context().add_class('effect-row-header'); + + const label = new Gtk.Label( + {label: effect.getLabel(), hexpand: true, halign: Gtk.Align.START}); + label.get_style_context().add_class('heading'); + + this.gtkBoxAppend(header, button); + this.gtkBoxAppend(header, label); + this.gtkBoxAppend(header, previewButton); + this.gtkBoxAppend(container, header); + + if (hasPrefs) { + const revealer = this._builder.get_object(`${effect.getNick()}-prefs`); + const arrow = new Gtk.Image({icon_name: 'go-down-symbolic'}); + arrow.get_style_context().add_class('revealer-arrow'); + this.gtkBoxAppend(header, arrow); + this.gtkBoxAppend(container, revealer); + row._revealer = revealer; + row._arrow = arrow; + + row.set_activatable(true); + this._effectRows.push(row); + } else { + row.set_activatable(false); + } + + if (utils.isGTK4()) { + row.set_child(container); + group.append(row); + } else { + row.add(container); + group.add(row); + } } - }); - } + } + }); // Some things can only be done once the widget is shown as we do not have access to // the toplevel widget before. @@ -276,6 +349,45 @@ var PreferencesDialog = class PreferencesDialog { // Show the version number in the title bar. window.set_title(`Burn-My-Windows ${Me.metadata.version}`); + this._loadActiveProfile(); + this._updateProfileMenu(); + + // Show an Adw.Toast or a Gtk.InfoBar whenever Burn-My-Windows was updated. We use a + // small timeout so that it is not shown instantaneously. + const lastVersion = this._settings.get_int('last-prefs-version'); + if (lastVersion < Me.metadata.version) { + this._showUpdateInfoTimeout = + GLib.timeout_add(GLib.PRIORITY_DEFAULT, 2000, () => { + this._showUpdateInfoTimeout = 0; + + if (utils.isADW()) { + const toast = Adw.Toast.new(_('Burn-My-Windows has been updated!')); + toast.set_button_label(_('View Changelog')); + toast.set_action_name('prefs.changelog'); + toast.set_timeout(0); + + toast.connect( + 'dismissed', + () => this._settings.set_int('last-prefs-version', Me.metadata.version)); + + window.add_toast(toast); + } else { + const infoBar = this._builder.get_object('update-info'); + infoBar.connect('response', i => { + this._settings.set_int('last-prefs-version', Me.metadata.version); + i.set_revealed(false); + }); + infoBar.set_revealed(true); + } + + return false; + }); + } + + // Populate the menu with actions. + const group = Gio.SimpleActionGroup.new(); + window.insert_action_group('prefs', group); + // Add the main menu to the title bar. { // Add the menu button to the title bar. @@ -283,20 +395,40 @@ var PreferencesDialog = class PreferencesDialog { // Starting with GNOME Shell 42, we have to hack our way through the widget tree // of the Adw.PreferencesWindow... - if (Adw && utils.shellVersionIsAtLeast(42, 'beta')) { + if (utils.isADW()) { const header = this._findWidgetByType(window.get_content(), Adw.HeaderBar); header.pack_start(menu); + header.set_title_widget(this._builder.get_object('profile-button')); - // Allow closing of the sub pages. - window.can_navigate_back = true; + // GNOME Shell extensions are forced to use a AdwPreferencesWindow. This already + // includes a Gtk.ScrolledWindow as well as an Adw.Clamp. For the profile + // editing, we want to use an Adw.Flap which reveals itself from the top. This + // needs to be inserted in the widget hierarchy above the Adw.Clamp, else it + // would look ugly. Therefore, we fiddle around with the internal widgets... + const flap = this._builder.get_object('profile-editor-flap'); + const clamp = this._findWidgetByType(window.get_content(), Adw.Clamp); + const viewport = clamp.get_parent(); + viewport.get_parent().set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER); + viewport.set_child(flap); + + const scrolledWindow = Gtk.ScrolledWindow.new(); + scrolledWindow.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); + scrolledWindow.set_propagate_natural_height(true); + scrolledWindow.set_vexpand(true); + scrolledWindow.set_child(clamp); + + flap.set_content(scrolledWindow); + + } else if (utils.isGTK4()) { + window.get_titlebar().pack_start(menu); + window.get_titlebar().set_title_widget( + this._builder.get_object('profile-button')); } else { window.get_titlebar().pack_start(menu); + window.get_titlebar().set_custom_title( + this._builder.get_object('profile-button')); } - // Populate the menu with actions. - const group = Gio.SimpleActionGroup.new(); - window.insert_action_group('prefs', group); - const addURIAction = (name, uri) => { const action = Gio.SimpleAction.new(name, null); action.connect('activate', () => Gtk.show_uri(null, uri, Gdk.CURRENT_TIME)); @@ -305,7 +437,6 @@ var PreferencesDialog = class PreferencesDialog { // clang-format off 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/'); @@ -313,6 +444,21 @@ var PreferencesDialog = class PreferencesDialog { addURIAction('donate-github', 'https://github.com/sponsors/Schneegans'); // clang-format on + // The changelog action is a bit different, as it may get activated when the + // view-changelog button is pressed which is shown in an Adw.Toast or a + // Gtk.InfoBar whenever Burn-My-Windows gets updated. To ensure that the + // notification is shown only once, we have to store the current version of + // Burn-My-Windows in the settings. + const changelogAction = Gio.SimpleAction.new('changelog', null); + changelogAction.connect('activate', () => { + Gtk.show_uri( + null, + 'https://github.com/Schneegans/Burn-My-Windows/blob/main/docs/changelog.md', + Gdk.CURRENT_TIME); + this._settings.set_int('last-prefs-version', Me.metadata.version) + }); + group.add_action(changelogAction); + // Add the about dialog. const aboutAction = Gio.SimpleAction.new('about', null); aboutAction.connect('activate', () => { @@ -410,50 +556,85 @@ var PreferencesDialog = class PreferencesDialog { group.add_action(aboutAction); } - // Populate the open-effects drop-down menu. + // Setup all the profile-related actions. { - const group = Gio.SimpleActionGroup.new(); - window.insert_action_group('open-effects', group); + // Allow switching the current profile. + const activeProfileAction = this._settings.create_action('active-profile'); + group.add_action(activeProfileAction); - this._ALL_EFFECTS.forEach(effect => { - const [minMajor, minMinor] = effect.getMinShellVersion(); - if (utils.shellVersionIsAtLeast(minMajor, minMinor)) { - const actionName = effect.getNick() + '-open-effect'; - const action = this._settings.create_action(actionName); - group.add_action(action); + // This action creates a new profile and makes it the active one. + const newProfileAction = Gio.SimpleAction.new('profile-new', null); + newProfileAction.connect('activate', () => { + const profile = this._profileManager.createProfile(); + this._settings.set_string('active-profile', profile.path); - // The menu only exists if not using libadwaita. With libadwaita, individual - // ToggleButtons are used for triggering the above actions. - if (!utils.isADW()) { - const menu = this._builder.get_object('open-effect-menu'); - const label = effect.getLabel(); - menu.append_item(Gio.MenuItem.new(label, 'open-effects.' + actionName)); - } - } + // Start editing the profile. + this._builder.get_object('edit-profile-button').active = true; + + // The number of profiles has changed, so we have to update the profile + // selection menu. + this._updateProfileMenu(); }); - } + group.add_action(newProfileAction); - // Populate the close-effects drop-down menu. - { - const group = Gio.SimpleActionGroup.new(); - window.insert_action_group('close-effects', group); + // This action shows a confirmation dialog. Upon user approval, the currently + // active profile is deleted. We use the more beautiful Adw.MessageDialog if it is + // available (usually on GNOME 43 and beyond). + let deleteProfileDialog; + const dialogTitle = _('Delete this Profile?'); + const dialogSubtitle = _( + 'The current effect profile with all its effect settings will be permanently lost.'); - this._ALL_EFFECTS.forEach(effect => { - const [minMajor, minMinor] = effect.getMinShellVersion(); - if (utils.shellVersionIsAtLeast(minMajor, minMinor)) { - const actionName = effect.getNick() + '-close-effect'; - const action = this._settings.create_action(actionName); - group.add_action(action); + if (utils.isADW() && Adw.MessageDialog) { + deleteProfileDialog = + new Adw.MessageDialog({heading: dialogTitle, body: dialogSubtitle}); + deleteProfileDialog.add_response('cancel', _('Cancel')); + deleteProfileDialog.add_response('delete', _('Delete')); + deleteProfileDialog.set_response_appearance('delete', + Adw.ResponseAppearance.DESTRUCTIVE); + deleteProfileDialog.set_default_response('cancel'); + deleteProfileDialog.set_close_response('cancel'); + } else { + deleteProfileDialog = new Gtk.MessageDialog({ + text: dialogTitle, + secondary_text: dialogSubtitle, + modal: true, + title: '', + buttons: Gtk.ButtonsType.OK_CANCEL + }); + } - // The menu only exists if not using libadwaita. With libadwaita, individual - // ToggleButtons are used for triggering the above actions. - if (!utils.isADW()) { - const menu = this._builder.get_object('close-effect-menu'); - const label = effect.getLabel(); - menu.append_item(Gio.MenuItem.new(label, 'close-effects.' + actionName)); - } + if (utils.isGTK4()) { + deleteProfileDialog.set_hide_on_close(true); + } + + deleteProfileDialog.set_transient_for(window); + + deleteProfileDialog.connect('response', (dialog, response) => { + if (response == 'delete' || response == Gtk.ResponseType.OK) { + // Stop editing the current profile. + this._builder.get_object('edit-profile-button').active = false; + + // Delete the currently active profile. + this._profileManager.deleteProfile(this._activeProfile.path); + + // Select another one. + this._settings.set_string('active-profile', + this._profileManager.getProfiles()[0].path); + + // The number of profiles has changed, so we have to update the profile + // selection menu. + this._updateProfileMenu(); } + + dialog.hide(); }); + + const deleteProfileAction = Gio.SimpleAction.new('profile-delete', null); + deleteProfileAction.connect('activate', () => { + deleteProfileDialog.show(); + }); + group.add_action(deleteProfileAction); } }); @@ -462,6 +643,14 @@ var PreferencesDialog = class PreferencesDialog { this._widget.connect('destroy', () => { // Unregister our resources. Gio.resources_unregister(this._resources); + + // Disconnect from the window-picker API. + Gio.DBus.session.signal_unsubscribe(this._dbusConnection); + + // If the settings dialog got closed too quickly, this may not have been shown. + if (this._showUpdateInfoTimeout > 0) { + GLib.source_remove(this._showUpdateInfoTimeout); + } }); // Show the widgets on GTK3. @@ -478,9 +667,9 @@ var PreferencesDialog = class PreferencesDialog { return this._builder; } - // Returns a Gio.Settings object for this extension. - getSettings() { - return this._settings; + // Returns a Gio.Settings object for the current effect profile. + getProfileSettings() { + return this._activeProfile.settings; } // Returns the widget used for the settings of this extension. @@ -488,10 +677,22 @@ var PreferencesDialog = class PreferencesDialog { return this._widget; } - // Connects a Gtk.ComboBox (or anything else which has an 'active-id' property) to a + // Connects an Adw.ComboRow (or anything else which has an 'selected' property) to a // settings key. It also binds the corresponding reset button. - bindCombobox(settingsKey) { - this._bind(settingsKey, 'active-id'); + bindComboRow(settingsKey) { + this._bind(settingsKey, 'selected'); + } + + // Connects a Gtk.ComboBox (or anything else which has an 'active' property) to a + // settings key. It also binds the corresponding reset button. + bindComboBox(settingsKey) { + this._bind(settingsKey, 'active'); + } + + // Connects a Gtk.Entry (or anything else which has an 'text' property) to a + // settings key. It also binds the corresponding reset button. + bindEntry(settingsKey) { + this._bind(settingsKey, 'text'); } // Connects a Gtk.Adjustment (or anything else which has a 'value' property) to a @@ -516,18 +717,23 @@ var PreferencesDialog = class PreferencesDialog { if (button) { // Update the settings when the color is modified. - button.connect('color-set', () => { - this._settings.set_string(settingsKey, button.get_rgba().to_string()); - }); + if (!button._isConnected) { + button.connect('color-set', () => { + this.getProfileSettings().set_string(settingsKey, + button.get_rgba().to_string()); + }); + + button._isConnected = true; + } // Update the button state when the settings change. const settingSignalHandler = () => { const rgba = new Gdk.RGBA(); - rgba.parse(this._settings.get_string(settingsKey)); + rgba.parse(this.getProfileSettings().get_string(settingsKey)); button.rgba = rgba; }; - this._settings.connect('changed::' + settingsKey, settingSignalHandler); + this._connectProfileSetting('changed::' + settingsKey, settingSignalHandler); // Initialize the button with the state in the settings. settingSignalHandler(); @@ -543,20 +749,126 @@ var PreferencesDialog = class PreferencesDialog { if (utils.isGTK4()) { box.append(child); } else { - box.pack_start(child, false, false, 0); + box.pack_start(child, false, true, 0); } } // ----------------------------------------------------------------------- private stuff + // This loads all settings from the profile given in the settings key 'active-profile'. + _loadActiveProfile() { + + // Disconnect any connection to the previously active profile. + this._disconnectProfileSettings(); + + // Find the active profile in the list of all profiles. + const allProfiles = this._profileManager.getProfiles(); + const path = this._settings.get_string('active-profile'); + this._activeProfile = allProfiles.find(p => p.path == path); + + // If, for whatever reason, it is not found, select the first one. Setting the + // settings key will trigger this method again. + if (!this._activeProfile) { + this._activeProfile = allProfiles[0]; + this._settings.set_string('active-profile', this._activeProfile.path); + return; + } + + // Connect all profile options. + const updateProfileButtonMenuIfChanged = (settingsKey) => { + this._connectProfileSetting('changed::' + settingsKey, () => { + this._updateProfileButton(); + this._updateProfileMenu(); + }); + }; + + updateProfileButtonMenuIfChanged('profile-app'); + updateProfileButtonMenuIfChanged('profile-animation-type'); + updateProfileButtonMenuIfChanged('profile-window-type'); + updateProfileButtonMenuIfChanged('profile-color-scheme'); + updateProfileButtonMenuIfChanged('profile-power-mode'); + updateProfileButtonMenuIfChanged('profile-power-profile'); + + this.bindEntry('profile-app'); + + if (utils.isADW()) { + this.bindComboRow('profile-animation-type'); + this.bindComboRow('profile-window-type'); + this.bindComboRow('profile-color-scheme'); + this.bindComboRow('profile-power-mode'); + this.bindComboRow('profile-power-profile'); + } else { + this.bindComboBox('profile-animation-type'); + this.bindComboBox('profile-window-type'); + this.bindComboBox('profile-color-scheme'); + this.bindComboBox('profile-power-mode'); + this.bindComboBox('profile-power-profile'); + } + this.bindSwitch('profile-high-priority'); + + // Connect all effect settings. + this._ALL_EFFECTS.forEach(effect => { + const [minMajor, minMinor] = effect.getMinShellVersion(); + if (utils.shellVersionIsAtLeast(minMajor, minMinor)) { + this.bindSwitch(`${effect.getNick()}-enable-effect`); + effect.bindPreferences(this); + } + }); + + // Update the label in the profile-select button. + this._updateProfileButton(); + } + + // This updates the label of the profile-selection button according to the currently + // active profile. It's called whenever the active profile is changed or whenever a + // configuration option of the profile is changed. + _updateProfileButton() { + this._builder.get_object('choose-profile-button').label = + this._profileManager.getProfileName(this.getProfileSettings()); + } + + // This updates the list of available profiles in the dropdown of the profile-selection + // button. It's called whenever one of the configuration option of the currently active + // profile is changed, or whenever a profile is added / removed. + _updateProfileMenu() { + + // First, clear the menu section. + const profileSection = this._builder.get_object('profile-section'); + profileSection.remove_all(); + + // Then add an entry for each available profile. + this._profileManager.getProfiles().forEach(profile => { + const label = this._profileManager.getProfileName(profile.settings); + const item = Gio.MenuItem.new(label, 'prefs.active-profile'); + item.set_action_and_target_value('prefs.active-profile', + GLib.Variant.new_string(profile.path)); + profileSection.append_item(item); + }); + } + + // This wrapper connects a given callback to a profile settings key. Use this instead of + // the direct connect() call on the profile settings to make sure that the callback is + // disconnected when the active profile changes. + _connectProfileSetting(key, callback) { + this._profileConnections.push(this.getProfileSettings().connect(key, callback)); + } + + // This is called whenever the currently edited effect profile changes. It unbinds all + // callbacks bound with the above method before. + _disconnectProfileSettings() { + this._profileConnections.forEach(c => this.getProfileSettings().disconnect(c)); + this._profileConnections = []; + } + // Searches for a reset button for the given settings key and make it reset the settings // key when clicked. _bindResetButton(settingsKey) { const resetButton = this._builder.get_object('reset-' + settingsKey); - if (resetButton) { + if (resetButton && !resetButton._isConnected) { resetButton.connect('clicked', () => { - this._settings.reset(settingsKey); + this.getProfileSettings().reset(settingsKey); }); + resetButton._isConnected = true; } } @@ -566,7 +878,10 @@ var PreferencesDialog = class PreferencesDialog { const object = this._builder.get_object(settingsKey); if (object) { - this._settings.bind(settingsKey, object, property, Gio.SettingsBindFlags.DEFAULT); + // Unbind any previous binding (potentially to a previously edited profile). + Gio.Settings.unbind(object, property); + this.getProfileSettings().bind(settingsKey, object, property, + Gio.SettingsBindFlags.DEFAULT); } this._bindResetButton(settingsKey); @@ -595,8 +910,7 @@ var PreferencesDialog = class PreferencesDialog { _previewEffect(effect) { // Set the to-be-previewed effect. - this.getSettings().set_string('open-preview-effect', effect.getNick()); - this.getSettings().set_string('close-preview-effect', effect.getNick()); + this._settings.set_string('preview-effect', effect.getNick()); // Make sure that the window.show() firther below "sees" this change. Gio.Settings.sync(); @@ -647,34 +961,6 @@ var PreferencesDialog = class PreferencesDialog { window.show_all(); } } - - // Initializes template widgets used by the preferences dialog. - _registerCustomClasses() { - - // If we are not using libadwaita, each effect page is based on a template widget. - // This template contains the title and the preview button. - if (!utils.isADW() && GObject.type_from_name('BurnMyWindowsEffectPage') == null) { - BurnMyWindowsEffectPage = GObject.registerClass( - { - GTypeName: 'BurnMyWindowsEffectPage', - Template: `resource:///ui/${utils.getUIDir()}/effectPage.ui`, - InternalChildren: ['label', 'button'], - }, - class BurnMyWindowsEffectPage extends Gtk.Box { // ------------------------------ - _init(effect, dialog) { - super._init(); - - // Set the effect's name as label. - this._label.label = effect.getLabel(); - - // Open the preview window once the preview button is clicked. - this._button.connect('clicked', () => { - dialog._previewEffect(effect); - }); - } - }); - } - } } // This is used for setting up the translations. @@ -690,3 +976,11 @@ function buildPrefsWidget() { var dialog = new PreferencesDialog(); return dialog.getWidget(); } + +// If using libadwaita, this method is called. In this case, the primary widget of the +// preferences dialog is an Adw.PreferencesPage, which we directly add to the window. +function fillPreferencesWindow(window) { + window.set_default_size(700, 700); + var dialog = new PreferencesDialog(); + window.add(dialog.getWidget()); +} \ No newline at end of file diff --git a/resources/css/gtk.css b/resources/css/gtk.css deleted file mode 100644 index 198fbef..0000000 --- a/resources/css/gtk.css +++ /dev/null @@ -1,8 +0,0 @@ -/* -SPDX-FileCopyrightText: Simon Schneegans -SPDX-License-Identifier: CC0-1.0 -*/ - -.pill-button { - border-radius: 9999px; -} \ No newline at end of file diff --git a/resources/css/gtk3.css b/resources/css/gtk3.css new file mode 100644 index 0000000..6a69c48 --- /dev/null +++ b/resources/css/gtk3.css @@ -0,0 +1,23 @@ +/* +SPDX-FileCopyrightText: Simon Schneegans +SPDX-License-Identifier: CC0-1.0 +*/ + +row { + padding: 8px; +} + +.effect-row { + padding: 0; +} + +.effect-row-header, +.effect-row list { + padding: 8px; + border: 0 solid @borders; + border-bottom-width: 1px; +} + +.revealer-arrow { + margin-right: 6px; +} \ No newline at end of file diff --git a/resources/css/gtk4.css b/resources/css/gtk4.css new file mode 100644 index 0000000..dece072 --- /dev/null +++ b/resources/css/gtk4.css @@ -0,0 +1,26 @@ +/* +SPDX-FileCopyrightText: Simon Schneegans +SPDX-License-Identifier: CC0-1.0 +*/ + +/* These are only used if not using libadwaita */ + +.effect-row { + padding: 0; +} + +.effect-row-header, +.effect-row list { + padding: 8px; + border: 0 solid @borders; + border-bottom-width: 1px; +} + +.revealer-arrow { + margin-right: 6px; + transition: transform 250ms; +} + +.revealer-arrow.revealed { + transform: rotate(180deg); +} \ No newline at end of file diff --git a/resources/img/scalable/actions/bmw-copy-effects-symbolic.svg b/resources/img/scalable/actions/bmw-copy-effects-symbolic.svg new file mode 100644 index 0000000..680cad3 --- /dev/null +++ b/resources/img/scalable/actions/bmw-copy-effects-symbolic.svg @@ -0,0 +1,45 @@ + + + + + + + + + + diff --git a/resources/img/scalable/actions/bmw-edit-profile-symbolic.svg b/resources/img/scalable/actions/bmw-edit-profile-symbolic.svg new file mode 100644 index 0000000..2bf9968 --- /dev/null +++ b/resources/img/scalable/actions/bmw-edit-profile-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/resources/img/scalable/actions/bmw-paste-effects-symbolic.svg b/resources/img/scalable/actions/bmw-paste-effects-symbolic.svg new file mode 100644 index 0000000..fc51c35 --- /dev/null +++ b/resources/img/scalable/actions/bmw-paste-effects-symbolic.svg @@ -0,0 +1,45 @@ + + + + + + + + + + diff --git a/resources/img/scalable/actions/bmw-select-app-symbolic.svg b/resources/img/scalable/actions/bmw-select-app-symbolic.svg new file mode 100644 index 0000000..2ad6301 --- /dev/null +++ b/resources/img/scalable/actions/bmw-select-app-symbolic.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + diff --git a/resources/interfaces/org.gnome.shell.extensions.burn-my-windows.xml b/resources/interfaces/org.gnome.shell.extensions.burn-my-windows.xml new file mode 100644 index 0000000..22b6fd3 --- /dev/null +++ b/resources/interfaces/org.gnome.shell.extensions.burn-my-windows.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/adw/Apparition.ui b/resources/ui/adw/apparition.ui similarity index 100% rename from resources/ui/adw/Apparition.ui rename to resources/ui/adw/apparition.ui diff --git a/resources/ui/adw/BrokenGlass.ui b/resources/ui/adw/broken-glass.ui similarity index 100% rename from resources/ui/adw/BrokenGlass.ui rename to resources/ui/adw/broken-glass.ui diff --git a/resources/ui/adw/Doom.ui b/resources/ui/adw/doom.ui similarity index 100% rename from resources/ui/adw/Doom.ui rename to resources/ui/adw/doom.ui diff --git a/resources/ui/adw/EnergizeA.ui b/resources/ui/adw/energize-a.ui similarity index 100% rename from resources/ui/adw/EnergizeA.ui rename to resources/ui/adw/energize-a.ui diff --git a/resources/ui/adw/EnergizeB.ui b/resources/ui/adw/energize-b.ui similarity index 100% rename from resources/ui/adw/EnergizeB.ui rename to resources/ui/adw/energize-b.ui diff --git a/resources/ui/adw/Fire.ui b/resources/ui/adw/fire.ui similarity index 94% rename from resources/ui/adw/Fire.ui rename to resources/ui/adw/fire.ui index b424437..f278814 100644 --- a/resources/ui/adw/Fire.ui +++ b/resources/ui/adw/fire.ui @@ -69,7 +69,7 @@ SPDX-License-Identifier: GPL-3.0-or-later left 300 - + 3 0.1 0.01 @@ -79,7 +79,7 @@ SPDX-License-Identifier: GPL-3.0-or-later - + edit-clear-symbolic center Reset to Default Value @@ -102,7 +102,7 @@ SPDX-License-Identifier: GPL-3.0-or-later left 300 - + 2.0 -2.0 0.01 @@ -112,7 +112,7 @@ SPDX-License-Identifier: GPL-3.0-or-later - + edit-clear-symbolic center Reset to Default Value @@ -128,14 +128,14 @@ SPDX-License-Identifier: GPL-3.0-or-later 3D Noise Creates a more dynamic fire but requires more GPU power. - flame-3d-noise + fire-3d-noise - + center - + edit-clear-symbolic center Reset to Default Value diff --git a/resources/ui/adw/Glide.ui b/resources/ui/adw/glide.ui similarity index 100% rename from resources/ui/adw/Glide.ui rename to resources/ui/adw/glide.ui diff --git a/resources/ui/adw/Glitch.ui b/resources/ui/adw/glitch.ui similarity index 100% rename from resources/ui/adw/Glitch.ui rename to resources/ui/adw/glitch.ui diff --git a/resources/ui/adw/Hexagon.ui b/resources/ui/adw/hexagon.ui similarity index 100% rename from resources/ui/adw/Hexagon.ui rename to resources/ui/adw/hexagon.ui diff --git a/resources/ui/adw/Incinerate.ui b/resources/ui/adw/incinerate.ui similarity index 100% rename from resources/ui/adw/Incinerate.ui rename to resources/ui/adw/incinerate.ui diff --git a/resources/ui/adw/Matrix.ui b/resources/ui/adw/matrix.ui similarity index 100% rename from resources/ui/adw/Matrix.ui rename to resources/ui/adw/matrix.ui diff --git a/resources/ui/adw/PixelWheel.ui b/resources/ui/adw/pixel-wheel.ui similarity index 100% rename from resources/ui/adw/PixelWheel.ui rename to resources/ui/adw/pixel-wheel.ui diff --git a/resources/ui/adw/PixelWipe.ui b/resources/ui/adw/pixel-wipe.ui similarity index 100% rename from resources/ui/adw/PixelWipe.ui rename to resources/ui/adw/pixel-wipe.ui diff --git a/resources/ui/adw/Pixelate.ui b/resources/ui/adw/pixelate.ui similarity index 100% rename from resources/ui/adw/Pixelate.ui rename to resources/ui/adw/pixelate.ui diff --git a/resources/ui/adw/Portal.ui b/resources/ui/adw/portal.ui similarity index 100% rename from resources/ui/adw/Portal.ui rename to resources/ui/adw/portal.ui diff --git a/resources/ui/adw/prefs.ui b/resources/ui/adw/prefs.ui index 51a65c1..69f500f 100644 --- a/resources/ui/adw/prefs.ui +++ b/resources/ui/adw/prefs.ui @@ -8,114 +8,245 @@ SPDX-License-Identifier: GPL-3.0-or-later + main-menu heart-filled-symbolic - - vertical - 60 - 20 - + + + center - + + profile-menu + + + + + bmw-edit-profile-symbolic center - burn-my-windows-symbolic - 128 + + + profile-editor-flap + + + - - - Welcome to Burn-My-Windows! - 8 - 6 + + vertical + natural + + + edit-profile-button + + + + + + + + vertical + 20 + 20 + 20 + 20 + 20 + + + + Effect Profile Constraints + Define when the current effect settings should be used. + + + + Application + + + center + + + + + 300 + Any + + + + + + bmw-select-app-symbolic + center + + + + + + + + + + Animation Type + + + + Any + Opening Windows + Closing Windows + + + + + + + + + Window Type + + + + Any + Normal Windows + Dialog Windows + + + + + + + + + Color Scheme + + + + Any + Default Color Scheme + Dark Color Scheme + + + + + + + + + Power Mode + + + + Any + On Battery + Plugged In + + + + + + + + + Power Profile + + + + Any + Power-Saver Mode + Balanced Mode + Performance Mode + Power Saver or Balanced + Balanced or Performance + + + + + + + + + + + + Advanced Profile Options + + + + High Priority + Force using this profile even if it has less constraints than another matching profile. + 1 + profile-high-priority + + + center + + + + + + + + + + + prefs.profile-delete + + + user-trash-symbolic + Delete this Profile... + + + start + + + + + + + - - If you like this extension, recommend it to your friends :) - 36 + + 20 + 20 + 20 + 20 + Effect Settings + If multiple are selected, one is chosen randomly. + + - - - - - - - Also Add Effects to Dialogs - destroy-dialogs - - - center - - - - - edit-clear-symbolic - center - Reset to Default Value - - - - - - - - - Disable on Battery Power - disable-on-battery - - - center - - - - - edit-clear-symbolic - center - Reset to Default Value - - - - - - - - - Disable in Power-Save Mode - disable-on-power-save - - - center - - - - - edit-clear-symbolic - center - Reset to Default Value - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/adw/SnapOfDisintegration.ui b/resources/ui/adw/snap.ui similarity index 100% rename from resources/ui/adw/SnapOfDisintegration.ui rename to resources/ui/adw/snap.ui diff --git a/resources/ui/adw/TRexAttack.ui b/resources/ui/adw/trex.ui similarity index 90% rename from resources/ui/adw/TRexAttack.ui rename to resources/ui/adw/trex.ui index a5532f4..08202c8 100644 --- a/resources/ui/adw/TRexAttack.ui +++ b/resources/ui/adw/trex.ui @@ -53,7 +53,7 @@ SPDX-License-Identifier: GPL-3.0-or-later left 300 - + 10 0.1 0.1 @@ -63,7 +63,7 @@ SPDX-License-Identifier: GPL-3.0-or-later - + edit-clear-symbolic center Reset to Default Value @@ -86,7 +86,7 @@ SPDX-License-Identifier: GPL-3.0-or-later left 300 - + 50 1 1 @@ -96,7 +96,7 @@ SPDX-License-Identifier: GPL-3.0-or-later - + edit-clear-symbolic center Reset to Default Value @@ -119,7 +119,7 @@ SPDX-License-Identifier: GPL-3.0-or-later left 300 - + 1 0 0.01 @@ -129,7 +129,7 @@ SPDX-License-Identifier: GPL-3.0-or-later - + edit-clear-symbolic center Reset to Default Value @@ -144,9 +144,9 @@ SPDX-License-Identifier: GPL-3.0-or-later Flash Color - claw-scratch-color + trex-scratch-color - + 1 1 250 @@ -154,7 +154,7 @@ SPDX-License-Identifier: GPL-3.0-or-later - + edit-clear-symbolic center Reset to Default Value diff --git a/resources/ui/adw/TVGlitch.ui b/resources/ui/adw/tv-glitch.ui similarity index 100% rename from resources/ui/adw/TVGlitch.ui rename to resources/ui/adw/tv-glitch.ui diff --git a/resources/ui/adw/TVEffect.ui b/resources/ui/adw/tv.ui similarity index 100% rename from resources/ui/adw/TVEffect.ui rename to resources/ui/adw/tv.ui diff --git a/resources/ui/adw/Wisps.ui b/resources/ui/adw/wisps.ui similarity index 100% rename from resources/ui/adw/Wisps.ui rename to resources/ui/adw/wisps.ui diff --git a/resources/ui/common/main-menu.ui b/resources/ui/common/menus.ui similarity index 84% rename from resources/ui/common/main-menu.ui rename to resources/ui/common/menus.ui index 4d8260c..09684d1 100644 --- a/resources/ui/common/main-menu.ui +++ b/resources/ui/common/menus.ui @@ -6,6 +6,7 @@ SPDX-License-Identifier: GPL-3.0-or-later --> +
@@ -49,4 +50,16 @@ SPDX-License-Identifier: GPL-3.0-or-later
+ + +
+
+
+ + Add New Profile... + prefs.profile-new + +
+
+
\ No newline at end of file diff --git a/resources/ui/gtk3/Apparition.ui b/resources/ui/gtk3/Apparition.ui deleted file mode 100644 index 48124d3..0000000 --- a/resources/ui/gtk3/Apparition.ui +++ /dev/null @@ -1,310 +0,0 @@ - - - - - - - - 2000 - 100 - 10 - 100 - - - - 1 - 0 - 0.01 - 0.1 - - - - 10 - -10 - 0.1 - 1 - - - - 10 - 0 - 0.1 - 1 - - - - 1 - 0 - 0.01 - 0.1 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - apparition-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Randomness - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - apparition-randomness - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Twirl Intensity - 0 - start - center - 1 - - - - - end - center - 1 - 1 - left - 300 - apparition-twirl-intensity - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Shake Intensity - 0 - start - center - 1 - - - - - end - center - 1 - 1 - left - 300 - apparition-shake-intensity - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Suction Intensity - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - apparition-suction-intensity - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/Doom.ui b/resources/ui/gtk3/Doom.ui deleted file mode 100644 index 754aee0..0000000 --- a/resources/ui/gtk3/Doom.ui +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - - 10000 - 100 - 1 - 100 - - - - 50 - 1 - 1 - 10 - - - - 50 - 1 - 1 - 10 - - - - 50 - 1 - 1 - 10 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - doom-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Horizontal Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - doom-horizontal-scale - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Vertical Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - doom-vertical-scale - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Pixel Size - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - doom-pixel-size - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/EnergizeA.ui b/resources/ui/gtk3/EnergizeA.ui deleted file mode 100644 index b1cd157..0000000 --- a/resources/ui/gtk3/EnergizeA.ui +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - - 10000 - 100 - 1 - 100 - - - - 10 - 0.1 - 0.01 - 0.1 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - energize-a-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - energize-a-scale - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/EnergizeB.ui b/resources/ui/gtk3/EnergizeB.ui deleted file mode 100644 index cfb6188..0000000 --- a/resources/ui/gtk3/EnergizeB.ui +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - - 10000 - 100 - 1 - 100 - - - - 10 - 0.1 - 0.01 - 0.1 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - energize-b-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - energize-b-scale - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/Fire.ui b/resources/ui/gtk3/Fire.ui deleted file mode 100644 index 4cecc10..0000000 --- a/resources/ui/gtk3/Fire.ui +++ /dev/null @@ -1,368 +0,0 @@ - - - - - - - - 10000 - 100 - 1 - 100 - - - - 3 - 0.1 - 0.01 - 0.1 - - - - 2.0 - -2.0 - 0.01 - 0.1 - - - - vertical - - - - 20 - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Presets - 0 - start - center - 1 - - - - - - - 8 - - - Choose a Preset - - - - - pan-down-symbolic - 1 - - - - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - fire-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - flame-scale - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Speed - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - flame-movement-speed - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - vertical - 3 - - - 3D Noise - 0 - start - center - 1 - - - - - Creates a more dynamic fire but requires more GPU power. - 0 - start - center - 1 - - - - - - - - end - center - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Gradient - 0 - start - center - 1 - - - - - 1 - 1 - - - - - 1 - 1 - - - - - 1 - 1 - - - - - 1 - 1 - - - - - 1 - 1 - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/Glide.ui b/resources/ui/gtk3/Glide.ui deleted file mode 100644 index 7029422..0000000 --- a/resources/ui/gtk3/Glide.ui +++ /dev/null @@ -1,310 +0,0 @@ - - - - - - - - 2000 - 100 - 1 - 100 - - - - 1 - 0.1 - 0.01 - 0.1 - - - - 1 - 0 - 0.01 - 0.1 - - - - 1 - -1 - 0.01 - 0.1 - - - - 1 - -1 - 0.01 - 0.1 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - glide-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - glide-scale - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Squish - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - glide-squish - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Tilt - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - glide-tilt - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Shift - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - glide-shift - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/Glitch.ui b/resources/ui/gtk3/Glitch.ui deleted file mode 100644 index ab45f1b..0000000 --- a/resources/ui/gtk3/Glitch.ui +++ /dev/null @@ -1,297 +0,0 @@ - - - - - - - - 2000 - 100 - 1 - 100 - - - - 10 - 0.1 - 0.01 - 0.1 - - - - 10 - 0.1 - 0.01 - 0.1 - - - - 10 - 0.1 - 0.01 - 0.1 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - glitch-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - glitch-scale - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Strength - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - glitch-strength - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Speed - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - glitch-speed - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/Hexagon.ui b/resources/ui/gtk3/Hexagon.ui deleted file mode 100644 index db77118..0000000 --- a/resources/ui/gtk3/Hexagon.ui +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - - 10000 - 100 - 1 - 100 - - - - 10 - 0.1 - 0.01 - 0.1 - - - - 10 - 0 - 0.1 - 1 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - hexagon-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - hexagon-scale - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Mesh Line Width - 0 - start - center - 1 - - - - - end - center - 1 - 1 - left - 300 - hexagon-line-width - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Line Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Glow Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - vertical - 3 - - - Additive Blending - 0 - start - center - 1 - - - - - You may want to enable this for dark window themes. - 0 - start - center - 1 - - - - - - - - end - center - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/Incinerate.ui b/resources/ui/gtk3/Incinerate.ui deleted file mode 100644 index 51c0a8a..0000000 --- a/resources/ui/gtk3/Incinerate.ui +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - - - 10000 - 100 - 1 - 100 - - - - 10 - 0.1 - 0.01 - 0.1 - - - - 1 - 0 - 0.01 - 0.1 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - incinerate-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - incinerate-scale - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Turbulence - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - incinerate-turbulence - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - vertical - 3 - - - Start at Pointer - 0 - start - center - 1 - - - - - If disabled, a random location will be chosen. - 0 - start - center - 1 - - - - - - - - end - center - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/PixelWheel.ui b/resources/ui/gtk3/PixelWheel.ui deleted file mode 100644 index 16c6008..0000000 --- a/resources/ui/gtk3/PixelWheel.ui +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - 2000 - 100 - 1 - 100 - - - - 50 - 1 - 1 - 10 - - - - 50 - 1 - 1 - 10 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - pixel-wheel-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Spoke Count - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - pixel-wheel-spoke-count - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Pixel Size - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - pixel-wheel-pixel-size - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/PixelWipe.ui b/resources/ui/gtk3/PixelWipe.ui deleted file mode 100644 index 6ef7f40..0000000 --- a/resources/ui/gtk3/PixelWipe.ui +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - 5000 - 100 - 1 - 100 - - - - 360 - 0 - 1 - 10 - - - - 50 - 1 - 1 - 10 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - pixel-wipe-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Pixel Size - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - pixel-wipe-pixel-size - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/Pixelate.ui b/resources/ui/gtk3/Pixelate.ui deleted file mode 100644 index a81d514..0000000 --- a/resources/ui/gtk3/Pixelate.ui +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - 10000 - 100 - 1 - 100 - - - - 100 - 1 - 1 - 10 - - - - 50 - 1 - 1 - 10 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - pixelate-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Noise - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - pixelate-noise - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Pixel Size - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - pixelate-pixel-size - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/Portal.ui b/resources/ui/gtk3/Portal.ui deleted file mode 100644 index 2b8fd9f..0000000 --- a/resources/ui/gtk3/Portal.ui +++ /dev/null @@ -1,301 +0,0 @@ - - - - - - - - 5000 - 500 - 1 - 100 - - - - 2 - -2 - 0.1 - 1 - - - - 2 - -2 - 0.1 - 1 - - - - 100 - 1 - 1 - 10 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - portal-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Rotation Speed - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - portal-rotation-speed - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Whirling - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - portal-whirling - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Details - 0 - start - center - 1 - - - - - end - center - 1 - 1 - left - 300 - portal-details - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/TVEffect.ui b/resources/ui/gtk3/TVEffect.ui deleted file mode 100644 index 7b8902a..0000000 --- a/resources/ui/gtk3/TVEffect.ui +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - 10000 - 100 - 1 - 100 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - tv-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/TVGlitch.ui b/resources/ui/gtk3/TVGlitch.ui deleted file mode 100644 index 144d48e..0000000 --- a/resources/ui/gtk3/TVGlitch.ui +++ /dev/null @@ -1,297 +0,0 @@ - - - - - - - - 2000 - 100 - 1 - 100 - - - - 10 - 0.1 - 0.01 - 0.1 - - - - 10 - 0.1 - 0.01 - 0.1 - - - - 10 - 0.1 - 0.01 - 0.1 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - tv-glitch-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - tv-glitch-scale - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Strength - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - tv-glitch-strength - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Speed - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - tv-glitch-speed - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/Wisps.ui b/resources/ui/gtk3/Wisps.ui deleted file mode 100644 index 694549f..0000000 --- a/resources/ui/gtk3/Wisps.ui +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - - 10000 - 100 - 1 - 100 - - - - 10 - 0.1 - 0.01 - 0.1 - - - - vertical - - - - - - none - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - wisps-animation-time - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - wisps-scale - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - - - Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/apparition.ui b/resources/ui/gtk3/apparition.ui new file mode 100644 index 0000000..d217042 --- /dev/null +++ b/resources/ui/gtk3/apparition.ui @@ -0,0 +1,281 @@ + + + + + + + + 2000 + 100 + 10 + 100 + + + + 1 + 0 + 0.01 + 0.1 + + + + 10 + -10 + 0.1 + 1 + + + + 10 + 0 + 0.1 + 1 + + + + 1 + 0 + 0.01 + 0.1 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + apparition-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Randomness + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + apparition-randomness + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Twirl Intensity + 0 + start + center + 1 + + + + + end + center + 1 + 1 + left + 300 + apparition-twirl-intensity + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Shake Intensity + 0 + start + center + 1 + + + + + end + center + 1 + 1 + left + 300 + apparition-shake-intensity + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Suction Intensity + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + apparition-suction-intensity + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/doom.ui b/resources/ui/gtk3/doom.ui new file mode 100644 index 0000000..2bf8fc3 --- /dev/null +++ b/resources/ui/gtk3/doom.ui @@ -0,0 +1,229 @@ + + + + + + + + 10000 + 100 + 1 + 100 + + + + 50 + 1 + 1 + 10 + + + + 50 + 1 + 1 + 10 + + + + 50 + 1 + 1 + 10 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + doom-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Horizontal Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + doom-horizontal-scale + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Vertical Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + doom-vertical-scale + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Pixel Size + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + doom-pixel-size + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/effectPage.ui b/resources/ui/gtk3/effectPage.ui deleted file mode 100644 index 927a8d2..0000000 --- a/resources/ui/gtk3/effectPage.ui +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk3/energize-a.ui b/resources/ui/gtk3/energize-a.ui new file mode 100644 index 0000000..10ffe58 --- /dev/null +++ b/resources/ui/gtk3/energize-a.ui @@ -0,0 +1,167 @@ + + + + + + + + 10000 + 100 + 1 + 100 + + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + energize-a-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + energize-a-scale + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/energize-b.ui b/resources/ui/gtk3/energize-b.ui new file mode 100644 index 0000000..8e8709f --- /dev/null +++ b/resources/ui/gtk3/energize-b.ui @@ -0,0 +1,168 @@ + + + + + + + + 10000 + 100 + 1 + 100 + + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + energize-b-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + energize-b-scale + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/fire.ui b/resources/ui/gtk3/fire.ui new file mode 100644 index 0000000..010fb6a --- /dev/null +++ b/resources/ui/gtk3/fire.ui @@ -0,0 +1,337 @@ + + + + + + + + 10000 + 100 + 1 + 100 + + + + 3 + 0.1 + 0.01 + 0.1 + + + + 2.0 + -2.0 + 0.01 + 0.1 + + + + + + + none + + + + 0 + + + + + Presets + 0 + start + center + 1 + + + + + + + 8 + + + Choose a Preset + + + + + pan-down-symbolic + 1 + + + + + + + + + + + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + fire-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + fire-scale + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Speed + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + fire-movement-speed + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + vertical + 3 + + + 3D Noise + 0 + start + center + 1 + + + + + Creates a more dynamic fire but requires more GPU power. + 0 + start + center + 1 + + + + + + + + end + center + 8 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Gradient + 0 + start + center + 1 + + + + + 1 + 1 + + + + + 1 + 1 + + + + + 1 + 1 + + + + + 1 + 1 + + + + + 1 + 1 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/glide.ui b/resources/ui/gtk3/glide.ui new file mode 100644 index 0000000..57a259c --- /dev/null +++ b/resources/ui/gtk3/glide.ui @@ -0,0 +1,281 @@ + + + + + + + + 2000 + 100 + 1 + 100 + + + + 1 + 0.1 + 0.01 + 0.1 + + + + 1 + 0 + 0.01 + 0.1 + + + + 1 + -1 + 0.01 + 0.1 + + + + 1 + -1 + 0.01 + 0.1 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + glide-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + glide-scale + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Squish + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + glide-squish + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Tilt + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + glide-tilt + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Shift + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + glide-shift + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/glitch.ui b/resources/ui/gtk3/glitch.ui new file mode 100644 index 0000000..a8c45c3 --- /dev/null +++ b/resources/ui/gtk3/glitch.ui @@ -0,0 +1,271 @@ + + + + + + + + 2000 + 100 + 1 + 100 + + + + 10 + 0.1 + 0.01 + 0.1 + + + + 10 + 0.1 + 0.01 + 0.1 + + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + glitch-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + glitch-scale + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Strength + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + glitch-strength + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Speed + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + glitch-speed + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/hexagon.ui b/resources/ui/gtk3/hexagon.ui new file mode 100644 index 0000000..5b4bd68 --- /dev/null +++ b/resources/ui/gtk3/hexagon.ui @@ -0,0 +1,320 @@ + + + + + + + + 10000 + 100 + 1 + 100 + + + + 10 + 0.1 + 0.01 + 0.1 + + + + 10 + 0 + 0.1 + 1 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + hexagon-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + hexagon-scale + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Mesh Line Width + 0 + start + center + 1 + + + + + end + center + 1 + 1 + left + 300 + hexagon-line-width + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Line Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Glow Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + vertical + 3 + + + Additive Blending + 0 + start + center + 1 + + + + + You may want to enable this for dark window themes. + 0 + start + center + 1 + + + + + + + + end + center + 8 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/incinerate.ui b/resources/ui/gtk3/incinerate.ui new file mode 100644 index 0000000..c31d869 --- /dev/null +++ b/resources/ui/gtk3/incinerate.ui @@ -0,0 +1,278 @@ + + + + + + + + 10000 + 100 + 1 + 100 + + + + 10 + 0.1 + 0.01 + 0.1 + + + + 1 + 0 + 0.01 + 0.1 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + incinerate-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + incinerate-scale + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Turbulence + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + incinerate-turbulence + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + vertical + 3 + + + Start at Pointer + 0 + start + center + 1 + + + + + If disabled, a random location will be chosen. + 0 + start + center + 1 + + + + + + + + end + center + 8 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/pixel-wheel.ui b/resources/ui/gtk3/pixel-wheel.ui new file mode 100644 index 0000000..90866dc --- /dev/null +++ b/resources/ui/gtk3/pixel-wheel.ui @@ -0,0 +1,177 @@ + + + + + + + + 2000 + 100 + 1 + 100 + + + + 50 + 1 + 1 + 10 + + + + 50 + 1 + 1 + 10 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + pixel-wheel-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Spoke Count + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + pixel-wheel-spoke-count + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Pixel Size + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + pixel-wheel-pixel-size + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/pixel-wipe.ui b/resources/ui/gtk3/pixel-wipe.ui new file mode 100644 index 0000000..297fbe5 --- /dev/null +++ b/resources/ui/gtk3/pixel-wipe.ui @@ -0,0 +1,132 @@ + + + + + + + + 5000 + 100 + 1 + 100 + + + + 360 + 0 + 1 + 10 + + + + 50 + 1 + 1 + 10 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + pixel-wipe-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Pixel Size + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + pixel-wipe-pixel-size + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/pixelate.ui b/resources/ui/gtk3/pixelate.ui new file mode 100644 index 0000000..1deacb5 --- /dev/null +++ b/resources/ui/gtk3/pixelate.ui @@ -0,0 +1,177 @@ + + + + + + + + 10000 + 100 + 1 + 100 + + + + 100 + 1 + 1 + 10 + + + + 50 + 1 + 1 + 10 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + pixelate-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Noise + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + pixelate-noise + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Pixel Size + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + pixelate-pixel-size + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/portal.ui b/resources/ui/gtk3/portal.ui new file mode 100644 index 0000000..128347f --- /dev/null +++ b/resources/ui/gtk3/portal.ui @@ -0,0 +1,271 @@ + + + + + + + + 5000 + 500 + 1 + 100 + + + + 2 + -2 + 0.1 + 1 + + + + 2 + -2 + 0.1 + 1 + + + + 100 + 1 + 1 + 10 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + portal-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Rotation Speed + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + portal-rotation-speed + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Whirling + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + portal-whirling + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Details + 0 + start + center + 1 + + + + + end + center + 1 + 1 + left + 300 + portal-details + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/prefs.ui b/resources/ui/gtk3/prefs.ui index 6616832..f7999fd 100644 --- a/resources/ui/gtk3/prefs.ui +++ b/resources/ui/gtk3/prefs.ui @@ -8,9 +8,7 @@ SPDX-License-Identifier: GPL-3.0-or-later - - - + main-menu 1 @@ -23,308 +21,463 @@ SPDX-License-Identifier: GPL-3.0-or-later - - vertical - 30 - 30 - + + + center + 1 - - center - burn-my-windows-symbolic - 128 - - - - - - Welcome to Burn-My-Windows! - 8 - 6 - - - - - - - If you like this extension, recommend it to your friends :) - 36 - - - - - - + + profile-menu + 1 - - none - + + 1 + 6 - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - vertical - 3 - - - Open Window Animation - 0 - start - center - 1 - - - - - If multiple are selected, one is chosen randomly. - 0 - start - center - 1 - - - - - - - - open-effect-menu - - - 8 - - - Choose Effects - - - - - pan-down-symbolic - 1 - - - - - - - - + + 1 - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - vertical - 3 - - - Close Window Animation - 0 - start - center - 1 - - - - - If multiple are selected, one is chosen randomly. - 0 - start - center - 1 - - - - - - - - close-effect-menu - - - 8 - - - Choose Effects - - - - - pan-down-symbolic - 1 - - - - - - - - + + pan-down-symbolic + 1 + 1 - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Also Add Effects to Dialogs - 0 - start - center - 1 - - - - - end - center - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Disable on Battery Power - 0 - start - center - 1 - - - - - end - center - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - - - - 10 - 10 - 10 - 10 - 0 - - - 8 - - - Disable in Power-Save Mode - 0 - start - center - 1 - - - - - end - center - - - - - - - edit-clear-symbolic - 1 - - - Reset to Default Value - - - - - - - - + + + center + 1 + + + bmw-edit-profile-symbolic + 1 + 1 + + + + + + + + + over-down-up + + + + vertical + + + + info + false + true + + + + + Burn-My-Windows has been updated! + 6 + + + + + + + + + View Changelog + prefs.changelog + + + + + + update-info-button + + + + + + + never + true + + + + vertical + 20 + 20 + 20 + 20 + 5 + + + + Effect Settings + start + + + + + + + If multiple are selected, one is chosen randomly. + start + + + + + + + + none + + + + + + + + + + + + + + + + + vertical + 20 + 20 + 20 + 20 + 5 + + + + + Effect Profile Constraints + start + + + + + + + Define when the current effect settings should be used. + start + + + + + + 5 + 15 + + + none + + + + + + 0 + + + + + Application + 0 + start + center + 1 + + + + + + center + + + + + 300 + Any + + + + + + center + + + bmw-select-app-symbolic + 1 + + + + + + + + + + + + + + 0 + + + + + Animation Type + 0 + start + center + 1 + + + + + 200 + + Any + Opening Windows + Closing Windows + + + + + + + + + + + 0 + + + + + Window Type + 0 + start + center + 1 + + + + + 200 + + Any + Normal Windows + Dialog Windows + + + + + + + + + + + 0 + + + + + Color Scheme + 0 + start + center + 1 + + + + + 200 + + Any + Default Color Scheme + Dark Color Scheme + + + + + + + + + + + 0 + + + + + Power Mode + 0 + start + center + 1 + + + + + 200 + + Any + On Battery + Plugged In + + + + + + + + + + + 0 + + + + + Power Profile + 0 + start + center + 1 + + + + + 200 + + Any + Power-Saver Mode + Balanced Mode + Performance Mode + Power Saver or Balanced + Balanced or Performance + + + + + + + + + + + + + + + + Advanced Profile Options + start + + + + + + + 5 + 15 + + + none + + + + + + 0 + + + + + vertical + 3 + + + High Priority + 0 + start + center + 1 + + + + + Force using this profile even if it has less constraints than another matching profile. + 0 + start + center + 1 + end + + + + + + + + center + + + + + + + + + + + + + + + prefs.profile-delete + Delete this Profile... + start + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/tv-glitch.ui b/resources/ui/gtk3/tv-glitch.ui new file mode 100644 index 0000000..c2a8518 --- /dev/null +++ b/resources/ui/gtk3/tv-glitch.ui @@ -0,0 +1,271 @@ + + + + + + + + 2000 + 100 + 1 + 100 + + + + 10 + 0.1 + 0.01 + 0.1 + + + + 10 + 0.1 + 0.01 + 0.1 + + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + tv-glitch-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + tv-glitch-scale + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Strength + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + tv-glitch-strength + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Speed + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + tv-glitch-speed + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/tv.ui b/resources/ui/gtk3/tv.ui new file mode 100644 index 0000000..66edc99 --- /dev/null +++ b/resources/ui/gtk3/tv.ui @@ -0,0 +1,115 @@ + + + + + + + + 10000 + 100 + 1 + 100 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + tv-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk3/wisps.ui b/resources/ui/gtk3/wisps.ui new file mode 100644 index 0000000..5029d44 --- /dev/null +++ b/resources/ui/gtk3/wisps.ui @@ -0,0 +1,167 @@ + + + + + + + + 10000 + 100 + 1 + 100 + + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + none + + + + 0 + + + 8 + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + wisps-animation-time + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + 8 + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + wisps-scale + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + + + edit-clear-symbolic + 1 + + + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/Apparition.ui b/resources/ui/gtk4/Apparition.ui deleted file mode 100644 index dccb962..0000000 --- a/resources/ui/gtk4/Apparition.ui +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 2000 - 100 - 10 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Randomness - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 1 - 0 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Twirl Intensity - 0 - start - center - 1 - - - - - end - center - 1 - 1 - left - 300 - - - 10 - -10 - 0.1 - 1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Shake Intensity - 0 - start - center - 1 - - - - - end - center - 1 - 1 - left - 300 - - - 10 - 0 - 0.1 - 1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Suction Intensity - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 1 - 0 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/BrokenGlass.ui b/resources/ui/gtk4/BrokenGlass.ui deleted file mode 100644 index a17c8af..0000000 --- a/resources/ui/gtk4/BrokenGlass.ui +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 5 - 0.2 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Gravity - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 2.0 - -2.0 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Blow Force - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 2.0 - -2.0 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - vertical - 3 - - - Shatter From Pointer Location - 0 - start - center - 1 - - - - - The shards will fly away from where your mouse pointer was when closing the window. - 0 - start - center - 1 - 1 - - - - - - - - end - center - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/Doom.ui b/resources/ui/gtk4/Doom.ui deleted file mode 100644 index 13401c5..0000000 --- a/resources/ui/gtk4/Doom.ui +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Horizontal Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 50 - 1 - 1 - 10 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Vertical Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 50 - 1 - 1 - 10 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Pixel Size - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 50 - 1 - 1 - 10 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/EnergizeA.ui b/resources/ui/gtk4/EnergizeA.ui deleted file mode 100644 index 166f493..0000000 --- a/resources/ui/gtk4/EnergizeA.ui +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 10 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/EnergizeB.ui b/resources/ui/gtk4/EnergizeB.ui deleted file mode 100644 index 1e6e296..0000000 --- a/resources/ui/gtk4/EnergizeB.ui +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 10 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/Fire.ui b/resources/ui/gtk4/Fire.ui deleted file mode 100644 index 724c882..0000000 --- a/resources/ui/gtk4/Fire.ui +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - - - vertical - - - - 20 - - - none - 1 - - - - - 0 - - - - - Presets - 0 - start - center - 1 - - - - - Choose a Preset - - - - - - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 3 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Speed - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 2.0 - -2.0 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - vertical - 3 - - - 3D Noise - 0 - start - center - 1 - - - - - Creates a more dynamic fire but requires more GPU power. - 0 - start - center - 1 - - - - - - - - end - center - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Gradient - 0 - start - center - 1 - - - - - 1 - 1 - - - - - 1 - 1 - - - - - 1 - 1 - - - - - 1 - 1 - - - - - 1 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/Glide.ui b/resources/ui/gtk4/Glide.ui deleted file mode 100644 index e52edb0..0000000 --- a/resources/ui/gtk4/Glide.ui +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 2000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 1 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Squish - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 1 - 0 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Tilt - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 1 - -1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Shift - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 1 - -1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/Glitch.ui b/resources/ui/gtk4/Glitch.ui deleted file mode 100644 index ae0553e..0000000 --- a/resources/ui/gtk4/Glitch.ui +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 2000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 10 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Strength - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 10 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Speed - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 10 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/Hexagon.ui b/resources/ui/gtk4/Hexagon.ui deleted file mode 100644 index f0507bc..0000000 --- a/resources/ui/gtk4/Hexagon.ui +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 10 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Mesh Line Width - 0 - start - center - 1 - - - - - end - center - 1 - 1 - left - 300 - - - 10 - 0 - 0.1 - 1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Line Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Glow Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - vertical - 3 - - - Additive Blending - 0 - start - center - 1 - - - - - You may want to enable this for dark window themes. - 0 - start - center - 1 - - - - - - - - end - center - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/Incinerate.ui b/resources/ui/gtk4/Incinerate.ui deleted file mode 100644 index 4d847cb..0000000 --- a/resources/ui/gtk4/Incinerate.ui +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 10 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Turbulence - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 1 - 0 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - vertical - 3 - - - Start at Pointer - 0 - start - center - 1 - - - - - If disabled, a random location will be chosen. - 0 - start - center - 1 - - - - - - - - end - center - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/Matrix.ui b/resources/ui/gtk4/Matrix.ui deleted file mode 100644 index 22bbc78..0000000 --- a/resources/ui/gtk4/Matrix.ui +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 50 - 5 - 1 - 5 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Randomness - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 1.0 - 0.0 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Vertical Overshooting - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 1.0 - 0.0 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Trail Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Tip Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/PixelWheel.ui b/resources/ui/gtk4/PixelWheel.ui deleted file mode 100644 index 32b9a77..0000000 --- a/resources/ui/gtk4/PixelWheel.ui +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 2000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Spoke Count - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 50 - 1 - 1 - 10 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Pixel Size - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 50 - 1 - 1 - 10 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/PixelWipe.ui b/resources/ui/gtk4/PixelWipe.ui deleted file mode 100644 index 10e01aa..0000000 --- a/resources/ui/gtk4/PixelWipe.ui +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 5000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Pixel Size - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 50 - 1 - 1 - 10 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/Pixelate.ui b/resources/ui/gtk4/Pixelate.ui deleted file mode 100644 index 53d070a..0000000 --- a/resources/ui/gtk4/Pixelate.ui +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Noise - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 100 - 1 - 1 - 10 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Pixel Size - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 50 - 1 - 1 - 10 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/Portal.ui b/resources/ui/gtk4/Portal.ui deleted file mode 100644 index 66c2c6a..0000000 --- a/resources/ui/gtk4/Portal.ui +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 5000 - 500 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Whirling - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 2 - -2 - 0.1 - 1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Rotation Speed - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 2 - -2 - 0.1 - 1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Details - 0 - start - center - 1 - - - - - end - center - 1 - 1 - left - 300 - - - 100 - 1 - 1 - 10 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/SnapOfDisintegration.ui b/resources/ui/gtk4/SnapOfDisintegration.ui deleted file mode 100644 index 7d5e79f..0000000 --- a/resources/ui/gtk4/SnapOfDisintegration.ui +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 500 - 10 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 20 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/TRexAttack.ui b/resources/ui/gtk4/TRexAttack.ui deleted file mode 100644 index 30cd0b5..0000000 --- a/resources/ui/gtk4/TRexAttack.ui +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Claw Scratch Scale - 0 - start - center - 1 - - - - - end - center - 1 - 1 - left - 300 - - - 10 - 0.1 - 0.1 - 1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Claw Scratch Count - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 50 - 1 - 1 - 10 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Warp Effect - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 1 - 0 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Flash Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/TVEffect.ui b/resources/ui/gtk4/TVEffect.ui deleted file mode 100644 index 6e0b7f3..0000000 --- a/resources/ui/gtk4/TVEffect.ui +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/TVGlitch.ui b/resources/ui/gtk4/TVGlitch.ui deleted file mode 100644 index dc12bf8..0000000 --- a/resources/ui/gtk4/TVGlitch.ui +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 2000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 10 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Strength - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 10 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Speed - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 10 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Color - 0 - start - center - 1 - - - - - 1 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/Wisps.ui b/resources/ui/gtk4/Wisps.ui deleted file mode 100644 index 6acd526..0000000 --- a/resources/ui/gtk4/Wisps.ui +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - - vertical - - - - - - none - 1 - - - - - 0 - - - - - Animation Time [ms] - 0 - start - center - 1 - - - - - end - center - 1 - 0 - left - 300 - - - 10000 - 100 - 1 - 100 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Scale - 0 - start - center - 1 - - - - - end - center - 1 - 2 - left - 300 - - - 10 - 0.1 - 0.01 - 0.1 - - - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Color - 0 - start - center - 1 - - - - - 0 - 1 - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/apparition.ui b/resources/ui/gtk4/apparition.ui new file mode 100644 index 0000000..87da821 --- /dev/null +++ b/resources/ui/gtk4/apparition.ui @@ -0,0 +1,249 @@ + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 2000 + 100 + 10 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Randomness + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 1 + 0 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Twirl Intensity + 0 + start + center + 1 + + + + + end + center + 1 + 1 + left + 300 + + + 10 + -10 + 0.1 + 1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Shake Intensity + 0 + start + center + 1 + + + + + end + center + 1 + 1 + left + 300 + + + 10 + 0 + 0.1 + 1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Suction Intensity + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 1 + 0 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/broken-glass.ui b/resources/ui/gtk4/broken-glass.ui new file mode 100644 index 0000000..ab57fa4 --- /dev/null +++ b/resources/ui/gtk4/broken-glass.ui @@ -0,0 +1,259 @@ + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 5 + 0.2 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Gravity + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 2.0 + -2.0 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Blow Force + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 2.0 + -2.0 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + vertical + 3 + + + Shatter From Pointer Location + 0 + start + center + 1 + + + + + The shards will fly away from where your mouse pointer was when closing the window. + 0 + start + center + 1 + 1 + + + + + + + + end + center + 8 + 8 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/doom.ui b/resources/ui/gtk4/doom.ui new file mode 100644 index 0000000..eca1717 --- /dev/null +++ b/resources/ui/gtk4/doom.ui @@ -0,0 +1,203 @@ + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Horizontal Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 50 + 1 + 1 + 10 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Vertical Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 50 + 1 + 1 + 10 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Pixel Size + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 50 + 1 + 1 + 10 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/effectPage.ui b/resources/ui/gtk4/effectPage.ui deleted file mode 100644 index 6241b13..0000000 --- a/resources/ui/gtk4/effectPage.ui +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/resources/ui/gtk4/energize-a.ui b/resources/ui/gtk4/energize-a.ui new file mode 100644 index 0000000..19e1ee6 --- /dev/null +++ b/resources/ui/gtk4/energize-a.ui @@ -0,0 +1,150 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/energize-b.ui b/resources/ui/gtk4/energize-b.ui new file mode 100644 index 0000000..ae77456 --- /dev/null +++ b/resources/ui/gtk4/energize-b.ui @@ -0,0 +1,150 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/fire.ui b/resources/ui/gtk4/fire.ui new file mode 100644 index 0000000..9b77741 --- /dev/null +++ b/resources/ui/gtk4/fire.ui @@ -0,0 +1,295 @@ + + + + + + + + + + none + + + + 0 + + + + + Presets + 0 + start + center + 1 + + + + + Choose a Preset + + + + + + + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 3 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Speed + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 2.0 + -2.0 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + vertical + 3 + + + 3D Noise + 0 + start + center + 1 + + + + + Creates a more dynamic fire but requires more GPU power. + 0 + start + center + 1 + + + + + + + + end + center + 8 + 8 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Gradient + 0 + start + center + 1 + + + + + 1 + 1 + + + + + 1 + 1 + + + + + 1 + 1 + + + + + 1 + 1 + + + + + 1 + 1 + 8 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/glide.ui b/resources/ui/gtk4/glide.ui new file mode 100644 index 0000000..24d998e --- /dev/null +++ b/resources/ui/gtk4/glide.ui @@ -0,0 +1,252 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 2000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 1 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Squish + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 1 + 0 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Tilt + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 1 + -1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Shift + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 1 + -1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/glitch.ui b/resources/ui/gtk4/glitch.ui new file mode 100644 index 0000000..7701849 --- /dev/null +++ b/resources/ui/gtk4/glitch.ui @@ -0,0 +1,242 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 2000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Strength + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Speed + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/hexagon.ui b/resources/ui/gtk4/hexagon.ui new file mode 100644 index 0000000..8469298 --- /dev/null +++ b/resources/ui/gtk4/hexagon.ui @@ -0,0 +1,288 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Mesh Line Width + 0 + start + center + 1 + + + + + end + center + 1 + 1 + left + 300 + + + 10 + 0 + 0.1 + 1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Line Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Glow Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + vertical + 3 + + + Additive Blending + 0 + start + center + 1 + + + + + You may want to enable this for dark window themes. + 0 + start + center + 1 + + + + + + + + end + center + 8 + 8 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/incinerate.ui b/resources/ui/gtk4/incinerate.ui new file mode 100644 index 0000000..88a6136 --- /dev/null +++ b/resources/ui/gtk4/incinerate.ui @@ -0,0 +1,251 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Turbulence + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 1 + 0 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + vertical + 3 + + + Start at Pointer + 0 + start + center + 1 + + + + + If disabled, a random location will be chosen. + 0 + start + center + 1 + + + + + + + + end + center + 8 + 8 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/matrix.ui b/resources/ui/gtk4/matrix.ui new file mode 100644 index 0000000..f441d5e --- /dev/null +++ b/resources/ui/gtk4/matrix.ui @@ -0,0 +1,279 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 50 + 5 + 1 + 5 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Randomness + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 1.0 + 0.0 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Vertical Overshooting + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 1.0 + 0.0 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Trail Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Tip Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/pixel-wheel.ui b/resources/ui/gtk4/pixel-wheel.ui new file mode 100644 index 0000000..4dcdd4a --- /dev/null +++ b/resources/ui/gtk4/pixel-wheel.ui @@ -0,0 +1,159 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 2000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Spoke Count + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 50 + 1 + 1 + 10 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Pixel Size + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 50 + 1 + 1 + 10 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/pixel-wipe.ui b/resources/ui/gtk4/pixel-wipe.ui new file mode 100644 index 0000000..67549cc --- /dev/null +++ b/resources/ui/gtk4/pixel-wipe.ui @@ -0,0 +1,113 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 5000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Pixel Size + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 50 + 1 + 1 + 10 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/pixelate.ui b/resources/ui/gtk4/pixelate.ui new file mode 100644 index 0000000..6dc5d58 --- /dev/null +++ b/resources/ui/gtk4/pixelate.ui @@ -0,0 +1,159 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Noise + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 100 + 1 + 1 + 10 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Pixel Size + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 50 + 1 + 1 + 10 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/portal.ui b/resources/ui/gtk4/portal.ui new file mode 100644 index 0000000..f339557 --- /dev/null +++ b/resources/ui/gtk4/portal.ui @@ -0,0 +1,242 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 5000 + 500 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Whirling + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 2 + -2 + 0.1 + 1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Rotation Speed + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 2 + -2 + 0.1 + 1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Details + 0 + start + center + 1 + + + + + end + center + 1 + 1 + left + 300 + + + 100 + 1 + 1 + 10 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/prefs.ui b/resources/ui/gtk4/prefs.ui index b148a91..1f54c70 100644 --- a/resources/ui/gtk4/prefs.ui +++ b/resources/ui/gtk4/prefs.ui @@ -8,251 +8,432 @@ SPDX-License-Identifier: GPL-3.0-or-later - - - + main-menu heart-filled-symbolic - - vertical - 60 - 60 - + + + center - + + profile-menu + + + + + bmw-edit-profile-symbolic center - burn-my-windows-symbolic - 128 + + + + + over-down-up - - Welcome to Burn-My-Windows! - 8 - 6 - - - + + vertical - - - If you like this extension, recommend it to your friends :) - 36 - - - - - - - none - 1 - - - + + info + false + true - - 0 + + Burn-My-Windows has been updated! + 6 + + + + + View Changelog + prefs.changelog + + + + update-info-button + + + + + + + never + true + + + + vertical + 20 + 20 + 20 + 20 + 5 + - + + Effect Settings + start + + + + + + + If multiple are selected, one is chosen randomly. + start + + + + + + 6 - - vertical - 3 - - - Open Window Animation - 0 - start - center - 1 - - - - - If multiple are selected, one is chosen randomly. - 0 - start - center - 1 - - - - - - - - Choose Effects - open-effect-menu + + none - - - - - 0 - - - - - vertical - 3 - - - Close Window Animation - 0 - start - center - 1 - - - - - If multiple are selected, one is chosen randomly. - 0 - start - center - 1 - - - - - - - - Choose Effects - close-effect-menu - - - - - - - - 0 - - - - - Also Add Effects to Dialogs - 0 - start - center - 1 - - - - - end - center - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Disable on Battery Power - 0 - start - center - 1 - - - - - end - center - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - - - - - 0 - - - - - Disable in Power-Save Mode - 0 - start - center - 1 - - - - - end - center - - - - - edit-clear-symbolic - Reset to Default Value - - - - - - - + + + + + vertical + 20 + 20 + 20 + 20 + 5 + + + + + Effect Profile Constraints + start + + + + + + + Define when the current effect settings should be used. + start + + + + + + 5 + 15 + + + none + 1 + + + + + 0 + + + + + Application + 0 + start + center + 1 + + + + + + center + + + + + 300 + Any + + + + + + bmw-select-app-symbolic + center + + + + + + + + + + + + 0 + + + + + Animation Type + 0 + start + center + 1 + + + + + 200 + + Any + Opening Windows + Closing Windows + + + + + + + + + + + 0 + + + + + Window Type + 0 + start + center + 1 + + + + + 200 + + Any + Normal Windows + Dialog Windows + + + + + + + + + + + 0 + + + + + Color Scheme + 0 + start + center + 1 + + + + + 200 + + Any + Default Color Scheme + Dark Color Scheme + + + + + + + + + + + 0 + + + + + Power Mode + 0 + start + center + 1 + + + + + 200 + + Any + On Battery + Plugged In + + + + + + + + + + + 0 + + + + + Power Profile + 0 + start + center + 1 + + + + + 200 + + Any + Power-Saver Mode + Balanced Mode + Performance Mode + Power Saver or Balanced + Balanced or Performance + + + + + + + + + + + + + + + + Advanced Profile Options + start + + + + + + + 5 + 15 + + + none + 1 + + + + + 0 + + + + + vertical + 3 + + + High Priority + 0 + start + center + 1 + + + + + Force using this profile even if it has less constraints than another matching profile. + 0 + start + center + 1 + end + + + + + + + + center + + + + + + + + + + + + + + + prefs.profile-delete + Delete this Profile... + start + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/snap.ui b/resources/ui/gtk4/snap.ui new file mode 100644 index 0000000..707b0a9 --- /dev/null +++ b/resources/ui/gtk4/snap.ui @@ -0,0 +1,150 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 500 + 10 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 20 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/trex.ui b/resources/ui/gtk4/trex.ui new file mode 100644 index 0000000..c90903d --- /dev/null +++ b/resources/ui/gtk4/trex.ui @@ -0,0 +1,242 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Claw Scratch Scale + 0 + start + center + 1 + + + + + end + center + 1 + 1 + left + 300 + + + 10 + 0.1 + 0.1 + 1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Claw Scratch Count + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 50 + 1 + 1 + 10 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Warp Effect + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 1 + 0 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Flash Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/tv-glitch.ui b/resources/ui/gtk4/tv-glitch.ui new file mode 100644 index 0000000..858bec1 --- /dev/null +++ b/resources/ui/gtk4/tv-glitch.ui @@ -0,0 +1,242 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 2000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Strength + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Speed + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/tv.ui b/resources/ui/gtk4/tv.ui new file mode 100644 index 0000000..f345a4a --- /dev/null +++ b/resources/ui/gtk4/tv.ui @@ -0,0 +1,104 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 1 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/ui/gtk4/wisps.ui b/resources/ui/gtk4/wisps.ui new file mode 100644 index 0000000..e5d3a37 --- /dev/null +++ b/resources/ui/gtk4/wisps.ui @@ -0,0 +1,150 @@ + + + + + + + + + + + none + + + + 0 + + + + + Animation Time [ms] + 0 + start + center + 1 + + + + + end + center + 1 + 0 + left + 300 + + + 10000 + 100 + 1 + 100 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Scale + 0 + start + center + 1 + + + + + end + center + 1 + 2 + left + 300 + + + 10 + 0.1 + 0.01 + 0.1 + + + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + 0 + + + + + Color + 0 + start + center + 1 + + + + + 0 + 1 + 8 + 8 + 250 + + + + + edit-clear-symbolic + Reset to Default Value + + + + + + + + + + + + + + \ No newline at end of file diff --git a/schemas/org.gnome.shell.extensions.burn-my-windows-profile.gschema.xml b/schemas/org.gnome.shell.extensions.burn-my-windows-profile.gschema.xml new file mode 100644 index 0000000..703598e --- /dev/null +++ b/schemas/org.gnome.shell.extensions.burn-my-windows-profile.gschema.xml @@ -0,0 +1,792 @@ + + + + + + + + + + + + + + "" + Profile App + The application name for which the current effect settings should be used. + + + + 0 + + Profile Animation Type + The animation types for which the current effect settings should be used. + + + + 0 + + Profile Window Type + The window types for which the current effect settings should be used. + + + + 0 + + Profile Color Scheme + The desktop color schemes for which the current effect settings should be used. + + + + 0 + + Profile Power Mode + The power mode for which the current effect settings should be used. + + + + 0 + + Profile Power Profile + The power profiles in which the current effect settings should be used. + + + + false + Profile High Priority + Force using this profile even if it has less constraints than another matching profile. + + + + + + + + false + Apparition Enable Effect + Use the apparition effect. + + + + 300 + Apparition Animation Time + The time the apparition effect takes. + + + + 0.5 + Apparition Randomness + The amount of randomness of the apparition effect. + + + + 5.0 + Apparition Twirl Intensity + The amount of twirling of the apparition effect. + + + + 3.0 + Apparition Shake Intensity + The amount of shaking of the apparition effect. + + + + 0.75 + Apparition Suction Intensity + The amount of suction of the apparition effect. + + + + + + + + + false + Pixelate Enable Effect + Use the Pixelate effect. + + + + 500 + Pixelate Animation Time + The time the Pixelate effect takes. + + + + 40 + Pixelate Noise + The noise of the effect. + + + + 10 + Pixelate Pixel Size + The size of the maximum pixelation. + + + + + + + + + false + Pixel Wipe Enable Effect + Use the Pixel Wipe effect. + + + + 1000 + Pixel Wipe Animation Time + The time the Pixel Wipe effect takes. + + + + 10 + Pixel Wipe Pixel Size + The size of the maximum pixelation. + + + + + + + + false + Pixel Wheel Enable Effect + Use the Pixel Wheel effect. + + + + 300 + Pixel Wheel Animation Time + The time the Pixel Wheel effect takes. + + + + 12 + Pixel Wheel Spoke Count + The number of sections in the wheel. + + + + 10 + Pixel Wheel Pixel Size + The size of the maximum pixelation. + + + + + + + + false + Doom Enable Effect + Use the Doom effect. + + + + 1000 + Doom Animation Time + The time the Doom effect takes. + + + + 10.0 + Doom Horizontal Scale + The X scale of the effect. + + + + 10.0 + Doom Vertical Scale + The Y scale of the effect. + + + + 10 + Doom Pixel Size + The size of the maximum pixelation. + + + + + + + + true + Fire Enable Effect + Use the fire effect. + + + + 1500 + Fire Animation Time + The time the fire effect takes. + + + + 0.5 + Fire Movement Speed + The speed at which the fire moves. + + + + 1.0 + Fire Scale + The size of the fire. + + + + false + Fire 3D Noise + Use a 3D noise for the fire. + + + + "rgba(76, 51, 25, 0.0)" + Fire Color 1 + The first color of the fire gradient. + + + + "rgba(180, 55, 30, 0.7)" + Fire Color 2 + The second color of the fire gradient. + + + + "rgba(255, 76, 38, 0.9)" + Fire Color 3 + The third color of the fire gradient. + + + + "rgba(255, 166, 25, 1)" + Fire Color 4 + The fourth color of the fire gradient. + + + + "rgba(255, 255, 255, 1)" + Fire Color 5 + The fifth color of the fire gradient. + + + + + + + + false + Glide Enable Effect + Use the glide effect. + + + + 250 + Glide Animation Time + The time the glide effect takes. + + + + 0.95 + Glide Scale + The scale of the window. + + + + 0.15 + Glide Squish + The amount of squishing. + + + + -0.3 + Glide Tilt + The amount of tilting. + + + + -0.05 + Glide Shift + The amount of shifting. + + + + + + + + false + Matrix Enable Effect + Use the matrix effect. + + + + 1500 + Matrix Animation Time + The time the matrix effect takes. + + + + 20 + Matrix Scale + The size of the matrix letters. + + + + 1.0 + Matrix Randomness + The randomness of the matrix effect. + + + + "rgb(255, 255, 255)" + Matrix Tip Color + The color of the matrix trail tips. + + + + "rgb(25, 255, 89)" + Matrix Trail Color + The color matrix trails. + + + + 0.25 + Matrix Overshoot + The vertical overshooting of the matrix effect. + + + + + + + + false + TV Enable Effect + Use the tv effect. + + + + 400 + TV Animation Time + The time the tv effect takes. + + + + "rgb(255, 255, 255)" + TV Effect Color + The color of the TV effect. + + + + + + + + false + T-Rex Enable Effect + Use the trex effect. + + + + 1000 + T-Rex Animation Time + The time the trex effect takes. + + + + "rgb(170, 0, 0)" + Claw Scratch Color + The color of the claw scratches. + + + + 1.0 + Claw Scratch Scale + Size of the claw scratches. + + + + 0.15 + Claw Scratch Warp + Intensity of the claw scratch warp effect. + + + + 5 + Claw Scratch Count + Number of claw scratches drawn on top of each other. + + + + + + + + false + Hexagon Enable Effect + Use the Hexagon effect. + + + + 1500 + Hexagon Animation Time + The time the Hexagon effect takes. + + + + 3.0 + Hexagon Scale + The size of the effect. + + + + 2.0 + Hexagon Line Width + The width of the lines. + + + + "rgba(200, 255, 255, 0.5)" + Hexagon Line Color + The color of the lines. + + + + "rgba(20, 80, 255, 0.5)" + Hexagon Glow Color + The color of the glow effect. + + + + true + Hexagon Additive Blending + Use additive blending for the line and the glow. + + + + + + + + false + Incinerate Enable Effect + Use the Incinerate effect. + + + + 2000 + Incinerate Animation Time + The time the Incinerate effect takes. + + + + 1.0 + Incinerate Scale + The scale of the effect. + + + + 0.3 + Incinerate Turbulence + The turbulence of the effect. + + + + "rgb(255, 180, 127)" + Incinerate Color + The color of the effect. + + + + true + Incinerate Use Pointer + Use the pointer location for the incinerate effect. + + + + + + + + false + Energize A Enable Effect + Use the Energize A effect. + + + + 2000 + Energize A Animation Time + The time the Energize A effect takes. + + + + 1.0 + Energize A Scale + The size of the effect. + + + + "rgb(255, 200, 50)" + Energize A Color + The color of the effect. + + + + + + + + false + Energize B Enable Effect + Use the Energize B effect. + + + + 1000 + Energize B Animation Time + The time the Energize B effect takes. + + + + 1.0 + Energize B Scale + The size of the effect. + + + + "rgb(160, 180, 255)" + Energize B Color + The color of the effect. + + + + + + + + + false + Glitch Enable Effect + Use the Glitch effect. + + + + 750 + Glitch Animation Time + The time the Glitch effect takes. + + + + 1.0 + Glitch Scale + The size of the effect. + + + + 2.0 + Glitch Strength + The intensity of the effect. + + + + 2.0 + Glitch Speed + The speed of the effect. + + + + "rgb(100, 160, 255)" + Glitch Color + The color of the effect. + + + + + + + + + false + TV Glitch Enable Effect + Use the TV Glitch effect. + + + + 750 + TV Glitch Animation Time + The time the TV Glitch effect takes. + + + + 1.0 + TV Glitch Scale + The size of the effect. + + + + 2.0 + TV Glitch Strength + The intensity of the effect. + + + + 2.0 + TV Glitch Speed + The speed of the effect. + + + + "rgb(100, 160, 255)" + TV Glitch Color + The color of the effect. + + + + + + + + + false + Wisps Enable Effect + Use the wisps effect. + + + + 1500 + Wisps Animation Time + The time the wisps effect takes. + + + + 1.0 + Wisps Scale + The size of the wisps. + + + + "rgb(255, 100, 200)" + Wisps Effect Color + The color of the wisps effect. + + + + + + + + false + Broken Glass Enable Effect + Use the broken glass effect. + + + + 1000 + Broken Glass Animation Time + The time the broken glass effect takes. + + + + 1.0 + Broken Glass Scale + The size of the broken glass effect. + + + + -1.0 + Broken Glass Gravity + The gravity of the broken glass effect. + + + + 0.5 + Broken Glass Blow Force + The blow force of the broken glass effect. + + + + false + Broken Glass Use Pointer + Use the pointer location for the broken glass effect. + + + + + + + + false + Portal Enable Effect + Use the Portal effect. + + + + 1250 + Portal Animation Time + The time the Portal effect takes. + + + + "rgb(121, 233, 24)" + Portal Color + The color of the effect. + + + + 0.3 + Portal Rotation Speed + The angular speed of the portal. + + + + 1.0 + Portal Whirling + The amount of distortion. + + + + 15.0 + Portal Details + The amount of details in the portal. + + + + + + + + false + Snap Enable Effect + Use the snap effect. + + + + 1500 + Snap Animation Time + The time the snap effect takes. + + + + 3.0 + Snap Scale + The size of the snap effect. + + + + "rgb(50, 40, 35)" + Snap Effect Color + The color of the dust. + + + + + \ No newline at end of file diff --git a/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml b/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml index ffb8800..50fd50e 100644 --- a/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml +++ b/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml @@ -13,34 +13,16 @@ SPDX-License-Identifier: CC0-1.0 - - false - Destroy Dialogs - Set to true to burn dialogs as well. - - - - false - Disable on Battery - Enable effects only if plugged in. - - - - false - Disable on Power Save - Enable effects only if power saver is disabled. - - - + "" - Close Preview Effect - The effect with this nick will be used for the next window-close animation. + Active Profile + The currently active effect profile. - + "" - Open Preview Effect - The effect with this nick will be used for the next window-open animation. + Preview Effect + The effect with this nick will be used for the next window animation. @@ -49,850 +31,16 @@ SPDX-License-Identifier: CC0-1.0 If set to true, all animations will show only one still frame to allow for continuous integration tests. - - - - - - false - Apparition Open Effect - Use the apparition effect for window openeing. - - - - false - Apparition Close Effect - Use the apparition effect for window closing. - - - - 300 - Apparition Animation Time - The time the apparition effect takes. - - - - 0.5 - Apparition Randomness - The amount of randomness of the apparition effect. - - - - 5.0 - Apparition Twirl Intensity - The amount of twirling of the apparition effect. - - - - 3.0 - Apparition Shake Intensity - The amount of shaking of the apparition effect. - - - - 0.75 - Apparition Suction Intensity - The amount of suction of the apparition effect. - - - - - - - - - false - Pixelate Close Effect - Use the Pixelate effect for window closing. - - - - false - Pixelate Open Effect - Use the Pixelate effect for window opening. - - - - 500 - Pixelate Animation Time - The time the Pixelate effect takes. - - - - 40 - Pixelate Noise - The noise of the effect. - - - - 10 - Pixelate Pixel Size - The size of the maximum pixelation. - - - - - - - - - false - Pixel Wipe Close Effect - Use the Pixel Wipe effect for window closing. - - - - false - Pixel Wipe Open Effect - Use the Pixel Wipe effect for window opening. - - - - 1000 - Pixel Wipe Animation Time - The time the Pixel Wipe effect takes. - - - - 10 - Pixel Wipe Pixel Size - The size of the maximum pixelation. - - - - - - - - false - Pixel Wheel Close Effect - Use the Pixel Wheel effect for window closing. - - - - false - Pixel Wheel Open Effect - Use the Pixel Wheel effect for window opening. - - - - 300 - Pixel Wheel Animation Time - The time the Pixel Wheel effect takes. - - - - 12 - Pixel Wheel Spoke Count - The number of sections in the wheel. - - - - 10 - Pixel Wheel Pixel Size - The size of the maximum pixelation. - - - - - - - - false - Doom Close Effect - Use the Doom effect for window closing. - - - - false - Doom Open Effect - Use the Doom effect for window opening. - - - - 1000 - Doom Animation Time - The time the Doom effect takes. - - - - 10.0 - Doom Horizontal Scale - The X scale of the effect. - - - - 10.0 - Doom Vertical Scale - The Y scale of the effect. - - - - 10 - Doom Pixel Size - The size of the maximum pixelation. - - - - - - - - true - Fire Close Effect - Use the fire effect for window closing. - - - - false - Fire Open Effect - Use the fire effect for window opening. - - - - 1500 - Fire Animation Time - The time the fire effect takes. - - - - 0.5 - Fire Movement Speed - The speed at which the fire moves. - - - - 1.0 - Fire Scale - The size of the fire. - - - - false - Fire 3D Noise - Use a 3D noise for the fire. - - - - "rgba(76, 51, 25, 0.0)" - Fire Color 1 - The first color of the fire gradient. - - - - "rgba(180, 55, 30, 0.7)" - Fire Color 2 - The second color of the fire gradient. - - - - "rgba(255, 76, 38, 0.9)" - Fire Color 3 - The third color of the fire gradient. - - - - "rgba(255, 166, 25, 1)" - Fire Color 4 - The fourth color of the fire gradient. - - - - "rgba(255, 255, 255, 1)" - Fire Color 5 - The fifth color of the fire gradient. - - - - - - - - true - Glide Close Effect - Use the glide effect for window closing. - - - - false - Glide Open Effect - Use the glide effect for window opening. - - - - 250 - Glide Animation Time - The time the glide effect takes. - - - - 0.95 - Glide Scale - The scale of the window. - - - - 0.15 - Glide Squish - The amount of squishing. - - - - -0.3 - Glide Tilt - The amount of tilting. - - - - -0.05 - Glide Shift - The amount of shifting. - - - - - - - - false - Matrix Close Effect - Use the matrix effect for window closing. - - - - false - Matrix Open Effect - Use the matrix effect for window opening. - - - - 1500 - Matrix Animation Time - The time the matrix effect takes. - - - - 20 - Matrix Scale - The size of the matrix letters. - - - - 1.0 - Matrix Randomness - The randomness of the matrix effect. - - - - "rgb(255, 255, 255)" - Matrix Tip Color - The color of the matrix trail tips. - - - - "rgb(25, 255, 89)" - Matrix Trail Color - The color matrix trails. - - - - 0.25 - Matrix Overshoot - The vertical overshooting of the matrix effect. - - - - - - - - false - TV Close Effect - Use the tv effect for window closing. - - - - false - TV Open Effect - Use the tv effect for window opening. - - - - 400 - TV Animation Time - The time the tv effect takes. - - - - "rgb(255, 255, 255)" - TV Effect Color - The color of the TV effect. - - - - - - - - false - T-Rex Close Effect - Use the trex effect for window closing. - - - - false - T-Rex Open Effect - Use the trex effect for window opening. - - - - 1000 - T-Rex Animation Time - The time the trex effect takes. - - - - "rgb(170, 0, 0)" - Claw Scratch Color - The color of the claw scratches. - - - - 1.0 - Claw Scratch Scale - Size of the claw scratches. - - - - 0.15 - Claw Scratch Warp - Intensity of the claw scratch warp effect. - - - - 5 - Claw Scratch Count - Number of claw scratches drawn on top of each other. - - - - - - - - false - Hexagon Close Effect - Use the Hexagon effect for window closing. - - - - false - Hexagon Open Effect - Use the Hexagon effect for window opening. - - - - 1500 - Hexagon Animation Time - The time the Hexagon effect takes. - - - - 3.0 - Hexagon Scale - The size of the effect. - - - - 2.0 - Hexagon Line Width - The width of the lines. - - - - "rgba(200, 255, 255, 0.5)" - Hexagon Line Color - The color of the lines. - - - - "rgba(20, 80, 255, 0.5)" - Hexagon Glow Color - The color of the glow effect. - - - - true - Hexagon Additive Blending - Use additive blending for the line and the glow. - - - - - - - - false - Incinerate Close Effect - Use the Incinerate effect for window closing. - - - - false - Incinerate Open Effect - Use the Incinerate effect for window opening. - - - - 2000 - Incinerate Animation Time - The time the Incinerate effect takes. - - - - 1.0 - Incinerate Scale - The scale of the effect. - - - - 0.3 - Incinerate Turbulence - The turbulence of the effect. - - - - "rgb(255, 180, 127)" - Incinerate Color - The color of the effect. - - - - true - Incinerate Use Pointer - Use the pointer location for the incinerate effect. - - - - - - - - false - Energize A Close Effect - Use the Energize A effect for window closing. - - - - false - Energize A Open Effect - Use the Energize A effect for window opening. - - - - 2000 - Energize A Animation Time - The time the Energize A effect takes. - - - - 1.0 - Energize A Scale - The size of the effect. - - - - "rgb(255, 200, 50)" - Energize A Color - The color of the effect. - - - - - - - - false - Energize B Close Effect - Use the Energize B effect for window closing. - - - - false - Energize B Open Effect - Use the Energize B effect for window opening. - - - - 1000 - Energize B Animation Time - The time the Energize B effect takes. - - - - 1.0 - Energize B Scale - The size of the effect. - - - - "rgb(160, 180, 255)" - Energize B Color - The color of the effect. - - - - - - - - - false - Glitch Close Effect - Use the Glitch effect for window closing. - - - - false - Glitch Open Effect - Use the Glitch effect for window opening. - - - - 750 - Glitch Animation Time - The time the Glitch effect takes. - - - - 1.0 - Glitch Scale - The size of the effect. - - - - 2.0 - Glitch Strength - The intensity of the effect. - - - - 2.0 - Glitch Speed - The speed of the effect. - - - - "rgb(100, 160, 255)" - Glitch Color - The color of the effect. - - - - - - - - - false - TV Glitch Close Effect - Use the Glitch effect for window closing. - - - - false - TV Glitch Open Effect - Use the Glitch effect for window opening. - - - - 750 - TV Glitch Animation Time - The time the Glitch effect takes. - - - - 1.0 - TV Glitch Scale - The size of the effect. - - - - 2.0 - TV Glitch Strength - The intensity of the effect. - - - - 2.0 - TV Glitch Speed - The speed of the effect. - - - - "rgb(100, 160, 255)" - TV Glitch Color - The color of the effect. - - - - - - - - false - Wisps Close Effect - Use the wisps effect for window closing. - - - - false - Wisps Open Effect - Use the wisps effect for window opening. - - - - 1500 - Wisps Animation Time - The time the wisps effect takes. - - - - 1.0 - Wisps Scale - The size of the wisps. - - - - "rgb(255, 100, 200)" - Wisps Effect Color - The color of the wisps effect. - - - - - - - - false - Broken Glass Close Effect - Use the broken glass effect for window closing. - - - - false - Broken Glass Open Effect - Use the broken glass effect for window opening. - - - - 1000 - Broken Glass Animation Time - The time the broken glass effect takes. - - - - 1.0 - Broken Glass Scale - The size of the broken glass effect. - - - - -1.0 - Broken Glass Gravity - The gravity of the broken glass effect. - - - - 0.5 - Broken Glass Blow Force - The blow force of the broken glass effect. - - - - false - Broken Glass Use Pointer - Use the pointer location for the broken glass effect. - - - - - - - - false - Portal Close Effect - Use the Portal effect for window closing. - - - - false - Portal Open Effect - Use the Portal effect for window opening. - - - - 1250 - Portal Animation Time - The time the Portal effect takes. - - - - "rgb(121, 233, 24)" - Portal Color - The color of the effect. - - - - 0.3 - Portal Rotation Speed - The angular speed of the portal. - - - - 1.0 - Portal Whirling - The amount of distortion. - - - - 15.0 - Portal Details - The amount of details in the portal. - - - - - - - - false - Snap Open Effect - Use the snap effect for window openeing. - - - - false - Snap Close Effect - Use the snap effect for window closing. - - - - 1500 - Snap Animation Time - The time the snap effect takes. - - - - 3.0 - Snap Scale - The size of the snap effect. + + 0 + Last Prefs Version + Used to check whether the extension got updated from the preferences dialog. - - "rgb(50, 40, 35)" - Snap Effect Color - The color of the dust. + + 0 + Last Extension Version + Used to check whether the extension got updated from the extension side. diff --git a/src/ProfileManager.js b/src/ProfileManager.js new file mode 100644 index 0000000..4d1c81e --- /dev/null +++ b/src/ProfileManager.js @@ -0,0 +1,229 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// ) ( // +// ( /( ( ( ) ( ( ( ( )\ ) ( ( // +// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( // +// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ // +// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) // +// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< // +// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ // +// |__/ // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: Simon Schneegans +// SPDX-License-Identifier: GPL-3.0-or-later + +'use strict'; + +const {Gio, GLib, GObject} = imports.gi; + +const _ = imports.gettext.domain('burn-my-windows').gettext; + +const ExtensionUtils = imports.misc.extensionUtils; +const Me = imports.misc.extensionUtils.getCurrentExtension(); +const utils = Me.imports.src.utils; + +////////////////////////////////////////////////////////////////////////////////////////// +// Burn-My-Windows allows applying different sets of effect settings under specific // +// circumstances. These settings are called "effect profiles". The ProfileManager // +// provides access to all currently configured effect profiles. It can be used in both // +// the settings dialog and the in the actual extension. // +// The profiles are stored in ~/.config/burn-my-windows/profiles and can be accessed // +// via Gio.Settings objects. // +////////////////////////////////////////////////////////////////////////////////////////// + +var ProfileManager = class { + // ------------------------------------------------------------------------- constructor + + constructor() { + this._makeProfilesDir(); + this.reloadProfiles(); + } + + // -------------------------------------------------------------------- public interface + + // Returns an array of effect profiles. Each effect profile is an object with two + // properties: The 'path' points to the file which contains the effect profile + // settings (located in ~/.config/burn-my-windows/profiles). The 'settings' property + // contains a Gio.Settings object for the profile. The former can be used to uniquely + // identify the profile, the latter can be used to access the profile's settings. This + // method will always return at least one profile. If none is configured, a default + // profile will be created. + getProfiles() { + if (this._profiles.length == 0) { + this.createProfile(); + } + + return this._profiles; + } + + // This will create a new profile. If no content is given, all values will be + // initialized to their defaults. The method will return an effect profile object (as + // described above). We will use the current system time in microseconds as profile + // name. This ensures that they are always sorted according to their creation date. + createProfile(content = '') { + const path = `${GLib.get_user_config_dir()}/burn-my-windows/profiles/${ + GLib.get_real_time()}.conf`; + const file = Gio.File.new_for_path(path); + file.create(Gio.FileCreateFlags.NONE, null); + file.replace_contents(content, null, false, Gio.FileCreateFlags.REPLACE_DESTINATION, + null); + + const profile = {'path': path, 'settings': this._getProfileSettings(path)}; + + // Add the profile to our internal list of profiles. + this._profiles.push(profile); + + return profile; + } + + // Removes a profile defined by its file path. This will actually remove the file from + // the disk, so there's no going back. + deleteProfile(profilePath) { + const profileDir = `${GLib.get_user_config_dir()}/burn-my-windows/profiles`; + const file = Gio.File.new_for_path(profilePath); + if (file.has_prefix(Gio.File.new_for_path(profileDir)) && file.query_exists(null)) { + file.delete(null); + } + + // Remove the profile from our internal list of profiles. + this._profiles = this._profiles.filter(p => p.path != profilePath); + } + + // Reloads all profiles from ~/.config/burn-my-windows/profiles. If you called the + // createProfile() and deleteProfile() methods above, there is no need to reload the + // profiles. + reloadProfiles() { + const dir = + Gio.File.new_for_path(GLib.get_user_config_dir() + '/burn-my-windows/profiles'); + + const files = + dir.enumerate_children('standard::*', Gio.FileQueryInfoFlags.NONE, null); + + let profilePaths = []; + + while (true) { + const presetInfo = files.next_file(null); + + if (presetInfo == null) { + break; + } + + if (presetInfo.get_file_type() == Gio.FileType.REGULAR) { + const suffixPos = presetInfo.get_display_name().indexOf('.conf'); + if (suffixPos > 0) { + profilePaths.push(dir.get_child(presetInfo.get_name()).get_path()); + } + } + } + + // Sort profiles alphabetically, that is by their creation time. + profilePaths.sort(); + + this._profiles = []; + + profilePaths.forEach(path => { + this._profiles.push({'path': path, 'settings': this._getProfileSettings(path)}); + }); + } + + // Each profile has a priority. It is higher, the more specific it is. + getProfilePriority(settings) { + let priority = 0; + + // Each setting which is not set to its default value increases the priority by one. + if (settings.get_string('profile-app') != '') ++priority; + if (settings.get_int('profile-animation-type') > 0) ++priority; + if (settings.get_int('profile-window-type') > 0) ++priority; + if (settings.get_int('profile-color-scheme') > 0) ++priority; + if (settings.get_int('profile-power-mode') > 0) ++priority; + if (settings.get_int('profile-power-profile') > 0) ++priority; + + // Increase the priority significantly for high-priority profiles. + if (settings.get_boolean('profile-high-priority')) priority += 100; + + return priority; + } + + // Profiles are named according to their configuration. This method returns a localized + // string describing the settings of the profile. + getProfileName(settings) { + let items = []; + + // If an app is configured, use it as first component for the profile's name. + const app = settings.get_string('profile-app'); + if (app != '') { + items.push(app); + } + + // Now add components to the name for each non-default profile option. Make sure that + // these are the same strings as used in the UI files! + const addComponent = (settingsKey, options) => { + const option = settings.get_int(settingsKey); + if (option > 0) { + items.push(options[option - 1]); + } + }; + + // clang-format off + addComponent('profile-animation-type', [_('Opening Windows'), + _('Closing Windows')]); + addComponent('profile-window-type', [_('Normal Windows'), + _('Dialog Windows')]); + addComponent('profile-color-scheme', [_('Default Color Scheme'), + _('Dark Color Scheme')]); + addComponent('profile-power-mode', [_('On Battery'), + _('Plugged In')]); + addComponent('profile-power-profile', [_('Power-Saver Mode'), + _('Balanced Mode'), + _('Performance Mode'), + _('Power Saver or Balanced'), + _('Balanced or Performance')]); + // clang-format on + + let name = ''; + + if (items.length == 0) { + name = _('Standard Profile'); + } else { + name = items.join(' · '); + } + + return name; + } + + // ----------------------------------------------------------------------- private stuff + + // Creates the directory ~/.config/burn-my-windows/profiles if it does not yet exist. + _makeProfilesDir() { + const path = `${GLib.get_user_config_dir()}/burn-my-windows/profiles`; + const dir = Gio.File.new_for_path(path); + + if (!dir.query_exists(null)) { + dir.make_directory_with_parents(null); + } + } + + // Creates a Gio.Settings object for the given effect profile path. Based on + // https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/misc/extensionUtils.js#L213 + _getProfileSettings(profilePath) { + + // Expect USER extensions to have a schemas/ subfolder, otherwise assume a + // SYSTEM extension that has been installed in the same prefix as the shell + const schemaDir = Me.dir.get_child('schemas'); + let source; + if (schemaDir.query_exists(null)) { + source = Gio.SettingsSchemaSource.new_from_directory( + schemaDir.get_path(), Gio.SettingsSchemaSource.get_default(), false); + } else { + source = Gio.SettingsSchemaSource.get_default(); + } + + const schema = + source.lookup('org.gnome.shell.extensions.burn-my-windows-profile', true); + + const backend = + Gio.keyfile_settings_backend_new(profilePath, '/org/gnome/shell/extensions/', null); + + return new Gio.Settings({settings_schema: schema, backend: backend}); + } +} \ No newline at end of file diff --git a/src/Shader.js b/src/Shader.js index 6f897a4..bbd9b67 100644 --- a/src/Shader.js +++ b/src/Shader.js @@ -29,7 +29,7 @@ const utils = Me.imports.src.utils; // main benefit when compared to Clutter.ShaderEffect is that setting uniforms of types // // vec2, vec3 or vec4 is supported via the API (with Clutter.ShaderEffect the GJS // // binding does not work properly). However, there are two drawbacks: On the one hand, // -// the shader source code is cached statically - this mean if we want to have a // +// the shader source code is cached statically - this means if we want to have a // // different shader, we have to derive a new class. Therefore, each effect has to // // derive its own class from the class below. This is encapsulated in the // // ShaderFactory, however it is some really awkward code. The other drawback is the // @@ -47,8 +47,12 @@ const utils = Me.imports.src.utils; var Shader = GObject.registerClass( { Signals: { - 'begin-animation': - {param_types: [Gio.Settings.$gtype, GObject.TYPE_BOOLEAN, Clutter.Actor.$gtype]}, + 'begin-animation': { + param_types: [ + Gio.Settings.$gtype, GObject.TYPE_BOOLEAN, GObject.TYPE_BOOLEAN, + Clutter.Actor.$gtype + ] + }, 'update-animation': {param_types: [GObject.TYPE_DOUBLE]}, 'end-animation': {} } @@ -76,7 +80,7 @@ var Shader = GObject.registerClass( } // This is called once each time the shader is used. - beginAnimation(settings, forOpening, duration, actor) { + beginAnimation(settings, forOpening, testMode, duration, actor) { // Reset progress value. this._progress = 0; @@ -90,7 +94,7 @@ var Shader = GObject.registerClass( this.set_uniform_float(this._uDuration, 1, [duration]); this.set_uniform_float(this._uSize, 2, [actor.width, actor.height]); - this.emit('begin-animation', settings, forOpening, actor); + this.emit('begin-animation', settings, forOpening, testMode, actor); } // This is called at each frame during the animation. diff --git a/src/WindowPicker.js b/src/WindowPicker.js new file mode 100644 index 0000000..61cbc7d --- /dev/null +++ b/src/WindowPicker.js @@ -0,0 +1,89 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// ) ( // +// ( /( ( ( ) ( ( ( ( )\ ) ( ( // +// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( // +// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ // +// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) // +// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< // +// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ // +// |__/ // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: Simon Schneegans +// SPDX-FileCopyrightText: Aurélien Hamy +// SPDX-License-Identifier: GPL-3.0-or-later + +'use strict'; + +const {Gio, GLib} = imports.gi; +const Main = imports.ui.main; +const LookingGlass = imports.ui.lookingGlass; + +const Me = imports.misc.extensionUtils.getCurrentExtension(); +const utils = Me.imports.src.utils; + +////////////////////////////////////////////////////////////////////////////////////////// +// This is based on the window-picking functionality of the Blur-My-Shell extension. // +// The PickWindow() method is exposed via the D-Bus and can be called by the // +// preferences dialog of the Burn-My-Windows extensions in order to initiate the window // +// picking. // +////////////////////////////////////////////////////////////////////////////////////////// + +var WindowPicker = class WindowPicker { + // ------------------------------------------------------------------------- constructor + + constructor() { + const iFace = utils.getStringResource( + '/interfaces/org.gnome.shell.extensions.burn-my-windows.xml'); + this._dbus = Gio.DBusExportedObject.wrapJSObject(iFace, this); + } + + // --------------------------------------------------------------------- D-Bus interface + + // This method is exposed via the D-Bus. It is called by the preferences dialog of the + // Burn-My-Windows extensions in order to initiate the window picking. + PickWindow() { + + // We use the actor picking from LookingGlass. This seems a bit hacky and also allows + // selecting things of the Shell which are not windows, but it does the trick :) + const lookingGlass = Main.createLookingGlass(); + lookingGlass.open(); + lookingGlass.hide(); + + const inspector = new LookingGlass.Inspector(Main.createLookingGlass()); + inspector.connect('target', (me, target, x, y) => { + // Remove border effect when window is picked. + target.get_effects() + .filter(e => e.toString().includes('lookingGlass_RedBorderEffect')) + .forEach(e => target.remove_effect(e)); + + let actor = target; + if (target.toString().includes('MetaSurfaceActor')) { + actor = target.get_parent(); + } + + let wmClass = 'window-not-found'; + if (actor.toString().includes('WindowActor') && + actor.meta_window.get_wm_class() != '') { + wmClass = actor.meta_window.get_wm_class(); + } + + this._dbus.emit_signal('WindowPicked', new GLib.Variant('(s)', [wmClass])); + }); + + // Close LookingGlass when we're done. + inspector.connect('closed', _ => lookingGlass.close()); + } + + // -------------------------------------------------------------------- public interface + + // Call this to make the window-picking API available on the D-Bus. + export() { + this._dbus.export(Gio.DBus.session, '/org/gnome/shell/extensions/BurnMyWindows'); + } + + // Call this to stop this D-Bus again. + unexport() { + this._dbus.unexport(); + } +}; diff --git a/src/Apparition.js b/src/effects/Apparition.js similarity index 87% rename from src/Apparition.js rename to src/effects/Apparition.js index 9c44da1..a1051fd 100644 --- a/src/Apparition.js +++ b/src/effects/Apparition.js @@ -44,10 +44,7 @@ var Apparition = class { shader._uRandomness = shader.get_uniform_location('uRandomness'); // Write all uniform values at the start of each animation. - shader.connect('begin-animation', (shader, settings) => { - // If we are performing an integration tests, we use a fixed seed. - const testMode = settings.get_boolean('test-mode'); - + shader.connect('begin-animation', (shader, settings, forOpening, testMode) => { // clang-format off shader.set_uniform_float(shader._uSeed, 2, [testMode ? 0 : Math.random(), testMode ? 0 : Math.random()]); shader.set_uniform_float(shader._uShake, 1, [settings.get_double('apparition-shake-intensity')]); @@ -69,7 +66,7 @@ var Apparition = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'apparition'; @@ -83,22 +80,14 @@ var Apparition = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/Apparition.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('apparition-randomness'); dialog.bindAdjustment('apparition-animation-time'); dialog.bindAdjustment('apparition-twirl-intensity'); dialog.bindAdjustment('apparition-shake-intensity'); dialog.bindAdjustment('apparition-suction-intensity'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('apparition-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/BrokenGlass.js b/src/effects/BrokenGlass.js similarity index 78% rename from src/BrokenGlass.js rename to src/effects/BrokenGlass.js index 3a98030..43c099d 100644 --- a/src/BrokenGlass.js +++ b/src/effects/BrokenGlass.js @@ -70,34 +70,31 @@ var BrokenGlass = class { shader._uGravity = shader.get_uniform_location('uGravity'); // And update all uniforms at the start of each animation. - shader.connect('begin-animation', (shader, settings, forOpening, actor) => { - // Usually, the shards fly away from the center of the window. - let epicenterX = 0.5; - let epicenterY = 0.5; + shader.connect( + 'begin-animation', (shader, settings, forOpening, testMode, actor) => { + // Usually, the shards fly away from the center of the window. + let epicenterX = 0.5; + let epicenterY = 0.5; - // However, if this option is set, we use the mouse pointer position. - if (!forOpening && settings.get_boolean('broken-glass-use-pointer')) { - const [x, y] = global.get_pointer(); - const [ok, localX, localY] = actor.transform_stage_point(x, y); + // However, if this option is set, we use the mouse pointer position. + if (!forOpening && settings.get_boolean('broken-glass-use-pointer')) { + const [x, y] = global.get_pointer(); + const [ok, localX, localY] = actor.transform_stage_point(x, y); - if (ok) { - epicenterX = localX / actor.width; - epicenterY = localY / actor.height; + if (ok) { + epicenterX = localX / actor.width; + epicenterY = localY / actor.height; + } } - } - // If we are currently performing integration test, the animation uses a fixed - // seed. - const testMode = settings.get_boolean('test-mode'); - - // clang-format off - shader.set_uniform_float(shader._uSeed, 2, [testMode ? 0 : Math.random(), testMode ? 0 : Math.random()]); - shader.set_uniform_float(shader._uEpicenter, 2, [epicenterX, epicenterY]); - shader.set_uniform_float(shader._uShardScale, 1, [settings.get_double('broken-glass-scale')]); - shader.set_uniform_float(shader._uBlowForce, 1, [settings.get_double('broken-glass-blow-force')]); - shader.set_uniform_float(shader._uGravity, 1, [settings.get_double('broken-glass-gravity')]); - // clang-format on - }); + // clang-format off + shader.set_uniform_float(shader._uSeed, 2, [testMode ? 0 : Math.random(), testMode ? 0 : Math.random()]); + shader.set_uniform_float(shader._uEpicenter, 2, [epicenterX, epicenterY]); + shader.set_uniform_float(shader._uShardScale, 1, [settings.get_double('broken-glass-scale')]); + shader.set_uniform_float(shader._uBlowForce, 1, [settings.get_double('broken-glass-blow-force')]); + shader.set_uniform_float(shader._uGravity, 1, [settings.get_double('broken-glass-gravity')]); + // clang-format on + }); // This is required to bind the shard texture for drawing. Sadly, this seems to be // impossible under GNOME 3.3x as this.get_pipeline() is not available. It was @@ -127,8 +124,9 @@ var BrokenGlass = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time - // (e.g. '*-animation-time'). + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time + // (e.g. '*-animation-time'). Also, the shader file and the settings UI files should be + // named likes this. getNick() { return 'broken-glass'; } @@ -141,22 +139,14 @@ var BrokenGlass = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/BrokenGlass.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('broken-glass-animation-time'); dialog.bindAdjustment('broken-glass-scale'); dialog.bindAdjustment('broken-glass-gravity'); dialog.bindAdjustment('broken-glass-blow-force'); dialog.bindSwitch('broken-glass-use-pointer'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('broken-glass-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/Doom.js b/src/effects/Doom.js similarity index 72% rename from src/Doom.js rename to src/effects/Doom.js index 5e35cf8..ad77cd9 100644 --- a/src/Doom.js +++ b/src/effects/Doom.js @@ -46,23 +46,23 @@ var Doom = class { shader._uPixelSize = shader.get_uniform_location('uPixelSize'); // Write all uniform values at the start of each animation. - shader.connect('begin-animation', (shader, settings, forOpening, actor) => { - // For this effect, we scale the actor vertically so that it covers the entire - // screen. This ensures that the melted window will not be cut off. - let actorScale = 2.0 * Math.max(1.0, global.stage.height / actor.height); + shader.connect( + 'begin-animation', (shader, settings, forOpening, testMode, actor) => { + // For this effect, we scale the actor vertically so that it covers the entire + // screen. This ensures that the melted window will not be cut off. + let actorScale = 2.0 * Math.max(1.0, global.stage.height / actor.height); - // If we are currently performing integration test, nothing will be visible in the - // test images as the animation has passed the center of the window already. To - // fix this, we set the actor scale to a fixed low value when performing tests. - const testMode = settings.get_boolean('test-mode'); - - // clang-format off - shader.set_uniform_float(shader._uActorScale, 1, [testMode ? 1.0 : actorScale]); - shader.set_uniform_float(shader._uHorizontalScale, 1, [testMode ? 50.0 :settings.get_double('doom-horizontal-scale')]); - shader.set_uniform_float(shader._uVerticalScale, 1, [testMode ? 150.0 : settings.get_double('doom-vertical-scale')]); - shader.set_uniform_float(shader._uPixelSize, 1, [settings.get_int('doom-pixel-size')]); - // clang-format on - }); + // If we are currently performing integration test, nothing will be visible in + // the test images as the animation has passed the center of the window already. + // To fix this, we set the actor scale to a fixed low value when performing + // tests. + // clang-format off + shader.set_uniform_float(shader._uActorScale, 1, [testMode ? 1.0 : actorScale]); + shader.set_uniform_float(shader._uHorizontalScale, 1, [testMode ? 50.0 :settings.get_double('doom-horizontal-scale')]); + shader.set_uniform_float(shader._uVerticalScale, 1, [testMode ? 150.0 : settings.get_double('doom-vertical-scale')]); + shader.set_uniform_float(shader._uPixelSize, 1, [settings.get_int('doom-pixel-size')]); + // clang-format on + }); }); } @@ -76,7 +76,7 @@ var Doom = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'doom'; @@ -90,21 +90,13 @@ var Doom = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/Doom.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('doom-animation-time'); dialog.bindAdjustment('doom-horizontal-scale'); dialog.bindAdjustment('doom-vertical-scale'); dialog.bindAdjustment('doom-pixel-size'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('doom-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/EnergizeA.js b/src/effects/EnergizeA.js similarity index 89% rename from src/EnergizeA.js rename to src/effects/EnergizeA.js index 391d5c9..cb8c2a7 100644 --- a/src/EnergizeA.js +++ b/src/effects/EnergizeA.js @@ -68,7 +68,7 @@ var EnergizeA = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'energize-a'; @@ -82,20 +82,12 @@ var EnergizeA = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/EnergizeA.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('energize-a-animation-time'); dialog.bindAdjustment('energize-a-scale'); dialog.bindColorButton('energize-a-color'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('energize-a-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/EnergizeB.js b/src/effects/EnergizeB.js similarity index 89% rename from src/EnergizeB.js rename to src/effects/EnergizeB.js index d6318b9..2b31c3a 100644 --- a/src/EnergizeB.js +++ b/src/effects/EnergizeB.js @@ -69,7 +69,7 @@ var EnergizeB = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'energize-b'; @@ -83,20 +83,12 @@ var EnergizeB = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/EnergizeB.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('energize-b-animation-time'); dialog.bindAdjustment('energize-b-scale'); dialog.bindColorButton('energize-b-color'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('energize-b-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/Fire.js b/src/effects/Fire.js similarity index 81% rename from src/Fire.js rename to src/effects/Fire.js index 3123b28..168ab24 100644 --- a/src/Fire.js +++ b/src/effects/Fire.js @@ -71,9 +71,9 @@ var Fire = class { } // clang-format off - shader.set_uniform_float(shader._u3DNoise, 1, [settings.get_boolean('flame-3d-noise')]); - shader.set_uniform_float(shader._uScale, 1, [settings.get_double('flame-scale')]); - shader.set_uniform_float(shader._uMovementSpeed, 1, [settings.get_double('flame-movement-speed')]); + shader.set_uniform_float(shader._u3DNoise, 1, [settings.get_boolean('fire-3d-noise')]); + shader.set_uniform_float(shader._uScale, 1, [settings.get_double('fire-scale')]); + shader.set_uniform_float(shader._uMovementSpeed, 1, [settings.get_double('fire-movement-speed')]); // clang-format on }); }); @@ -88,7 +88,7 @@ var Fire = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'fire'; @@ -102,38 +102,37 @@ var Fire = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/Fire.ui`); + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { // Bind all properties. dialog.bindAdjustment('fire-animation-time'); - dialog.bindAdjustment('flame-movement-speed'); - dialog.bindAdjustment('flame-scale'); - dialog.bindSwitch('flame-3d-noise'); + dialog.bindAdjustment('fire-movement-speed'); + dialog.bindAdjustment('fire-scale'); + dialog.bindSwitch('fire-3d-noise'); dialog.bindColorButton('fire-color-1'); dialog.bindColorButton('fire-color-2'); dialog.bindColorButton('fire-color-3'); dialog.bindColorButton('fire-color-4'); dialog.bindColorButton('fire-color-5'); - // The fire-gradient-reset button needs to be bound explicitly. - dialog.getBuilder().get_object('reset-fire-colors').connect('clicked', () => { - dialog.getSettings().reset('fire-color-1'); - dialog.getSettings().reset('fire-color-2'); - dialog.getSettings().reset('fire-color-3'); - dialog.getSettings().reset('fire-color-4'); - dialog.getSettings().reset('fire-color-5'); - }); + // Connect the buttons only once. The bindPreferences can be called multiple times... + if (!this._isConnected) { + this._isConnected = true; - // Initialize the fire-preset dropdown. - this._createFirePresets(dialog); + // The fire-gradient-reset button needs to be bound explicitly. + dialog.getBuilder().get_object('reset-fire-colors').connect('clicked', () => { + dialog.getProfileSettings().reset('fire-color-1'); + dialog.getProfileSettings().reset('fire-color-2'); + dialog.getProfileSettings().reset('fire-color-3'); + dialog.getProfileSettings().reset('fire-color-4'); + dialog.getProfileSettings().reset('fire-color-5'); + }); - // Finally, return the new settings page. - return dialog.getBuilder().get_object('fire-prefs'); + // Initialize the fire-preset dropdown. + this._createFirePresets(dialog); + } } // ---------------------------------------------------------------- API for extension.js @@ -215,13 +214,13 @@ var Fire = class { // Load the preset on activation. action.connect('activate', () => { - dialog.getSettings().set_double('flame-movement-speed', preset.speed); - dialog.getSettings().set_double('flame-scale', preset.scale); - dialog.getSettings().set_string('fire-color-1', preset.color1); - dialog.getSettings().set_string('fire-color-2', preset.color2); - dialog.getSettings().set_string('fire-color-3', preset.color3); - dialog.getSettings().set_string('fire-color-4', preset.color4); - dialog.getSettings().set_string('fire-color-5', preset.color5); + dialog.getProfileSettings().set_double('fire-movement-speed', preset.speed); + dialog.getProfileSettings().set_double('fire-scale', preset.scale); + dialog.getProfileSettings().set_string('fire-color-1', preset.color1); + dialog.getProfileSettings().set_string('fire-color-2', preset.color2); + dialog.getProfileSettings().set_string('fire-color-3', preset.color3); + dialog.getProfileSettings().set_string('fire-color-4', preset.color4); + dialog.getProfileSettings().set_string('fire-color-5', preset.color5); }); group.add_action(action); diff --git a/src/Glide.js b/src/effects/Glide.js similarity index 90% rename from src/Glide.js rename to src/effects/Glide.js index 846c553..14cfe4d 100644 --- a/src/Glide.js +++ b/src/effects/Glide.js @@ -66,7 +66,7 @@ var Glide = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'glide'; @@ -80,22 +80,14 @@ var Glide = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/Glide.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('glide-animation-time'); dialog.bindAdjustment('glide-scale'); dialog.bindAdjustment('glide-squish'); dialog.bindAdjustment('glide-tilt'); dialog.bindAdjustment('glide-shift'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('glide-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/Glitch.js b/src/effects/Glitch.js similarity index 87% rename from src/Glitch.js rename to src/effects/Glitch.js index 044c71a..6003f80 100644 --- a/src/Glitch.js +++ b/src/effects/Glitch.js @@ -51,12 +51,9 @@ var Glitch = class { shader._uSpeed = shader.get_uniform_location('uSpeed'); // Write all uniform values at the start of each animation. - shader.connect('begin-animation', (shader, settings) => { + shader.connect('begin-animation', (shader, settings, forOpening, testMode) => { const c = Clutter.Color.from_string(settings.get_string('glitch-color'))[1]; - // If we are performing an integration tests, we use a fixed seed. - const testMode = settings.get_boolean('test-mode'); - // clang-format off shader.set_uniform_float(shader._uSeed, 1, [testMode ? 0 : Math.random()]); shader.set_uniform_float(shader._uColor, 4, [c.red / 255, c.green / 255, c.blue / 255, c.alpha / 255]); @@ -77,7 +74,7 @@ var Glitch = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'glitch'; @@ -91,22 +88,14 @@ var Glitch = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/Glitch.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('glitch-animation-time'); dialog.bindAdjustment('glitch-scale'); dialog.bindAdjustment('glitch-speed'); dialog.bindAdjustment('glitch-strength'); dialog.bindColorButton('glitch-color'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('glitch-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/Hexagon.js b/src/effects/Hexagon.js similarity index 88% rename from src/Hexagon.js rename to src/effects/Hexagon.js index 8116c70..75c74d1 100644 --- a/src/Hexagon.js +++ b/src/effects/Hexagon.js @@ -53,7 +53,7 @@ var Hexagon = class { shader._uLineColor = shader.get_uniform_location('uLineColor'); // Write all uniform values at the start of each animation. - shader.connect('begin-animation', (shader, settings) => { + shader.connect('begin-animation', (shader, settings, forOpening, testMode) => { // Get the two configurable colors. They are directly injected into the shader // code below. const gc = @@ -61,10 +61,6 @@ var Hexagon = class { const lc = Clutter.Color.from_string(settings.get_string('hexagon-line-color'))[1]; - // If we are currently performing integration test, the animation uses a fixed - // seed. - const testMode = settings.get_boolean('test-mode'); - // clang-format off shader.set_uniform_float(shader._uAdditiveBlending, 1, [settings.get_boolean('hexagon-additive-blending')]); shader.set_uniform_float(shader._uSeed, 2, [testMode ? 0 : Math.random(), testMode ? 0 : Math.random()]); @@ -86,7 +82,7 @@ var Hexagon = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'hexagon'; @@ -100,23 +96,15 @@ var Hexagon = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/Hexagon.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('hexagon-animation-time'); dialog.bindAdjustment('hexagon-scale'); dialog.bindAdjustment('hexagon-line-width'); dialog.bindColorButton('hexagon-line-color'); dialog.bindColorButton('hexagon-glow-color'); dialog.bindSwitch('hexagon-additive-blending'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('hexagon-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/Incinerate.js b/src/effects/Incinerate.js similarity index 71% rename from src/Incinerate.js rename to src/effects/Incinerate.js index cc506e1..da5821e 100644 --- a/src/Incinerate.js +++ b/src/effects/Incinerate.js @@ -51,39 +51,39 @@ var Incinerate = class { shader._uStartPos = shader.get_uniform_location('uStartPos'); // Write all uniform values at the start of each animation. - shader.connect('begin-animation', (shader, settings, forOpening, actor) => { - // If we are currently performing integration test, the animation uses a fixed - // seed. - const testMode = settings.get_boolean('test-mode'); - let seed = [testMode ? 0 : Math.random(), testMode ? 0 : Math.random()]; + shader.connect( + 'begin-animation', (shader, settings, forOpening, testMode, actor) => { + // If we are currently performing integration test, the animation uses a fixed + // seed. + let seed = [testMode ? 0 : Math.random(), testMode ? 0 : Math.random()]; - // If this option is set, we use the mouse pointer position. Because the actor - // position may change after the begin-animation signal is called, we set the - // uStartPos uniform during the update callback. - if (settings.get_boolean('incinerate-use-pointer')) { - this._startPointerPos = global.get_pointer(); - this._actor = actor; + // If this option is set, we use the mouse pointer position. Because the actor + // position may change after the begin-animation signal is called, we set the + // uStartPos uniform during the update callback. + if (settings.get_boolean('incinerate-use-pointer')) { + this._startPointerPos = global.get_pointer(); + this._actor = actor; - } else { - // Else, a random position along the window boundary is used as start position - // for the incinerate effect. - let startPos = seed[0] > seed[1] ? [seed[0], Math.floor(seed[1] + 0.5)] : - [Math.floor(seed[0] + 0.5), seed[1]]; + } else { + // Else, a random position along the window boundary is used as start position + // for the incinerate effect. + let startPos = seed[0] > seed[1] ? [seed[0], Math.floor(seed[1] + 0.5)] : + [Math.floor(seed[0] + 0.5), seed[1]]; - shader.set_uniform_float(shader._uStartPos, 2, startPos); + shader.set_uniform_float(shader._uStartPos, 2, startPos); - this._startPointerPos = null; - } + this._startPointerPos = null; + } - const c = Clutter.Color.from_string(settings.get_string('incinerate-color'))[1]; + const c = Clutter.Color.from_string(settings.get_string('incinerate-color'))[1]; - // clang-format off - shader.set_uniform_float(shader._uSeed, 2, seed); - shader.set_uniform_float(shader._uColor, 3, [c.red / 255, c.green / 255, c.blue / 255]); - shader.set_uniform_float(shader._uScale, 1, [settings.get_double('incinerate-scale')]); - shader.set_uniform_float(shader._uTurbulence, 1, [settings.get_double('incinerate-turbulence')]); - // clang-format on - }); + // clang-format off + shader.set_uniform_float(shader._uSeed, 2, seed); + shader.set_uniform_float(shader._uColor, 3, [c.red / 255, c.green / 255, c.blue / 255]); + shader.set_uniform_float(shader._uScale, 1, [settings.get_double('incinerate-scale')]); + shader.set_uniform_float(shader._uTurbulence, 1, [settings.get_double('incinerate-turbulence')]); + // clang-format on + }); // If the mouse pointer position is used as start position, we set the uStartPos // uniform during the update callback as the actor position may not be set up @@ -119,7 +119,7 @@ var Incinerate = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'incinerate'; @@ -133,22 +133,14 @@ var Incinerate = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/Incinerate.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('incinerate-animation-time'); dialog.bindAdjustment('incinerate-scale'); dialog.bindAdjustment('incinerate-turbulence'); dialog.bindSwitch('incinerate-use-pointer'); dialog.bindColorButton('incinerate-color'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('incinerate-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/Matrix.js b/src/effects/Matrix.js similarity index 93% rename from src/Matrix.js rename to src/effects/Matrix.js index 7b0f4f0..56690a3 100644 --- a/src/Matrix.js +++ b/src/effects/Matrix.js @@ -102,7 +102,7 @@ var Matrix = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'matrix'; @@ -116,23 +116,15 @@ var Matrix = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/Matrix.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('matrix-animation-time'); dialog.bindAdjustment('matrix-scale'); dialog.bindAdjustment('matrix-randomness'); dialog.bindAdjustment('matrix-overshoot'); dialog.bindColorButton('matrix-trail-color'); dialog.bindColorButton('matrix-tip-color'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('matrix-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/PixelWheel.js b/src/effects/PixelWheel.js similarity index 89% rename from src/PixelWheel.js rename to src/effects/PixelWheel.js index 46a804e..60955ec 100644 --- a/src/PixelWheel.js +++ b/src/effects/PixelWheel.js @@ -62,7 +62,7 @@ var PixelWheel = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'pixel-wheel'; @@ -76,20 +76,12 @@ var PixelWheel = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/PixelWheel.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('pixel-wheel-animation-time'); dialog.bindAdjustment('pixel-wheel-pixel-size'); dialog.bindAdjustment('pixel-wheel-spoke-count'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('pixel-wheel-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/PixelWipe.js b/src/effects/PixelWipe.js similarity index 84% rename from src/PixelWipe.js rename to src/effects/PixelWipe.js index e78e1f1..88fcdb9 100644 --- a/src/PixelWipe.js +++ b/src/effects/PixelWipe.js @@ -44,16 +44,17 @@ var PixelWipe = class { shader._uStartPos = shader.get_uniform_location('uStartPos'); // Write all uniform values at the start of each animation. - shader.connect('begin-animation', (shader, settings, forOpening, actor) => { - // Because the actor position may change after the begin-animation signal is - // called, we set the uStartPos uniform during the update callback. - this._startPointerPos = global.get_pointer(); - this._actor = actor; + shader.connect( + 'begin-animation', (shader, settings, forOpening, testMode, actor) => { + // Because the actor position may change after the begin-animation signal is + // called, we set the uStartPos uniform during the update callback. + this._startPointerPos = global.get_pointer(); + this._actor = actor; - // clang-format off + // clang-format off shader.set_uniform_float(shader._uPixelSize, 1, [settings.get_int('pixel-wipe-pixel-size')]); - // clang-format on - }); + // clang-format on + }); // We set the uStartPos uniform during the update callback as the actor position // may not be set up properly before the begin animation callback. @@ -88,7 +89,7 @@ var PixelWipe = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'pixel-wipe'; @@ -102,19 +103,11 @@ var PixelWipe = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/PixelWipe.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('pixel-wipe-animation-time'); dialog.bindAdjustment('pixel-wipe-pixel-size'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('pixel-wipe-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/Pixelate.js b/src/effects/Pixelate.js similarity index 89% rename from src/Pixelate.js rename to src/effects/Pixelate.js index 3ca6713..a91285e 100644 --- a/src/Pixelate.js +++ b/src/effects/Pixelate.js @@ -62,7 +62,7 @@ var Pixelate = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'pixelate'; @@ -76,20 +76,12 @@ var Pixelate = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/Pixelate.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('pixelate-animation-time'); dialog.bindAdjustment('pixelate-noise'); dialog.bindAdjustment('pixelate-pixel-size'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('pixelate-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/Portal.js b/src/effects/Portal.js similarity index 88% rename from src/Portal.js rename to src/effects/Portal.js index 38063df..f17d46f 100644 --- a/src/Portal.js +++ b/src/effects/Portal.js @@ -52,12 +52,9 @@ var Portal = class { shader._uWhirling = shader.get_uniform_location('uWhirling'); // Write all uniform values at the start of each animation. - shader.connect('begin-animation', (shader, settings) => { + shader.connect('begin-animation', (shader, settings, forOpening, testMode) => { const c = Clutter.Color.from_string(settings.get_string('portal-color'))[1]; - // If we are performing an integration tests, we use a fixed seed. - const testMode = settings.get_boolean('test-mode'); - // clang-format off shader.set_uniform_float(shader._uSeed, 2, [testMode ? 0 : Math.random(), testMode ? 0 : Math.random()]); shader.set_uniform_float(shader._uColor, 3, [c.red / 255, c.green / 255, c.blue / 255]); @@ -79,7 +76,7 @@ var Portal = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'portal'; @@ -93,22 +90,14 @@ var Portal = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/Portal.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('portal-animation-time'); dialog.bindAdjustment('portal-rotation-speed'); dialog.bindAdjustment('portal-whirling'); dialog.bindAdjustment('portal-details'); dialog.bindColorButton('portal-color'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('portal-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/SnapOfDisintegration.js b/src/effects/SnapOfDisintegration.js similarity index 89% rename from src/SnapOfDisintegration.js rename to src/effects/SnapOfDisintegration.js index 3750ff4..3b2b724 100644 --- a/src/SnapOfDisintegration.js +++ b/src/effects/SnapOfDisintegration.js @@ -63,14 +63,10 @@ var SnapOfDisintegration = class { shader._uDustScale = shader.get_uniform_location('uDustScale'); // Write all uniform values at the start of each animation. - shader.connect('begin-animation', (shader, settings) => { + shader.connect('begin-animation', (shader, settings, forOpening, testMode) => { // The dust particles will fade to this color over time. const c = Clutter.Color.from_string(settings.get_string('snap-color'))[1]; - // If we are currently performing integration test, the animation uses a fixed - // seed. - const testMode = settings.get_boolean('test-mode'); - // clang-format off shader.set_uniform_float(shader._uDustColor, 4, [c.red / 255, c.green / 255, c.blue / 255, c.alpha / 255]); shader.set_uniform_float(shader._uSeed, 2, [testMode ? 0 : Math.random(), testMode ? 0 : Math.random()]); @@ -106,7 +102,7 @@ var SnapOfDisintegration = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'snap'; @@ -120,21 +116,12 @@ var SnapOfDisintegration = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource( - `/ui/${utils.getUIDir()}/SnapOfDisintegration.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('snap-animation-time'); dialog.bindAdjustment('snap-scale'); dialog.bindColorButton('snap-color'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('snap-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/TRexAttack.js b/src/effects/TRexAttack.js similarity index 84% rename from src/TRexAttack.js rename to src/effects/TRexAttack.js index e59cf1f..30f854f 100644 --- a/src/TRexAttack.js +++ b/src/effects/TRexAttack.js @@ -61,19 +61,15 @@ var TRexAttack = class { shader._uWarpIntensity = shader.get_uniform_location('uWarpIntensity'); // Write all uniform values at the start of each animation. - shader.connect('begin-animation', (shader, settings) => { - const c = Clutter.Color.from_string(settings.get_string('claw-scratch-color'))[1]; - - // If we are currently performing integration test, the animation uses a fixed - // seed. - const testMode = settings.get_boolean('test-mode'); + shader.connect('begin-animation', (shader, settings, forOpening, testMode) => { + const c = Clutter.Color.from_string(settings.get_string('trex-scratch-color'))[1]; // clang-format off shader.set_uniform_float(shader._uFlashColor, 4, [c.red / 255, c.green / 255, c.blue / 255, c.alpha / 255]); shader.set_uniform_float(shader._uSeed, 2, [testMode ? 0 : Math.random(), testMode ? 0 : Math.random()]); - shader.set_uniform_float(shader._uClawSize, 1, [settings.get_double('claw-scratch-scale')]); - shader.set_uniform_float(shader._uNumClaws, 1, [settings.get_int('claw-scratch-count')]); - shader.set_uniform_float(shader._uWarpIntensity, 1, [settings.get_double('claw-scratch-warp')]); + shader.set_uniform_float(shader._uClawSize, 1, [settings.get_double('trex-scratch-scale')]); + shader.set_uniform_float(shader._uNumClaws, 1, [settings.get_int('trex-scratch-count')]); + shader.set_uniform_float(shader._uWarpIntensity, 1, [settings.get_double('trex-scratch-warp')]); // clang-format on }); @@ -104,7 +100,7 @@ var TRexAttack = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'trex'; @@ -118,22 +114,14 @@ var TRexAttack = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/TRexAttack.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('trex-animation-time'); - dialog.bindColorButton('claw-scratch-color'); - dialog.bindAdjustment('claw-scratch-scale'); - dialog.bindAdjustment('claw-scratch-count'); - dialog.bindAdjustment('claw-scratch-warp'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('trex-prefs'); + dialog.bindColorButton('trex-scratch-color'); + dialog.bindAdjustment('trex-scratch-scale'); + dialog.bindAdjustment('trex-scratch-count'); + dialog.bindAdjustment('trex-scratch-warp'); } // ---------------------------------------------------------------- API for extension.js @@ -142,7 +130,7 @@ var TRexAttack = class { // animation. This is useful if the effect requires drawing something beyond the usual // bounds of the actor. This only works for GNOME 3.38+. getActorScale(settings) { - const scale = 1.0 + 0.5 * settings.get_double('claw-scratch-warp'); + const scale = 1.0 + 0.5 * settings.get_double('trex-scratch-warp'); return {x: scale, y: scale}; } } diff --git a/src/TVEffect.js b/src/effects/TVEffect.js similarity index 89% rename from src/TVEffect.js rename to src/effects/TVEffect.js index b7097f7..578f9a1 100644 --- a/src/TVEffect.js +++ b/src/effects/TVEffect.js @@ -66,7 +66,7 @@ var TVEffect = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. '*-close-effect'), and its animation time + // effect is enabled currently (e.g. '*-enable-effect'), and its animation time // (e.g. '*-animation-time'). getNick() { return 'tv'; @@ -80,19 +80,11 @@ var TVEffect = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/TVEffect.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('tv-animation-time'); dialog.bindColorButton('tv-effect-color'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('tv-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/TVGlitch.js b/src/effects/TVGlitch.js similarity index 89% rename from src/TVGlitch.js rename to src/effects/TVGlitch.js index 4faebf9..155f97d 100644 --- a/src/TVGlitch.js +++ b/src/effects/TVGlitch.js @@ -52,12 +52,9 @@ var TVGlitch = class { shader._uSpeed = shader.get_uniform_location('uSpeed'); // Write all uniform values at the start of each animation. - shader.connect('begin-animation', (shader, settings) => { + shader.connect('begin-animation', (shader, settings, forOpening, testMode) => { const c = Clutter.Color.from_string(settings.get_string('tv-glitch-color'))[1]; - // If we are performing an integration tests, we use a fixed seed. - const testMode = settings.get_boolean('test-mode'); - // clang-format off shader.set_uniform_float(shader._uSeed, 1, [testMode ? 0 : Math.random()]); shader.set_uniform_float(shader._uColor, 4, [c.red / 255, c.green / 255, c.blue / 255, c.alpha / 255]); @@ -92,22 +89,14 @@ var TVGlitch = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/TVGlitch.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('tv-glitch-animation-time'); dialog.bindAdjustment('tv-glitch-scale'); dialog.bindAdjustment('tv-glitch-speed'); dialog.bindAdjustment('tv-glitch-strength'); dialog.bindColorButton('tv-glitch-color'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('tv-glitch-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/Wisps.js b/src/effects/Wisps.js similarity index 86% rename from src/Wisps.js rename to src/effects/Wisps.js index 76fe75d..48078ba 100644 --- a/src/Wisps.js +++ b/src/effects/Wisps.js @@ -50,13 +50,9 @@ var Wisps = class { shader._uScale = shader.get_uniform_location('uScale'); // Write all uniform values at the start of each animation. - shader.connect('begin-animation', (shader, settings) => { + shader.connect('begin-animation', (shader, settings, forOpening, testMode) => { const c = Clutter.Color.from_string(settings.get_string('wisps-color'))[1]; - // If we are currently performing integration test, the animation uses a fixed - // seed. - const testMode = settings.get_boolean('test-mode'); - // clang-format off shader.set_uniform_float(shader._uSeed, 2, [testMode ? 0 : Math.random(), testMode ? 0 : Math.random()]); shader.set_uniform_float(shader._uColor, 3, [c.red / 255, c.green / 255, c.blue / 255]); @@ -75,7 +71,7 @@ var Wisps = class { // This will be called in various places where a unique identifier for this effect is // required. It should match the prefix of the settings keys which store whether the - // effect is enabled currently (e.g. the '*-close-effect'). + // effect is enabled currently (e.g. the '*-enable-effect'). getNick() { return 'wisps'; } @@ -88,20 +84,12 @@ var Wisps = class { // -------------------------------------------------------------------- API for prefs.js - // This is called by the preferences dialog. It loads the settings page for this effect, - // and binds all properties to the settings. - getPreferences(dialog) { - - // Add the settings page to the builder. - dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/Wisps.ui`); - - // Bind all properties. + // This is called by the preferences dialog whenever a new effect profile is loaded. It + // binds all user interface elements to the respective settings keys of the profile. + bindPreferences(dialog) { dialog.bindAdjustment('wisps-animation-time'); dialog.bindAdjustment('wisps-scale'); dialog.bindColorButton('wisps-color'); - - // Finally, return the new settings page. - return dialog.getBuilder().get_object('wisps-prefs'); } // ---------------------------------------------------------------- API for extension.js diff --git a/src/migrate.js b/src/migrate.js new file mode 100644 index 0000000..29c577f --- /dev/null +++ b/src/migrate.js @@ -0,0 +1,223 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// ) ( // +// ( /( ( ( ) ( ( ( ( )\ ) ( ( // +// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( // +// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ // +// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) // +// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< // +// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ // +// |__/ // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: Simon Schneegans +// SPDX-License-Identifier: GPL-3.0-or-later + +'use strict'; + +const ExtensionUtils = imports.misc.extensionUtils; +const Me = imports.misc.extensionUtils.getCurrentExtension(); +const ProfileManager = Me.imports.src.ProfileManager.ProfileManager; +const utils = Me.imports.src.utils; + +// Migrating from pre-27 versions is pretty involved. Before, all settings were stored in +// the standard Gio.Settings backend. Now, there are effect profiles. Depending on the +// settings one or two profiles may be required. +async function fromVersion26() { + return utils + .executeCommand(['dconf', 'dump', '/org/gnome/shell/extensions/burn-my-windows/']) + .catch(r => utils.debug('Failed to get old settings for effect migration: ' + r)) + .then(r => { + utils.debug('Starting Burn-My-Windows profile migration (old version <= 26)!'); + + // We use this to write the new profiles. + const profileManager = new ProfileManager(); + + // The default value of this was false, so not-present is equal to false. + const destroyDialogs = r.includes('destroy-dialogs=true'); + if (!destroyDialogs) { + utils.debug('Only normal windows will be burned by the new profile(s).'); + } + + // The default value of this was false, so not-present is equal to false. + const disableOnBattery = r.includes('disable-on-battery=true'); + if (disableOnBattery) { + utils.debug('The new profile(s) will not be active on battery.'); + } + + // The default value of this was false, so not-present is equal to false. + const disableOnPowerSave = r.includes('disable-on-power-save=true'); + if (disableOnPowerSave) { + utils.debug('The new profile(s) will not be active in power-save mode.'); + } + + // Remove some unnecessary lines. + r = r.replace(/^active-profile=.*\n?/gm, ''); + r = r.replace(/^test-mode=.*\n?/gm, ''); + r = r.replace(/^last-extension-version=.*\n?/gm, ''); + r = r.replace(/^last-prefs-version=.*\n?/gm, ''); + r = r.replace(/^destroy-dialogs=.*\n?/gm, ''); + r = r.replace(/^disable-on-battery=.*\n?/gm, ''); + r = r.replace(/^disable-on-power-save=.*\n?/gm, ''); + r = r.replace(/^.*-preview-.*\n?/gm, ''); + r = r.replace('[/]\n', ''); + r = r.trim(); + + // There were some inconsistencies in the key names. The update fixes them. + r.replace('flame-', 'fire-'); + r.replace('claw-', 'trex-'); + + // Find all effects which were used for openeing and closing. This first extracts + // all lines which end in "-open-effect=true" and then remove this suffix from the + // lines. This leaves only the effect nicks. + let lines = r.split('\n'); + let openEffects = lines.filter(l => l.includes('-open-effect=true')) + .map(l => l.replace('-open-effect=true', '')); + let closeEffects = lines.filter(l => l.includes('-close-effect=true')) + .map(l => l.replace('-close-effect=true', '')); + + // The fire-close effect is enabled per default, so we have to add it if it's not + // explicitly disabled. + if (!r.includes('fire-close-effect=false') && !closeEffects.includes('fire')) { + closeEffects.push('fire'); + } + + // Print all effects we've found. + utils.debug('Enabled open effects: ' + openEffects); + utils.debug('Enabled close effects: ' + closeEffects); + + // If the same effects were used for opening and closing windows or there is either + // no opening or no closing animation configured, only one profile is required. Else + // we have to create two new profiles. + const numProfiles = openEffects.join() == closeEffects.join() ? 1 : 2; + if (numProfiles == 1) { + utils.debug('Only one profile is required.'); + } else if (closeEffects.length == 0) { + utils.debug('Only a window-open profile is required.'); + } else if (openEffects.length == 0) { + utils.debug('Only a window-close profile is required.'); + } else { + utils.debug('Two profiles are required.'); + } + + // Remove all open / close lines. + const profileLines = + lines.filter(l => !l.includes('-close-effect=') && !l.includes('-open-effect=')); + + // Add the header. + profileLines.unshift('[burn-my-windows-profile]'); + + // Push the line which makes the profile only apply to normal windows. + if (!destroyDialogs) { + profileLines.push('profile-window-type=1'); + } + + // Push the line which makes the profile only active when plugged in. + if (disableOnBattery) { + profileLines.push('profile-power-mode=2'); + } + + // Push the line which makes the profile only active when on balanced or performance + // mode. + if (disableOnPowerSave) { + profileLines.push('profile-power-profile=5'); + } + + // Now comes a bit of code repetition, but it is more readable this way. + if (numProfiles == 1) { + + // Add all relevant effects. + openEffects.forEach(e => profileLines.push(e + '-enable-effect=true')); + + // The fire effect is enabled per default, so we have to explicitly disable it if + // not required. + if (!openEffects.includes('fire')) { + profileLines.push('fire-enable-effect=false'); + } + + // Print and save the new profile. + const profile = profileLines.join('\n'); + + utils.debug('The new profile:'); + utils.debug(profile); + + profileManager.createProfile(profile); + + } else if (closeEffects.length == 0) { + + // This profile is only for window openeing. + profileLines.push('profile-animation-type=1') + + // Add all relevant effects. + openEffects.forEach(e => profileLines.push(e + '-enable-effect=true')); + + // The fire effect is enabled per default, so we have to explicitly disable it if + // not required. + if (!openEffects.includes('fire')) { + profileLines.push('fire-enable-effect=false'); + } + + // Print and save the new profile. + const profile = profileLines.join('\n'); + + utils.debug('The new window-open profile:'); + utils.debug(profile); + + profileManager.createProfile(profile); + + } else if (openEffects.length == 0) { + + // This profile is only for window closing. + profileLines.push('profile-animation-type=2') + + // Add all relevant effects. + closeEffects.forEach(e => profileLines.push(e + '-enable-effect=true')); + + // The fire effect is enabled per default, so we have to explicitly disable it if + // not required. + if (!closeEffects.includes('fire')) { + profileLines.push('fire-enable-effect=false'); + } + + // Print and save the new profile. + const profile = profileLines.join('\n'); + + utils.debug('The new window-close profile:'); + utils.debug(profile); + + profileManager.createProfile(profile); + + + } else { + + const openProfileLines = [...profileLines, 'profile-animation-type=1']; + const closeProfileLines = [...profileLines, 'profile-animation-type=2']; + + // Add all relevant effects. + openEffects.forEach(e => openProfileLines.push(e + '-enable-effect=true')); + closeEffects.forEach(e => closeProfileLines.push(e + '-enable-effect=true')); + + // The fire effect is enabled per default, so we have to explicitly disable it if + // not required. + if (!closeEffects.includes('fire')) { + closeProfileLines.push('fire-enable-effect=false'); + } + + if (!openEffects.includes('fire')) { + openProfileLines.push('fire-enable-effect=false'); + } + + // Print and save the new profiles. + const openProfile = openProfileLines.join('\n'); + const closeProfile = closeProfileLines.join('\n'); + + utils.debug('The new open-window profile:'); + utils.debug(openProfile); + utils.debug('The new close-window profile:'); + utils.debug(closeProfile); + + profileManager.createProfile(openProfile); + profileManager.createProfile(closeProfile); + } + }) + .catch(r => utils.debug('Failed to migrate settings: ' + r)); +} \ No newline at end of file diff --git a/src/utils.js b/src/utils.js index 8e5024f..5e9f5c9 100644 --- a/src/utils.js +++ b/src/utils.js @@ -45,6 +45,8 @@ const [GS_MAJOR, GS_MINOR] = Config.PACKAGE_VERSION.split('.').map(toNumericVers const ExtensionUtils = imports.misc.extensionUtils; const Me = imports.misc.extensionUtils.getCurrentExtension(); +const _ = imports.gettext.domain('burn-my-windows').gettext; + // This method can be used to write a message to GNOME Shell's log. This is enhances // the standard log() functionality by prepending the extension's name and the location // where the message was logged. As the extensions name is part of the location, you @@ -107,4 +109,47 @@ function shellVersionIsAtLeast(major, minor) { function getStringResource(path) { const data = Gio.resources_lookup_data(path, 0); return ByteArray.toString(ByteArray.fromGBytes(data)); -} \ No newline at end of file +} + +// Executes a command asynchronously and returns the output from 'stdout' on success or +// throw an error with output from 'stderr' on failure. If given, input will be passed to +// 'stdin' and cancellable can be used to stop the process before it finishes. +// This is directly taken from here: +// https://gjs.guide/guides/gio/subprocesses.html#complete-examples +async function executeCommand(argv, input = null, cancellable = null) { + let cancelId = 0; + let flags = (Gio.SubprocessFlags.STDOUT_PIPE | Gio.SubprocessFlags.STDERR_PIPE); + + if (input !== null) flags |= Gio.SubprocessFlags.STDIN_PIPE; + + let proc = new Gio.Subprocess({argv: argv, flags: flags}); + proc.init(cancellable); + + if (cancellable instanceof Gio.Cancellable) { + cancelId = cancellable.connect(() => proc.force_exit()); + } + + return new Promise((resolve, reject) => { + proc.communicate_utf8_async(input, null, (proc, res) => { + try { + let [, stdout, stderr] = proc.communicate_utf8_finish(res); + let status = proc.get_exit_status(); + + if (status !== 0) { + throw new Gio.IOErrorEnum({ + code: Gio.io_error_from_errno(status), + message: stderr ? stderr.trim() : GLib.strerror(status) + }); + } + + resolve(stdout.trim()); + } catch (e) { + reject(e); + } finally { + if (cancelId > 0) { + cancellable.disconnect(cancelId); + } + } + }); + }); +} diff --git a/tests/generate-references.sh b/tests/generate-references.sh index 6c2d5bd..ac6b819 100755 --- a/tests/generate-references.sh +++ b/tests/generate-references.sh @@ -60,7 +60,8 @@ EXTENSION="burn-my-windows@schneegans.github.com" # All references images of the effects are captured at & cropped to this region # in the center of the screen. This is kind of arbitrary, but has been choosen so that # something is visible from each effect. -CROP="100x100+900+500" +EFFECT_CROP="100x100+900+500" +PREFS_CROP="100x100+700+300" # Run the container. For more info, visit https://github.com/Schneegans/gnome-shell-pod. POD=$(podman run --rm --cap-add=SYS_NICE --cap-add=IPC_LOCK -td "${IMAGE}") @@ -95,10 +96,11 @@ set_setting() { set org.gnome.shell.extensions.burn-my-windows "${1}" "${2}" } -# This makes a screen capture (cropped to $CROP) inside the container and stores it -# on the host relative to this script with the given file name. +# This makes a screen capture (cropped to either $EFFECT_CROP or P$REFS_CROP as given through the +# second parameter) inside the container and stores it on the host relative to this script with the +# given file name. capture() { - podman cp "${POD}:/opt/Xvfb_screen0" - | tar xf - --to-command "convert xwd:- -crop ${CROP} ${1}" + podman cp "${POD}:/opt/Xvfb_screen0" - | tar xf - --to-command "convert xwd:- -crop ${2} ${1}" } # This opens the extensions preferences dialog and captures two images: One during the @@ -109,16 +111,15 @@ capture() { capture_effect() { echo "Capturing ${1} effect." - set_setting "open-preview-effect" "${1}" - set_setting "close-preview-effect" "${1}" + set_setting "preview-effect" "${1}" sleep 1 do_in_pod gnome-terminal sleep 3 - capture "tests/references/${1}-open-${SESSION}-${FEDORA_VERSION}.png" + capture "tests/references/${1}-open-${SESSION}-${FEDORA_VERSION}.png" "${EFFECT_CROP}" send_keystroke "Alt+F4" sleep 3 - capture "tests/references/${1}-close-${SESSION}-${FEDORA_VERSION}.png" + capture "tests/references/${1}-close-${SESSION}-${FEDORA_VERSION}.png" "${EFFECT_CROP}" } # ----------------------------------------------------- wait for the container to start up @@ -171,7 +172,7 @@ sleep 3 echo "Opening Preferences." do_in_pod gnome-extensions prefs "${EXTENSION}" sleep 3 -capture "tests/references/preferences-${SESSION}-${FEDORA_VERSION}.png" +capture "tests/references/preferences-${SESSION}-${FEDORA_VERSION}.png" "${PREFS_CROP}" send_keystroke "Alt+F4" # The test mode ensures that the animations are "frozen" and do not change in time. diff --git a/tests/references/preferences-gnome-wayland-nested-32.png b/tests/references/preferences-gnome-wayland-nested-32.png index 2c7169d..c711416 100755 Binary files a/tests/references/preferences-gnome-wayland-nested-32.png and b/tests/references/preferences-gnome-wayland-nested-32.png differ diff --git a/tests/references/preferences-gnome-wayland-nested-33.png b/tests/references/preferences-gnome-wayland-nested-33.png index f8ea612..ff6aec1 100755 Binary files a/tests/references/preferences-gnome-wayland-nested-33.png and b/tests/references/preferences-gnome-wayland-nested-33.png differ diff --git a/tests/references/preferences-gnome-wayland-nested-34.png b/tests/references/preferences-gnome-wayland-nested-34.png index db2b185..74aae27 100755 Binary files a/tests/references/preferences-gnome-wayland-nested-34.png and b/tests/references/preferences-gnome-wayland-nested-34.png differ diff --git a/tests/references/preferences-gnome-wayland-nested-35.png b/tests/references/preferences-gnome-wayland-nested-35.png index db2b185..8060d9d 100755 Binary files a/tests/references/preferences-gnome-wayland-nested-35.png and b/tests/references/preferences-gnome-wayland-nested-35.png differ diff --git a/tests/references/preferences-gnome-wayland-nested-36.png b/tests/references/preferences-gnome-wayland-nested-36.png index f3e8eee..17d3096 100755 Binary files a/tests/references/preferences-gnome-wayland-nested-36.png and b/tests/references/preferences-gnome-wayland-nested-36.png differ diff --git a/tests/references/preferences-gnome-wayland-nested-37.png b/tests/references/preferences-gnome-wayland-nested-37.png index 93e98e3..6cb7837 100644 Binary files a/tests/references/preferences-gnome-wayland-nested-37.png and b/tests/references/preferences-gnome-wayland-nested-37.png differ diff --git a/tests/references/preferences-gnome-xsession-32.png b/tests/references/preferences-gnome-xsession-32.png index 2c7169d..bb3167a 100755 Binary files a/tests/references/preferences-gnome-xsession-32.png and b/tests/references/preferences-gnome-xsession-32.png differ diff --git a/tests/references/preferences-gnome-xsession-33.png b/tests/references/preferences-gnome-xsession-33.png index f8ea612..63cca04 100755 Binary files a/tests/references/preferences-gnome-xsession-33.png and b/tests/references/preferences-gnome-xsession-33.png differ diff --git a/tests/references/preferences-gnome-xsession-34.png b/tests/references/preferences-gnome-xsession-34.png index add2dbd..0ea03e0 100755 Binary files a/tests/references/preferences-gnome-xsession-34.png and b/tests/references/preferences-gnome-xsession-34.png differ diff --git a/tests/references/preferences-gnome-xsession-35.png b/tests/references/preferences-gnome-xsession-35.png index add2dbd..009bf75 100755 Binary files a/tests/references/preferences-gnome-xsession-35.png and b/tests/references/preferences-gnome-xsession-35.png differ diff --git a/tests/references/preferences-gnome-xsession-36.png b/tests/references/preferences-gnome-xsession-36.png index 77522f3..48cfa93 100755 Binary files a/tests/references/preferences-gnome-xsession-36.png and b/tests/references/preferences-gnome-xsession-36.png differ diff --git a/tests/references/preferences-gnome-xsession-37.png b/tests/references/preferences-gnome-xsession-37.png index aae55cc..be8a2a9 100644 Binary files a/tests/references/preferences-gnome-xsession-37.png and b/tests/references/preferences-gnome-xsession-37.png differ diff --git a/tests/run-test.sh b/tests/run-test.sh index 0599323..8d79d1b 100755 --- a/tests/run-test.sh +++ b/tests/run-test.sh @@ -134,8 +134,7 @@ set_setting() { test_effect() { echo "Testing ${1} effect." - set_setting "open-preview-effect" "${1}" - set_setting "close-preview-effect" "${1}" + set_setting "preview-effect" "${1}" sleep 1 do_in_pod gnome-terminal