From ab0daa17016a67768bc38f8bc61bcd42f4693655 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Thu, 2 Feb 2012 17:58:31 +0100 Subject: [PATCH] FadeDesktop effect ported to JavaScript --- effects/CMakeLists.txt | 6 +- effects/fadedesktop/CMakeLists.txt | 16 +-- effects/fadedesktop/fadedesktop.cpp | 117 ------------------ .../contents/code/main.js} | 61 ++++----- .../metadata.desktop} | 9 +- 5 files changed, 39 insertions(+), 170 deletions(-) delete mode 100644 effects/fadedesktop/fadedesktop.cpp rename effects/fadedesktop/{fadedesktop.h => package/contents/code/main.js} (50%) rename effects/fadedesktop/{fadedesktop.desktop => package/metadata.desktop} (97%) diff --git a/effects/CMakeLists.txt b/effects/CMakeLists.txt index ed529d244b..6f0ef11e87 100644 --- a/effects/CMakeLists.txt +++ b/effects/CMakeLists.txt @@ -79,6 +79,11 @@ set( kwin4_effect_include_directories ) # scripted effects add_subdirectory( fade ) +# scripted effects only relevant to desktop +if( NOT KWIN_MOBILE_EFFECTS ) + add_subdirectory( fadedesktop ) +endif( NOT KWIN_MOBILE_EFFECTS ) + ############################################################################### # Built-in effects go here @@ -97,7 +102,6 @@ if( NOT KWIN_MOBILE_EFFECTS ) include( desktopgrid/CMakeLists.txt ) include( diminactive/CMakeLists.txt ) include( dimscreen/CMakeLists.txt ) - include( fadedesktop/CMakeLists.txt ) include( fallapart/CMakeLists.txt ) include( highlightwindow/CMakeLists.txt ) include( magiclamp/CMakeLists.txt ) diff --git a/effects/fadedesktop/CMakeLists.txt b/effects/fadedesktop/CMakeLists.txt index 61bd4fcacc..e68dfbc062 100644 --- a/effects/fadedesktop/CMakeLists.txt +++ b/effects/fadedesktop/CMakeLists.txt @@ -1,12 +1,6 @@ -####################################### -# Effect +install(DIRECTORY package/ + DESTINATION ${DATA_INSTALL_DIR}/kwin/effects/kwin4_effect_fadedesktop) -# Source files -set( kwin4_effect_builtins_sources ${kwin4_effect_builtins_sources} - fadedesktop/fadedesktop.cpp - ) - -# .desktop files -install( FILES - fadedesktop/fadedesktop.desktop - DESTINATION ${SERVICES_INSTALL_DIR}/kwin ) +install(FILES package/metadata.desktop + DESTINATION ${SERVICES_INSTALL_DIR}/kwin + RENAME kwin4_effect_fadedesktop.desktop) diff --git a/effects/fadedesktop/fadedesktop.cpp b/effects/fadedesktop/fadedesktop.cpp deleted file mode 100644 index 5d71ef7355..0000000000 --- a/effects/fadedesktop/fadedesktop.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/******************************************************************** - KWin - the KDE window manager - This file is part of the KDE project. - -Copyright (C) 2009 Lucas Murray - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*********************************************************************/ - -#include "fadedesktop.h" - -#include - -namespace KWin -{ - -KWIN_EFFECT(fadedesktop, FadeDesktopEffect) - -FadeDesktopEffect::FadeDesktopEffect() - : m_fading(false) -{ - connect(effects, SIGNAL(desktopChanged(int,int)), this, SLOT(slotDesktopChanged(int))); - m_timeline.setCurveShape(QTimeLine::LinearCurve); - reconfigure(ReconfigureAll); -} - -void FadeDesktopEffect::reconfigure(ReconfigureFlags) -{ - m_timeline.setDuration(animationTime(250)); -} - -void FadeDesktopEffect::prePaintScreen(ScreenPrePaintData &data, int time) -{ - if (m_fading) { - m_timeline.setCurrentTime(m_timeline.currentTime() + time); - - // PAINT_SCREEN_BACKGROUND_FIRST is needed because screen will be actually painted more than once, - // so with normal screen painting second screen paint would erase parts of the first paint - if (m_timeline.currentValue() != 1.0) - data.mask |= PAINT_SCREEN_TRANSFORMED | PAINT_SCREEN_BACKGROUND_FIRST; - else { - m_fading = false; - m_timeline.setCurrentTime(0); - foreach (EffectWindow * w, effects->stackingOrder()) { - w->setData(WindowForceBlurRole, QVariant(false)); - } - effects->setActiveFullScreenEffect(NULL); - } - } - effects->prePaintScreen(data, time); -} - -void FadeDesktopEffect::postPaintScreen() -{ - if (m_fading) - effects->addRepaintFull(); - effects->postPaintScreen(); -} - -void FadeDesktopEffect::prePaintWindow(EffectWindow *w, WindowPrePaintData &data, int time) -{ - if (m_fading) { - if (w->isOnDesktop(m_oldDesktop)) - w->enablePainting(EffectWindow::PAINT_DISABLED_BY_DESKTOP); - data.setTranslucent(); - } - effects->prePaintWindow(w, data, time); -} - -void FadeDesktopEffect::paintWindow(EffectWindow *w, int mask, QRegion region, WindowPaintData &data) -{ - if (m_fading && !(w->isOnCurrentDesktop() && w->isOnDesktop(m_oldDesktop))) { - if (w->isOnDesktop(m_oldDesktop)) - data.opacity *= 1 - m_timeline.currentValue(); - else - data.opacity *= m_timeline.currentValue(); - } - effects->paintWindow(w, mask, region, data); -} - -void FadeDesktopEffect::slotDesktopChanged(int old) -{ - if (effects->activeFullScreenEffect() && effects->activeFullScreenEffect() != this) - return; - - // TODO: Fix glitches when fading while a previous fade is still happening - - effects->setActiveFullScreenEffect(this); - m_fading = true; - m_timeline.setCurrentTime(0); - m_oldDesktop = old; - foreach (EffectWindow * w, effects->stackingOrder()) { - w->setData(WindowForceBlurRole, QVariant(true)); - } - - effects->addRepaintFull(); -} - -bool FadeDesktopEffect::isActive() const -{ - return m_fading; -} - -} // namespace - -#include "fadedesktop.moc" diff --git a/effects/fadedesktop/fadedesktop.h b/effects/fadedesktop/package/contents/code/main.js similarity index 50% rename from effects/fadedesktop/fadedesktop.h rename to effects/fadedesktop/package/contents/code/main.js index d5d8b36784..5c9cb83e88 100644 --- a/effects/fadedesktop/fadedesktop.h +++ b/effects/fadedesktop/package/contents/code/main.js @@ -2,7 +2,8 @@ KWin - the KDE window manager This file is part of the KDE project. -Copyright (C) 2009 Lucas Murray + Copyright (C) 2009 Lucas Murray + Copyright (C) 2012 Martin Gräßlin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,39 +18,25 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************/ - -#ifndef KWIN_FADEDESKTOP_H -#define KWIN_FADEDESKTOP_H - -#include -#include -#include - -namespace KWin -{ - -class FadeDesktopEffect - : public Effect -{ - Q_OBJECT -public: - FadeDesktopEffect(); - virtual void reconfigure(ReconfigureFlags); - virtual void prePaintScreen(ScreenPrePaintData &data, int time); - virtual void postPaintScreen(); - virtual void prePaintWindow(EffectWindow *w, WindowPrePaintData &data, int time); - virtual void paintWindow(EffectWindow *w, int mask, QRegion region, WindowPaintData &data); - virtual bool isActive() const; - -private Q_SLOTS: - void slotDesktopChanged(int old); - -private: - bool m_fading; - QTimeLine m_timeline; - int m_oldDesktop; -}; - -} // namespace - -#endif +var duration; +function loadConfig() { + duration = animationTime(250); +} +loadConfig(); +effect.configChanged.connect(function() { + loadConfig(); +}); +effects.desktopChanged.connect(function(oldDesktop, newDesktop) { + var stackingOrder = effects.stackingOrder; + for (var i=0; i