aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2011-09-22 13:14:00 +1000
committerQt by Nokia <qt-info@nokia.com>2011-09-27 06:16:46 +0200
commitffeadf7a7c09971fab09ed08b1f3f503c6facb7e (patch)
tree07264779d1a55ffc6641c316c371feabdd252848 /src
parent1ec3460d838c05ddbd9b991d7edf9fded31fe684 (diff)
Add convenience macro for fast connects in declarative.
We already follow this pattern several places, so this commit creates a convenience macro for it, and replaces previous usage where appropriate. Also adds the macro several places as further optimization. Change-Id: Ieff5ed6cc51c34d0a1c8aa42ac40314ea243477a Reviewed-on: http://codereview.qt-project.org/5342 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/declarative/items/qsgborderimage.cpp13
-rw-r--r--src/declarative/items/qsgborderimage_p_p.h8
-rw-r--r--src/declarative/items/qsgflickable.cpp16
-rw-r--r--src/declarative/items/qsgitem.cpp4
-rw-r--r--src/declarative/items/qsgpathview.cpp11
-rw-r--r--src/declarative/qml/qdeclarativeglobal_p.h26
-rw-r--r--src/declarative/util/qdeclarativeanimation.cpp3
-rw-r--r--src/declarative/util/qdeclarativebehavior.cpp8
8 files changed, 39 insertions, 50 deletions
diff --git a/src/declarative/items/qsgborderimage.cpp b/src/declarative/items/qsgborderimage.cpp
index 30b10321a0..fb407d7e2c 100644
--- a/src/declarative/items/qsgborderimage.cpp
+++ b/src/declarative/items/qsgborderimage.cpp
@@ -314,18 +314,7 @@ void QSGBorderImage::load()
} else {
QNetworkRequest req(d->url);
d->sciReply = qmlEngine(this)->networkAccessManager()->get(req);
-
- static int sciReplyFinished = -1;
- static int thisSciRequestFinished = -1;
- if (sciReplyFinished == -1) {
- sciReplyFinished =
- QNetworkReply::staticMetaObject.indexOfSignal("finished()");
- thisSciRequestFinished =
- QSGBorderImage::staticMetaObject.indexOfSlot("sciRequestFinished()");
- }
-
- QMetaObject::connect(d->sciReply, sciReplyFinished, this,
- thisSciRequestFinished, Qt::DirectConnection);
+ FAST_CONNECT(d->sciReply, SIGNAL(finished()), this, SLOT(sciRequestFinished()))
}
} else {
diff --git a/src/declarative/items/qsgborderimage_p_p.h b/src/declarative/items/qsgborderimage_p_p.h
index 69e02cd00b..27816697f4 100644
--- a/src/declarative/items/qsgborderimage_p_p.h
+++ b/src/declarative/items/qsgborderimage_p_p.h
@@ -83,13 +83,7 @@ public:
Q_Q(QSGBorderImage);
if (!border) {
border = new QSGScaleGrid(q);
- static int borderChangedSignalIdx = -1;
- static int doUpdateSlotIdx = -1;
- if (borderChangedSignalIdx < 0)
- borderChangedSignalIdx = QSGScaleGrid::staticMetaObject.indexOfSignal("borderChanged()");
- if (doUpdateSlotIdx < 0)
- doUpdateSlotIdx = QSGBorderImage::staticMetaObject.indexOfSlot("doUpdate()");
- QMetaObject::connect(border, borderChangedSignalIdx, q, doUpdateSlotIdx);
+ FAST_CONNECT(border, SIGNAL(borderChanged()), q, SLOT(doUpdate()))
}
return border;
}
diff --git a/src/declarative/items/qsgflickable.cpp b/src/declarative/items/qsgflickable.cpp
index 13cb96664b..91a93b6214 100644
--- a/src/declarative/items/qsgflickable.cpp
+++ b/src/declarative/items/qsgflickable.cpp
@@ -190,20 +190,8 @@ void QSGFlickablePrivate::init()
Q_Q(QSGFlickable);
QDeclarative_setParent_noEvent(contentItem, q);
contentItem->setParentItem(q);
- static int timelineUpdatedIdx = -1;
- static int timelineCompletedIdx = -1;
- static int flickableTickedIdx = -1;
- static int flickableMovementEndingIdx = -1;
- if (timelineUpdatedIdx == -1) {
- timelineUpdatedIdx = QDeclarativeTimeLine::staticMetaObject.indexOfSignal("updated()");
- timelineCompletedIdx = QDeclarativeTimeLine::staticMetaObject.indexOfSignal("completed()");
- flickableTickedIdx = QSGFlickable::staticMetaObject.indexOfSlot("ticked()");
- flickableMovementEndingIdx = QSGFlickable::staticMetaObject.indexOfSlot("movementEnding()");
- }
- QMetaObject::connect(&timeline, timelineUpdatedIdx,
- q, flickableTickedIdx, Qt::DirectConnection);
- QMetaObject::connect(&timeline, timelineCompletedIdx,
- q, flickableMovementEndingIdx, Qt::DirectConnection);
+ FAST_CONNECT(&timeline, SIGNAL(updated()), q, SLOT(ticked()))
+ FAST_CONNECT(&timeline, SIGNAL(completed()), q, SLOT(movementEnding()))
q->setAcceptedMouseButtons(Qt::LeftButton);
q->setFiltersChildMouseEvents(true);
QSGItemPrivate *viewportPrivate = QSGItemPrivate::get(contentItem);
diff --git a/src/declarative/items/qsgitem.cpp b/src/declarative/items/qsgitem.cpp
index a1e43171de..76a1f1bef9 100644
--- a/src/declarative/items/qsgitem.cpp
+++ b/src/declarative/items/qsgitem.cpp
@@ -3244,8 +3244,8 @@ QDeclarativeStateGroup *QSGItemPrivate::_states()
_stateGroup = new QDeclarativeStateGroup;
if (!componentComplete)
_stateGroup->classBegin();
- QObject::connect(_stateGroup, SIGNAL(stateChanged(QString)),
- q, SIGNAL(stateChanged(QString)));
+ FAST_CONNECT(_stateGroup, SIGNAL(stateChanged(QString)),
+ q, SIGNAL(stateChanged(QString)))
}
return _stateGroup;
diff --git a/src/declarative/items/qsgpathview.cpp b/src/declarative/items/qsgpathview.cpp
index 10161e50c1..6f54d46f86 100644
--- a/src/declarative/items/qsgpathview.cpp
+++ b/src/declarative/items/qsgpathview.cpp
@@ -101,16 +101,9 @@ void QSGPathViewPrivate::init()
q->setAcceptedMouseButtons(Qt::LeftButton);
q->setFlag(QSGItem::ItemIsFocusScope);
q->setFiltersChildMouseEvents(true);
- q->connect(&tl, SIGNAL(updated()), q, SLOT(ticked()));
+ FAST_CONNECT(&tl, SIGNAL(updated()), q, SLOT(ticked()))
lastPosTime.invalidate();
- static int timelineCompletedIdx = -1;
- static int movementEndingIdx = -1;
- if (timelineCompletedIdx == -1) {
- timelineCompletedIdx = QDeclarativeTimeLine::staticMetaObject.indexOfSignal("completed()");
- movementEndingIdx = QSGPathView::staticMetaObject.indexOfSlot("movementEnding()");
- }
- QMetaObject::connect(&tl, timelineCompletedIdx,
- q, movementEndingIdx, Qt::DirectConnection);
+ FAST_CONNECT(&tl, SIGNAL(completed()), q, SLOT(movementEnding()))
}
QSGItem *QSGPathViewPrivate::getItem(int modelIndex, bool onPath)
diff --git a/src/declarative/qml/qdeclarativeglobal_p.h b/src/declarative/qml/qdeclarativeglobal_p.h
index 87be79f171..cc0a4b6b1d 100644
--- a/src/declarative/qml/qdeclarativeglobal_p.h
+++ b/src/declarative/qml/qdeclarativeglobal_p.h
@@ -64,6 +64,32 @@ QT_MODULE(Declarative)
return status == Yes; \
}
+#define FAST_CONNECT(Sender, Signal, Receiver, Method) \
+{ \
+ QObject *sender = (Sender); \
+ QObject *receiver = (Receiver); \
+ const char *signal = (Signal); \
+ const char *method = (Method); \
+ static int signalIdx = -1; \
+ static int methodIdx = -1; \
+ if (signalIdx < 0) { \
+ if (((int)(*signal) - '0') == QSIGNAL_CODE) \
+ signalIdx = sender->metaObject()->indexOfSignal(signal+1); \
+ else \
+ qWarning("FAST_CONNECT: Invalid signal %s. Please make sure you are using the SIGNAL macro.", signal); \
+ } \
+ if (methodIdx < 0) { \
+ int code = ((int)(*method) - '0'); \
+ if (code == QSLOT_CODE) \
+ methodIdx = receiver->metaObject()->indexOfSlot(method+1); \
+ else if (code == QSIGNAL_CODE) \
+ methodIdx = receiver->metaObject()->indexOfSignal(method+1); \
+ else \
+ qWarning("FAST_CONNECT: Invalid method %s. Please make sure you are using the SIGNAL or SLOT macro.", method); \
+ } \
+ QMetaObject::connect(sender, signalIdx, receiver, methodIdx, Qt::DirectConnection); \
+}
+
#ifdef Q_OS_SYMBIAN
#define Q_DECLARATIVE_PRIVATE_EXPORT Q_AUTOTEST_EXPORT
#else
diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp
index 6cdba7c5d9..e642f11fbc 100644
--- a/src/declarative/util/qdeclarativeanimation.cpp
+++ b/src/declarative/util/qdeclarativeanimation.cpp
@@ -215,8 +215,7 @@ void QDeclarativeAbstractAnimation::setRunning(bool r)
}
if (!d->connectedTimeLine) {
- QObject::connect(qtAnimation(), SIGNAL(finished()),
- this, SLOT(timelineComplete()));
+ FAST_CONNECT(qtAnimation(), SIGNAL(finished()), this, SLOT(timelineComplete()))
d->connectedTimeLine = true;
}
if (!supressStart)
diff --git a/src/declarative/util/qdeclarativebehavior.cpp b/src/declarative/util/qdeclarativebehavior.cpp
index 550b8a3aa1..3038d3a207 100644
--- a/src/declarative/util/qdeclarativebehavior.cpp
+++ b/src/declarative/util/qdeclarativebehavior.cpp
@@ -132,10 +132,10 @@ void QDeclarativeBehavior::setAnimation(QDeclarativeAbstractAnimation *animation
if (d->animation) {
d->animation->setDefaultTarget(d->property);
d->animation->setDisableUserControl();
- connect(d->animation->qtAnimation(),
- SIGNAL(stateChanged(QAbstractAnimation::State,QAbstractAnimation::State)),
- this,
- SLOT(qtAnimationStateChanged(QAbstractAnimation::State,QAbstractAnimation::State)));
+ FAST_CONNECT(d->animation->qtAnimation(),
+ SIGNAL(stateChanged(QAbstractAnimation::State,QAbstractAnimation::State)),
+ this,
+ SLOT(qtAnimationStateChanged(QAbstractAnimation::State,QAbstractAnimation::State)))
}
}