summaryrefslogtreecommitdiffstats
path: root/src/widgets/util/qscroller.cpp
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2015-12-30 02:04:26 +0100
committerMarc Mutz <marc.mutz@kdab.com>2016-02-26 18:56:43 +0000
commit1d8030cc64df2cdfdc0faf3d06ea7d9ed0306948 (patch)
tree86e7246682e6bb4345a1fd5e5f54352a5eea592e /src/widgets/util/qscroller.cpp
parentbc5917a10a16dd33b8c12c61db981f0328882049 (diff)
QtWidgets: prevent detach attempts from first()/etc. use [dialogs, kernel, util, widgets]
The algorithm used was: - If possible, just declare the container const - Otherwise, for first()/last(), use constFirst()/constLast() and for front()/back(), to not destroy the use of the STL API subset, use qAsConst() Did some caching of function returns here and there, and converted one 0 to nullptr as a drive-by. Also saves almost 4KiB in text size on optimized GCC 4.9 Linux AMD64 builds. Change-Id: I04b7bfd68dc85c22de247cb65a310e1cbbca1e8c Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Diffstat (limited to 'src/widgets/util/qscroller.cpp')
-rw-r--r--src/widgets/util/qscroller.cpp27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/widgets/util/qscroller.cpp b/src/widgets/util/qscroller.cpp
index 2d6bcf72c6..02e3c2b82a 100644
--- a/src/widgets/util/qscroller.cpp
+++ b/src/widgets/util/qscroller.cpp
@@ -575,8 +575,11 @@ QPointF QScroller::pixelPerMeter() const
if (QGraphicsObject *go = qobject_cast<QGraphicsObject *>(d->target)) {
QTransform viewtr;
//TODO: the first view isn't really correct - maybe use an additional field in the prepare event?
- if (go->scene() && !go->scene()->views().isEmpty())
- viewtr = go->scene()->views().first()->viewportTransform();
+ if (const auto *scene = go->scene()) {
+ const auto views = scene->views();
+ if (!views.isEmpty())
+ viewtr = views.first()->viewportTransform();
+ }
QTransform tr = go->deviceTransform(viewtr);
if (tr.isScaling()) {
QPointF p0 = tr.map(QPointF(0, 0));
@@ -1121,12 +1124,15 @@ void QScrollerPrivate::pushSegment(ScrollType type, qreal deltaTime, qreal stopP
return;
ScrollSegment s;
- if (orientation == Qt::Horizontal && !xSegments.isEmpty())
- s.startTime = xSegments.last().startTime + xSegments.last().deltaTime * xSegments.last().stopProgress;
- else if (orientation == Qt::Vertical && !ySegments.isEmpty())
- s.startTime = ySegments.last().startTime + ySegments.last().deltaTime * ySegments.last().stopProgress;
- else
+ if (orientation == Qt::Horizontal && !xSegments.isEmpty()) {
+ const auto &lastX = xSegments.constLast();
+ s.startTime = lastX.startTime + lastX.deltaTime * lastX.stopProgress;
+ } else if (orientation == Qt::Vertical && !ySegments.isEmpty()) {
+ const auto &lastY = ySegments.constLast();
+ s.startTime = lastY.startTime + lastY.deltaTime * lastY.stopProgress;
+ } else {
s.startTime = monotonicTimer.elapsed();
+ }
s.startPos = startPos;
s.deltaPos = deltaPos;
@@ -1463,8 +1469,11 @@ bool QScrollerPrivate::prepareScrolling(const QPointF &position)
#ifndef QT_NO_GRAPHICSVIEW
if (QGraphicsObject *go = qobject_cast<QGraphicsObject *>(target)) {
//TODO: the first view isn't really correct - maybe use an additional field in the prepare event?
- if (go->scene() && !go->scene()->views().isEmpty())
- setDpiFromWidget(go->scene()->views().first());
+ if (const auto *scene = go->scene()) {
+ const auto views = scene->views();
+ if (!views.isEmpty())
+ setDpiFromWidget(views.first());
+ }
}
#endif