summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qdeclarativebinding.cpp
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2010-12-15 02:08:13 (GMT)
committerMichael Brasser <michael.brasser@nokia.com>2010-12-17 06:35:17 (GMT)
commit488e616b50707e5b37162e6d0cfc71a1ffdf9bef (patch)
tree86b02b1665e7dcc29aed479c9ed2ce7d6f5ba214 /src/declarative/qml/qdeclarativebinding.cpp
parent139ecc0e74af2795faa55cfd532aeb10c631049e (diff)
downloadQt-488e616b50707e5b37162e6d0cfc71a1ffdf9bef.zip
Qt-488e616b50707e5b37162e6d0cfc71a1ffdf9bef.tar.gz
Qt-488e616b50707e5b37162e6d0cfc71a1ffdf9bef.tar.bz2
Rewrite/cache bindings created by PropertyChanges.
This provides a significant optimization for initial evaluation of bindings specified in a PropertyChanges. Reviewed-by: Aaron Kennedy
Diffstat (limited to 'src/declarative/qml/qdeclarativebinding.cpp')
-rw-r--r--src/declarative/qml/qdeclarativebinding.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/declarative/qml/qdeclarativebinding.cpp b/src/declarative/qml/qdeclarativebinding.cpp
index 309d372..1ead6ce 100644
--- a/src/declarative/qml/qdeclarativebinding.cpp
+++ b/src/declarative/qml/qdeclarativebinding.cpp
@@ -46,6 +46,7 @@
#include "qdeclarativecontext.h"
#include "qdeclarativeinfo.h"
#include "private/qdeclarativecontext_p.h"
+#include "private/qdeclarativecompiler_p.h"
#include "private/qdeclarativedata_p.h"
#include "private/qdeclarativestringconverters_p.h"
#include "private/qdeclarativestate_p_p.h"
@@ -233,6 +234,19 @@ QDeclarativeBinding::QDeclarativeBinding(void *data, QDeclarativeRefCount *rc, Q
setNotifyOnValueChanged(true);
}
+QDeclarativeBinding *
+QDeclarativeBinding::createBinding(Identifier id, QObject *obj, QDeclarativeContext *ctxt,
+ const QString &url, int lineNumber, QObject *parent)
+{
+ QDeclarativeContextData *ctxtdata = QDeclarativeContextData::get(ctxt);
+
+ QDeclarativeEnginePrivate *engine = QDeclarativeEnginePrivate::get(qmlEngine(obj));
+ QDeclarativeCompiledData *cdata = 0;
+ if (engine && ctxtdata && !ctxtdata->url.isEmpty())
+ cdata = engine->typeLoader.get(ctxtdata->url)->compiledData();
+ return cdata ? new QDeclarativeBinding((void*)cdata->datas.at(id).constData(), cdata, obj, ctxtdata, url, lineNumber, parent) : 0;
+}
+
QDeclarativeBinding::QDeclarativeBinding(const QString &str, QObject *obj, QDeclarativeContext *ctxt,
QObject *parent)
: QDeclarativeExpression(QDeclarativeContextData::get(ctxt), obj, str, *new QDeclarativeBindingPrivate)