Adding jsanim classes (next, change object factory to address jsanim
object creation). svn path=/trunk/KDE/kdelibs/; revision=1119231
This commit is contained in:
parent
2fa6d4204c
commit
058713d07a
71
animations/engine.cpp
Normal file
71
animations/engine.cpp
Normal file
@ -0,0 +1,71 @@
|
||||
/***********************************************************************/
|
||||
/* engine.h */
|
||||
/* */
|
||||
/* Copyright (C) 2010 Adenilson Cavalcanti <cavalcantii@gmail.com> */
|
||||
/* */
|
||||
/* This library is free software; you can redistribute it and/or */
|
||||
/* modify it under the terms of the GNU Lesser General Public */
|
||||
/* License as published by the Free Software Foundation; either */
|
||||
/* version 2.1 of the License, or (at your option) any later version. */
|
||||
/* */
|
||||
/* This library 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 */
|
||||
/* Lesser General Public License for more details. */
|
||||
/* */
|
||||
/* You should have received a copy of the GNU Lesser General Public */
|
||||
/* License along with this library; if not, write to the Free Software */
|
||||
/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA */
|
||||
/* 02110-1301 USA */
|
||||
/***********************************************************************/
|
||||
|
||||
/**
|
||||
* @file engine.h
|
||||
* @author Adenilson Cavalcanti
|
||||
* @date Wed Feb 24 21:49:45 2010
|
||||
*
|
||||
* @brief
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/* TODO:
|
||||
*
|
||||
* - cleanup debug messages
|
||||
*/
|
||||
|
||||
#include "engine.h"
|
||||
|
||||
QScriptEngine* AnimationEngine::inst = 0;
|
||||
QHash<QString, QScriptValue> AnimationEngine::s_animFuncs;
|
||||
|
||||
QScriptValue AnimationEngine::animation(const QString &anim)
|
||||
{
|
||||
return s_animFuncs.value(anim);
|
||||
}
|
||||
|
||||
QScriptValue AnimationEngine::registerAnimation(QScriptContext *context, QScriptEngine *engine)
|
||||
{
|
||||
if (context->argumentCount() > 1) {
|
||||
const QString name = context->argument(0).toString();
|
||||
const QScriptValue func = context->argument(1);
|
||||
if (func.isFunction()) {
|
||||
s_animFuncs.insert(name, func);
|
||||
}
|
||||
}
|
||||
|
||||
return engine->undefinedValue();
|
||||
}
|
||||
|
||||
QScriptEngine *AnimationEngine::globalEngine()
|
||||
{
|
||||
if (!inst) {
|
||||
inst = new QScriptEngine;
|
||||
QScriptValue global = inst->globalObject();
|
||||
global.setProperty("registerAnimation", inst->newFunction(AnimationEngine::registerAnimation));
|
||||
qDebug() << "........... first js animation, creating the engine!";
|
||||
}
|
||||
|
||||
return inst;
|
||||
}
|
||||
|
57
animations/engine.h
Normal file
57
animations/engine.h
Normal file
@ -0,0 +1,57 @@
|
||||
/***********************************************************************/
|
||||
/* engine.h */
|
||||
/* */
|
||||
/* Copyright (C) 2010 Adenilson Cavalcanti <cavalcantii@gmail.com> */
|
||||
/* */
|
||||
/* This library is free software; you can redistribute it and/or */
|
||||
/* modify it under the terms of the GNU Lesser General Public */
|
||||
/* License as published by the Free Software Foundation; either */
|
||||
/* version 2.1 of the License, or (at your option) any later version. */
|
||||
/* */
|
||||
/* This library 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 */
|
||||
/* Lesser General Public License for more details. */
|
||||
/* */
|
||||
/* You should have received a copy of the GNU Lesser General Public */
|
||||
/* License along with this library; if not, write to the Free Software */
|
||||
/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA */
|
||||
/* 02110-1301 USA */
|
||||
/***********************************************************************/
|
||||
|
||||
/**
|
||||
* @file engine.h
|
||||
* @author Adenilson Cavalcanti
|
||||
* @date Wed Feb 24 21:49:45 2010
|
||||
*
|
||||
* @brief
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ENGINE__
|
||||
#define __ENGINE__
|
||||
|
||||
#include <QScriptEngine>
|
||||
#include <QScriptString>
|
||||
#include <QScriptValue>
|
||||
#include <QScriptContext>
|
||||
#include <QDebug>
|
||||
|
||||
/* Plasma-shell will have an engine */
|
||||
class AnimationEngine
|
||||
{
|
||||
public:
|
||||
static QScriptEngine* globalEngine();
|
||||
static QScriptValue animation(const QString &anim);
|
||||
|
||||
protected:
|
||||
AnimationEngine() { }
|
||||
|
||||
private:
|
||||
static QScriptEngine *inst;
|
||||
static QScriptValue registerAnimation(QScriptContext *context, QScriptEngine *engine);
|
||||
static QHash<QString, QScriptValue> s_animFuncs;
|
||||
};
|
||||
|
||||
#endif
|
103
animations/jsanim.cpp
Normal file
103
animations/jsanim.cpp
Normal file
@ -0,0 +1,103 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// jsanim.cpp //
|
||||
// //
|
||||
// Copyright (C) 2010 Adenilson Cavalcanti <cavalcantii@gmail.com> //
|
||||
// //
|
||||
// This library is free software; you can redistribute it and/or //
|
||||
// modify it under the terms of the GNU Lesser General Public //
|
||||
// License as published by the Free Software Foundation; either //
|
||||
// version 2.1 of the License, or (at your option) any later version. //
|
||||
// //
|
||||
// This library 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 //
|
||||
// Lesser General Public License for more details. //
|
||||
// //
|
||||
// You should have received a copy of the GNU Lesser General Public //
|
||||
// License along with this library; if not, write to the Free Software //
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA //
|
||||
// 02110-1301 USA //
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "jsanim_p.h"
|
||||
#include "engine.h"
|
||||
#include <QDebug>
|
||||
|
||||
/* TODO:
|
||||
* - support passing more parameters to the js animation object
|
||||
* - support more properties: angle, direction, etc
|
||||
* - support calling a 'resetAnimation' in js class when animation is stopped
|
||||
*/
|
||||
|
||||
namespace Plasma
|
||||
{
|
||||
|
||||
JavascriptAnimation::JavascriptAnimation(const QString &name, QObject *parent)
|
||||
: Animation(parent), m_fps(0), m_name(name), engine(0), m_instance(0), m_method(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
JavascriptAnimation::~JavascriptAnimation()
|
||||
{
|
||||
delete m_instance;
|
||||
delete m_method;
|
||||
}
|
||||
|
||||
void JavascriptAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
|
||||
{
|
||||
qDebug() << ".................. state: " << newState;
|
||||
if (oldState == Stopped && newState == Running) {
|
||||
if (!engine) {
|
||||
engine = AnimationEngine::globalEngine();
|
||||
|
||||
//Define the class and create an instance
|
||||
if (!m_instance) {
|
||||
m_instance = new QScriptValue;
|
||||
*m_instance = AnimationEngine::animation(m_name).construct(QScriptValueList()
|
||||
<< engine->newQObject(targetWidget())
|
||||
<< duration());
|
||||
qDebug( )<< "trying for" << m_name << m_instance->isFunction();
|
||||
}
|
||||
|
||||
//Get the method of the object
|
||||
if (!m_method) {
|
||||
m_method = new QScriptValue;
|
||||
*m_method = m_instance->property(QString("updateCurrentTime"));
|
||||
if (!m_method->isFunction()) {
|
||||
qDebug() << "**************** ERROR! ************";
|
||||
} else {
|
||||
qDebug() << ".................. success js instance creation!";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Center the widget for transformation
|
||||
qreal x = targetWidget()->geometry().height()/2;
|
||||
qreal y = targetWidget()->geometry().width()/2;
|
||||
targetWidget()->setTransformOriginPoint(x, y);
|
||||
|
||||
}
|
||||
|
||||
m_fps = 0;
|
||||
|
||||
} else if (oldState == Running && newState == Stopped) {
|
||||
|
||||
qDebug() << ".........." << m_name << " fps: " << m_fps * 1000/duration();
|
||||
}
|
||||
}
|
||||
|
||||
void JavascriptAnimation::updateCurrentTime(int currentTime)
|
||||
{
|
||||
if (m_method->isFunction()) {
|
||||
++m_fps;
|
||||
QScriptValueList args;
|
||||
args << currentTime;
|
||||
|
||||
m_method->call(*m_instance, args);
|
||||
}
|
||||
}
|
||||
|
||||
} //namespace Plasma
|
||||
|
||||
#include <../jsanim_p.moc>
|
60
animations/jsanim_p.h
Normal file
60
animations/jsanim_p.h
Normal file
@ -0,0 +1,60 @@
|
||||
/***********************************************************************/
|
||||
/* jsanim_p.h */
|
||||
/* */
|
||||
/* Copyright (C) 2010 Adenilson Cavalcanti <cavalcantii@gmail.com> */
|
||||
/* */
|
||||
/* This library is free software; you can redistribute it and/or */
|
||||
/* modify it under the terms of the GNU Lesser General Public */
|
||||
/* License as published by the Free Software Foundation; either */
|
||||
/* version 2.1 of the License, or (at your option) any later version. */
|
||||
/* */
|
||||
/* This library 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 */
|
||||
/* Lesser General Public License for more details. */
|
||||
/* */
|
||||
/* You should have received a copy of the GNU Lesser General Public */
|
||||
/* License along with this library; if not, write to the Free Software */
|
||||
/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA */
|
||||
/* 02110-1301 USA */
|
||||
/***********************************************************************/
|
||||
|
||||
#ifndef PLASMA_ANIMATIONS_JS_P_H
|
||||
#define PLASMA_ANIMATIONS_JS_P_H
|
||||
|
||||
#include <plasma/animations/animation.h>
|
||||
#include <plasma/plasma_export.h>
|
||||
|
||||
class QString;
|
||||
class QScriptEngine;
|
||||
class QScriptValue;
|
||||
|
||||
namespace Plasma
|
||||
{
|
||||
|
||||
class JavascriptAnimation: public Animation
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
explicit JavascriptAnimation(const QString &name, QObject *parent = 0);
|
||||
|
||||
~JavascriptAnimation();
|
||||
|
||||
protected:
|
||||
void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
|
||||
void updateCurrentTime(int currentTime);
|
||||
|
||||
private:
|
||||
int m_fps;
|
||||
QString m_name;
|
||||
QScriptEngine *engine;
|
||||
QScriptValue *m_instance;
|
||||
QScriptValue *m_method;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user