diff --git a/kwin/build.sh b/kwin/build.sh
index 2e2d520..6fa2c74 100755
--- a/kwin/build.sh
+++ b/kwin/build.sh
@@ -22,30 +22,40 @@ cd "$( cd "$( dirname "$0" )" && pwd )" || \
BUILD_DIR="_build"
-mkdir -p "${BUILD_DIR}"
+mkdir -p "$BUILD_DIR"
-# $1: The nick of the effect (e.g. "tv")
-# $2: The name of the effect (e.g. "TV Effect")
-# $3: A short description of the effect (e.g. "Make windows close like turning off a TV")
+# $1: The nick of the effect (e.g. "energize-a")
+# $2: The name of the effect (e.g. "Energize A")
+# $3: A short description of the effect (e.g. "Beam your windows away")
generate() {
+ # Use the nick for the effect's directory name by replacing dashes by underscoares.
+ DIR_NAME="kwin4_effect_$(echo $1 | tr '-' '_')"
+
+ # Use the name of the effect for the JavaScript class name by removing all spaces.
+ EFFECT_CLASS="BurnMyWindows$(echo $2 | tr -d ' ')"
+
# Create resource directories.
- mkdir -p "${BUILD_DIR}/kwin4_effect_$1/contents/shaders"
- mkdir -p "${BUILD_DIR}/kwin4_effect_$1/contents/code"
- mkdir -p "${BUILD_DIR}/kwin4_effect_$1/contents/config"
- mkdir -p "${BUILD_DIR}/kwin4_effect_$1/contents/ui"
+ mkdir -p "$BUILD_DIR/$DIR_NAME/contents/shaders"
+ mkdir -p "$BUILD_DIR/$DIR_NAME/contents/code"
+ mkdir -p "$BUILD_DIR/$DIR_NAME/contents/config"
+ mkdir -p "$BUILD_DIR/$DIR_NAME/contents/ui"
- cp "kwin4_effect_$1/main.xml" "${BUILD_DIR}/kwin4_effect_$1/contents/config"
- cp "kwin4_effect_$1/config.ui" "${BUILD_DIR}/kwin4_effect_$1/contents/ui"
+ # Copy the config and ui files.
+ cp "$DIR_NAME/main.xml" "$BUILD_DIR/$DIR_NAME/contents/config"
+ cp "$DIR_NAME/config.ui" "$BUILD_DIR/$DIR_NAME/contents/ui"
- perl -pe "s/%LOAD_CONFIG%/$(tr '/' '\f' < "kwin4_effect_$1/loadConfig.js")/g;" \
- main.js.in | tr '\f' '/' > "${BUILD_DIR}/kwin4_effect_$1/contents/code/main.js"
+ perl -pe "s/%LOAD_CONFIG%/$(tr '/' '\f' < "$DIR_NAME/loadConfig.js")/g;" \
+ main.js.in | tr '\f' '/' > "$BUILD_DIR/$DIR_NAME/contents/code/main.js"
- perl -pi -e "s/%NICK%/$1/g;" "${BUILD_DIR}/kwin4_effect_$1/contents/code/main.js"
+ perl -pi -e "s/%EFFECT_CLASS%/$EFFECT_CLASS/g;" "$BUILD_DIR/$DIR_NAME/contents/code/main.js"
+ perl -pi -e "s/%SHADER_NAME%/$1/g;" "$BUILD_DIR/$DIR_NAME/contents/code/main.js"
- perl -pe "s/%NICK%/$1/g;" metadata.desktop.in > "${BUILD_DIR}/kwin4_effect_$1/metadata.desktop"
- perl -pi -e "s/%NAME%/$2/g;" "${BUILD_DIR}/kwin4_effect_$1/metadata.desktop"
- perl -pi -e "s/%DESCRIPTION%/$3/g;" "${BUILD_DIR}/kwin4_effect_$1/metadata.desktop"
+ cp metadata.desktop.in "$BUILD_DIR/$DIR_NAME/metadata.desktop"
+ perl -pi -e "s/%ICON%/$1/g;" "$BUILD_DIR/$DIR_NAME/metadata.desktop"
+ perl -pi -e "s/%NAME%/$2/g;" "$BUILD_DIR/$DIR_NAME/metadata.desktop"
+ perl -pi -e "s/%DESCRIPTION%/$3/g;" "$BUILD_DIR/$DIR_NAME/metadata.desktop"
+ perl -pi -e "s/%DIR_NAME%/$DIR_NAME/g;" "$BUILD_DIR/$DIR_NAME/metadata.desktop"
{
echo "#version 140"
@@ -55,7 +65,7 @@ generate() {
echo ""
cat "../resources/shaders/common.glsl"
cat "../resources/shaders/$1.frag"
- } > "${BUILD_DIR}/kwin4_effect_$1/contents/shaders/$1_core.frag"
+ } > "$BUILD_DIR/$DIR_NAME/contents/shaders/$1_core.frag"
{
echo "#define KWIN_LEGACY"
@@ -64,8 +74,9 @@ generate() {
echo ""
cat "../resources/shaders/common.glsl"
cat "../resources/shaders/$1.frag"
- } > "${BUILD_DIR}/kwin4_effect_$1/contents/shaders/$1.frag"
+ } > "$BUILD_DIR/$DIR_NAME/contents/shaders/$1.frag"
}
generate "tv" "TV Effect" "Make windows close like turning off a TV"
+generate "energize-a" "Energize A" "Beam your windows away"
# generate "fire" "Fire" "Make windows burn"
\ No newline at end of file
diff --git a/kwin/kwin4_effect_energize_a/config.ui b/kwin/kwin4_effect_energize_a/config.ui
new file mode 100755
index 0000000..1a8d43e
--- /dev/null
+++ b/kwin/kwin4_effect_energize_a/config.ui
@@ -0,0 +1,80 @@
+
+
+ BMWtvEffectConfigForm
+
+
+
+ 0
+ 0
+ 498
+ 451
+
+
+
+ -
+
+
+ Duration:
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ &Color:
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ kcfg_Color
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Default
+
+
+ milliseconds
+
+
+ 9999
+
+
+ 5
+
+
+
+
+
+
+
+ KColorCombo
+ QComboBox
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kwin/kwin4_effect_energize_a/loadConfig.js b/kwin/kwin4_effect_energize_a/loadConfig.js
new file mode 100644
index 0000000..80eb995
--- /dev/null
+++ b/kwin/kwin4_effect_energize_a/loadConfig.js
@@ -0,0 +1,8 @@
+loadConfig() {
+ const defaultDuration = 2000;
+ const duration = effect.readConfig('Duration', defaultDuration) || defaultDuration;
+ this.duration = animationTime(duration);
+
+ effect.setUniform(this.shader, 'uColor', effect.readConfig('Color', 'white'));
+ effect.setUniform(this.shader, 'uScale', effect.readConfig('Scale', 1.0));
+}
\ No newline at end of file
diff --git a/kwin/kwin4_effect_energize_a/main.xml b/kwin/kwin4_effect_energize_a/main.xml
new file mode 100755
index 0000000..0e767f5
--- /dev/null
+++ b/kwin/kwin4_effect_energize_a/main.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ 0
+
+
+ 1
+
+
+ 255, 200, 50
+
+
+
\ No newline at end of file
diff --git a/kwin/main.js.in b/kwin/main.js.in
index 1e90177..f954693 100755
--- a/kwin/main.js.in
+++ b/kwin/main.js.in
@@ -17,7 +17,7 @@ const blacklist = [
"ksplashqml ksplashqml"
];
-class BMW%NICK%Effect {
+class %EFFECT_CLASS% {
constructor() {
effect.configChanged.connect(this.loadConfig.bind(this));
effect.animationEnded.connect(this.cleanupForcedRoles.bind(this));
@@ -25,7 +25,7 @@ class BMW%NICK%Effect {
effects.windowClosed.connect(this.slotWindowClosed.bind(this));
effects.windowDataChanged.connect(this.slotWindowDataChanged.bind(this));
- this.shader = effect.addFragmentShader(Effect.MapTexture, "%NICK%.frag");
+ this.shader = effect.addFragmentShader(Effect.MapTexture, "%SHADER_NAME%.frag");
this.loadConfig();
}
@@ -85,7 +85,7 @@ class BMW%NICK%Effect {
if (effects.hasActiveFullScreenEffect) {
return;
}
- if (!BMW%NICK%Effect.isScaleWindow(window)) {
+ if (!%EFFECT_CLASS%.isScaleWindow(window)) {
return;
}
if (!window.visible) {
@@ -122,7 +122,7 @@ class BMW%NICK%Effect {
if (effects.hasActiveFullScreenEffect) {
return;
}
- if (!BMW%NICK%Effect.isScaleWindow(window)) {
+ if (!%EFFECT_CLASS%.isScaleWindow(window)) {
return;
}
if (!window.visible || window.skipsCloseAnimation) {
@@ -176,4 +176,4 @@ class BMW%NICK%Effect {
}
}
-new BMW%NICK%Effect();
+new %EFFECT_CLASS%();
diff --git a/kwin/metadata.desktop.in b/kwin/metadata.desktop.in
index 25dc34c..4223b8b 100755
--- a/kwin/metadata.desktop.in
+++ b/kwin/metadata.desktop.in
@@ -1,13 +1,13 @@
[Desktop Entry]
Name=%NAME%
-Icon=preferences-system-windows-effect-%NICK%
+Icon=preferences-system-windows-effect-%ICON%
Comment=%DESCRIPTION%
Type=Service
X-KDE-ServiceTypes=KWin/Effect,KCModule
X-KDE-PluginInfo-Author=Vlad Zahorodnii, Martin Flöser, Simon Schneegans
X-KDE-PluginInfo-Email=vlad.zahorodnii@kde.org, mgraesslin@kde.org, code@simonschneegans.de
-X-KDE-PluginInfo-Name=kwin4_effect_%NICK%
+X-KDE-PluginInfo-Name=%DIR_NAME%
X-KDE-PluginInfo-Version=1
X-KDE-PluginInfo-Category=Window Open/Close Animation
X-KDE-PluginInfo-License=GPLv3
@@ -15,7 +15,7 @@ X-KDE-PluginInfo-EnabledByDefault=false
X-KDE-Ordering=60
X-Plasma-API=javascript
X-Plasma-MainScript=code/main.js
-X-KDE-PluginKeyword=kwin4_effect_%NICK%
+X-KDE-PluginKeyword=%DIR_NAME%
X-KDE-Library=kcm_kwin4_genericscripted
X-KWin-Config-TranslationDomain=kwin_effects
X-KWin-Exclusive-Category=toplevel-open-close-animation