diff --git a/scripting/scriptedeffect.cpp b/scripting/scriptedeffect.cpp index ba646f6859..6157066882 100644 --- a/scripting/scriptedeffect.cpp +++ b/scripting/scriptedeffect.cpp @@ -35,9 +35,6 @@ along with this program. If not, see . typedef KWin::EffectWindow* KEffectWindowRef; -Q_DECLARE_METATYPE(KWin::AnimationData*) -Q_SCRIPT_DECLARE_QMETAOBJECT(KWin::AnimationData, QObject*) - namespace KWin { @@ -100,12 +97,14 @@ struct AnimationSettings { int delay; uint duration; uint set; + uint metaData; }; AnimationSettings animationSettingsFromObject(QScriptValue &object) { AnimationSettings settings; settings.set = 0; + settings.metaData = 0; settings.to = qscriptvalue_cast(object.property(QStringLiteral("to"))); settings.from = qscriptvalue_cast(object.property(QStringLiteral("from"))); @@ -205,6 +204,27 @@ QList animationSettings(QScriptContext *context, ScriptedEffe if (!(s.set & AnimationSettings::Delay)) { s.delay = settings.at(0).delay; } + + s.metaData = 0; + typedef QMap MetaTypeMap; + static MetaTypeMap metaTypes({ + {AnimationEffect::SourceAnchor, QStringLiteral("sourceAnchor")}, + {AnimationEffect::TargetAnchor, QStringLiteral("targetAnchor")}, + {AnimationEffect::RelativeSourceX, QStringLiteral("relativeSourceX")}, + {AnimationEffect::RelativeSourceY, QStringLiteral("relativeSourceY")}, + {AnimationEffect::RelativeTargetX, QStringLiteral("relativeTargetX")}, + {AnimationEffect::RelativeTargetY, QStringLiteral("relativeTargetY")}, + {AnimationEffect::Axis, QStringLiteral("axis")} + }); + + for (MetaTypeMap::const_iterator it = metaTypes.constBegin(), + end = metaTypes.constEnd(); it != end; ++it) { + QScriptValue metaVal = value.property(*it); + if (metaVal.isValid() && metaVal.isNumber()) { + AnimationEffect::setMetaData(it.key(), metaVal.toInt32(), s.metaData); + } + } + settings << s; } } @@ -248,7 +268,7 @@ QScriptValue kwinEffectAnimate(QScriptContext *context, QScriptEngine *engine) setting.duration, setting.to, setting.from, - nullptr, + setting.metaData, setting.curve, setting.delay)); } @@ -277,7 +297,7 @@ QScriptValue kwinEffectSet(QScriptContext *context, QScriptEngine *engine) setting.duration, setting.to, setting.from, - nullptr, + setting.metaData, setting.curve, setting.delay)); } @@ -433,7 +453,6 @@ bool ScriptedEffect::init(const QString &effectName, const QString &pathToScript #endif m_engine->globalObject().setProperty(QStringLiteral("QEasingCurve"), m_engine->newQMetaObject(&QEasingCurve::staticMetaObject)); m_engine->globalObject().setProperty(QStringLiteral("effect"), m_engine->newQObject(this, QScriptEngine::QtOwnership, QScriptEngine::ExcludeDeleteLater), QScriptValue::Undeletable); - m_engine->globalObject().setProperty(QStringLiteral("AnimationData"), m_engine->scriptValueFromQMetaObject()); MetaScripting::registration(m_engine); qScriptRegisterMetaType(m_engine, effectWindowToScriptValue, effectWindowFromScriptValue); qScriptRegisterMetaType(m_engine, fpx2ToScriptValue, fpx2FromScriptValue); @@ -493,43 +512,14 @@ void ScriptedEffect::signalHandlerException(const QScriptValue &value) } } -uint metaFromData(KWin::AnimationData* data) +quint64 ScriptedEffect::animate(KWin::EffectWindow* w, KWin::AnimationEffect::Attribute a, int ms, KWin::FPx2 to, KWin::FPx2 from, uint metaData, QEasingCurve::Type curve, int delay) { - uint meta = 0; - if (data) { - if (data->axis() != 0) { - AnimationEffect::setMetaData(AnimationEffect::Axis, data->axis() -1, meta); - } - if (data->sourceAnchor() != 0) { - AnimationEffect::setMetaData(AnimationEffect::SourceAnchor, data->sourceAnchor(), meta); - } - if (data->targetAnchor() != 0) { - AnimationEffect::setMetaData(AnimationEffect::TargetAnchor, data->targetAnchor(), meta); - } - if (data->relativeSourceX() != 0) { - AnimationEffect::setMetaData(AnimationEffect::RelativeSourceX, data->relativeSourceX(), meta); - } - if (data->relativeSourceY() != 0) { - AnimationEffect::setMetaData(AnimationEffect::RelativeSourceY, data->relativeSourceY(), meta); - } - if (data->relativeTargetX() != 0) { - AnimationEffect::setMetaData(AnimationEffect::RelativeTargetX, data->relativeTargetX(), meta); - } - if (data->relativeTargetY() != 0) { - AnimationEffect::setMetaData(AnimationEffect::RelativeTargetY, data->relativeTargetY(), meta); - } - } - return meta; + return AnimationEffect::animate(w, a, metaData, ms, to, QEasingCurve(curve), delay, from); } -quint64 ScriptedEffect::animate(KWin::EffectWindow* w, KWin::AnimationEffect::Attribute a, int ms, KWin::FPx2 to, KWin::FPx2 from, KWin::AnimationData* data, QEasingCurve::Type curve, int delay) +quint64 ScriptedEffect::set(KWin::EffectWindow* w, KWin::AnimationEffect::Attribute a, int ms, KWin::FPx2 to, KWin::FPx2 from, uint metaData, QEasingCurve::Type curve, int delay) { - return AnimationEffect::animate(w, a, metaFromData(data), ms, to, QEasingCurve(curve), delay, from); -} - -quint64 ScriptedEffect::set(KWin::EffectWindow* w, KWin::AnimationEffect::Attribute a, int ms, KWin::FPx2 to, KWin::FPx2 from, KWin::AnimationData* data, QEasingCurve::Type curve, int delay) -{ - return AnimationEffect::set(w, a, metaFromData(data), ms, to, QEasingCurve(curve), delay, from); + return AnimationEffect::set(w, a, metaData, ms, to, QEasingCurve(curve), delay, from); } bool ScriptedEffect::isGrabbed(EffectWindow* w, ScriptedEffect::DataRole grabRole) @@ -576,86 +566,4 @@ QVariant ScriptedEffect::readConfig(const QString &key, const QVariant defaultVa return m_config->property(key); } -AnimationData::AnimationData (QObject* parent) - : QObject (parent) - , m_sourceAnchor((AnimationEffect::Anchor)0) - , m_targetAnchor((AnimationEffect::Anchor)0) - , m_relativeSourceX(0) - , m_relativeSourceY(0) - , m_relativeTargetX(0) - , m_relativeTargetY(0) - , m_axis((AnimationData::Axis)0) -{ -} - -AnimationData::Axis AnimationData::axis() const -{ - return m_axis; -} - -int AnimationData::relativeSourceX() const -{ - return m_relativeSourceX; -} - -int AnimationData::relativeSourceY() const -{ - return m_relativeSourceY; -} - -int AnimationData::relativeTargetX() const -{ - return m_relativeTargetX; -} - -int AnimationData::relativeTargetY() const -{ - return m_relativeTargetY; -} - -void AnimationData::setRelativeSourceX(int relativeSourceX) -{ - m_relativeSourceX = relativeSourceX; -} - -void AnimationData::setRelativeSourceY(int relativeSourceY) -{ - m_relativeSourceY = relativeSourceY; -} - -void AnimationData::setRelativeTargetX(int relativeTargetX) -{ - m_relativeTargetX = relativeTargetX; -} - -void AnimationData::setRelativeTargetY(int relativeTargetY) -{ - m_relativeTargetY = relativeTargetY; -} - -void AnimationData::setAxis(AnimationData::Axis axis) -{ - m_axis = axis; -} - -void AnimationData::setSourceAnchor(AnimationEffect::Anchor sourceAnchor) -{ - m_sourceAnchor = sourceAnchor; -} - -void AnimationData::setTargetAnchor(AnimationEffect::Anchor targetAnchor) -{ - m_targetAnchor = targetAnchor; -} - -AnimationEffect::Anchor AnimationData::sourceAnchor() const -{ - return m_sourceAnchor; -} - -AnimationEffect::Anchor AnimationData::targetAnchor() const -{ - return m_targetAnchor; -} - } // namespace diff --git a/scripting/scriptedeffect.h b/scripting/scriptedeffect.h index 39af241b3e..aa2bd36916 100644 --- a/scripting/scriptedeffect.h +++ b/scripting/scriptedeffect.h @@ -30,59 +30,11 @@ 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(Qt::Axis) Q_ENUMS(Anchor) Q_ENUMS(MetaType) public: @@ -135,8 +87,8 @@ public: } 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); + quint64 animate(KWin::EffectWindow *w, Attribute a, int ms, KWin::FPx2 to, KWin::FPx2 from = KWin::FPx2(), uint metaData = 0, 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(), uint metaData = 0, QEasingCurve::Type curve = QEasingCurve::Linear, int delay = 0); bool cancel(quint64 animationId) { return AnimationEffect::cancel(animationId); } virtual bool borderActivated(ElectricBorder border);