Implement a wobbly like effect for kwin.

svn path=/trunk/KDE/kdebase/workspace/; revision=798476
icc-effect-5.14.5
Cédric Borgese 2008-04-18 12:01:47 +00:00
parent a6e32ded65
commit 0b6bb6a95f
10 changed files with 2568 additions and 0 deletions

View File

@ -109,6 +109,7 @@ if(KWIN_HAVE_OPENGL_COMPOSITING)
sharpen.cpp
snow.cpp
trackmouse.cpp
wobblywindows.cpp
)
install( FILES
blur.desktop
@ -123,6 +124,7 @@ if(KWIN_HAVE_OPENGL_COMPOSITING)
sharpen.desktop
snow.desktop
trackmouse.desktop
wobblywindows.desktop
DESTINATION ${SERVICES_INSTALL_DIR}/kwin )
install( FILES
data/trackmouse.png
@ -161,6 +163,8 @@ if(KWIN_HAVE_OPENGL_COMPOSITING)
snow_config.cpp
snow_config.ui
trackmouse_config.cpp
wobblywindows_config.cpp
wobblywindows_config.ui
)
install( FILES
coverswitch_config.desktop
@ -173,6 +177,7 @@ if(KWIN_HAVE_OPENGL_COMPOSITING)
showfps_config.desktop
snow_config.desktop
trackmouse_config.desktop
wobblywindows_config.desktop
DESTINATION ${SERVICES_INSTALL_DIR}/kwin )
endif(KWIN_HAVE_OPENGL_COMPOSITING)

View File

@ -39,6 +39,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "sharpen_config.h"
#include "snow_config.h"
#include "trackmouse_config.h"
#include "wobblywindows_config.h"
#ifdef KWIN_HAVE_XRENDER_COMPOSITING
#include "showfps_config.h"
#endif
@ -73,6 +74,7 @@ KWIN_EFFECT_CONFIG_FACTORY
#define GL_RENDER_PLUGINS \
registerPlugin<KWin::ShowFpsEffectConfig> ("showfps"); \
registerPlugin<KWin::WobblyWindowsEffectConfig> ("wobblywindows"); \
#ifdef KWIN_HAVE_OPENGL_COMPOSITING
K_PLUGIN_FACTORY_DEFINITION(EffectFactory,

1130
effects/wobblywindows.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,17 @@
[Desktop Entry]
Encoding=UTF-8
Name=Wobbly Windows
Icon=kwin-effect-wavywindows
Type=Service
ServiceTypes=KWin/Effect
X-KDE-PluginInfo-Author=Cédric Borgese
X-KDE-PluginInfo-Email=cedric.borgese@gmail.com
X-KDE-PluginInfo-Name=kwin4_effect_wobblywindows
X-KDE-PluginInfo-Version=0.0.1
X-KDE-PluginInfo-Category=Appearance
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=false
X-KDE-Library=kwin4_effect_builtins
X-KDE-Ordering=80

128
effects/wobblywindows.h Normal file
View File

@ -0,0 +1,128 @@
/*****************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2008 Cédric Borgese <cedric.borgese@gmail.com>
You can Freely distribute this program under the GNU General Public
License. See the file "COPYING" for the exact licensing terms.
******************************************************************/
#ifndef WOBBLYWINDOWS_H
#define WOBBLYWINDOWS_H
// Include with base class for effects.
#include <kwineffects.h>
namespace KWin
{
/**
* Effect which wobble windows
**/
class WobblyWindowsEffect : public Effect
{
public:
enum GridFilter
{
NoFilter,
FourRingLinearMean,
MeanWithMean,
MeanWithMedian
};
WobblyWindowsEffect();
virtual ~WobblyWindowsEffect();
virtual void prePaintScreen( ScreenPrePaintData& data, int time );
virtual void prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int time );
virtual void paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data );
virtual void postPaintScreen();
virtual void windowUserMovedResized( EffectWindow* c, bool first, bool last );
virtual void windowClosed( EffectWindow* c );
// Wobbly model parameters
void setRaideur(qreal raideur);
void setAmortissement(qreal amortissement);
void setVelocityThreshold(qreal velocityThreshold);
void setMoveFactor(qreal factor);
void setVelocityFilter(GridFilter filter);
void setAccelerationFilter(GridFilter filter);
GridFilter velocityFilter() const;
GridFilter accelerationFilter() const;
struct Pair
{
qreal x;
qreal y;
};
private:
bool updateWindowWobblyDatas(EffectWindow* w, qreal time);
struct WindowWobblyInfos
{
Pair* origin;
Pair* position;
Pair* velocity;
Pair* acceleration;
Pair* buffer;
// if true, the point is constraint to its "normal" destination
// given by the window position.
// if false, the point is free (i.e. use the physics system to move it)
bool* constraint;
unsigned int width;
unsigned int height;
unsigned int count;
Pair* bezierSurface;
unsigned int bezierWidth;
unsigned int bezierHeight;
unsigned int bezierCount;
bool onConstrain;
};
QHash< const EffectWindow*, WindowWobblyInfos > windows;
QRect m_updateRegion;
qreal m_raideur;
qreal m_amortissement;
qreal m_move_factor;
// the default tesselation for windows
// use qreal instead of int as I really often need
// these values as real to do divisions.
qreal m_xTesselation;
qreal m_yTesselation;
GridFilter m_velocityFilter;
GridFilter m_accelerationFilter;
qreal m_minVelocity;
qreal m_maxVelocity;
qreal m_stopVelocity;
qreal m_minAcceleration;
qreal m_maxAcceleration;
qreal m_stopAcceleration;
void initWobblyInfo(WindowWobblyInfos& wwi, QRect geometry) const;
void freeWobblyInfo(WindowWobblyInfos& wwi) const;
WobblyWindowsEffect::Pair computeBezierPoint(const WindowWobblyInfos& wwi, Pair point) const;
static void fourRingLinearMean(Pair** datas, WindowWobblyInfos& wwi);
static void meanWithMean(Pair** datas, WindowWobblyInfos& wwi);
static void meanWithMedian(Pair** datas, WindowWobblyInfos& wwi);
};
} // namespace KWin
#endif // WOBBLYWINDOWS_H

