summaryrefslogtreecommitdiffstats
path: root/src/declarative
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative')
-rw-r--r--src/declarative/debugger/qmldebugger.cpp2
-rw-r--r--src/declarative/declarative.pro1
-rw-r--r--src/declarative/extra/qfxflowview.cpp3
-rw-r--r--src/declarative/extra/qfxflowview.h2
-rw-r--r--src/declarative/extra/qfxparticles.cpp2
-rw-r--r--src/declarative/extra/qmlfolderlistmodel.cpp3
-rw-r--r--src/declarative/extra/qmlxmllistmodel.cpp16
-rw-r--r--src/declarative/extra/qmlxmllistmodel.h3
-rw-r--r--src/declarative/fx/qfxcomponentinstance.cpp2
-rw-r--r--src/declarative/fx/qfxflickable_p.h2
-rw-r--r--src/declarative/fx/qfximage.cpp2
-rw-r--r--src/declarative/fx/qfxitem.cpp2
-rw-r--r--src/declarative/fx/qfxlayouts.cpp2
-rw-r--r--src/declarative/fx/qfxpath.cpp2
-rw-r--r--src/declarative/fx/qfxpathview_p.h1
-rw-r--r--src/declarative/fx/qfxpixmap.cpp2
-rw-r--r--src/declarative/fx/qfxtext.cpp27
-rw-r--r--src/declarative/fx/qfxtext.h4
-rw-r--r--src/declarative/fx/qfxtext_p.h3
-rw-r--r--src/declarative/fx/qfxtextedit.cpp2
-rw-r--r--src/declarative/qml/qmlbasicscript.cpp2
-rw-r--r--src/declarative/qml/qmlbindablevalue.cpp2
-rw-r--r--src/declarative/qml/qmlcompiler.cpp158
-rw-r--r--src/declarative/qml/qmlcompiler_p.h17
-rw-r--r--src/declarative/qml/qmlcomponent.cpp2
-rw-r--r--src/declarative/qml/qmlengine.cpp2
-rw-r--r--src/declarative/qml/qmlinstruction_p.h1
-rw-r--r--src/declarative/qml/qmlmetaproperty.cpp4
-rw-r--r--src/declarative/qml/qmlparser.cpp2
-rw-r--r--src/declarative/qml/qmlparser_p.h2
-rw-r--r--src/declarative/qml/qmlscriptparser.cpp8
-rw-r--r--src/declarative/qml/qmlvme.cpp5
-rw-r--r--src/declarative/qml/qmlvmemetaobject.cpp52
-rw-r--r--src/declarative/qml/qmlvmemetaobject_p.h13
-rw-r--r--src/declarative/test/qfxtestengine.cpp2
-rw-r--r--src/declarative/timeline/qmltimelinevalueproxy.h86
-rw-r--r--src/declarative/timeline/timeline.pri7
-rw-r--r--src/declarative/util/qfxperf.cpp2
-rw-r--r--src/declarative/util/qfxperf_p.h (renamed from src/declarative/util/qfxperf.h)13
-rw-r--r--src/declarative/util/qfxview.cpp4
-rw-r--r--src/declarative/util/qmlanimation.cpp45
-rw-r--r--src/declarative/util/qmlanimation_p.h2
-rw-r--r--src/declarative/util/qmlscript.cpp2
-rw-r--r--src/declarative/util/qmltimeline.cpp (renamed from src/declarative/timeline/qmltimeline.cpp)2
-rw-r--r--src/declarative/util/qmltimeline_p.h (renamed from src/declarative/timeline/qmltimeline.h)46
-rw-r--r--src/declarative/util/qperformancelog.cpp2
-rw-r--r--src/declarative/util/qperformancelog_p.h (renamed from src/declarative/util/qperformancelog.h)0
-rw-r--r--src/declarative/util/util.pri6
48 files changed, 368 insertions, 204 deletions
diff --git a/src/declarative/debugger/qmldebugger.cpp b/src/declarative/debugger/qmldebugger.cpp
index aad11de..9122d87 100644
--- a/src/declarative/debugger/qmldebugger.cpp
+++ b/src/declarative/debugger/qmldebugger.cpp
@@ -262,7 +262,7 @@ bool QmlDebugger::makeItem(QObject *obj, QmlDebuggerItem *item)
delete item;
return false;
- } else if(QmlBoundSignal *bs = qobject_cast<QmlBoundSignal *>(obj)) {
+ } else if(qobject_cast<QmlBoundSignal *>(obj)) {
delete item;
return false;
} else {
diff --git a/src/declarative/declarative.pro b/src/declarative/declarative.pro
index 9f555fe..4bf267c 100644
--- a/src/declarative/declarative.pro
+++ b/src/declarative/declarative.pro
@@ -19,7 +19,6 @@ include(util/util.pri)
include(fx/fx.pri)
include(canvas/canvas.pri)
include(qml/qml.pri)
-include(timeline/timeline.pri)
include(extra/extra.pri)
include(widgets/widgets.pri)
include(test/test.pri)
diff --git a/src/declarative/extra/qfxflowview.cpp b/src/declarative/extra/qfxflowview.cpp
index 254e423..412cbc8 100644
--- a/src/declarative/extra/qfxflowview.cpp
+++ b/src/declarative/extra/qfxflowview.cpp
@@ -199,8 +199,6 @@ void QFxFlowView::reflowDrag(const QPointF &dp)
qreal maxY = 0;
qreal x = 0;
- int flowedItems = 0;
-
clearTimeLine();
QList<QFxItem *> items;
@@ -316,6 +314,7 @@ QRectF QFxFlowView::rectForItem(int idx) const
void QFxFlowView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
+ Q_UNUSED(event);
if (m_dragItem) {
m_dragItem->setZ(0);
diff --git a/src/declarative/extra/qfxflowview.h b/src/declarative/extra/qfxflowview.h
index 2bec6a1..126f567 100644
--- a/src/declarative/extra/qfxflowview.h
+++ b/src/declarative/extra/qfxflowview.h
@@ -42,7 +42,7 @@
#ifndef QFXFLOWVIEW_H
#define QFXFLOWVIEW_H
-#include <QtDeclarative/QmlTimeLine>
+#include <private/qmltimeline_p.h>
#include <QtDeclarative/qfxitem.h>
QT_BEGIN_HEADER
diff --git a/src/declarative/extra/qfxparticles.cpp b/src/declarative/extra/qfxparticles.cpp
index 62fe4c1..3130f06 100644
--- a/src/declarative/extra/qfxparticles.cpp
+++ b/src/declarative/extra/qfxparticles.cpp
@@ -54,7 +54,7 @@
#define INT_MAX 2147483647
#endif
#include <qfxpixmap.h>
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <private/qmlanimation_p.h>
#include "qfxparticles.h"
diff --git a/src/declarative/extra/qmlfolderlistmodel.cpp b/src/declarative/extra/qmlfolderlistmodel.cpp
index 8b008a5..acee5e1 100644
--- a/src/declarative/extra/qmlfolderlistmodel.cpp
+++ b/src/declarative/extra/qmlfolderlistmodel.cpp
@@ -51,7 +51,7 @@ class QmlFolderListModelPrivate : public QObjectPrivate
public:
QmlFolderListModelPrivate() : count(0) {
folder = QDir::currentPath();
- nameFilters << "*";
+ nameFilters << QLatin1String("*");
}
QDirModel model;
@@ -81,6 +81,7 @@ QmlFolderListModel::~QmlFolderListModel()
QHash<int,QVariant> QmlFolderListModel::data(int index, const QList<int> &roles) const
{
+ Q_UNUSED(roles);
Q_D(const QmlFolderListModel);
QHash<int,QVariant> folderData;
QModelIndex modelIndex = d->model.index(index, 0, d->folderIndex);
diff --git a/src/declarative/extra/qmlxmllistmodel.cpp b/src/declarative/extra/qmlxmllistmodel.cpp
index 48949b3..95c3de6 100644
--- a/src/declarative/extra/qmlxmllistmodel.cpp
+++ b/src/declarative/extra/qmlxmllistmodel.cpp
@@ -289,11 +289,11 @@ class QmlXmlListModelPrivate : public QObjectPrivate
Q_DECLARE_PUBLIC(QmlXmlListModel)
public:
QmlXmlListModelPrivate()
- : isClassComplete(false), size(-1), highestRole(Qt::UserRole)
+ : isComponentComplete(true), size(-1), highestRole(Qt::UserRole)
, reply(0), status(QmlXmlListModel::Idle), progress(0.0)
, queryId(-1), roleObjects(this) {}
- bool isClassComplete;
+ bool isComponentComplete;
QUrl src;
QString query;
QString namespaces;
@@ -549,10 +549,16 @@ qreal QmlXmlListModel::progress() const
return d->progress;
}
-void QmlXmlListModel::classComplete()
+void QmlXmlListModel::classBegin()
{
Q_D(QmlXmlListModel);
- d->isClassComplete = true;
+ d->isComponentComplete = false;
+}
+
+void QmlXmlListModel::componentComplete()
+{
+ Q_D(QmlXmlListModel);
+ d->isComponentComplete = true;
reload();
}
@@ -566,7 +572,7 @@ void QmlXmlListModel::reload()
{
Q_D(QmlXmlListModel);
- if (!d->isClassComplete)
+ if (!d->isComponentComplete)
return;
d->qmlXmlQuery.abort();
diff --git a/src/declarative/extra/qmlxmllistmodel.h b/src/declarative/extra/qmlxmllistmodel.h
index 804f13f..d9871ab 100644
--- a/src/declarative/extra/qmlxmllistmodel.h
+++ b/src/declarative/extra/qmlxmllistmodel.h
@@ -124,7 +124,8 @@ public:
Status status() const;
qreal progress() const;
- virtual void classComplete();
+ virtual void classBegin();
+ virtual void componentComplete();
signals:
void statusChanged(Status);
diff --git a/src/declarative/fx/qfxcomponentinstance.cpp b/src/declarative/fx/qfxcomponentinstance.cpp
index d3f7061..7f592a9 100644
--- a/src/declarative/fx/qfxcomponentinstance.cpp
+++ b/src/declarative/fx/qfxcomponentinstance.cpp
@@ -41,7 +41,7 @@
#include "qfxcomponentinstance.h"
#include "qfxcomponentinstance_p.h"
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <qfxcontentwrapper.h>
#include <QtDeclarative/qmlinfo.h>
diff --git a/src/declarative/fx/qfxflickable_p.h b/src/declarative/fx/qfxflickable_p.h
index a3b1500..28ec6d8 100644
--- a/src/declarative/fx/qfxflickable_p.h
+++ b/src/declarative/fx/qfxflickable_p.h
@@ -57,7 +57,7 @@
#include "qfxflickable.h"
#include "qfxitem_p.h"
#include "qml.h"
-#include "qmltimelinevalueproxy.h"
+#include "private/qmltimeline_p.h"
#include "private/qmlanimation_p.h"
QT_BEGIN_NAMESPACE
diff --git a/src/declarative/fx/qfximage.cpp b/src/declarative/fx/qfximage.cpp
index 58d597a..539ad02 100644
--- a/src/declarative/fx/qfximage.cpp
+++ b/src/declarative/fx/qfximage.cpp
@@ -41,7 +41,7 @@
#include "qfximage.h"
#include "qfximage_p.h"
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#if defined(QFX_RENDER_OPENGL)
#include <glsave.h>
#endif
diff --git a/src/declarative/fx/qfxitem.cpp b/src/declarative/fx/qfxitem.cpp
index 7ccad5f..223af60 100644
--- a/src/declarative/fx/qfxitem.cpp
+++ b/src/declarative/fx/qfxitem.cpp
@@ -47,7 +47,7 @@
#include <QNetworkRequest>
#include <QGraphicsSceneMouseEvent>
#include <QtScript/qscriptengine.h>
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include "qmlengine.h"
#include "qmlstate.h"
diff --git a/src/declarative/fx/qfxlayouts.cpp b/src/declarative/fx/qfxlayouts.cpp
index af51318..20e7c7c 100644
--- a/src/declarative/fx/qfxlayouts.cpp
+++ b/src/declarative/fx/qfxlayouts.cpp
@@ -45,7 +45,7 @@
#include "qmlstate.h"
#include "qmlstategroup.h"
#include "qmlstateoperations.h"
-#include "qfxperf.h"
+#include "private/qfxperf_p.h"
#include "qfxlayouts.h"
#include "qfxlayouts_p.h"
diff --git a/src/declarative/fx/qfxpath.cpp b/src/declarative/fx/qfxpath.cpp
index be731b1..4c241d3 100644
--- a/src/declarative/fx/qfxpath.cpp
+++ b/src/declarative/fx/qfxpath.cpp
@@ -41,7 +41,7 @@
#include "qfxpath.h"
#include "qfxpath_p.h"
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <private/qbezier_p.h>
diff --git a/src/declarative/fx/qfxpathview_p.h b/src/declarative/fx/qfxpathview_p.h
index b5c5ba2..b77c2a0 100644
--- a/src/declarative/fx/qfxpathview_p.h
+++ b/src/declarative/fx/qfxpathview_p.h
@@ -58,7 +58,6 @@
#include "qfxitem_p.h"
#include "qfxvisualitemmodel.h"
#include "qml.h"
-#include "qmltimelinevalueproxy.h"
#include "private/qmlanimation_p.h"
QT_BEGIN_NAMESPACE
diff --git a/src/declarative/fx/qfxpixmap.cpp b/src/declarative/fx/qfxpixmap.cpp
index 0ea94f5..5ee6528 100644
--- a/src/declarative/fx/qfxpixmap.cpp
+++ b/src/declarative/fx/qfxpixmap.cpp
@@ -43,7 +43,7 @@
#include <QHash>
#include <QNetworkReply>
#include <QPixmapCache>
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <QtDeclarative/qmlengine.h>
#include <QFile>
diff --git a/src/declarative/fx/qfxtext.cpp b/src/declarative/fx/qfxtext.cpp
index 9550af9..f2519dc 100644
--- a/src/declarative/fx/qfxtext.cpp
+++ b/src/declarative/fx/qfxtext.cpp
@@ -48,7 +48,7 @@
#include "glbasicshaders.h"
#endif
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <QTextLayout>
#include <QTextLine>
#include <QTextDocument>
@@ -701,6 +701,21 @@ void QFxTextPrivate::checkImgCache()
imgDirty = false;
}
+bool QFxText::smoothTransform() const
+{
+ Q_D(const QFxText);
+ return d->smooth;
+}
+
+void QFxText::setSmoothTransform(bool s)
+{
+ Q_D(QFxText);
+ if (d->smooth == s)
+ return;
+ d->smooth = s;
+ update();
+}
+
#if defined(QFX_RENDER_QPAINTER)
void QFxText::paintContents(QPainter &p)
{
@@ -709,6 +724,11 @@ void QFxText::paintContents(QPainter &p)
if (d->imgCache.isNull())
return;
+ bool oldAA = p.testRenderHint(QPainter::Antialiasing);
+ bool oldSmooth = p.testRenderHint(QPainter::SmoothPixmapTransform);
+ if (d->smooth)
+ p.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, d->smooth);
+
int w = width();
int h = height();
@@ -749,6 +769,11 @@ void QFxText::paintContents(QPainter &p)
p.drawPixmap(x, y, d->imgCache);
if (needClip)
p.restore();
+
+ if (d->smooth) {
+ p.setRenderHint(QPainter::Antialiasing, oldAA);
+ p.setRenderHint(QPainter::SmoothPixmapTransform, oldSmooth);
+ }
}
#elif defined(QFX_RENDER_OPENGL2)
diff --git a/src/declarative/fx/qfxtext.h b/src/declarative/fx/qfxtext.h
index 1f5a7b8..104d18c 100644
--- a/src/declarative/fx/qfxtext.h
+++ b/src/declarative/fx/qfxtext.h
@@ -69,6 +69,7 @@ class Q_DECLARATIVE_EXPORT QFxText : public QFxItem
Q_PROPERTY(bool wrap READ wrap WRITE setWrap)
Q_PROPERTY(Qt::TextElideMode elide READ elideMode WRITE setElideMode)
Q_PROPERTY(QString activeLink READ activeLink)
+ Q_PROPERTY(bool smooth READ smoothTransform WRITE setSmoothTransform)
public:
QFxText(QFxItem *parent=0);
@@ -113,6 +114,9 @@ public:
QString activeLink() const;
+ bool smoothTransform() const;
+ void setSmoothTransform(bool);
+
virtual void dump(int depth);
virtual QString propertyInfo() const;
diff --git a/src/declarative/fx/qfxtext_p.h b/src/declarative/fx/qfxtext_p.h
index dfaef63..c58705c 100644
--- a/src/declarative/fx/qfxtext_p.h
+++ b/src/declarative/fx/qfxtext_p.h
@@ -75,7 +75,7 @@ public:
QFxTextPrivate()
: _font(0), color((QRgb)0), style(QFxText::Normal), imgDirty(true),
hAlign(QFxText::AlignLeft), vAlign(QFxText::AlignTop), elideMode(Qt::ElideNone),
- dirty(false), wrap(false), richText(false), singleline(false), control(0), doc(0)
+ dirty(false), wrap(false), smooth(false), richText(false), singleline(false), control(0), doc(0)
{
}
@@ -125,6 +125,7 @@ public:
Qt::TextElideMode elideMode;
bool dirty;
bool wrap;
+ bool smooth;
bool richText;
bool singleline;
QTextControl *control;
diff --git a/src/declarative/fx/qfxtextedit.cpp b/src/declarative/fx/qfxtextedit.cpp
index 03dd63f..7f08fba 100644
--- a/src/declarative/fx/qfxtextedit.cpp
+++ b/src/declarative/fx/qfxtextedit.cpp
@@ -48,7 +48,7 @@
#include "glbasicshaders.h"
#endif
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include "qfxevents_p.h"
#include <QTextLayout>
#include <QTextLine>
diff --git a/src/declarative/qml/qmlbasicscript.cpp b/src/declarative/qml/qmlbasicscript.cpp
index 8b0cb42..0cfb587 100644
--- a/src/declarative/qml/qmlbasicscript.cpp
+++ b/src/declarative/qml/qmlbasicscript.cpp
@@ -45,7 +45,7 @@
#include <private/qmlengine_p.h>
#include <private/qmlcontext_p.h>
#include <QStack>
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <private/qmlrefcount_p.h>
#include <private/qmljsast_p.h>
#include <private/qmljsengine_p.h>
diff --git a/src/declarative/qml/qmlbindablevalue.cpp b/src/declarative/qml/qmlbindablevalue.cpp
index f447d4f..8e74250 100644
--- a/src/declarative/qml/qmlbindablevalue.cpp
+++ b/src/declarative/qml/qmlbindablevalue.cpp
@@ -45,7 +45,7 @@
#include <qmlcontext.h>
#include <qmlinfo.h>
#include <QVariant>
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <QtCore/qdebug.h>
Q_DECLARE_METATYPE(QList<QObject *>);
diff --git a/src/declarative/qml/qmlcompiler.cpp b/src/declarative/qml/qmlcompiler.cpp
index 47f69a0..aa2cf84 100644
--- a/src/declarative/qml/qmlcompiler.cpp
+++ b/src/declarative/qml/qmlcompiler.cpp
@@ -40,7 +40,7 @@
****************************************************************************/
#include "private/qmlcompiler_p.h"
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include "qmlparser_p.h"
#include "private/qmlscriptparser_p.h"
#include <qmlpropertyvaluesource.h>
@@ -554,17 +554,18 @@ void QmlCompiler::compileTree(Object *tree)
if (!compileObject(tree, 0)) // Compile failed
return;
- if (tree->metatype)
- static_cast<QMetaObject &>(output->root) = *tree->metaObject();
- else
- static_cast<QMetaObject &>(output->root) = *output->types.at(tree->type).metaObject();
-
QmlInstruction def;
init.line = 0;
def.type = QmlInstruction::SetDefault;
output->bytecode << def;
finalizeComponent(0);
+
+ if (tree->metatype)
+ static_cast<QMetaObject &>(output->root) = *tree->metaObject();
+ else
+ static_cast<QMetaObject &>(output->root) = *output->types.at(tree->type).metaObject();
+
}
bool QmlCompiler::compileObject(Object *obj, const BindingContext &ctxt)
@@ -798,13 +799,12 @@ bool QmlCompiler::compileComponentFromRoot(Object *obj, const BindingContext &ct
if (obj)
COMPILE_CHECK(compileObject(obj, ctxt));
- finalizeComponent(count);
+ COMPILE_CHECK(finalizeComponent(count));
create.createComponent.count = output->bytecode.count() - count;
compileState = oldComponentCompileState;
return true;
}
-
bool QmlCompiler::compileFetchedObject(Object *obj, const BindingContext &ctxt)
{
Q_ASSERT(obj->metatype);
@@ -1398,7 +1398,7 @@ bool QmlCompiler::compilePropertyLiteralAssignment(QmlParser::Property *prop,
return true;
}
-bool QmlCompiler::compileDynamicMeta(QmlParser::Object *obj)
+bool QmlCompiler::compileDynamicMeta(QmlParser::Object *obj, int preAlias)
{
// ### FIXME - Check that there is only one default property etc.
if (obj->dynamicProperties.isEmpty() &&
@@ -1411,14 +1411,20 @@ bool QmlCompiler::compileDynamicMeta(QmlParser::Object *obj)
builder.setClassName(QByteArray(obj->metatype->className()) + "QML");
builder.setFlags(QMetaObjectBuilder::DynamicMetaObject);
+ bool hasAlias = false;
for (int ii = 0; ii < obj->dynamicProperties.count(); ++ii) {
const Object::DynamicProperty &p = obj->dynamicProperties.at(ii);
- if (p.isDefaultProperty)
+ if (p.isDefaultProperty &&
+ (p.type != Object::DynamicProperty::Alias || preAlias != -1))
builder.addClassInfo("DefaultProperty", p.name);
QByteArray type;
switch(p.type) {
+ case Object::DynamicProperty::Alias:
+ hasAlias = true;
+ continue;
+ break;
case Object::DynamicProperty::Variant:
type = "QVariant";
break;
@@ -1466,7 +1472,29 @@ bool QmlCompiler::compileDynamicMeta(QmlParser::Object *obj)
for (int ii = 0; ii < obj->dynamicSlots.count(); ++ii) {
const Object::DynamicSlot &s = obj->dynamicSlots.at(ii);
builder.addSlot(s.name + "()");
- output->primitives << s.body;
+
+ if (preAlias == -1)
+ output->primitives << s.body;
+ }
+
+ QByteArray aliasData;
+ if (preAlias != -1) {
+ int dynProperties = 0;
+ QByteArray data;
+ int propCount = builder.propertyCount();
+ int signalCount = builder.methodCount();
+ for (int ii = 0; ii < obj->dynamicProperties.count(); ++ii) {
+ const Object::DynamicProperty &p = obj->dynamicProperties.at(ii);
+
+ if (p.type == Object::DynamicProperty::Alias) {
+ dynProperties++;
+ compileAlias(builder, data, obj, p);
+ }
+ }
+ aliasData.append((const char *)&dynProperties, sizeof(int));
+ aliasData.append((const char *)&propCount, sizeof(int));
+ aliasData.append((const char *)&signalCount, sizeof(int));
+ aliasData.append(data);
}
if (obj->metatype)
@@ -1475,17 +1503,37 @@ bool QmlCompiler::compileDynamicMeta(QmlParser::Object *obj)
obj->extObjectData = builder.toMetaObject();
static_cast<QMetaObject &>(obj->extObject) = *obj->extObjectData;
- output->synthesizedMetaObjects << obj->extObjectData;
- QmlInstruction store;
- store.type = QmlInstruction::StoreMetaObject;
- store.storeMeta.data = output->synthesizedMetaObjects.count() - 1;
- store.storeMeta.slotData = slotStart;
- store.line = obj->location.start.line;
- output->bytecode << store;
+ if (preAlias != -1) {
+ QmlInstruction &store = output->bytecode[preAlias];
+
+ store.storeMeta.aliasData = output->indexForByteArray(aliasData);
+ qFree(output->synthesizedMetaObjects.at(store.storeMeta.data));
+ output->synthesizedMetaObjects[store.storeMeta.data] = obj->extObjectData;
+
+ } else {
+ output->synthesizedMetaObjects << obj->extObjectData;
+ QmlInstruction store;
+ store.type = QmlInstruction::StoreMetaObject;
+ store.storeMeta.data = output->synthesizedMetaObjects.count() - 1;
+ store.storeMeta.slotData = slotStart;
+ store.storeMeta.aliasData = -1;
+ store.line = obj->location.start.line;
+ output->bytecode << store;
+
+ if (hasAlias) {
+ AliasReference alias;
+ alias.object = obj;
+ alias.instructionIdx = output->bytecode.count() - 1;
+ compileState.aliases << alias;
+ }
+ }
for (int ii = 0; ii < obj->dynamicProperties.count(); ++ii) {
const Object::DynamicProperty &p = obj->dynamicProperties.at(ii);
+ if (p.type == Object::DynamicProperty::Alias)
+ continue;
+
if (p.defaultValue) {
p.defaultValue->name = p.name;
p.defaultValue->isDefault = false;
@@ -1496,6 +1544,66 @@ bool QmlCompiler::compileDynamicMeta(QmlParser::Object *obj)
return true;
}
+#include <private/qmljsparser_p.h>
+static QStringList astNodeToStringList(QmlJS::AST::Node *node)
+{
+ if (node->kind == QmlJS::AST::Node::Kind_IdentifierExpression) {
+ QString name =
+ static_cast<QmlJS::AST::IdentifierExpression *>(node)->name->asString();
+ return QStringList() << name;
+ } else if (node->kind == QmlJS::AST::Node::Kind_FieldMemberExpression) {
+ QmlJS::AST::FieldMemberExpression *expr = static_cast<QmlJS::AST::FieldMemberExpression *>(node);
+
+ QStringList rv = astNodeToStringList(expr->base);
+ if (rv.isEmpty())
+ return rv;
+ rv.append(expr->name->asString());
+ return rv;
+ }
+ return QStringList();
+}
+
+bool QmlCompiler::compileAlias(QMetaObjectBuilder &builder,
+ QByteArray &data,
+ Object *obj,
+ const Object::DynamicProperty &prop)
+{
+ if (!prop.defaultValue)
+ COMPILE_EXCEPTION("No property alias location");
+
+ if (prop.defaultValue->values.count() != 1 ||
+ prop.defaultValue->values.at(0)->object ||
+ !prop.defaultValue->values.at(0)->value.isScript())
+ COMPILE_EXCEPTION2(prop.defaultValue, "Invalid alias location");
+
+ QmlJS::AST::Node *node = prop.defaultValue->values.at(0)->value.asAST();
+ if (!node)
+ COMPILE_EXCEPTION("No property alias location"); // ### Can this happen?
+
+ QStringList alias = astNodeToStringList(node);
+
+ if (alias.count() != 2)
+ COMPILE_EXCEPTION2(prop.defaultValue, "Invalid alias location");
+
+ if (!compileState.ids.contains(alias.at(0)))
+ COMPILE_EXCEPTION2(prop.defaultValue, "Invalid alias location");
+
+ const IdReference &id = compileState.ids[alias.at(0)];
+ int propIdx = id.object->metaObject()->indexOfProperty(alias.at(1).toUtf8().constData());
+
+ if (-1 == propIdx)
+ COMPILE_EXCEPTION2(prop.defaultValue, "Invalid alias location");
+
+ QMetaProperty aliasProperty = id.object->metaObject()->property(propIdx);
+
+ data.append((const char *)&id.idx, sizeof(id.idx));
+ data.append((const char *)&propIdx, sizeof(propIdx));
+
+ builder.addSignal(prop.name + "Changed()");
+ builder.addProperty(prop.name, aliasProperty.typeName(), builder.methodCount() - 1);
+ return true;
+}
+
bool QmlCompiler::compileBinding(QmlParser::Value *value,
QmlParser::Property *prop,
const BindingContext &ctxt)
@@ -1564,17 +1672,29 @@ protected:
// Update the init instruction with final data, and optimize some simple
// bindings
-void QmlCompiler::finalizeComponent(int patch)
+bool QmlCompiler::finalizeComponent(int patch)
{
for (int ii = 0; ii < compileState.bindings.count(); ++ii) {
const BindingReference &binding = compileState.bindings.at(ii);
finalizeBinding(binding);
}
+ for (int ii = 0; ii < compileState.aliases.count(); ++ii) {
+ const AliasReference &alias = compileState.aliases.at(ii);
+ COMPILE_CHECK(finalizeAlias(alias));
+ }
+
output->bytecode[patch].init.dataSize = compileState.savedObjects;;
output->bytecode[patch].init.bindingsSize = compileState.bindings.count();
output->bytecode[patch].init.parserStatusSize =
compileState.parserStatusCount;
+
+ return true;
+}
+
+bool QmlCompiler::finalizeAlias(const AliasReference &alias)
+{
+ COMPILE_CHECK(compileDynamicMeta(alias.object, alias.instructionIdx));
}
void QmlCompiler::finalizeBinding(const BindingReference &binding)
diff --git a/src/declarative/qml/qmlcompiler_p.h b/src/declarative/qml/qmlcompiler_p.h
index 819c4ad..1c45f57 100644
--- a/src/declarative/qml/qmlcompiler_p.h
+++ b/src/declarative/qml/qmlcompiler_p.h
@@ -118,6 +118,7 @@ private:
int indexForLocation(const QmlParser::LocationSpan &);
};
+class QMetaObjectBuilder;
class Q_DECLARATIVE_EXPORT QmlCompiler
{
public:
@@ -181,13 +182,19 @@ private:
const QMetaProperty &prop,
QmlParser::Value *value);
- bool compileDynamicMeta(QmlParser::Object *obj);
+ bool compileDynamicMeta(QmlParser::Object *obj, int preAlias = -1);
+ bool compileAlias(QMetaObjectBuilder &,
+ QByteArray &data,
+ QmlParser::Object *obj,
+ const QmlParser::Object::DynamicProperty &);
bool compileBinding(QmlParser::Value *, QmlParser::Property *prop,
const BindingContext &ctxt);
- void finalizeComponent(int patch);
+ bool finalizeComponent(int patch);
struct BindingReference;
void finalizeBinding(const BindingReference &);
+ struct AliasReference;
+ bool finalizeAlias(const AliasReference &);
bool canConvert(int, QmlParser::Object *);
QStringList deferredProperties(QmlParser::Object *);
@@ -199,6 +206,11 @@ private:
int idx;
};
+ struct AliasReference {
+ QmlParser::Object *object;
+ int instructionIdx;
+ };
+
struct BindingReference {
QmlParser::Variant expression;
QmlParser::Property *property;
@@ -215,6 +227,7 @@ private:
int savedObjects;
int pushedProperties;
QList<BindingReference> bindings;
+ QList<AliasReference> aliases;
QmlParser::Object *root;
};
ComponentCompileState compileState;
diff --git a/src/declarative/qml/qmlcomponent.cpp b/src/declarative/qml/qmlcomponent.cpp
index 293082f..d6b38c9 100644
--- a/src/declarative/qml/qmlcomponent.cpp
+++ b/src/declarative/qml/qmlcomponent.cpp
@@ -46,7 +46,7 @@
#include "qmlvme_p.h"
#include "qml.h"
#include <QStack>
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <QStringList>
#include <qmlengine.h>
#include <QFileInfo>
diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp
index 2a15c27..9b74472 100644
--- a/src/declarative/qml/qmlengine.cpp
+++ b/src/declarative/qml/qmlengine.cpp
@@ -57,7 +57,7 @@
#include <QDebug>
#include <QMetaObject>
#include "qml.h"
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <QStack>
#include "private/qmlbasicscript_p.h"
#include "private/qmlcompiledcomponent_p.h"
diff --git a/src/declarative/qml/qmlinstruction_p.h b/src/declarative/qml/qmlinstruction_p.h
index f2f3ac2..40f9a32 100644
--- a/src/declarative/qml/qmlinstruction_p.h
+++ b/src/declarative/qml/qmlinstruction_p.h
@@ -181,6 +181,7 @@ public:
struct {
int data;
int slotData;
+ int aliasData;
} storeMeta;
struct {
int value;
diff --git a/src/declarative/qml/qmlmetaproperty.cpp b/src/declarative/qml/qmlmetaproperty.cpp
index 307f76f..90acd72 100644
--- a/src/declarative/qml/qmlmetaproperty.cpp
+++ b/src/declarative/qml/qmlmetaproperty.cpp
@@ -42,7 +42,7 @@
#include "qmlmetaproperty.h"
#include "qmlmetaproperty_p.h"
#include <qml.h>
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <QStringList>
#include <qmlbindablevalue.h>
#include <qmlcontext.h>
@@ -1002,7 +1002,7 @@ QMetaMethod QmlMetaProperty::method() const
*/
QmlMetaProperty QmlMetaProperty::createProperty(QObject *obj, const QString &name)
{
- QStringList path = name.split('.');
+ QStringList path = name.split(QLatin1Char('.'));
QObject *object = obj;
diff --git a/src/declarative/qml/qmlparser.cpp b/src/declarative/qml/qmlparser.cpp
index df5e26e..2e7eb69 100644
--- a/src/declarative/qml/qmlparser.cpp
+++ b/src/declarative/qml/qmlparser.cpp
@@ -48,7 +48,7 @@
#include <QRectF>
#include <private/qmlvme_p.h>
#include <qmlbindablevalue.h>
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <qml.h>
#include "private/qmlcomponent_p.h"
#include <qmlcomponent.h>
diff --git a/src/declarative/qml/qmlparser_p.h b/src/declarative/qml/qmlparser_p.h
index 9daa336..803c73e 100644
--- a/src/declarative/qml/qmlparser_p.h
+++ b/src/declarative/qml/qmlparser_p.h
@@ -144,7 +144,7 @@ namespace QmlParser
DynamicProperty();
DynamicProperty(const DynamicProperty &);
- enum Type { Variant, Int, Bool, Real, String, Url, Color, Date };
+ enum Type { Variant, Int, Bool, Real, String, Url, Color, Date, Alias };
bool isDefaultProperty;
Type type;
diff --git a/src/declarative/qml/qmlscriptparser.cpp b/src/declarative/qml/qmlscriptparser.cpp
index 7475943..1c88018 100644
--- a/src/declarative/qml/qmlscriptparser.cpp
+++ b/src/declarative/qml/qmlscriptparser.cpp
@@ -55,7 +55,7 @@
#include <QCoreApplication>
#include <QtDebug>
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
QT_BEGIN_NAMESPACE
@@ -534,6 +534,12 @@ bool ProcessAST::visit(AST::UiPublicMember *node)
bool typeFound = false;
Object::DynamicProperty::Type type;
+
+ if (memberType == QLatin1String("alias")) {
+ type = Object::DynamicProperty::Alias;
+ typeFound = true;
+ }
+
for(int ii = 0; !typeFound && ii < propTypeNameToTypesCount; ++ii) {
if(QLatin1String(propTypeNameToTypes[ii].name) == memberType) {
type = propTypeNameToTypes[ii].type;
diff --git a/src/declarative/qml/qmlvme.cpp b/src/declarative/qml/qmlvme.cpp
index 962d917..0d88e02 100644
--- a/src/declarative/qml/qmlvme.cpp
+++ b/src/declarative/qml/qmlvme.cpp
@@ -40,14 +40,13 @@
****************************************************************************/
#include "qmlvme_p.h"
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <private/qmlboundsignal_p.h>
#include <private/qmlstringconverters_p.h>
#include "private/qmetaobjectbuilder_p.h"
#include "private/qmldeclarativedata_p.h"
#include <qml.h>
#include <private/qmlcustomparser_p.h>
-#include <qperformancelog.h>
#include <QStack>
#include <QWidget>
#include <private/qmlcompiledcomponent_p.h>
@@ -240,7 +239,7 @@ QObject *QmlVME::run(QStack<QObject *> &stack, QmlContext *ctxt, QmlCompiledComp
case QmlInstruction::StoreMetaObject:
{
QObject *target = stack.top();
- new QmlVMEMetaObject(target, synthesizedMetaObjects.at(instr.storeMeta.data), &comp->primitives, instr.storeMeta.slotData, comp);
+ new QmlVMEMetaObject(target, synthesizedMetaObjects.at(instr.storeMeta.data), &comp->primitives, instr.storeMeta.slotData, (instr.storeMeta.aliasData != -1)?datas.at(instr.storeMeta.aliasData):QByteArray(), comp);
}
break;
diff --git a/src/declarative/qml/qmlvmemetaobject.cpp b/src/declarative/qml/qmlvmemetaobject.cpp
index ec269b8..dc06bc5 100644
--- a/src/declarative/qml/qmlvmemetaobject.cpp
+++ b/src/declarative/qml/qmlvmemetaobject.cpp
@@ -47,6 +47,7 @@
#include <QtCore/qlist.h>
#include <QtCore/qdebug.h>
#include <qmlexpression.h>
+#include <private/qmlcontext_p.h>
QT_BEGIN_NAMESPACE
@@ -54,8 +55,10 @@ QmlVMEMetaObject::QmlVMEMetaObject(QObject *obj,
const QMetaObject *other,
QList<QString> *strData,
int slotData,
+ const QByteArray &alias,
QmlRefCount *rc)
-: object(obj), ref(rc), slotData(strData), slotDataIdx(slotData), parent(0)
+: object(obj), ref(rc), slotData(strData), slotDataIdx(slotData), parent(0),
+ aliasData(alias), aliases(0), aliasArray(0)
{
if (ref)
ref->addref();
@@ -68,13 +71,20 @@ QmlVMEMetaObject::QmlVMEMetaObject(QObject *obj,
parent = static_cast<QAbstractDynamicMetaObject*>(op->metaObject);
op->metaObject = this;
+ if (!aliasData.isEmpty()) {
+ aliases = (Aliases *)aliasData.constData();
+ aliasArray = (AliasArray *)(aliasData.constData() + 3 * sizeof(int));
+ aConnected.resize(aliases->aliasCount);
+ }
+
baseProp = propertyOffset();
baseSig = methodOffset();
- data = new QVariant[propertyCount() - baseProp];
- vTypes.resize(propertyCount() - baseProp);
+ int propCount = propertyCount() - (aliases?aliases->aliasCount:0);
+ data = new QVariant[propCount - baseProp];
+ vTypes.resize(propCount - baseProp);
// ### Optimize
- for (int ii = baseProp; ii < propertyCount(); ++ii) {
+ for (int ii = baseProp; ii < propCount; ++ii) {
QMetaProperty prop = property(ii);
if ((int)prop.type() != -1) {
data[ii - baseProp] = QVariant((QVariant::Type)prop.userType());
@@ -117,7 +127,34 @@ int QmlVMEMetaObject::metaCall(QMetaObject::Call c, int id, void **a)
int propId = id - baseProp;
bool needActivate = false;
- if (vTypes.testBit(propId)) {
+ if (aliases && propId >= aliases->propCount) {
+ QmlContext *ctxt = qmlContext(object);
+
+ if (!ctxt) return -1;
+ int aliasId = propId - aliases->propCount;
+ AliasArray *d = aliasArray + aliasId;
+ QmlContextPrivate *ctxtPriv =
+ (QmlContextPrivate *)QObjectPrivate::get(ctxt);
+
+ QObject *target = *(QObject **)ctxtPriv->propertyValues[d->contextIdx].data();
+ if (!target) return -1;
+
+ if (c == QMetaObject::ReadProperty &&
+ !aConnected.testBit(aliasId)) {
+
+ int mySigIdx = baseSig + aliasId + aliases->signalOffset;
+ QMetaObject::connect(ctxt, d->contextIdx + ctxtPriv->notifyIndex, object, mySigIdx);
+
+ QMetaProperty prop = target->metaObject()->property(d->propIdx);
+ if (prop.hasNotifySignal())
+ QMetaObject::connect(target, prop.notifySignalIndex(),
+ object, mySigIdx);
+ aConnected.setBit(aliasId);
+
+ }
+ return QMetaObject::metacall(target, c, d->propIdx, a);
+
+ } else if (vTypes.testBit(propId)) {
if (c == QMetaObject::ReadProperty) {
*reinterpret_cast<QVariant *>(a[0]) = data[propId];
} else if (c == QMetaObject::WriteProperty) {
@@ -168,7 +205,10 @@ int QmlVMEMetaObject::metaCall(QMetaObject::Call c, int id, void **a)
return id;
}
} else if(c == QMetaObject::InvokeMetaMethod) {
- if (id >= baseSig && (baseSlot == -1 || id < baseSlot)) {
+ if (id >= baseSig && (aliases && id >= baseSig + aliases->signalOffset)) {
+ QMetaObject::activate(object, id, a);
+ return id;
+ } else if (id >= baseSig && (baseSlot == -1 || id < baseSlot)) {
QMetaObject::activate(object, id, a);
return id;
} else if (id >= baseSlot && id < (baseSlot + slotCount)) {
diff --git a/src/declarative/qml/qmlvmemetaobject_p.h b/src/declarative/qml/qmlvmemetaobject_p.h
index 7b6fd2d..45fb33d 100644
--- a/src/declarative/qml/qmlvmemetaobject_p.h
+++ b/src/declarative/qml/qmlvmemetaobject_p.h
@@ -63,7 +63,7 @@ class QmlRefCount;
class QmlVMEMetaObject : public QAbstractDynamicMetaObject
{
public:
- QmlVMEMetaObject(QObject *, const QMetaObject *, QList<QString> *, int slotData, QmlRefCount * = 0);
+ QmlVMEMetaObject(QObject *, const QMetaObject *, QList<QString> *, int slotData, const QByteArray &aliasData, QmlRefCount * = 0);
~QmlVMEMetaObject();
protected:
@@ -78,9 +78,20 @@ private:
int slotCount;
QVariant *data;
QBitArray vTypes;
+ QBitArray aConnected;
QList<QString> *slotData;
int slotDataIdx;
QAbstractDynamicMetaObject *parent;
+ QByteArray aliasData;
+ struct Aliases {
+ int aliasCount;
+ int propCount;
+ int signalOffset;
+ } *aliases;
+ struct AliasArray {
+ int contextIdx;
+ int propIdx;
+ } *aliasArray;
};
QT_END_NAMESPACE
diff --git a/src/declarative/test/qfxtestengine.cpp b/src/declarative/test/qfxtestengine.cpp
index 0d7e5df..cf746db 100644
--- a/src/declarative/test/qfxtestengine.cpp
+++ b/src/declarative/test/qfxtestengine.cpp
@@ -41,7 +41,7 @@
#include <QFile>
#include <QmlComponent>
-#include <qmltimeline.h>
+#include <private/qmltimeline_p.h>
#include "qfxtestengine.h"
#include "qfxtestobjects.h"
#include <QCryptographicHash>
diff --git a/src/declarative/timeline/qmltimelinevalueproxy.h b/src/declarative/timeline/qmltimelinevalueproxy.h
deleted file mode 100644
index 9ecdba1..0000000
--- a/src/declarative/timeline/qmltimelinevalueproxy.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMLTIMELINEVALUEPROXY_H
-#define QMLTIMELINEVALUEPROXY_H
-
-#include <QtDeclarative/qmltimeline.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Declarative)
-
-template<class T>
-class QmlTimeLineValueProxy : public QmlTimeLineValue
-{
-public:
- QmlTimeLineValueProxy(T *cls, void (T::*func)(qreal), qreal v = 0.)
- : QmlTimeLineValue(v), _class(cls), _setFunctionReal(func), _setFunctionInt(0)
- {
- Q_ASSERT(_class);
- }
-
- QmlTimeLineValueProxy(T *cls, void (T::*func)(int), qreal v = 0.)
- : QmlTimeLineValue(v), _class(cls), _setFunctionReal(0), _setFunctionInt(func)
- {
- Q_ASSERT(_class);
- }
-
- virtual void setValue(qreal v)
- {
- QmlTimeLineValue::setValue(v);
- if (_setFunctionReal) (_class->*_setFunctionReal)(v);
- else if (_setFunctionInt) (_class->*_setFunctionInt)((int)v);
- }
-
-private:
- T *_class;
- void (T::*_setFunctionReal)(qreal);
- void (T::*_setFunctionInt)(int);
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif//QMLTIMELINEVALUEPROXY_H
diff --git a/src/declarative/timeline/timeline.pri b/src/declarative/timeline/timeline.pri
deleted file mode 100644
index a7b3cb9..0000000
--- a/src/declarative/timeline/timeline.pri
+++ /dev/null
@@ -1,7 +0,0 @@
-SOURCES += \
- timeline/qmltimeline.cpp \
-
-HEADERS += \
- timeline/qmltimeline.h \
- timeline/qmltimelinevalueproxy.h \
-
diff --git a/src/declarative/util/qfxperf.cpp b/src/declarative/util/qfxperf.cpp
index 9ac9e8d..db56b37 100644
--- a/src/declarative/util/qfxperf.cpp
+++ b/src/declarative/util/qfxperf.cpp
@@ -39,7 +39,7 @@
**
****************************************************************************/
-#include "qfxperf.h"
+#include "private/qfxperf_p.h"
QT_BEGIN_NAMESPACE
diff --git a/src/declarative/util/qfxperf.h b/src/declarative/util/qfxperf_p.h
index 0bc0cc9..a1e38b7 100644
--- a/src/declarative/util/qfxperf.h
+++ b/src/declarative/util/qfxperf_p.h
@@ -41,7 +41,18 @@
#ifndef QFXPERF_H
#define QFXPERF_H
-#include "qperformancelog.h"
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "private/qperformancelog_p.h"
QT_BEGIN_HEADER
diff --git a/src/declarative/util/qfxview.cpp b/src/declarative/util/qfxview.cpp
index 0855224..0a3afda 100644
--- a/src/declarative/util/qfxview.cpp
+++ b/src/declarative/util/qfxview.cpp
@@ -54,8 +54,8 @@
#include "qmlbindablevalue.h"
#include "qml.h"
#include "qfxitem.h"
-#include "qperformancelog.h"
-#include "qfxperf.h"
+#include "private/qperformancelog_p.h"
+#include "private/qfxperf_p.h"
#include "qfxview.h"
#include <QtDeclarative/qmlengine.h>
diff --git a/src/declarative/util/qmlanimation.cpp b/src/declarative/util/qmlanimation.cpp
index 6ad47f5..c0d6481 100644
--- a/src/declarative/util/qmlanimation.cpp
+++ b/src/declarative/util/qmlanimation.cpp
@@ -58,12 +58,6 @@
#include <private/qmlstringconverters_p.h>
#include <private/qvariantanimation_p.h>
-/* TODO:
- Check for any memory leaks
- easing should be a QEasingCurve-type property
- All other XXXs and ###s
-*/
-
QT_BEGIN_NAMESPACE
QEasingCurve stringToCurve(const QString &curve)
@@ -1108,7 +1102,7 @@ void QmlParentChangeActionPrivate::init()
void QmlParentChangeActionPrivate::doAction()
{
- //XXX property.write(value);
+ //### property.write(value);
}
void QmlParentChangeAction::prepare(QmlMetaProperty &p)
@@ -1120,7 +1114,7 @@ void QmlParentChangeAction::prepare(QmlMetaProperty &p)
else
d->property = d->userProperty;
- //XXX
+ //###
}
QAbstractAnimation *QmlParentChangeAction::qtAnimation()
@@ -1239,7 +1233,7 @@ QmlNumberAnimation::~QmlNumberAnimation()
qreal QmlNumberAnimation::from() const
{
Q_D(const QmlPropertyAnimation);
- return d->from.toDouble(); //### toFloat?
+ return d->from.toDouble();
}
void QmlNumberAnimation::setFrom(qreal f)
@@ -1259,7 +1253,7 @@ void QmlNumberAnimation::setFrom(qreal f)
qreal QmlNumberAnimation::to() const
{
Q_D(const QmlPropertyAnimation);
- return d->to.toDouble(); //### toFloat?
+ return d->to.toDouble();
}
void QmlNumberAnimation::setTo(qreal t)
@@ -1346,7 +1340,7 @@ void QmlSequentialAnimation::transition(QmlStateActions &actions,
from = d->animations.count() - 1;
}
- //### needed for Behavior
+ //needed for Behavior
if (d->userProperty.isValid() && d->propertyName.isEmpty() && !target()) {
for (int i = 0; i < d->animations.count(); ++i)
d->animations.at(i)->setTarget(d->userProperty);
@@ -1428,7 +1422,7 @@ void QmlParallelAnimation::transition(QmlStateActions &actions,
{
Q_D(QmlAnimationGroup);
- //### needed for Behavior
+ //needed for Behavior
if (d->userProperty.isValid() && d->propertyName.isEmpty() && !target()) {
for (int i = 0; i < d->animations.count(); ++i)
d->animations.at(i)->setTarget(d->userProperty);
@@ -1441,22 +1435,8 @@ void QmlParallelAnimation::transition(QmlStateActions &actions,
QML_DEFINE_TYPE(QmlParallelAnimation,ParallelAnimation)
-//### profile and optimize
-QVariant QmlPropertyAnimationPrivate::interpolateVariant(const QVariant &from, const QVariant &to, qreal progress)
-{
- if (from.userType() != to.userType())
- return QVariant();
-
- QVariantAnimation::Interpolator interpolator = QVariantAnimationPrivate::getInterpolator(from.userType());
- if (interpolator)
- return interpolator(from.constData(), to.constData(), progress);
- else
- return QVariant();
-}
-
//convert a variant from string type to another animatable type
//### should use any registered string convertor
-//### profile and optimize
void QmlPropertyAnimationPrivate::convertVariant(QVariant &variant, QVariant::Type type)
{
if (variant.type() != QVariant::String) {
@@ -1743,6 +1723,7 @@ void QmlPropertyAnimationPrivate::valueChanged(qreal r)
if (!fromIsDefined) {
from = property.read();
convertVariant(from, (QVariant::Type)(interpolatorType ? interpolatorType : property.propertyType()));
+ //### check for invalid variant if using property type
}
fromSourced = true;
}
@@ -1752,8 +1733,6 @@ void QmlPropertyAnimationPrivate::valueChanged(qreal r)
} else {
if (interpolator)
property.write(interpolator(from.constData(), to.constData(), r));
- else
- property.write(interpolateVariant(from, to, r)); //### optimize
}
}
@@ -1771,9 +1750,15 @@ void QmlPropertyAnimation::prepare(QmlMetaProperty &p)
else
d->property = d->userProperty;
- d->convertVariant(d->to, (QVariant::Type)(d->interpolatorType ? d->interpolatorType : d->property.propertyType()));
+ int propType = d->property.propertyType();
+ d->convertVariant(d->to, (QVariant::Type)(d->interpolatorType ? d->interpolatorType : propType));
if (d->fromIsDefined)
- d->convertVariant(d->from, (QVariant::Type)(d->interpolatorType ? d->interpolatorType : d->property.propertyType()));
+ d->convertVariant(d->from, (QVariant::Type)(d->interpolatorType ? d->interpolatorType : propType));
+
+ if (!d->interpolatorType) {
+ //### check for invalid variants
+ d->interpolator = QVariantAnimationPrivate::getInterpolator(propType);
+ }
d->fromSourced = false;
d->value.QmlTimeLineValue::setValue(0.);
diff --git a/src/declarative/util/qmlanimation_p.h b/src/declarative/util/qmlanimation_p.h
index fce5eca..00759e1 100644
--- a/src/declarative/util/qmlanimation_p.h
+++ b/src/declarative/util/qmlanimation_p.h
@@ -63,7 +63,7 @@
#include <QtDeclarative/qmlanimation.h>
#include <QtDeclarative/qml.h>
#include <QtDeclarative/qmlcontext.h>
-#include <QtDeclarative/qmltimelinevalueproxy.h>
+#include <private/qmltimeline_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/declarative/util/qmlscript.cpp b/src/declarative/util/qmlscript.cpp
index ab095b1..07cc1d5 100644
--- a/src/declarative/util/qmlscript.cpp
+++ b/src/declarative/util/qmlscript.cpp
@@ -55,7 +55,7 @@
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QtDeclarative/qmlinfo.h>
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/declarative/timeline/qmltimeline.cpp b/src/declarative/util/qmltimeline.cpp
index dcc8745..5ba310d 100644
--- a/src/declarative/timeline/qmltimeline.cpp
+++ b/src/declarative/util/qmltimeline.cpp
@@ -39,7 +39,7 @@
**
****************************************************************************/
-#include "qmltimeline.h"
+#include "qmltimeline_p.h"
#include <QDebug>
#include <QMutex>
#include <QThread>
diff --git a/src/declarative/timeline/qmltimeline.h b/src/declarative/util/qmltimeline_p.h
index 627ec79..abed80a 100644
--- a/src/declarative/timeline/qmltimeline.h
+++ b/src/declarative/util/qmltimeline_p.h
@@ -42,16 +42,23 @@
#ifndef QMLTIMELINE_H
#define QMLTIMELINE_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/QObject>
#include <QtCore/QAbstractAnimation>
#include <QtDeclarative/qfxglobal.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
-QT_MODULE(Declarative)
-
class QEasingCurve;
class QmlTimeLineValue;
class QmlTimeLineEvent;
@@ -183,8 +190,35 @@ private:
QmlTimeLineObject *d2;
};
-QT_END_NAMESPACE
+template<class T>
+class QmlTimeLineValueProxy : public QmlTimeLineValue
+{
+public:
+ QmlTimeLineValueProxy(T *cls, void (T::*func)(qreal), qreal v = 0.)
+ : QmlTimeLineValue(v), _class(cls), _setFunctionReal(func), _setFunctionInt(0)
+ {
+ Q_ASSERT(_class);
+ }
+
+ QmlTimeLineValueProxy(T *cls, void (T::*func)(int), qreal v = 0.)
+ : QmlTimeLineValue(v), _class(cls), _setFunctionReal(0), _setFunctionInt(func)
+ {
+ Q_ASSERT(_class);
+ }
+
+ virtual void setValue(qreal v)
+ {
+ QmlTimeLineValue::setValue(v);
+ if (_setFunctionReal) (_class->*_setFunctionReal)(v);
+ else if (_setFunctionInt) (_class->*_setFunctionInt)((int)v);
+ }
-QT_END_HEADER
+private:
+ T *_class;
+ void (T::*_setFunctionReal)(qreal);
+ void (T::*_setFunctionInt)(int);
+};
+
+QT_END_NAMESPACE
#endif
diff --git a/src/declarative/util/qperformancelog.cpp b/src/declarative/util/qperformancelog.cpp
index 932e4b3..8e11997 100644
--- a/src/declarative/util/qperformancelog.cpp
+++ b/src/declarative/util/qperformancelog.cpp
@@ -39,7 +39,7 @@
**
****************************************************************************/
-#include "qperformancelog.h"
+#include "qperformancelog_p.h"
#include <QHash>
#include <QDebug>
diff --git a/src/declarative/util/qperformancelog.h b/src/declarative/util/qperformancelog_p.h
index 6655a8d..6655a8d 100644
--- a/src/declarative/util/qperformancelog.h
+++ b/src/declarative/util/qperformancelog_p.h
diff --git a/src/declarative/util/util.pri b/src/declarative/util/util.pri
index 0619a47..aae10af 100644
--- a/src/declarative/util/util.pri
+++ b/src/declarative/util/util.pri
@@ -17,13 +17,14 @@ SOURCES += \
util/qmllistmodel.cpp\
util/qmllistaccessor.cpp \
util/qmlopenmetaobject.cpp \
+ util/qmltimeline.cpp \
util/qmlbind.cpp
HEADERS += \
util/qfxview.h \
- util/qfxperf.h \
+ util/qfxperf_p.h \
util/qfxglobal.h \
- util/qperformancelog.h \
+ util/qperformancelog_p.h \
util/qmlconnection.h \
util/qmlpackage.h \
util/qmlscript.h \
@@ -42,4 +43,5 @@ HEADERS += \
util/qmllistaccessor.h \
util/qmlopenmetaobject.h \
util/qmlnullablevalue_p.h \
+ util/qmltimeline_p.h \
util/qmlbind.h