From b05003a7317bcd91dbe8f623200339b79f09db4f Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Wed, 28 Oct 2015 08:53:21 +0200 Subject: [PATCH] Revert "plasma: drop animations support" This reverts commit ff0eb06a566ef3d1b4f89e93de6243b1d373d966. --- .../desktop/applets/folderview/actionoverlay.cpp | 19 ++++- plasma/desktop/applets/folderview/actionoverlay.h | 4 + plasma/desktop/containments/desktop/desktop.h | 1 + plasma/desktop/shell/desktopcorona.cpp | 2 + plasma/desktop/toolboxes/desktoptoolbox.cpp | 39 +++++++++- plasma/desktop/toolboxes/desktoptoolbox.h | 1 + plasma/desktop/toolboxes/paneltoolbox.h | 2 + .../applets/webbrowser/browserhistorycombobox.cpp | 1 + plasma/generic/applets/webbrowser/webbrowser.cpp | 13 +++- plasma/generic/applets/webbrowser/webbrowser.h | 1 + .../containmentactions/switchdesktop/desktop.cpp | 1 + .../containments/newspaper/applettitlebar.cpp | 64 ++++++++++++++- .../containments/newspaper/applettitlebar.h | 4 + .../javascript/plasmoid/simplejavascriptapplet.cpp | 91 ++++++++++++++++++++++ .../javascript/plasmoid/simplejavascriptapplet.h | 5 ++ .../simplebindings/qscriptbookkeeping.cpp | 15 ++++ 16 files changed, 257 insertions(+), 6 deletions(-) diff --git a/plasma/desktop/applets/folderview/actionoverlay.cpp b/plasma/desktop/applets/folderview/actionoverlay.cpp index 9193a191..4867681d 100644 --- a/plasma/desktop/applets/folderview/actionoverlay.cpp +++ b/plasma/desktop/applets/folderview/actionoverlay.cpp @@ -23,6 +23,7 @@ #include "iconview.h" #include +#include #include #include @@ -156,6 +157,17 @@ ActionOverlay::ActionOverlay(AbstractItemView* parent) m_hideActionOverlayIconTimer->setInterval(500); m_hideActionOverlayIconTimer->setSingleShot(true); + fadeIn = Plasma::Animator::create(Plasma::Animator::FadeAnimation, this); + fadeIn->setProperty("startOpacity", 0); + fadeIn->setProperty("targetOpacity", 1); + fadeIn->setTargetWidget(this); + + fadeOut = Plasma::Animator::create(Plasma::Animator::FadeAnimation, this); + fadeOut->setProperty("startOpacity", 1); + fadeOut->setProperty("targetOpacity", 0); + fadeOut->setTargetWidget(this); + connect(fadeOut, SIGNAL(finished()), SLOT(close())); + hide(); } @@ -200,6 +212,8 @@ void ActionOverlay::entered(const QModelIndex &index) show(); if (m_hoverIndex != index) { m_toggleButton->update(); + fadeOut->stop(); + fadeIn->start(); } m_hoverIndex = index; IconView *iview = qobject_cast(view); @@ -230,8 +244,9 @@ void ActionOverlay::timeout() // allow the animation to restart after hiding the ActionOverlayIcon even if m_hoverIndex didn't change m_hoverIndex = QPersistentModelIndex(); - if (isVisible()) { - close(); + if (isVisible() && (fadeOut->state() != QAbstractAnimation::Running)) { + fadeIn->stop(); + fadeOut->start(); } } diff --git a/plasma/desktop/applets/folderview/actionoverlay.h b/plasma/desktop/applets/folderview/actionoverlay.h index d5f0c48b..edc8783b 100644 --- a/plasma/desktop/applets/folderview/actionoverlay.h +++ b/plasma/desktop/applets/folderview/actionoverlay.h @@ -23,6 +23,8 @@ #include "abstractitemview.h" +#include + #include #include #include @@ -96,6 +98,8 @@ private: ActionIcon *m_openButton; QPersistentModelIndex m_hoverIndex; QTimer *m_hideActionOverlayIconTimer; + Plasma::Animation *fadeIn; + Plasma::Animation *fadeOut; bool m_showFolderButton; bool m_showSelectionButton; QGraphicsGridLayout * m_layout; diff --git a/plasma/desktop/containments/desktop/desktop.h b/plasma/desktop/containments/desktop/desktop.h index 27b2a4d7..a3888300 100644 --- a/plasma/desktop/containments/desktop/desktop.h +++ b/plasma/desktop/containments/desktop/desktop.h @@ -27,6 +27,7 @@ #include +#include #include "desktoplayout.h" diff --git a/plasma/desktop/shell/desktopcorona.cpp b/plasma/desktop/shell/desktopcorona.cpp index bc47a0ae..898d41b8 100644 --- a/plasma/desktop/shell/desktopcorona.cpp +++ b/plasma/desktop/shell/desktopcorona.cpp @@ -105,6 +105,8 @@ void DesktopCorona::init() connect(this, SIGNAL(availableScreenRegionChanged()), m_delayedUpdateTimer, SLOT(start())); connect(m_delayedUpdateTimer, SIGNAL(timeout()), this, SLOT(update())); + mapAnimation(Plasma::Animator::AppearAnimation, Plasma::Animator::ZoomAnimation); + mapAnimation(Plasma::Animator::DisappearAnimation, Plasma::Animator::ZoomAnimation); kDebug() << "!!{} STARTUP TIME" << QTime().msecsTo(QTime::currentTime()) << "DesktopCorona init end" << "(line:" << __LINE__ << ")"; } diff --git a/plasma/desktop/toolboxes/desktoptoolbox.cpp b/plasma/desktop/toolboxes/desktoptoolbox.cpp index 5d170308..98fc62bc 100644 --- a/plasma/desktop/toolboxes/desktoptoolbox.cpp +++ b/plasma/desktop/toolboxes/desktoptoolbox.cpp @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -479,6 +480,11 @@ void DesktopToolBox::showToolBox() m_toolBacker->setOpacity(0); m_toolBacker->show(); + Plasma::Animation *fadeAnim = Plasma::Animator::create(Plasma::Animator::FadeAnimation, m_toolBacker); + fadeAnim->setTargetWidget(m_toolBacker); + fadeAnim->setProperty("startOpacity", 0); + fadeAnim->setProperty("targetOpacity", 1); + fadeAnim->start(QAbstractAnimation::DeleteWhenStopped); highlight(true); setFocus(); } @@ -666,7 +672,12 @@ void DesktopToolBox::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) void DesktopToolBox::hideToolBox() { if (m_toolBacker) { - hideToolBacker(); + Plasma::Animation *fadeAnim = Plasma::Animator::create(Plasma::Animator::FadeAnimation, m_toolBacker); + connect(fadeAnim, SIGNAL(finished()), this, SLOT(hideToolBacker())); + fadeAnim->setTargetWidget(m_toolBacker); + fadeAnim->setProperty("startOpacity", 1); + fadeAnim->setProperty("targetOpacity", 0); + fadeAnim->start(QAbstractAnimation::DeleteWhenStopped); } highlight(false); @@ -684,6 +695,32 @@ void DesktopToolBox::highlight(bool highlighting) } m_hovering = highlighting; + + QPropertyAnimation *anim = m_anim.data(); + if (m_hovering) { + if (anim) { + anim->stop(); + m_anim.clear(); + } + anim = new QPropertyAnimation(this, "highlight", this); + m_anim = anim; + } + + if (anim->state() != QAbstractAnimation::Stopped) { + anim->stop(); + } + + anim->setDuration(250); + anim->setStartValue(0); + anim->setEndValue(1); + + if (m_hovering) { + anim->start(); + } else { + anim->setDirection(QAbstractAnimation::Backward); + anim->start(QAbstractAnimation::DeleteWhenStopped); + + } } void DesktopToolBox::setHighlight(qreal progress) diff --git a/plasma/desktop/toolboxes/desktoptoolbox.h b/plasma/desktop/toolboxes/desktoptoolbox.h index 8167a734..0edbcd10 100644 --- a/plasma/desktop/toolboxes/desktoptoolbox.h +++ b/plasma/desktop/toolboxes/desktoptoolbox.h @@ -27,6 +27,7 @@ #include +#include #include #include "internaltoolbox.h" diff --git a/plasma/desktop/toolboxes/paneltoolbox.h b/plasma/desktop/toolboxes/paneltoolbox.h index 2bf2e9fd..2bcc74ce 100644 --- a/plasma/desktop/toolboxes/paneltoolbox.h +++ b/plasma/desktop/toolboxes/paneltoolbox.h @@ -28,6 +28,8 @@ #include +#include + #include "internaltoolbox.h" class Widget; diff --git a/plasma/generic/applets/webbrowser/browserhistorycombobox.cpp b/plasma/generic/applets/webbrowser/browserhistorycombobox.cpp index bd05cee3..00f63282 100644 --- a/plasma/generic/applets/webbrowser/browserhistorycombobox.cpp +++ b/plasma/generic/applets/webbrowser/browserhistorycombobox.cpp @@ -30,6 +30,7 @@ #include #include +#include #include #include diff --git a/plasma/generic/applets/webbrowser/webbrowser.cpp b/plasma/generic/applets/webbrowser/webbrowser.cpp index 3821ea38..93075c81 100644 --- a/plasma/generic/applets/webbrowser/webbrowser.cpp +++ b/plasma/generic/applets/webbrowser/webbrowser.cpp @@ -45,6 +45,7 @@ #include #include +#include #include #include #include @@ -150,6 +151,10 @@ QGraphicsWidget *WebBrowser::graphicsWidget() m_removeBookmarkAction = new QAction(KIcon("list-remove"), QString(), this); m_organizeBookmarks = addTool("bookmarks-organize", m_statusbarLayout); + m_bookmarksViewAnimation = Plasma::Animator::create(Plasma::Animator::FadeAnimation, this); + m_bookmarksViewAnimation->setTargetWidget(m_bookmarksView); + connect(m_bookmarksViewAnimation, SIGNAL(finished()), this, SLOT(bookmarksAnimationFinished())); + m_stop = addTool("process-stop", m_statusbarLayout); QGraphicsWidget *spacer = new QGraphicsWidget(this); @@ -459,12 +464,16 @@ void WebBrowser::removeBookmark() void WebBrowser::bookmarksToggle() { if (m_bookmarksView->isVisible()) { - bookmarksAnimationFinished(); + m_bookmarksViewAnimation->setProperty("startOpacity", 1); + m_bookmarksViewAnimation->setProperty("targetOpacity", 0); + m_bookmarksViewAnimation->start(); } else { m_bookmarksView->show(); m_bookmarksView->setOpacity(0); updateOverlaysGeometry(); - bookmarksAnimationFinished(); + m_bookmarksViewAnimation->setProperty("startOpacity", 0); + m_bookmarksViewAnimation->setProperty("targetOpacity", 1); + m_bookmarksViewAnimation->start(); } } diff --git a/plasma/generic/applets/webbrowser/webbrowser.h b/plasma/generic/applets/webbrowser/webbrowser.h index 30ae1ee4..923f573d 100644 --- a/plasma/generic/applets/webbrowser/webbrowser.h +++ b/plasma/generic/applets/webbrowser/webbrowser.h @@ -130,6 +130,7 @@ private: KBookmarkManager *m_bookmarkManager; QStandardItemModel *m_bookmarkModel; Plasma::TreeView *m_bookmarksView; + Plasma::Animation *m_bookmarksViewAnimation; QTimer *m_autoRefreshTimer; bool m_autoRefresh; diff --git a/plasma/generic/containmentactions/switchdesktop/desktop.cpp b/plasma/generic/containmentactions/switchdesktop/desktop.cpp index 066f1e27..19bc9e37 100644 --- a/plasma/generic/containmentactions/switchdesktop/desktop.cpp +++ b/plasma/generic/containmentactions/switchdesktop/desktop.cpp @@ -20,6 +20,7 @@ #include "desktop.h" #include +#include #include #include diff --git a/plasma/generic/containments/newspaper/applettitlebar.cpp b/plasma/generic/containments/newspaper/applettitlebar.cpp index 8ff5b765..05726306 100644 --- a/plasma/generic/containments/newspaper/applettitlebar.cpp +++ b/plasma/generic/containments/newspaper/applettitlebar.cpp @@ -27,8 +27,10 @@ #include #include + #include +#include #include #include #include @@ -50,6 +52,11 @@ AppletTitleBar::AppletTitleBar(Plasma::Applet *applet) setZValue(10000); + + m_pulse = + Plasma::Animator::create(Plasma::Animator::PulseAnimation); + m_pulse->setTargetWidget(applet); + m_maximizeButtonRect = m_configureButtonRect = m_closeButtonRect = QRect(0, 0, KIconLoader::SizeSmallMedium, KIconLoader::SizeSmallMedium); m_icons = new Plasma::Svg(this); @@ -82,6 +89,8 @@ AppletTitleBar::AppletTitleBar(Plasma::Applet *applet) AppletTitleBar::~AppletTitleBar() { + delete m_pulse; + delete m_animations.data(); } void AppletTitleBar::setButtonsVisible(bool visible) @@ -91,6 +100,28 @@ void AppletTitleBar::setButtonsVisible(bool visible) } m_buttonsVisible = visible; + + if (visible) { + if (!m_animations) { + initAnimations(); + + m_animations.data()->start(); + m_animations.data()->setCurrentTime(0); + } else { + QParallelAnimationGroup *group = m_animations.data(); + + group->stop(); + group->setCurrentTime(0); + group->setDirection(QAbstractAnimation::Forward); + + group->start(); + } + } else { + initAnimations(); + QParallelAnimationGroup *group = m_animations.data(); + group->setDirection(QAbstractAnimation::Backward); + group->start(QAbstractAnimation::DeleteWhenStopped); + } } bool AppletTitleBar::buttonsVisible() const @@ -113,6 +144,36 @@ bool AppletTitleBar::isActive() const return m_active; } +void AppletTitleBar::initAnimations() +{ + if (m_animations) { + return; + } + + m_animations = new QParallelAnimationGroup(this); + QParallelAnimationGroup *group = m_animations.data(); + + if (m_applet->hasValidAssociatedApplication()) { + Plasma::Animation *maximizeAnim = + Plasma::Animator::create(Plasma::Animator::PixmapTransitionAnimation); + maximizeAnim->setProperty("targetPixmap", m_icons->pixmap("maximize")); + maximizeAnim->setTargetWidget(this); + group->addAnimation(maximizeAnim); + } + + Plasma::Animation *confAnim = + Plasma::Animator::create(Plasma::Animator::PixmapTransitionAnimation); + Plasma::Animation *closeAnim = + Plasma::Animator::create(Plasma::Animator::PixmapTransitionAnimation); + confAnim->setProperty("targetPixmap", m_icons->pixmap("configure")); + confAnim->setTargetWidget(this); + + closeAnim->setProperty("targetPixmap", m_icons->pixmap("close")); + closeAnim->setTargetWidget(this); + group->addAnimation(confAnim); + group->addAnimation(closeAnim); +} + void AppletTitleBar::syncMargins() { const int extraMargin = 2; @@ -236,6 +297,7 @@ void AppletTitleBar::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (m_pressedButton == MaximizeButton && m_maximizeButtonRect.contains(event->pos())) { if (m_applet->hasValidAssociatedApplication()) { + m_pulse->start(); m_applet->runAssociatedApplication(); } } else if (m_pressedButton == ConfigureButton && m_configureButtonRect.contains(event->pos())) { @@ -292,7 +354,7 @@ void AppletTitleBar::paint(QPainter *painter, const QStyleOptionGraphicsItem *op QParallelAnimationGroup *group = m_animations.data(); int i = 0; - // TODO: revisit + if (m_applet->hasValidAssociatedApplication()) { if (group) { if (group->state() == QAbstractAnimation::Running) { diff --git a/plasma/generic/containments/newspaper/applettitlebar.h b/plasma/generic/containments/newspaper/applettitlebar.h index 734f45ed..20652509 100644 --- a/plasma/generic/containments/newspaper/applettitlebar.h +++ b/plasma/generic/containments/newspaper/applettitlebar.h @@ -24,6 +24,8 @@ #include #include +#include + namespace Plasma { class Applet; @@ -83,6 +85,8 @@ private: Plasma::Svg *m_separator; Plasma::FrameSvg *m_background; + Plasma::Animation *m_pulse; + qreal m_savedAppletTopMargin; bool m_underMouse; bool m_buttonsVisible; diff --git a/plasma/generic/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp b/plasma/generic/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp index ae41338d..7767bf20 100644 --- a/plasma/generic/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp +++ b/plasma/generic/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp @@ -45,6 +45,7 @@ #include #include +#include #include #include #include @@ -94,6 +95,7 @@ QScriptValue constructTimerClass(QScriptEngine *engine); void registerSimpleAppletMetaTypes(QScriptEngine *engine); KSharedPtr SimpleJavaScriptApplet::s_widgetLoader; +QHash SimpleJavaScriptApplet::s_animationDefs; SimpleJavaScriptApplet::SimpleJavaScriptApplet(QObject *parent, const QVariantList &args) : AbstractJsAppletScript(parent), @@ -284,6 +286,20 @@ bool SimpleJavaScriptApplet::include(const QString &path) return m_env->include(path); } +void SimpleJavaScriptApplet::populateAnimationsHash() +{ + if (s_animationDefs.isEmpty()) { + s_animationDefs.insert("fade", Plasma::Animator::FadeAnimation); + s_animationDefs.insert("geometry", Plasma::Animator::GeometryAnimation); + s_animationDefs.insert("grow", Plasma::Animator::GrowAnimation); + s_animationDefs.insert("pulse", Plasma::Animator::PulseAnimation); + s_animationDefs.insert("rotate", Plasma::Animator::RotationAnimation); + s_animationDefs.insert("rotateStacked", Plasma::Animator::RotationStackedAnimation); + s_animationDefs.insert("slide", Plasma::Animator::SlideAnimation); + s_animationDefs.insert("zoom", Plasma::Animator::ZoomAnimation); + } +} + bool SimpleJavaScriptApplet::init() { connect(applet(), SIGNAL(extenderItemRestored(Plasma::ExtenderItem*)), @@ -480,6 +496,11 @@ void SimpleJavaScriptApplet::setupObjects() { QScriptValue global = m_engine->globalObject(); + // Bindings for animations + global.setProperty("animation", m_engine->newFunction(SimpleJavaScriptApplet::animation)); + global.setProperty("AnimationGroup", m_engine->newFunction(SimpleJavaScriptApplet::animationGroup)); + global.setProperty("ParallelAnimationGroup", m_engine->newFunction(SimpleJavaScriptApplet::parallelAnimationGroup)); + QScriptValue v = m_engine->newVariant(QVariant::fromValue(*applet()->package())); global.setProperty("__plasma_package", v, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration); @@ -614,6 +635,76 @@ QScriptValue SimpleJavaScriptApplet::loadService(QScriptContext *context, QScrip return engine->newQObject(service, QScriptEngine::AutoOwnership); } +QScriptValue SimpleJavaScriptApplet::animation(QScriptContext *context, QScriptEngine *engine) +{ + if (context->argumentCount() != 1) { + return context->throwError(i18n("animation() takes one argument")); + } + + populateAnimationsHash(); + QString name = context->argument(0).toString(); + QString animName = name.toLower(); + const bool isPause = animName == "pause"; + const bool isProperty = animName == "property"; + + bool parentIsApplet = false; + QGraphicsWidget *parent = extractParent(context, engine, 0, &parentIsApplet); + QAbstractAnimation *anim = 0; + Plasma::Animation *plasmaAnim = 0; + if (isPause) { + anim = new QPauseAnimation(parent); + } else if (isProperty) { + anim = new QPropertyAnimation(parent); + } else if (s_animationDefs.contains(animName)) { + plasmaAnim = Plasma::Animator::create(s_animationDefs.value(animName), parent); + } else { + SimpleJavaScriptApplet *jsApplet = qobject_cast(engine->parent()); + if (jsApplet) { + //kDebug() << "trying to load it from the package"; + plasmaAnim = jsApplet->loadAnimationFromPackage(name, parent); + } + + if (!plasmaAnim) { + plasmaAnim = Plasma::Animator::create(animName, parent); + } + } + + if (plasmaAnim) { + if (!parentIsApplet) { + plasmaAnim->setTargetWidget(parent); + } + anim = plasmaAnim; + } + + if (anim) { + QScriptValue value = engine->newQObject(anim); + ScriptEnv::registerEnums(value, *anim->metaObject()); + return value; + } + + context->throwError(i18n("%1 is not a known animation type", animName)); + + ScriptEnv *env = ScriptEnv::findScriptEnv(engine); + if (env) { + env->checkForErrors(false); + } + return engine->undefinedValue(); +} + +QScriptValue SimpleJavaScriptApplet::animationGroup(QScriptContext *context, QScriptEngine *engine) +{ + QGraphicsWidget *parent = extractParent(context, engine); + SequentialAnimationGroup *group = new SequentialAnimationGroup(parent); + return engine->newQObject(group); +} + +QScriptValue SimpleJavaScriptApplet::parallelAnimationGroup(QScriptContext *context, QScriptEngine *engine) +{ + QGraphicsWidget *parent = extractParent(context, engine); + ParallelAnimationGroup *group = new ParallelAnimationGroup(parent); + return engine->newQObject(group); +} + QScriptValue SimpleJavaScriptApplet::loadui(QScriptContext *context, QScriptEngine *engine) { if (context->argumentCount() != 1) { diff --git a/plasma/generic/scriptengines/javascript/plasmoid/simplejavascriptapplet.h b/plasma/generic/scriptengines/javascript/plasmoid/simplejavascriptapplet.h index 64116286..29929dcf 100644 --- a/plasma/generic/scriptengines/javascript/plasmoid/simplejavascriptapplet.h +++ b/plasma/generic/scriptengines/javascript/plasmoid/simplejavascriptapplet.h @@ -21,6 +21,7 @@ #include +#include #include #include "simplebindings/uiloader.h" @@ -81,6 +82,9 @@ private: static void populateAnimationsHash(); static QString findSvg(QScriptContext *context, QScriptEngine *engine, const QString &file); + static QScriptValue animation(QScriptContext *context, QScriptEngine *engine); + static QScriptValue animationGroup(QScriptContext *context, QScriptEngine *engine); + static QScriptValue parallelAnimationGroup(QScriptContext *context, QScriptEngine *engine); static QScriptValue jsi18n(QScriptContext *context, QScriptEngine *engine); static QScriptValue jsi18nc(QScriptContext *context, QScriptEngine *engine); static QScriptValue jsi18np(QScriptContext *context, QScriptEngine *engine); @@ -104,6 +108,7 @@ private: private: static KSharedPtr s_widgetLoader; + static QHash s_animationDefs; ScriptEnv *m_env; QScriptEngine *m_engine; QScriptValue m_self; diff --git a/plasma/generic/scriptengines/javascript/simplebindings/qscriptbookkeeping.cpp b/plasma/generic/scriptengines/javascript/simplebindings/qscriptbookkeeping.cpp index cba60dc2..bc9cb8b7 100644 --- a/plasma/generic/scriptengines/javascript/simplebindings/qscriptbookkeeping.cpp +++ b/plasma/generic/scriptengines/javascript/simplebindings/qscriptbookkeeping.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -28,6 +29,7 @@ Q_DECLARE_METATYPE(QGraphicsWidget*) Q_DECLARE_METATYPE(QGraphicsLayout*) +Q_DECLARE_METATYPE(Plasma::Animation*) Q_DECLARE_METATYPE(Plasma::Applet*) Q_DECLARE_METATYPE(Plasma::Extender*) Q_DECLARE_METATYPE(Plasma::VideoWidget::Controls) @@ -67,6 +69,18 @@ void controlsFromScriptValue(const QScriptValue& obj, Plasma::VideoWidget::Contr } } +typedef Plasma::Animation* AnimationPtr; +QScriptValue qScriptValueFromAnimation(QScriptEngine *engine, const AnimationPtr &anim) +{ + return engine->newQObject(const_cast(anim), QScriptEngine::AutoOwnership, QScriptEngine::PreferExistingWrapperObject); +} + +void abstractAnimationFromQScriptValue(const QScriptValue &scriptValue, AnimationPtr &anim) +{ + QObject *obj = scriptValue.toQObject(); + anim = static_cast(obj); +} + typedef QGraphicsWidget * QGraphicsWidgetPtr; QScriptValue qScriptValueFromQGraphicsWidget(QScriptEngine *engine, const QGraphicsWidgetPtr &anim) { @@ -124,6 +138,7 @@ void registerSimpleAppletMetaTypes(QScriptEngine *engine) qScriptRegisterMetaType(engine, qScriptValueFromSvg, svgFromQScriptValue); qScriptRegisterSequenceMetaType >(engine); + qScriptRegisterMetaType(engine, qScriptValueFromAnimation, abstractAnimationFromQScriptValue); qScriptRegisterMetaType(engine, qScriptValueFromExtender, extenderFromQScriptValue); qScriptRegisterMetaType(engine, qScriptValueFromControls, controlsFromScriptValue, QScriptValue()); qScriptRegisterMetaType(engine, qScriptValueFromMouseButton, mouseButtonFromScriptValue); -- 2.11.0