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 +
kcolorcombo.h
+
+
+ + +
\ 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