View File

@ -0,0 +1,503 @@
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2008 Cédric Borgese <cedric.borgese@gmail.com>
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 <http://www.gnu.org/licenses/>.
*********************************************************************/
#include "wobblywindows_config.h"
#include "wobblywindows_constants.h"
#include <kwineffects.h>
#include <klocale.h>
#include <kdebug.h>
#include <KActionCollection>
#include <kaction.h>
#include <KGlobalAccel>
#include <kconfiggroup.h>
#include <QGridLayout>
#ifndef KDE_USE_FINAL
KWIN_EFFECT_CONFIG_FACTORY
#endif
namespace KWin
{
WobblyWindowsEffectConfig::WobblyWindowsEffectConfig(QWidget* parent, const QVariantList& args) :
KCModule(EffectFactory::componentData(), parent, args)
{
m_ui.setupUi(this);
connect(m_ui.spRaideur, SIGNAL(valueChanged(double)), this, SLOT(slotSpRaideur(double)));
connect(m_ui.slRaideur, SIGNAL(sliderMoved(int)), this, SLOT(slotSlRaideur(int)));
connect(m_ui.spAmortissement, SIGNAL(valueChanged(double)), this, SLOT(slotSpAmortissement(double)));
connect(m_ui.slAmortissement, SIGNAL(sliderMoved(int)), this, SLOT(slotSlAmortissement(int)));
connect(m_ui.spMovFactor, SIGNAL(valueChanged(double)), this, SLOT(slotSpMovFactor(double)));
connect(m_ui.slMovFactor, SIGNAL(sliderMoved(int)), this, SLOT(slotSlMovFactor(int)));
connect(m_ui.cbGridFilter, SIGNAL(activated(int)), this, SLOT(slotGridParameterSelected(int)));
connect(m_ui.rbNone, SIGNAL(toggled(bool)), this, SLOT(slotRbNone(bool)));
connect(m_ui.rbRingMean, SIGNAL(toggled(bool)), this, SLOT(slotRbRingMean(bool)));
connect(m_ui.rbMeanMean, SIGNAL(toggled(bool)), this, SLOT(slotRbMeanMean(bool)));
connect(m_ui.rbMeanMedian, SIGNAL(toggled(bool)), this, SLOT(slotRbMeanMedian(bool)));
connect(m_ui.spMinVel, SIGNAL(valueChanged(double)), this, SLOT(slotSpMinVel(double)));
connect(m_ui.slMinVel, SIGNAL(sliderMoved(int)), this, SLOT(slotSlMinVel(int)));
connect(m_ui.spMaxVel, SIGNAL(valueChanged(double)), this, SLOT(slotSpMaxVel(double)));
connect(m_ui.slMaxVel, SIGNAL(sliderMoved(int)), this, SLOT(slotSlMaxVel(int)));
connect(m_ui.spStopVel, SIGNAL(valueChanged(double)), this, SLOT(slotSpStopVel(double)));
connect(m_ui.slStopVel, SIGNAL(sliderMoved(int)), this, SLOT(slotSlStopVel(int)));
connect(m_ui.spMinAcc, SIGNAL(valueChanged(double)), this, SLOT(slotSpMinAcc(double)));
connect(m_ui.slMinAcc, SIGNAL(sliderMoved(int)), this, SLOT(slotSlMinAcc(int)));
connect(m_ui.spMaxAcc, SIGNAL(valueChanged(double)), this, SLOT(slotSpMaxAcc(double)));
connect(m_ui.slMaxAcc, SIGNAL(sliderMoved(int)), this, SLOT(slotSlMaxAcc(int)));
connect(m_ui.spStopAcc, SIGNAL(valueChanged(double)), this, SLOT(slotSpStopAcc(double)));
connect(m_ui.slStopAcc, SIGNAL(sliderMoved(int)), this, SLOT(slotSlStopAcc(int)));
load();
}
WobblyWindowsEffectConfig::~WobblyWindowsEffectConfig()
{
}
void WobblyWindowsEffectConfig::load()
{
KCModule::load();
KConfigGroup conf = EffectsHandler::effectConfig("Wobbly");
qreal raideur = conf.readEntry("Raideur", RAIDEUR);
qreal amortissement = conf.readEntry("Amortissement", AMORTISSEMENT);
qreal move_factor = conf.readEntry("MoveFactor", MOVEFACTOR);
m_ui.spRaideur->setValue(raideur);
m_ui.slRaideur->setSliderPosition(raideur*50);
m_ui.spAmortissement->setValue(amortissement);
m_ui.slAmortissement->setSliderPosition(amortissement*100);
m_ui.spMovFactor->setValue(move_factor);
m_ui.slMovFactor->setValue(move_factor*100);
int xTesselation = conf.readEntry("XTesselation", XTESSELATION);
int yTesselation = conf.readEntry("YTesselation", YTESSELATION);
m_ui.spHNodes->setValue(xTesselation);
m_ui.spVNodes->setValue(yTesselation);
//squareRootMasterAcceleration = conf.readEntry("SquareRootMasterAcceleration", false);
QString velFilter = conf.readEntry("VelocityFilter", VELOCITYFILTER);
if (velFilter == "NoFilter")
{
velocityFilter = NoFilter;
}
else if (velFilter == "FourRingLinearMean")
{
velocityFilter = FourRingLinearMean;
}
else if (velFilter == "MeanWithMean")
{
velocityFilter = MeanWithMean;
}
else if (velFilter == "MeanWithMedian")
{
velocityFilter = MeanWithMedian;
}
else
{
velocityFilter = FourRingLinearMean;
kDebug() << "Unknown config value for VelocityFilter : " << velFilter;
}
QString accFilter = conf.readEntry("AccelerationFilter", ACCELERATIONFILTER);
if (accFilter == "NoFilter")
{
accelerationFilter = NoFilter;
}
else if (accFilter == "FourRingLinearMean")
{
accelerationFilter = FourRingLinearMean;
}
else if (accFilter == "MeanWithMean")
{
accelerationFilter = MeanWithMean;
}
else if (accFilter == "MeanWithMedian")
{
accelerationFilter = MeanWithMedian;
}
else
{
accelerationFilter = NoFilter;
kDebug() << "Unknown config value for accelerationFilter : " << accFilter;
}
qreal minVel = conf.readEntry("MinVelocity", MINVELOCITY);
qreal maxVel = conf.readEntry("MaxVelocity", MAXVELOCITY);
qreal stopVel = conf.readEntry("StopVelocity", STOPVELOCITY);
qreal minAcc = conf.readEntry("MinAcceleration", MINACCELERATION);
qreal maxAcc = conf.readEntry("MaxAcceleration", MAXACCELERATION);
qreal stopAcc = conf.readEntry("StopAcceleration", STOPACCELERATION);
m_ui.spMinVel->setValue(minVel);
m_ui.slMinVel->setSliderPosition(minVel*100);
m_ui.spMaxVel->setValue(maxVel);
m_ui.slMaxVel->setSliderPosition(maxVel/10);
m_ui.spStopVel->setValue(stopVel);
m_ui.slStopVel->setSliderPosition(stopVel*10);
m_ui.spMinAcc->setValue(minAcc);
m_ui.slMinAcc->setSliderPosition(minAcc*100);
m_ui.spMaxAcc->setValue(maxAcc);
m_ui.slMaxAcc->setSliderPosition(maxAcc/10);
m_ui.spStopAcc->setValue(stopAcc);
m_ui.slStopAcc->setSliderPosition(stopAcc*10);
emit changed(false);
}
void WobblyWindowsEffectConfig::save()
{
KConfigGroup conf = EffectsHandler::effectConfig("Wobbly");
conf.writeEntry("Raideur", m_ui.spRaideur->value());
conf.writeEntry("Amortissement", m_ui.spAmortissement->value());
conf.writeEntry("MoveFactor", m_ui.spMovFactor->value());
conf.writeEntry("XTesselation", m_ui.spHNodes->value());
conf.writeEntry("YTesselation", m_ui.spVNodes->value());
switch (velocityFilter)
{
case NoFilter:
conf.writeEntry("VelocityFilter", "NoFilter");
break;
case FourRingLinearMean:
conf.writeEntry("VelocityFilter", "FourRingLinearMean");
break;
case MeanWithMean:
conf.writeEntry("VelocityFilter", "MeanWithMean");
break;
case MeanWithMedian:
conf.writeEntry("VelocityFilter", "MeanWithMedian");
break;
}
switch (accelerationFilter)
{
case NoFilter:
conf.writeEntry("AccelerationFilter", "NoFilter");
break;
case FourRingLinearMean:
conf.writeEntry("AccelerationFilter", "FourRingLinearMean");
break;
case MeanWithMean:
conf.writeEntry("AccelerationFilter", "MeanWithMean");
break;
case MeanWithMedian:
conf.writeEntry("AccelerationFilter", "MeanWithMedian");
break;
}
conf.writeEntry("MinVelocity", m_ui.spMinVel->value());
conf.writeEntry("MaxVelocity", m_ui.spMaxVel->value());
conf.writeEntry("StopVelocity", m_ui.spStopVel->value());
conf.writeEntry("MinAcceleration", m_ui.spMinAcc->value());
conf.writeEntry("MaxAcceleration", m_ui.spMaxAcc->value());
conf.writeEntry("StopAcceleration", m_ui.spStopAcc->value());
conf.sync();
emit changed(false);
EffectsHandler::sendReloadMessage("kwin4_effect_wobblywindows");
}
void WobblyWindowsEffectConfig::defaults()
{
m_ui.spRaideur->setValue(RAIDEUR);
m_ui.slRaideur->setSliderPosition(RAIDEUR*50);
m_ui.spAmortissement->setValue(AMORTISSEMENT);
m_ui.slAmortissement->setSliderPosition(AMORTISSEMENT*100);
m_ui.spMovFactor->setValue(MOVEFACTOR);
m_ui.slMovFactor->setValue(MOVEFACTOR*100);
m_ui.spHNodes->setValue(XTESSELATION);
m_ui.spVNodes->setValue(YTESSELATION);
velocityFilter = FourRingLinearMean;
accelerationFilter = NoFilter;
slotGridParameterSelected(m_ui.cbGridFilter->currentIndex());
m_ui.spMinVel->setValue(MINVELOCITY);
m_ui.slMinVel->setSliderPosition(MINVELOCITY*100);
m_ui.spMaxVel->setValue(MAXVELOCITY);
m_ui.slMaxVel->setSliderPosition(MAXVELOCITY/10);
m_ui.spStopVel->setValue(STOPVELOCITY);
m_ui.slStopVel->setSliderPosition(STOPVELOCITY*10);
m_ui.spMinAcc->setValue(MINACCELERATION);
m_ui.slMinAcc->setSliderPosition(MINACCELERATION*100);
m_ui.spMaxAcc->setValue(MAXACCELERATION);
m_ui.slMaxAcc->setSliderPosition(MAXACCELERATION/10);
m_ui.spStopAcc->setValue(STOPACCELERATION);
m_ui.slStopAcc->setSliderPosition(STOPACCELERATION*10);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSpRaideur(double value)
{
m_ui.slRaideur->setSliderPosition(value*50);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSlRaideur(int value)
{
m_ui.spRaideur->setValue(value/50.0);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSpAmortissement(double value)
{
m_ui.slAmortissement->setSliderPosition(value*100);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSlAmortissement(int value)
{
m_ui.spAmortissement->setValue(qreal(value)/100.0);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSpMovFactor(double value)
{
m_ui.slMovFactor->setValue(value*100);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSlMovFactor(int value)
{
m_ui.spMovFactor->setValue(qreal(value)/100.0);
emit changed(true);
}
// filters
void WobblyWindowsEffectConfig::slotRbNone(bool toggled)
{
if (toggled)
{
if (m_ui.cbGridFilter->currentIndex() == 0) // velocity
{
velocityFilter = NoFilter;
}
else if (m_ui.cbGridFilter->currentIndex() == 1) // acceleration
{
accelerationFilter = NoFilter;
}
}
emit changed(true);
}
void WobblyWindowsEffectConfig::slotRbRingMean(bool toggled)
{
if (toggled)
{
if (m_ui.cbGridFilter->currentIndex() == 0) // velocity
{
velocityFilter = FourRingLinearMean;
}
else if (m_ui.cbGridFilter->currentIndex() == 1) // acceleration
{
accelerationFilter = FourRingLinearMean;
}
}
emit changed(true);
}
void WobblyWindowsEffectConfig::slotRbMeanMean(bool toggled)
{
if (toggled)
{
if (m_ui.cbGridFilter->currentIndex() == 0) // velocity
{
velocityFilter = MeanWithMean;
}
else if (m_ui.cbGridFilter->currentIndex() == 1) // acceleration
{
accelerationFilter = MeanWithMean;
}
}
emit changed(true);
}
void WobblyWindowsEffectConfig::slotRbMeanMedian(bool toggled)
{
if (toggled)
{
if (m_ui.cbGridFilter->currentIndex() == 0) // velocity
{
velocityFilter = MeanWithMedian;
}
else if (m_ui.cbGridFilter->currentIndex() == 1) // acceleration
{
accelerationFilter = MeanWithMedian;
}
}
emit changed(true);
}
void WobblyWindowsEffectConfig::slotGridParameterSelected(int index)
{
if (index == 0) // velocity
{
switch (velocityFilter)
{
case NoFilter:
m_ui.rbNone->setChecked(true);
break;
case FourRingLinearMean:
m_ui.rbRingMean->setChecked(true);
break;
case MeanWithMean:
m_ui.rbMeanMean->setChecked(true);
break;
case MeanWithMedian:
m_ui.rbMeanMedian->setChecked(true);
break;
}
}
else if (index == 1) // acceleration
{
switch (accelerationFilter)
{
case NoFilter:
m_ui.rbNone->setChecked(true);
break;
case FourRingLinearMean:
m_ui.rbRingMean->setChecked(true);
break;
case MeanWithMean:
m_ui.rbMeanMean->setChecked(true);
break;
case MeanWithMedian:
m_ui.rbMeanMedian->setChecked(true);
break;
}
}
emit changed(true);
}
// thresholds
void WobblyWindowsEffectConfig::slotSpMinVel(double value)
{
m_ui.slMinVel->setSliderPosition(value*100);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSlMinVel(int value)
{
m_ui.spMinVel->setValue(qreal(value)/100.0);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSpMaxVel(double value)
{
m_ui.slMaxVel->setSliderPosition(value/10);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSlMaxVel(int value)
{
m_ui.spMaxVel->setValue(value*10.0);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSpStopVel(double value)
{
m_ui.slStopVel->setSliderPosition(value*10);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSlStopVel(int value)
{
m_ui.spStopVel->setValue(value/10.0);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSpMinAcc(double value)
{
m_ui.slMinAcc->setSliderPosition(value*100);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSlMinAcc(int value)
{
m_ui.spMinAcc->setValue(value/100.0);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSpMaxAcc(double value)
{
m_ui.slMaxAcc->setSliderPosition(value/10);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSlMaxAcc(int value)
{
m_ui.spMaxAcc->setValue(value*10.0);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSpStopAcc(double value)
{
m_ui.slStopAcc->setSliderPosition(value*10);
emit changed(true);
}
void WobblyWindowsEffectConfig::slotSlStopAcc(int value)
{
m_ui.spStopAcc->setValue(value/10.0);
emit changed(true);
}
} // namespace
#include "wobblywindows_config.moc"

View File

@ -0,0 +1,10 @@
[Desktop Entry]
Type=Service
X-KDE-ServiceTypes=KCModule
X-KDE-Library=kcm_kwin4_effect_builtins
X-KDE-ParentComponents=kwin4_effect_wobblywindows
X-KDE-PluginKeyword=wobblywindows
Name=Wobbly Windows

View File

@ -0,0 +1,93 @@
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2008 Cédric Borgese <cedric.borgese@gmail.com>
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 <http://www.gnu.org/licenses/>.
*********************************************************************/
#ifndef KWIN_WOBBLY_CONFIG_H
#define KWIN_WOBBLY_CONFIG_H
#define KDE3_SUPPORT
#include <kcmodule.h>
#undef KDE3_SUPPORT
#include "ui_wobblywindows_config.h"
class KActionCollection;
namespace KWin
{
class WobblyWindowsEffectConfig : public KCModule
{
Q_OBJECT
public:
explicit WobblyWindowsEffectConfig(QWidget* parent = 0, const QVariantList& args = QVariantList());
~WobblyWindowsEffectConfig();
public slots:
virtual void save();
virtual void load();
virtual void defaults();
private:
enum GridFilter
{
NoFilter,
FourRingLinearMean,
MeanWithMean,
MeanWithMedian
};
private slots:
void slotSpRaideur(double);
void slotSlRaideur(int);
void slotSpAmortissement(double);
void slotSlAmortissement(int);
void slotSpMovFactor(double);
void slotSlMovFactor(int);
void slotGridParameterSelected(int);
void slotRbNone(bool);
void slotRbRingMean(bool);
void slotRbMeanMean(bool);
void slotRbMeanMedian(bool);
void slotSpMinVel(double);
void slotSlMinVel(int);
void slotSpMaxVel(double);
void slotSlMaxVel(int);
void slotSpStopVel(double);
void slotSlStopVel(int);
void slotSpMinAcc(double);
void slotSlMinAcc(int);
void slotSpMaxAcc(double);
void slotSlMaxAcc(int);
void slotSpStopAcc(double);
void slotSlStopAcc(int);
private:
Ui::WobblyWindowsEffectConfigForm m_ui;
GridFilter velocityFilter;
GridFilter accelerationFilter;
};
} // namespace
#endif

View File

@ -0,0 +1,642 @@
<ui version="4.0" >
<class>KWin::WobblyWindowsEffectConfigForm</class>
<widget class="QWidget" name="KWin::WobblyWindowsEffectConfigForm" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>553</width>
<height>383</height>
</rect>
</property>
<property name="windowTitle" >
<string>WobblyWindows</string>
</property>
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="QTabWidget" name="tabWidget" >
<property name="currentIndex" >
<number>0</number>
</property>
<widget class="QWidget" name="tab" >
<attribute name="title" >
<string>Grid Parameters</string>
</attribute>
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="QGroupBox" name="groupBox" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Maximum" hsizetype="Preferred" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title" >
<string>Grid Minimal Tesselation</string>
</property>
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="QLabel" name="label" >
<property name="text" >
<string>Horizontal Nodes :</string>
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QSpinBox" name="spHNodes" >
<property name="minimum" >
<number>2</number>
</property>
<property name="value" >
<number>20</number>
</property>
</widget>
</item>
<item row="1" column="0" >
<widget class="QLabel" name="label_2" >
<property name="text" >
<string>Vertical Nodes :</string>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QSpinBox" name="spVNodes" >
<property name="minimum" >
<number>2</number>
</property>
<property name="value" >
<number>20</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item rowspan="2" row="0" column="1" >
<widget class="QGroupBox" name="groupBox_4" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title" >
<string>Grid Parameters</string>
</property>
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="QLabel" name="label_3" >
<property name="text" >
<string>Raideur :</string>
</property>
</widget>
</item>
<item row="0" column="1" >
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2" >
<widget class="QDoubleSpinBox" name="spRaideur" >
<property name="maximum" >
<double>2.000000000000000</double>
</property>
<property name="singleStep" >
<double>0.020000000000000</double>
</property>
<property name="value" >
<double>0.500000000000000</double>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3" >
<widget class="QSlider" name="slRaideur" >
<property name="maximum" >
<number>100</number>
</property>
<property name="value" >
<number>25</number>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="2" column="0" colspan="3" >
<widget class="Line" name="line" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="0" >
<widget class="QLabel" name="label_4" >
<property name="text" >
<string>Amortissement :</string>
</property>
</widget>
</item>
<item row="3" column="1" >
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="2" >
<widget class="QDoubleSpinBox" name="spAmortissement" >
<property name="maximum" >
<double>1.000000000000000</double>
</property>
<property name="singleStep" >
<double>0.010000000000000</double>
</property>
<property name="value" >
<double>0.940000000000000</double>
</property>
</widget>
</item>
<item row="4" column="0" colspan="3" >
<widget class="QSlider" name="slAmortissement" >
<property name="maximum" >
<number>100</number>
</property>
<property name="value" >
<number>94</number>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="5" column="0" colspan="3" >
<widget class="Line" name="line_4" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="6" column="0" >
<widget class="QLabel" name="label_6" >
<property name="text" >
<string>Move Factor :</string>
</property>
</widget>
</item>
<item row="6" column="1" >
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>16</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="2" >
<widget class="QDoubleSpinBox" name="spMovFactor" >
<property name="maximum" >
<double>1.000000000000000</double>
</property>
<property name="singleStep" >
<double>0.010000000000000</double>
</property>
<property name="value" >
<double>0.010000000000000</double>
</property>
</widget>
</item>
<item row="7" column="0" colspan="3" >
<widget class="QSlider" name="slMovFactor" >
<property name="maximum" >
<number>100</number>
</property>
<property name="value" >
<number>1</number>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0" >
<widget class="QGroupBox" name="groupBox_5" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Maximum" hsizetype="Preferred" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title" >
<string>Grid Filter</string>
</property>
<layout class="QVBoxLayout" >
<item>
<widget class="QComboBox" name="cbGridFilter" >
<item>
<property name="text" >
<string>Velocity</string>
</property>
</item>
<item>
<property name="text" >
<string>Acceleration</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbNone" >
<property name="text" >
<string>None</string>
</property>
<property name="checked" >
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbRingMean" >
<property name="text" >
<string>Ring Mean</string>
</property>
<property name="checked" >
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbMeanMean" >
<property name="text" >
<string>Mean With Mean</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbMeanMedian" >
<property name="text" >
<string>Mean With Median</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2" >
<attribute name="title" >
<string>Thresholds</string>
</attribute>
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="QGroupBox" name="groupBox_2" >
<property name="title" >
<string>Velocity</string>
</property>
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="QLabel" name="label_5" >
<property name="text" >
<string>Min Velocity</string>
</property>
</widget>
</item>
<item row="0" column="1" >
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2" colspan="2" >
<widget class="QDoubleSpinBox" name="spMinVel" >
<property name="maximum" >
<double>1.000000000000000</double>
</property>
<property name="singleStep" >
<double>0.010000000000000</double>
</property>
<property name="value" >
<double>0.500000000000000</double>
</property>
</widget>
</item>
<item row="1" column="0" colspan="4" >
<widget class="QSlider" name="slMinVel" >
<property name="maximum" >
<number>100</number>
</property>
<property name="value" >
<number>50</number>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="2" column="0" colspan="4" >
<widget class="Line" name="line_2" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="0" >
<widget class="QLabel" name="label_7" >
<property name="text" >
<string>Max Velocity</string>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2" >
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="3" >
<widget class="QDoubleSpinBox" name="spMaxVel" >
<property name="maximum" >
<double>1000.000000000000000</double>
</property>
<property name="singleStep" >
<double>10.000000000000000</double>
</property>
<property name="value" >
<double>500.000000000000000</double>
</property>
</widget>
</item>
<item row="4" column="0" colspan="4" >
<widget class="QSlider" name="slMaxVel" >
<property name="maximum" >
<number>100</number>
</property>
<property name="value" >
<number>50</number>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="5" column="0" colspan="4" >
<widget class="Line" name="line_3" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="6" column="0" >
<widget class="QLabel" name="label_10" >
<property name="text" >
<string>Velocity Stop</string>
</property>
</widget>
</item>
<item row="6" column="1" colspan="2" >
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="3" >
<widget class="QDoubleSpinBox" name="spStopVel" >
<property name="maximum" >
<double>10.000000000000000</double>
</property>
<property name="singleStep" >
<double>0.100000000000000</double>
</property>
<property name="value" >
<double>3.000000000000000</double>
</property>
</widget>
</item>
<item row="7" column="0" colspan="4" >
<widget class="QSlider" name="slStopVel" >
<property name="maximum" >
<number>100</number>
</property>
<property name="value" >
<number>30</number>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="1" >
<widget class="QGroupBox" name="groupBox_3" >
<property name="title" >
<string>Acceleration</string>
</property>
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="QLabel" name="label_8" >
<property name="text" >
<string>Min Acceleration</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2" >
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="3" >
<widget class="QDoubleSpinBox" name="spMinAcc" >
<property name="maximum" >
<double>1.000000000000000</double>
</property>
<property name="singleStep" >
<double>0.010000000000000</double>
</property>
<property name="value" >
<double>0.100000000000000</double>
</property>
</widget>
</item>
<item row="1" column="0" colspan="4" >
<widget class="QSlider" name="slMinAcc" >
<property name="maximum" >
<number>100</number>
</property>
<property name="value" >
<number>10</number>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="2" column="0" colspan="4" >
<widget class="Line" name="line_5" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2" >
<widget class="QLabel" name="label_9" >
<property name="text" >
<string>Max Acceleration</string>
</property>
</widget>
</item>
<item row="3" column="2" >
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>21</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="3" >
<widget class="QDoubleSpinBox" name="spMaxAcc" >
<property name="maximum" >
<double>1000.000000000000000</double>
</property>
<property name="singleStep" >
<double>10.000000000000000</double>
</property>
<property name="value" >
<double>500.000000000000000</double>
</property>
</widget>
</item>
<item row="4" column="0" colspan="4" >
<widget class="QSlider" name="slMaxAcc" >
<property name="maximum" >
<number>100</number>
</property>
<property name="value" >
<number>50</number>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="5" column="0" colspan="4" >
<widget class="Line" name="line_6" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="6" column="0" colspan="2" >
<widget class="QLabel" name="label_11" >
<property name="text" >
<string>Acceleration Stop</string>
</property>
</widget>
</item>
<item row="6" column="2" >
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>21</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="3" >
<widget class="QDoubleSpinBox" name="spStopAcc" >
<property name="maximum" >
<double>10.000000000000000</double>
</property>
<property name="singleStep" >
<double>0.100000000000000</double>
</property>
<property name="value" >
<double>8.000000000000000</double>
</property>
</widget>
</item>
<item row="7" column="0" colspan="4" >
<widget class="QSlider" name="slStopAcc" >
<property name="maximum" >
<number>100</number>
</property>
<property name="value" >
<number>80</number>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,38 @@
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2008 Cédric Borgese <cedric.borgese@gmail.com>
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 <http://www.gnu.org/licenses/>.
*********************************************************************/
#include <QtGlobal>
static const qreal RAIDEUR = 0.06;
static const qreal AMORTISSEMENT = 0.92;
static const qreal MOVEFACTOR = 0.1;
static const int XTESSELATION = 20;
static const int YTESSELATION = 20;
static const qreal MINVELOCITY = 0.0;
static const qreal MAXVELOCITY = 1000.0;
static const qreal STOPVELOCITY = 3.0;
static const qreal MINACCELERATION = 0.0;
static const qreal MAXACCELERATION = 1000.0;
static const qreal STOPACCELERATION = 5.0;
static const char* VELOCITYFILTER = "FourRingLinearMean";
static const char* ACCELERATIONFILTER = "FourRingLinearMean";