kwin/scripting/scriptedeffect.h
Matteo De Carlo c01446583e Replace NULL with nullptr in scripting folder
Replacing all NULL to nullptr in all the files in scripting folder
(also substituting some "0" used as nullptr with nullptr)

REVIEW: 115915
2014-02-24 16:33:40 +01:00

160 lines
6 KiB
C++

/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2012 Martin Gräßlin <mgraesslin@kde.org>
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_SCRIPTEDEFFECT_H
#define KWIN_SCRIPTEDEFFECT_H
#include <kwinanimationeffect.h>
class KConfigLoader;
class QScriptEngine;
class QScriptValue;
namespace KWin
{
class ScriptedEffect;
class AnimationData : public QObject
{
Q_OBJECT
Q_ENUMS(Axis)
Q_PROPERTY(KWin::AnimationEffect::Anchor sourceAnchor READ sourceAnchor WRITE setSourceAnchor)
Q_PROPERTY(KWin::AnimationEffect::Anchor targetAnchor READ targetAnchor WRITE setTargetAnchor)
Q_PROPERTY(int relativeSourceX READ relativeSourceX WRITE setRelativeSourceX)
Q_PROPERTY(int relativeSourceY READ relativeSourceY WRITE setRelativeSourceY)
Q_PROPERTY(int relativeTargetX READ relativeTargetX WRITE setRelativeTargetX)
Q_PROPERTY(int relativeTargetY READ relativeTargetY WRITE setRelativeTargetY)
Q_PROPERTY(Axis axis READ axis WRITE setAxis)
public:
enum Axis {
XAxis = 1,
YAxis,
ZAxis
};
explicit AnimationData(QObject* parent = nullptr);
// getter
AnimationEffect::Anchor sourceAnchor() const;
AnimationEffect::Anchor targetAnchor() const;
int relativeSourceX() const;
int relativeSourceY() const;
int relativeTargetX() const;
int relativeTargetY() const;
Axis axis() const;
// setter
void setSourceAnchor(AnimationEffect::Anchor sourceAnchor);
void setTargetAnchor(AnimationEffect::Anchor targetAnchor);
void setRelativeSourceX(int relativeSourceX);
void setRelativeSourceY(int relativeSourceY);
void setRelativeTargetX(int relativeTargetX);
void setRelativeTargetY(int relativeTargetY);
void setAxis(Axis axis);
private:
AnimationEffect::Anchor m_sourceAnchor;
AnimationEffect::Anchor m_targetAnchor;
int m_relativeSourceX;
int m_relativeSourceY;
int m_relativeTargetX;
int m_relativeTargetY;
Axis m_axis;
};
class ScriptedEffect : public KWin::AnimationEffect
{
Q_OBJECT
Q_ENUMS(DataRole)
Q_ENUMS(KWin::AnimationData::Axis)
Q_ENUMS(Anchor)
Q_ENUMS(MetaType)
public:
// copied from kwineffects.h
enum DataRole {
// Grab roles are used to force all other animations to ignore the window.
// The value of the data is set to the Effect's `this` value.
WindowAddedGrabRole = 1,
WindowClosedGrabRole,
WindowMinimizedGrabRole,
WindowUnminimizedGrabRole,
WindowForceBlurRole, ///< For fullscreen effects to enforce blurring of windows,
WindowBlurBehindRole, ///< For single windows to blur behind
WindowForceBackgroundContrastRole, ///< For fullscreen effects to enforce the background contrast,
WindowBackgroundContrastRole, ///< For single windows to enable Background contrast
LanczosCacheRole
};
const QString &scriptFile() const {
return m_scriptFile;
}
virtual void reconfigure(ReconfigureFlags flags);
QString activeConfig() const;
void setActiveConfig(const QString &name);
static ScriptedEffect *create(const QString &effectName, const QString &pathToScript);
virtual ~ScriptedEffect();
/**
* Whether another effect has grabbed the @p w with the given @p grabRole.
* @param w The window to check
* @param grabRole The grab role to check
* @returns @c true if another window has grabbed the effect, @c false otherwise
**/
Q_SCRIPTABLE bool isGrabbed(KWin::EffectWindow *w, DataRole grabRole);
/**
* Reads the value from the configuration data for the given key.
* @param key The key to search for
* @param defaultValue The value to return if the key is not found
* @returns The config value if present
**/
Q_SCRIPTABLE QVariant readConfig(const QString &key, const QVariant defaultValue = QVariant());
void registerShortcut(QAction *a, QScriptValue callback);
const QHash<QAction*, QScriptValue> &shortcutCallbacks() const {
return m_shortcutCallbacks;
}
QHash<int, QList<QScriptValue > > &screenEdgeCallbacks() {
return m_screenEdgeCallbacks;
}
public Q_SLOTS:
quint64 animate(KWin::EffectWindow *w, Attribute a, int ms, KWin::FPx2 to, KWin::FPx2 from = KWin::FPx2(), KWin::AnimationData *data = nullptr, QEasingCurve::Type curve = QEasingCurve::Linear, int delay = 0);
quint64 set(KWin::EffectWindow *w, Attribute a, int ms, KWin::FPx2 to, KWin::FPx2 from = KWin::FPx2(), KWin::AnimationData *data = nullptr, QEasingCurve::Type curve = QEasingCurve::Linear, int delay = 0);
bool cancel(quint64 animationId) { return AnimationEffect::cancel(animationId); }
virtual bool borderActivated(ElectricBorder border);
Q_SIGNALS:
/**
* Signal emitted whenever the effect's config changed.
**/
void configChanged();
private Q_SLOTS:
void signalHandlerException(const QScriptValue &value);
void globalShortcutTriggered();
private:
ScriptedEffect();
bool init(const QString &effectName, const QString &pathToScript);
QScriptEngine *m_engine;
QString m_effectName;
QString m_scriptFile;
QHash<QAction*, QScriptValue> m_shortcutCallbacks;
QHash<int, QList<QScriptValue> > m_screenEdgeCallbacks;
KConfigLoader *m_config;
};
}
#endif // KWIN_SCRIPTEDEFFECT_H