OpenCoverage

qquickpincharea.cpp

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/quick/items/qquickpincharea.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2016 The Qt Company Ltd.-
4** Contact: https://www.qt.io/licensing/-
5**-
6** This file is part of the QtSG module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL$-
9** Commercial License Usage-
10** Licensees holding valid commercial Qt licenses may use this file in-
11** accordance with the commercial license agreement provided with the-
12** Software or, alternatively, in accordance with the terms contained in-
13** a written agreement between you and The Qt Company. For licensing terms-
14** and conditions see https://www.qt.io/terms-conditions. For further-
15** information use the contact form at https://www.qt.io/contact-us.-
16**-
17** GNU Lesser General Public License Usage-
18** Alternatively, this file may be used under the terms of the GNU Lesser-
19** General Public License version 3 as published by the Free Software-
20** Foundation and appearing in the file LICENSE.LGPL3 included in the-
21** packaging of this file. Please review the following information to-
22** ensure the GNU Lesser General Public License version 3 requirements-
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.-
24**-
25** GNU General Public License Usage-
26** Alternatively, this file may be used under the terms of the GNU-
27** General Public License version 2.0 or (at your option) the GNU General-
28** Public license version 3 or any later version approved by the KDE Free-
29** Qt Foundation. The licenses are as published by the Free Software-
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3-
31** included in the packaging of this file. Please review the following-
32** information to ensure the GNU General Public License requirements will-
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and-
34** https://www.gnu.org/licenses/gpl-3.0.html.-
35**-
36** $QT_END_LICENSE$-
37**-
38****************************************************************************/-
39-
40#include "qquickpincharea_p_p.h"-
41#include "qquickwindow.h"-
42-
43#include <QtCore/qmath.h>-
44#include <QtGui/qevent.h>-
45#include <QtGui/qguiapplication.h>-
46#include <QtGui/qstylehints.h>-
47#include <qpa/qplatformintegration.h>-
48#include <qpa/qplatformnativeinterface.h>-
49#include <private/qguiapplication_p.h>-
50#include <QVariant>-
51-
52#include <float.h>-
53-
54QT_BEGIN_NAMESPACE-
55-
56/*!-
57 \qmltype PinchEvent-
58 \instantiates QQuickPinchEvent-
59 \inqmlmodule QtQuick-
60 \ingroup qtquick-input-events-
61 \brief For specifying information about a pinch event.-
62-
63 \b {The PinchEvent type was added in QtQuick 1.1}-
64-
65 The \c center, \c startCenter, \c previousCenter properties provide the center position between the two touch points.-
66-
67 The \c scale and \c previousScale properties provide the scale factor.-
68-
69 The \c angle, \c previousAngle and \c rotation properties provide the angle between the two points and the amount of rotation.-
70-
71 The \c point1, \c point2, \c startPoint1, \c startPoint2 properties provide the positions of the touch points.-
72-
73 The \c accepted property may be set to false in the \c onPinchStarted handler if the gesture should not-
74 be handled.-
75-
76 \sa PinchArea-
77*/-
78-
79/*!-
80 \qmlproperty QPointF QtQuick::PinchEvent::center-
81 \qmlproperty QPointF QtQuick::PinchEvent::startCenter-
82 \qmlproperty QPointF QtQuick::PinchEvent::previousCenter-
83-
84 These properties hold the position of the center point between the two touch points.-
85-
86 \list-
87 \li \c center is the current center point-
88 \li \c previousCenter is the center point of the previous event.-
89 \li \c startCenter is the center point when the gesture began-
90 \endlist-
91*/-
92-
93/*!-
94 \qmlproperty real QtQuick::PinchEvent::scale-
95 \qmlproperty real QtQuick::PinchEvent::previousScale-
96-
97 These properties hold the scale factor determined by the change in distance between the two touch points.-
98-
99 \list-
100 \li \c scale is the current scale factor.-
101 \li \c previousScale is the scale factor of the previous event.-
102 \endlist-
103-
104 When a pinch gesture is started, the scale is \c 1.0.-
105*/-
106-
107/*!-
108 \qmlproperty real QtQuick::PinchEvent::angle-
109 \qmlproperty real QtQuick::PinchEvent::previousAngle-
110 \qmlproperty real QtQuick::PinchEvent::rotation-
111-
112 These properties hold the angle between the two touch points.-
113-
114 \list-
115 \li \c angle is the current angle between the two points in the range -180 to 180.-
116 \li \c previousAngle is the angle of the previous event.-
117 \li \c rotation is the total rotation since the pinch gesture started.-
118 \endlist-
119-
120 When a pinch gesture is started, the rotation is \c 0.0.-
121*/-
122-
123/*!-
124 \qmlproperty QPointF QtQuick::PinchEvent::point1-
125 \qmlproperty QPointF QtQuick::PinchEvent::startPoint1-
126 \qmlproperty QPointF QtQuick::PinchEvent::point2-
127 \qmlproperty QPointF QtQuick::PinchEvent::startPoint2-
128-
129 These properties provide the actual touch points generating the pinch.-
130-
131 \list-
132 \li \c point1 and \c point2 hold the current positions of the points.-
133 \li \c startPoint1 and \c startPoint2 hold the positions of the points when the second point was touched.-
134 \endlist-
135*/-
136-
137/*!-
138 \qmlproperty bool QtQuick::PinchEvent::accepted-
139-
140 Setting this property to false in the \c PinchArea::onPinchStarted handler-
141 will result in no further pinch events being generated, and the gesture-
142 ignored.-
143*/-
144-
145/*!-
146 \qmlproperty int QtQuick::PinchEvent::pointCount-
147-
148 Holds the number of points currently touched. The PinchArea will not react-
149 until two touch points have initited a gesture, but will remain active until-
150 all touch points have been released.-
151*/-
152-
153QQuickPinch::QQuickPinch()-
154 : m_target(nullptr), m_minScale(1.0), m_maxScale(1.0)-
155 , m_minRotation(0.0), m_maxRotation(0.0)-
156 , m_axis(NoDrag), m_xmin(-FLT_MAX), m_xmax(FLT_MAX)-
157 , m_ymin(-FLT_MAX), m_ymax(FLT_MAX), m_active(false)-
158{-
159}
executed 30 times by 2 tests: end of block
Executed by:
  • tst_qquickpincharea
  • tst_touchmouse
30
160-
161QQuickPinchAreaPrivate::~QQuickPinchAreaPrivate()-
162{-
163 delete pinch;-
164}
executed 32 times by 3 tests: end of block
Executed by:
  • tst_examples
  • tst_qquickpincharea
  • tst_touchmouse
32
165-
166/*!-
167 \qmltype PinchArea-
168 \instantiates QQuickPinchArea-
169 \inqmlmodule QtQuick-
170 \ingroup qtquick-input-
171 \inherits Item-
172 \brief Enables simple pinch gesture handling.-
173-
174 \b {The PinchArea type was added in QtQuick 1.1}-
175-
176 A PinchArea is an invisible item that is typically used in conjunction with-
177 a visible item in order to provide pinch gesture handling for that item.-
178-
179 The \l enabled property is used to enable and disable pinch handling for-
180 the proxied item. When disabled, the pinch area becomes transparent to-
181 mouse/touch events.-
182-
183 PinchArea can be used in two ways:-
184-
185 \list-
186 \li setting a \c pinch.target to provide automatic interaction with an item-
187 \li using the onPinchStarted, onPinchUpdated and onPinchFinished handlers-
188 \endlist-
189-
190 Since Qt 5.5, PinchArea can react to native pinch gesture events from the-
191 operating system if available; otherwise it reacts only to touch events.-
192-
193 \sa PinchEvent, QNativeGestureEvent, QTouchEvent-
194*/-
195-
196/*!-
197 \qmlsignal QtQuick::PinchArea::pinchStarted()-
198-
199 This signal is emitted when the pinch area detects that a pinch gesture has-
200 started: two touch points (fingers) have been detected, and they have moved-
201 beyond the \l {QStyleHints}{startDragDistance} threshold for the gesture to begin.-
202-
203 The \l {PinchEvent}{pinch} parameter (not the same as the \l {PinchArea}{pinch}-
204 property) provides information about the pinch gesture, including the scale,-
205 center and angle of the pinch. At the time of the \c pinchStarted signal,-
206 these values are reset to the default values, regardless of the results-
207 from previous gestures: pinch.scale will be \c 1.0 and pinch.rotation will be \c 0.0.-
208 As the gesture progresses, \l pinchUpdated will report the deviation from those-
209 defaults.-
210-
211 To ignore this gesture set the \c pinch.accepted property to false. The gesture-
212 will be canceled and no further events will be sent.-
213-
214 The corresponding handler is \c onPinchStarted.-
215*/-
216-
217/*!-
218 \qmlsignal QtQuick::PinchArea::pinchUpdated()-
219-
220 This signal is emitted when the pinch area detects that a pinch gesture has changed.-
221-
222 The \l {PinchEvent}{pinch} parameter provides information about the pinch-
223 gesture, including the scale, center and angle of the pinch. These values-
224 reflect changes only since the beginning of the current gesture, and-
225 therefore are not limited by the minimum and maximum limits in the-
226 \l {PinchArea}{pinch} property.-
227-
228 The corresponding handler is \c onPinchUpdated.-
229*/-
230-
231/*!-
232 \qmlsignal QtQuick::PinchArea::pinchFinished()-
233-
234 This signal is emitted when the pinch area detects that a pinch gesture has finished.-
235-
236 The \l {PinchEvent}{pinch} parameter (not the same as the \l {PinchArea}{pinch}-
237 property) provides information about the pinch gesture, including the-
238 scale, center and angle of the pinch.-
239-
240 The corresponding handler is \c onPinchFinished.-
241*/-
242-
243/*!-
244 \qmlsignal QtQuick::PinchArea::smartZoom()-
245 \since 5.5-
246-
247 This signal is emitted when the pinch area detects the smart zoom gesture.-
248 This gesture occurs only on certain operating systems such as \macos.-
249-
250 The \l {PinchEvent}{pinch} parameter provides information about the pinch-
251 gesture, including the location where the gesture occurred. \c pinch.scale-
252 will be greater than zero when the gesture indicates that the user wishes to-
253 enter smart zoom, and zero when exiting (even though typically the same gesture-
254 is used to toggle between the two states).-
255-
256 The corresponding handler is \c onSmartZoom.-
257*/-
258-
259-
260/*!-
261 \qmlpropertygroup QtQuick::PinchArea::pinch-
262 \qmlproperty Item QtQuick::PinchArea::pinch.target-
263 \qmlproperty bool QtQuick::PinchArea::pinch.active-
264 \qmlproperty real QtQuick::PinchArea::pinch.minimumScale-
265 \qmlproperty real QtQuick::PinchArea::pinch.maximumScale-
266 \qmlproperty real QtQuick::PinchArea::pinch.minimumRotation-
267 \qmlproperty real QtQuick::PinchArea::pinch.maximumRotation-
268 \qmlproperty enumeration QtQuick::PinchArea::pinch.dragAxis-
269 \qmlproperty real QtQuick::PinchArea::pinch.minimumX-
270 \qmlproperty real QtQuick::PinchArea::pinch.maximumX-
271 \qmlproperty real QtQuick::PinchArea::pinch.minimumY-
272 \qmlproperty real QtQuick::PinchArea::pinch.maximumY-
273-
274 \c pinch provides a convenient way to make an item react to pinch gestures.-
275-
276 \list-
277 \li \c pinch.target specifies the id of the item to drag.-
278 \li \c pinch.active specifies if the target item is currently being dragged.-
279 \li \c pinch.minimumScale and \c pinch.maximumScale limit the range of the Item.scale property, but not the \c PinchEvent \l {PinchEvent}{scale} property.-
280 \li \c pinch.minimumRotation and \c pinch.maximumRotation limit the range of the Item.rotation property, but not the \c PinchEvent \l {PinchEvent}{rotation} property.-
281 \li \c pinch.dragAxis specifies whether dragging in not allowed (\c Pinch.NoDrag), can be done horizontally (\c Pinch.XAxis), vertically (\c Pinch.YAxis), or both (\c Pinch.XAndYAxis)-
282 \li \c pinch.minimum and \c pinch.maximum limit how far the target can be dragged along the corresponding axes.-
283 \endlist-
284*/-
285-
286QQuickPinchArea::QQuickPinchArea(QQuickItem *parent)-
287 : QQuickItem(*(new QQuickPinchAreaPrivate), parent)-
288{-
289 Q_D(QQuickPinchArea);-
290 d->init();-
291 setAcceptTouchEvents(true);-
292#ifdef Q_OS_OSX-
293 setAcceptHoverEvents(true); // needed to enable touch events on mouse hover.-
294#endif-
295}
executed 32 times by 3 tests: end of block
Executed by:
  • tst_examples
  • tst_qquickpincharea
  • tst_touchmouse
32
296-
297QQuickPinchArea::~QQuickPinchArea()-
298{-
299}-
300/*!-
301 \qmlproperty bool QtQuick::PinchArea::enabled-
302 This property holds whether the item accepts pinch gestures.-
303-
304 This property defaults to true.-
305*/-
306bool QQuickPinchArea::isEnabled() const-
307{-
308 Q_D(const QQuickPinchArea);-
309 return d->enabled;
never executed: return d->enabled;
0
310}-
311-
312void QQuickPinchArea::setEnabled(bool a)-
313{-
314 Q_D(QQuickPinchArea);-
315 if (a != d->enabled) {
a != d->enabledDescription
TRUEnever evaluated
FALSEnever evaluated
0
316 d->enabled = a;-
317 emit enabledChanged();-
318 }
never executed: end of block
0
319}
never executed: end of block
0
320-
321void QQuickPinchArea::touchEvent(QTouchEvent *event)-
322{-
323 Q_D(QQuickPinchArea);-
324 if (!d->enabled || !isVisible()) {
!d->enabledDescription
TRUEnever evaluated
FALSEevaluated 88 times by 1 test
Evaluated by:
  • tst_qquickpincharea
!isVisible()Description
TRUEnever evaluated
FALSEevaluated 88 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-88
325 QQuickItem::touchEvent(event);-
326 return;
never executed: return;
0
327 }-
328-
329 // A common non-trivial starting scenario is the user puts down one finger,-
330 // then that finger remains stationary while putting down a second one.-
331 // However QQuickWindow will not send TouchUpdates for TouchPoints which-
332 // were not initially accepted; that would be inefficient and noisy.-
333 // So even if there is only one touchpoint so far, it's important to accept it-
334 // in order to get updates later on (and it's accepted by default anyway).-
335 // If the user puts down one finger, we're waiting for the other finger to drop.-
336 // Therefore updatePinch() must do the right thing for any combination of-
337 // points and states that may occur, and there is no reason to ignore any event.-
338 // One consequence though is that if PinchArea is on top of something else,-
339 // it's always going to accept the touches, and that means the item underneath-
340 // will not get them (unless the PA's parent is doing parent filtering,-
341 // as the Flickable does, for example).-
342 switch (event->type()) {-
343 case QEvent::TouchBegin:
executed 16 times by 1 test: case QEvent::TouchBegin:
Executed by:
  • tst_qquickpincharea
16
344 case QEvent::TouchUpdate:
executed 54 times by 1 test: case QEvent::TouchUpdate:
Executed by:
  • tst_qquickpincharea
54
345 d->touchPoints.clear();-
346 for (int i = 0; i < event->touchPoints().count(); ++i) {
i < event->tou...ints().count()Description
TRUEevaluated 122 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 70 times by 1 test
Evaluated by:
  • tst_qquickpincharea
70-122
347 if (!(event->touchPoints().at(i).state() & Qt::TouchPointReleased)) {
!(event->touch...PointReleased)Description
TRUEevaluated 120 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
2-120
348 d->touchPoints << event->touchPoints().at(i);-
349 }
executed 120 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
120
350 }
executed 122 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
122
351 updatePinch();-
352 break;
executed 70 times by 1 test: break;
Executed by:
  • tst_qquickpincharea
70
353 case QEvent::TouchEnd:
executed 14 times by 1 test: case QEvent::TouchEnd:
Executed by:
  • tst_qquickpincharea
14
354 clearPinch();-
355 break;
executed 14 times by 1 test: break;
Executed by:
  • tst_qquickpincharea
14
356 case QEvent::TouchCancel:
executed 4 times by 1 test: case QEvent::TouchCancel:
Executed by:
  • tst_qquickpincharea
4
357 cancelPinch();-
358 break;
executed 4 times by 1 test: break;
Executed by:
  • tst_qquickpincharea
4
359 default:
never executed: default:
0
360 QQuickItem::touchEvent(event);-
361 }
never executed: end of block
0
362}-
363-
364void QQuickPinchArea::clearPinch()-
365{-
366 Q_D(QQuickPinchArea);-
367-
368 d->touchPoints.clear();-
369 if (d->inPinch) {
d->inPinchDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
2-12
370 d->inPinch = false;-
371 QPointF pinchCenter = mapFromScene(d->sceneLastCenter);-
372 QQuickPinchEvent pe(pinchCenter, d->pinchLastScale, d->pinchLastAngle, d->pinchRotation);-
373 pe.setStartCenter(d->pinchStartCenter);-
374 pe.setPreviousCenter(pinchCenter);-
375 pe.setPreviousAngle(d->pinchLastAngle);-
376 pe.setPreviousScale(d->pinchLastScale);-
377 pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));-
378 pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));-
379 pe.setPoint1(mapFromScene(d->lastPoint1));-
380 pe.setPoint2(mapFromScene(d->lastPoint2));-
381 emit pinchFinished(&pe);-
382 if (d->pinch && d->pinch->target())
d->pinchDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
d->pinch->target()Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-12
383 d->pinch->setActive(false);
executed 12 times by 1 test: d->pinch->setActive(false);
Executed by:
  • tst_qquickpincharea
12
384 }
executed 12 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
12
385 d->pinchStartDist = 0;-
386 d->pinchActivated = false;-
387 d->initPinch = false;-
388 d->pinchRejected = false;-
389 d->stealMouse = false;-
390 d->id1 = -1;-
391 QQuickWindow *win = window();-
392 if (win && win->mouseGrabberItem() == this)
winDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
win->mouseGrab...Item() == thisDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-14
393 ungrabMouse();
executed 12 times by 1 test: ungrabMouse();
Executed by:
  • tst_qquickpincharea
12
394 setKeepMouseGrab(false);-
395}
executed 14 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
14
396-
397void QQuickPinchArea::cancelPinch()-
398{-
399 Q_D(QQuickPinchArea);-
400-
401 d->touchPoints.clear();-
402 if (d->inPinch) {
d->inPinchDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
2
403 d->inPinch = false;-
404 QPointF pinchCenter = mapFromScene(d->sceneLastCenter);-
405 QQuickPinchEvent pe(d->pinchStartCenter, d->pinchStartScale, d->pinchStartAngle, d->pinchStartRotation);-
406 pe.setStartCenter(d->pinchStartCenter);-
407 pe.setPreviousCenter(pinchCenter);-
408 pe.setPreviousAngle(d->pinchLastAngle);-
409 pe.setPreviousScale(d->pinchLastScale);-
410 pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));-
411 pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));-
412 pe.setPoint1(pe.startPoint1());-
413 pe.setPoint2(pe.startPoint2());-
414 emit pinchFinished(&pe);-
415-
416 d->pinchLastScale = d->pinchStartScale;-
417 d->sceneLastCenter = d->sceneStartCenter;-
418 d->pinchLastAngle = d->pinchStartAngle;-
419 d->lastPoint1 = pe.startPoint1();-
420 d->lastPoint2 = pe.startPoint2();-
421 updatePinchTarget();-
422-
423 if (d->pinch && d->pinch->target())
d->pinchDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
d->pinch->target()Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-2
424 d->pinch->setActive(false);
executed 2 times by 1 test: d->pinch->setActive(false);
Executed by:
  • tst_qquickpincharea
2
425 }
executed 2 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
2
426 d->pinchStartDist = 0;-
427 d->pinchActivated = false;-
428 d->initPinch = false;-
429 d->pinchRejected = false;-
430 d->stealMouse = false;-
431 d->id1 = -1;-
432 QQuickWindow *win = window();-
433 if (win && win->mouseGrabberItem() == this)
winDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
win->mouseGrab...Item() == thisDescription
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-4
434 ungrabMouse();
never executed: ungrabMouse();
0
435 setKeepMouseGrab(false);-
436}
executed 4 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
4
437-
438void QQuickPinchArea::updatePinch()-
439{-
440 Q_D(QQuickPinchArea);-
441-
442 QQuickWindow *win = window();-
443-
444 if (d->touchPoints.count() < 2) {
d->touchPoints.count() < 2Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 50 times by 1 test
Evaluated by:
  • tst_qquickpincharea
20-50
445 setKeepMouseGrab(false);-
446 QQuickWindow *c = window();-
447 if (c && c->mouseGrabberItem() == this)
cDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
c->mouseGrabberItem() == thisDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 18 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-20
448 ungrabMouse();
executed 2 times by 1 test: ungrabMouse();
Executed by:
  • tst_qquickpincharea
2
449 }
executed 20 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
20
450-
451 if (d->touchPoints.count() == 0) {
d->touchPoints.count() == 0Description
TRUEnever evaluated
FALSEevaluated 70 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-70
452 if (d->inPinch) {
d->inPinchDescription
TRUEnever evaluated
FALSEnever evaluated
0
453 d->inPinch = false;-
454 QPointF pinchCenter = mapFromScene(d->sceneLastCenter);-
455 QQuickPinchEvent pe(pinchCenter, d->pinchLastScale, d->pinchLastAngle, d->pinchRotation);-
456 pe.setStartCenter(d->pinchStartCenter);-
457 pe.setPreviousCenter(pinchCenter);-
458 pe.setPreviousAngle(d->pinchLastAngle);-
459 pe.setPreviousScale(d->pinchLastScale);-
460 pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));-
461 pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));-
462 pe.setPoint1(mapFromScene(d->lastPoint1));-
463 pe.setPoint2(mapFromScene(d->lastPoint2));-
464 emit pinchFinished(&pe);-
465 d->pinchStartDist = 0;-
466 d->pinchActivated = false;-
467 if (d->pinch && d->pinch->target())
d->pinchDescription
TRUEnever evaluated
FALSEnever evaluated
d->pinch->target()Description
TRUEnever evaluated
FALSEnever evaluated
0
468 d->pinch->setActive(false);
never executed: d->pinch->setActive(false);
0
469 }
never executed: end of block
0
470 d->initPinch = false;-
471 d->pinchRejected = false;-
472 d->stealMouse = false;-
473 return;
never executed: return;
0
474 }-
475-
476 QTouchEvent::TouchPoint touchPoint1 = d->touchPoints.at(0);-
477 QTouchEvent::TouchPoint touchPoint2 = d->touchPoints.at(d->touchPoints. count() >= 2 ? 1 : 0);-
478-
479 if (touchPoint1.state() == Qt::TouchPointPressed)
touchPoint1.st...chPointPressedDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 54 times by 1 test
Evaluated by:
  • tst_qquickpincharea
16-54
480 d->sceneStartPoint1 = touchPoint1.scenePos();
executed 16 times by 1 test: d->sceneStartPoint1 = touchPoint1.scenePos();
Executed by:
  • tst_qquickpincharea
16
481-
482 if (touchPoint2.state() == Qt::TouchPointPressed)
touchPoint2.st...chPointPressedDescription
TRUEevaluated 32 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 38 times by 1 test
Evaluated by:
  • tst_qquickpincharea
32-38
483 d->sceneStartPoint2 = touchPoint2.scenePos();
executed 32 times by 1 test: d->sceneStartPoint2 = touchPoint2.scenePos();
Executed by:
  • tst_qquickpincharea
32
484-
485 QRectF bounds = clipRect();-
486 // Pinch is not started unless there are exactly two touch points-
487 // AND one or more of the points has just now been pressed (wasn't pressed already)-
488 // AND both points are inside the bounds.-
489 if (d->touchPoints.count() == 2
d->touchPoints.count() == 2Description
TRUEevaluated 50 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickpincharea
20-50
490 && (touchPoint1.state() & Qt::TouchPointPressed || touchPoint2.state() & Qt::TouchPointPressed) &&
touchPoint1.st...chPointPressedDescription
TRUEnever evaluated
FALSEevaluated 50 times by 1 test
Evaluated by:
  • tst_qquickpincharea
touchPoint2.st...chPointPressedDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 34 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-50
491 bounds.contains(touchPoint1.pos()) && bounds.contains(touchPoint2.pos())) {
bounds.contain...hPoint1.pos())Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
bounds.contain...hPoint2.pos())Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-16
492 d->id1 = touchPoint1.id();-
493 d->pinchActivated = true;-
494 d->initPinch = true;-
495-
496 int touchMouseId = QQuickWindowPrivate::get(win)->touchMouseId;-
497 if (touchPoint1.id() == touchMouseId || touchPoint2.id() == touchMouseId) {
touchPoint1.id...= touchMouseIdDescription
TRUEnever evaluated
FALSEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
touchPoint2.id...= touchMouseIdDescription
TRUEnever evaluated
FALSEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-16
498 if (win && win->mouseGrabberItem() != this) {
winDescription
TRUEnever evaluated
FALSEnever evaluated
win->mouseGrab...Item() != thisDescription
TRUEnever evaluated
FALSEnever evaluated
0
499 grabMouse();-
500 }
never executed: end of block
0
501 }
never executed: end of block
0
502 }
executed 16 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
16
503 if (d->pinchActivated && !d->pinchRejected) {
d->pinchActivatedDescription
TRUEevaluated 52 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 18 times by 1 test
Evaluated by:
  • tst_qquickpincharea
!d->pinchRejectedDescription
TRUEevaluated 52 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-52
504 const int dragThreshold = QGuiApplication::styleHints()->startDragDistance();-
505 QPointF p1 = touchPoint1.scenePos();-
506 QPointF p2 = touchPoint2.scenePos();-
507 qreal dx = p1.x() - p2.x();-
508 qreal dy = p1.y() - p2.y();-
509 qreal dist = qSqrt(dx*dx + dy*dy);-
510 QPointF sceneCenter = (p1 + p2)/2;-
511 qreal angle = QLineF(p1, p2).angle();-
512 if (d->touchPoints.count() == 1) {
d->touchPoints.count() == 1Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 50 times by 1 test
Evaluated by:
  • tst_qquickpincharea
2-50
513 // If we only have one point then just move the center-
514 if (d->id1 == touchPoint1.id())
d->id1 == touchPoint1.id()Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-2
515 sceneCenter = d->sceneLastCenter + touchPoint1.scenePos() - d->lastPoint1;
executed 2 times by 1 test: sceneCenter = d->sceneLastCenter + touchPoint1.scenePos() - d->lastPoint1;
Executed by:
  • tst_qquickpincharea
2
516 else-
517 sceneCenter = d->sceneLastCenter + touchPoint2.scenePos() - d->lastPoint2;
never executed: sceneCenter = d->sceneLastCenter + touchPoint2.scenePos() - d->lastPoint2;
0
518 angle = d->pinchLastAngle;-
519 }
executed 2 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
2
520 d->id1 = touchPoint1.id();-
521 if (angle > 180)
angle > 180Description
TRUEevaluated 42 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_qquickpincharea
10-42
522 angle -= 360;
executed 42 times by 1 test: angle -= 360;
Executed by:
  • tst_qquickpincharea
42
523 if (!d->inPinch || d->initPinch) {
!d->inPinchDescription
TRUEevaluated 30 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 22 times by 1 test
Evaluated by:
  • tst_qquickpincharea
d->initPinchDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickpincharea
2-30
524 if (d->touchPoints.count() >= 2) {
d->touchPoints.count() >= 2Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-32
525 if (d->initPinch) {
d->initPinchDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
16
526 if (!d->inPinch)
!d->inPinchDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
2-14
527 d->pinchStartDist = dist;
executed 14 times by 1 test: d->pinchStartDist = dist;
Executed by:
  • tst_qquickpincharea
14
528 d->initPinch = false;-
529 }
executed 16 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
16
530 d->sceneStartCenter = sceneCenter;-
531 d->sceneLastCenter = sceneCenter;-
532 d->pinchStartCenter = mapFromScene(sceneCenter);-
533 d->pinchStartAngle = angle;-
534 d->pinchLastScale = 1.0;-
535 d->pinchLastAngle = angle;-
536 d->pinchRotation = 0.0;-
537 d->lastPoint1 = p1;-
538 d->lastPoint2 = p2;-
539 if (qAbs(dist - d->pinchStartDist) >= dragThreshold ||
qAbs(dist - d-... dragThresholdDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickpincharea
12-20
540 (pinch()->axis() != QQuickPinch::NoDrag &&
pinch()->axis(...kPinch::NoDragDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-20
541 (qAbs(p1.x()-d->sceneStartPoint1.x()) >= dragThreshold
qAbs(p1.x()-d-... dragThresholdDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 18 times by 1 test
Evaluated by:
  • tst_qquickpincharea
2-18
542 || qAbs(p1.y()-d->sceneStartPoint1.y()) >= dragThreshold
qAbs(p1.y()-d-... dragThresholdDescription
TRUEnever evaluated
FALSEevaluated 18 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-18
543 || qAbs(p2.x()-d->sceneStartPoint2.x()) >= dragThreshold
qAbs(p2.x()-d-... dragThresholdDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
2-16
544 || qAbs(p2.y()-d->sceneStartPoint2.y()) >= dragThreshold))) {
qAbs(p2.y()-d-... dragThresholdDescription
TRUEnever evaluated
FALSEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-16
545 QQuickPinchEvent pe(d->pinchStartCenter, 1.0, angle, 0.0);-
546 d->pinchStartDist = dist;-
547 pe.setStartCenter(d->pinchStartCenter);-
548 pe.setPreviousCenter(d->pinchStartCenter);-
549 pe.setPreviousAngle(d->pinchLastAngle);-
550 pe.setPreviousScale(d->pinchLastScale);-
551 pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));-
552 pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));-
553 pe.setPoint1(mapFromScene(d->lastPoint1));-
554 pe.setPoint2(mapFromScene(d->lastPoint2));-
555 pe.setPointCount(d->touchPoints.count());-
556 emit pinchStarted(&pe);-
557 if (pe.accepted()) {
pe.accepted()Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-16
558 d->inPinch = true;-
559 d->stealMouse = true;-
560 if (win && win->mouseGrabberItem() != this)
winDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
win->mouseGrab...Item() != thisDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-16
561 grabMouse();
executed 16 times by 1 test: grabMouse();
Executed by:
  • tst_qquickpincharea
16
562 setKeepMouseGrab(true);-
563 grabTouchPoints(QVector<int>() << touchPoint1.id() << touchPoint2.id());-
564 d->inPinch = true;-
565 d->stealMouse = true;-
566 if (d->pinch && d->pinch->target()) {
d->pinchDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
d->pinch->target()Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-16
567 d->pinchStartPos = pinch()->target()->position();-
568 d->pinchStartScale = d->pinch->target()->scale();-
569 d->pinchStartRotation = d->pinch->target()->rotation();-
570 d->pinch->setActive(true);-
571 }
executed 16 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
16
572 } else {
executed 16 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
16
573 d->pinchRejected = true;-
574 }
never executed: end of block
0
575 }-
576 }
executed 32 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
32
577 } else if (d->pinchStartDist > 0) {
executed 32 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
d->pinchStartDist > 0Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-32
578 qreal scale = dist ? dist / d->pinchStartDist : d->pinchLastScale;
distDescription
TRUEevaluated 18 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
2-18
579 qreal da = d->pinchLastAngle - angle;-
580 if (da > 180)
da > 180Description
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-20
581 da -= 360;
never executed: da -= 360;
0
582 else if (da < -180)
da < -180Description
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-20
583 da += 360;
never executed: da += 360;
0
584 d->pinchRotation += da;-
585 QPointF pinchCenter = mapFromScene(sceneCenter);-
586 QQuickPinchEvent pe(pinchCenter, scale, angle, d->pinchRotation);-
587 pe.setStartCenter(d->pinchStartCenter);-
588 pe.setPreviousCenter(mapFromScene(d->sceneLastCenter));-
589 pe.setPreviousAngle(d->pinchLastAngle);-
590 pe.setPreviousScale(d->pinchLastScale);-
591 pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));-
592 pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));-
593 pe.setPoint1(touchPoint1.pos());-
594 pe.setPoint2(touchPoint2.pos());-
595 pe.setPointCount(d->touchPoints.count());-
596 d->pinchLastScale = scale;-
597 d->sceneLastCenter = sceneCenter;-
598 d->pinchLastAngle = angle;-
599 d->lastPoint1 = touchPoint1.scenePos();-
600 d->lastPoint2 = touchPoint2.scenePos();-
601 emit pinchUpdated(&pe);-
602 updatePinchTarget();-
603 }
executed 20 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
20
604 }
executed 52 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
52
605}
executed 70 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
70
606-
607void QQuickPinchArea::updatePinchTarget()-
608{-
609 Q_D(QQuickPinchArea);-
610 if (d->pinch && d->pinch->target()) {
d->pinchDescription
TRUEevaluated 22 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
d->pinch->target()Description
TRUEevaluated 22 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-22
611 qreal s = d->pinchStartScale * d->pinchLastScale;-
612 s = qMin(qMax(pinch()->minimumScale(),s), pinch()->maximumScale());-
613 pinch()->target()->setScale(s);-
614 QPointF pos = d->sceneLastCenter - d->sceneStartCenter + d->pinchStartPos;-
615 if (pinch()->axis() & QQuickPinch::XAxis) {
pinch()->axis(...ckPinch::XAxisDescription
TRUEevaluated 22 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-22
616 qreal x = pos.x();-
617 if (x < pinch()->xmin())
x < pinch()->xmin()Description
TRUEnever evaluated
FALSEevaluated 22 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-22
618 x = pinch()->xmin();
never executed: x = pinch()->xmin();
0
619 else if (x > pinch()->xmax())
x > pinch()->xmax()Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEevaluated 20 times by 1 test
Evaluated by:
  • tst_qquickpincharea
2-20
620 x = pinch()->xmax();
executed 2 times by 1 test: x = pinch()->xmax();
Executed by:
  • tst_qquickpincharea
2
621 pinch()->target()->setX(x);-
622 }
executed 22 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
22
623 if (pinch()->axis() & QQuickPinch::YAxis) {
pinch()->axis(...ckPinch::YAxisDescription
TRUEevaluated 22 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-22
624 qreal y = pos.y();-
625 if (y < pinch()->ymin())
y < pinch()->ymin()Description
TRUEnever evaluated
FALSEevaluated 22 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-22
626 y = pinch()->ymin();
never executed: y = pinch()->ymin();
0
627 else if (y > pinch()->ymax())
y > pinch()->ymax()Description
TRUEnever evaluated
FALSEevaluated 22 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-22
628 y = pinch()->ymax();
never executed: y = pinch()->ymax();
0
629 pinch()->target()->setY(y);-
630 }
executed 22 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
22
631 if (d->pinchStartRotation >= pinch()->minimumRotation()
d->pinchStartR...imumRotation()Description
TRUEevaluated 22 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-22
632 && d->pinchStartRotation <= pinch()->maximumRotation()) {
d->pinchStartR...imumRotation()Description
TRUEevaluated 22 times by 1 test
Evaluated by:
  • tst_qquickpincharea
FALSEnever evaluated
0-22
633 qreal r = d->pinchRotation + d->pinchStartRotation;-
634 r = qMin(qMax(pinch()->minimumRotation(),r), pinch()->maximumRotation());-
635 pinch()->target()->setRotation(r);-
636 }
executed 22 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
22
637 }
executed 22 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
22
638}
executed 22 times by 1 test: end of block
Executed by:
  • tst_qquickpincharea
22
639-
640bool QQuickPinchArea::childMouseEventFilter(QQuickItem *i, QEvent *e)-
641{-
642 Q_D(QQuickPinchArea);-
643 if (!d->enabled || !isVisible())
!d->enabledDescription
TRUEnever evaluated
FALSEnever evaluated
!isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
644 return QQuickItem::childMouseEventFilter(i, e);
never executed: return QQuickItem::childMouseEventFilter(i, e);
0
645 switch (e->type()) {-
646 case QEvent::TouchBegin:
never executed: case QEvent::TouchBegin:
0
647 clearPinch();-
648 Q_FALLTHROUGH();-
649 case QEvent::TouchUpdate: {
code before this statement never executed: case QEvent::TouchUpdate:
never executed: case QEvent::TouchUpdate:
0
650 QTouchEvent *touch = static_cast<QTouchEvent*>(e);-
651 d->touchPoints.clear();-
652 for (int i = 0; i < touch->touchPoints().count(); ++i)
i < touch->tou...ints().count()Description
TRUEnever evaluated
FALSEnever evaluated
0
653 if (!(touch->touchPoints().at(i).state() & Qt::TouchPointReleased))
!(touch->touch...PointReleased)Description
TRUEnever evaluated
FALSEnever evaluated
0
654 d->touchPoints << touch->touchPoints().at(i);
never executed: d->touchPoints << touch->touchPoints().at(i);
0
655 updatePinch();-
656 }-
657 e->setAccepted(d->inPinch);-
658 return d->inPinch;
never executed: return d->inPinch;
0
659 case QEvent::TouchEnd:
never executed: case QEvent::TouchEnd:
0
660 clearPinch();-
661 break;
never executed: break;
0
662 default:
never executed: default:
0
663 break;
never executed: break;
0
664 }-
665-
666 return QQuickItem::childMouseEventFilter(i, e);
never executed: return QQuickItem::childMouseEventFilter(i, e);
0
667}-
668-
669void QQuickPinchArea::geometryChanged(const QRectF &newGeometry,-
670 const QRectF &oldGeometry)-
671{-
672 QQuickItem::geometryChanged(newGeometry, oldGeometry);-
673}
executed 36 times by 3 tests: end of block
Executed by:
  • tst_examples
  • tst_qquickpincharea
  • tst_touchmouse
36
674-
675void QQuickPinchArea::itemChange(ItemChange change, const ItemChangeData &value)-
676{-
677 QQuickItem::itemChange(change, value);-
678}
executed 134 times by 3 tests: end of block
Executed by:
  • tst_examples
  • tst_qquickpincharea
  • tst_touchmouse
134
679-
680bool QQuickPinchArea::event(QEvent *event)-
681{-
682 Q_D(QQuickPinchArea);-
683 if (!d->enabled || !isVisible())
!d->enabledDescription
TRUEnever evaluated
FALSEevaluated 88 times by 1 test
Evaluated by:
  • tst_qquickpincharea
!isVisible()Description
TRUEnever evaluated
FALSEevaluated 88 times by 1 test
Evaluated by:
  • tst_qquickpincharea
0-88
684 return QQuickItem::event(event);
never executed: return QQuickItem::event(event);
0
685-
686 switch (event->type()) {-
687#if QT_CONFIG(gestures)-
688 case QEvent::NativeGesture: {
never executed: case QEvent::NativeGesture:
0
689 QNativeGestureEvent *gesture = static_cast<QNativeGestureEvent *>(event);-
690 switch (gesture->gestureType()) {-
691 case Qt::BeginNativeGesture:
never executed: case Qt::BeginNativeGesture:
0
692 clearPinch(); // probably not necessary; JIC-
693 d->pinchStartCenter = gesture->localPos();-
694 d->pinchStartAngle = 0.0;-
695 d->pinchStartRotation = 0.0;-
696 d->pinchRotation = 0.0;-
697 d->pinchStartScale = 1.0;-
698 d->pinchLastAngle = 0.0;-
699 d->pinchLastScale = 1.0;-
700 d->sceneStartPoint1 = gesture->windowPos();-
701 d->sceneStartPoint2 = gesture->windowPos(); // TODO we never really know-
702 d->lastPoint1 = gesture->windowPos();-
703 d->lastPoint2 = gesture->windowPos(); // TODO we never really know-
704 if (d->pinch && d->pinch->target()) {
d->pinchDescription
TRUEnever evaluated
FALSEnever evaluated
d->pinch->target()Description
TRUEnever evaluated
FALSEnever evaluated
0
705 d->pinchStartPos = d->pinch->target()->position();-
706 d->pinchStartScale = d->pinch->target()->scale();-
707 d->pinchStartRotation = d->pinch->target()->rotation();-
708 d->pinch->setActive(true);-
709 }
never executed: end of block
0
710 break;
never executed: break;
0
711 case Qt::EndNativeGesture:
never executed: case Qt::EndNativeGesture:
0
712 clearPinch();-
713 break;
never executed: break;
0
714 case Qt::ZoomNativeGesture: {
never executed: case Qt::ZoomNativeGesture:
0
715 qreal scale = d->pinchLastScale * (1.0 + gesture->value());-
716 QQuickPinchEvent pe(d->pinchStartCenter, scale, d->pinchLastAngle, 0.0);-
717 pe.setStartCenter(d->pinchStartCenter);-
718 pe.setPreviousCenter(d->pinchStartCenter);-
719 pe.setPreviousAngle(d->pinchLastAngle);-
720 pe.setPreviousScale(d->pinchLastScale);-
721 pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));-
722 pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));-
723 pe.setPoint1(mapFromScene(d->lastPoint1));-
724 pe.setPoint2(mapFromScene(d->lastPoint2));-
725 pe.setPointCount(2);-
726 d->pinchLastScale = scale;-
727 if (d->inPinch)
d->inPinchDescription
TRUEnever evaluated
FALSEnever evaluated
0
728 emit pinchUpdated(&pe);
never executed: pinchUpdated(&pe);
0
729 else-
730 emit pinchStarted(&pe);
never executed: pinchStarted(&pe);
0
731 d->inPinch = true;-
732 updatePinchTarget();-
733 } break;
never executed: break;
0
734 case Qt::SmartZoomNativeGesture: {
never executed: case Qt::SmartZoomNativeGesture:
0
735 if (gesture->value() > 0.0 && d->pinch && d->pinch->target()) {
gesture->value() > 0.0Description
TRUEnever evaluated
FALSEnever evaluated
d->pinchDescription
TRUEnever evaluated
FALSEnever evaluated
d->pinch->target()Description
TRUEnever evaluated
FALSEnever evaluated
0
736 d->pinchStartPos = pinch()->target()->position();-
737 d->pinchStartCenter = mapToItem(pinch()->target()->parentItem(), pinch()->target()->boundingRect().center());-
738 d->pinchStartScale = d->pinch->target()->scale();-
739 d->pinchStartRotation = d->pinch->target()->rotation();-
740 d->pinchLastScale = d->pinchStartScale = d->pinch->target()->scale();-
741 d->pinchLastAngle = d->pinchStartRotation = d->pinch->target()->rotation();-
742 }
never executed: end of block
0
743 QQuickPinchEvent pe(gesture->localPos(), gesture->value(), d->pinchLastAngle, 0.0);-
744 pe.setStartCenter(gesture->localPos());-
745 pe.setPreviousCenter(d->pinchStartCenter);-
746 pe.setPreviousAngle(d->pinchLastAngle);-
747 pe.setPreviousScale(d->pinchLastScale);-
748 pe.setStartPoint1(gesture->localPos());-
749 pe.setStartPoint2(gesture->localPos());-
750 pe.setPoint1(mapFromScene(gesture->windowPos()));-
751 pe.setPoint2(mapFromScene(gesture->windowPos()));-
752 pe.setPointCount(2);-
753 emit smartZoom(&pe);-
754 } break;
never executed: break;
0
755 case Qt::RotateNativeGesture: {
never executed: case Qt::RotateNativeGesture:
0
756 qreal angle = d->pinchLastAngle + gesture->value();-
757 QQuickPinchEvent pe(d->pinchStartCenter, d->pinchLastScale, angle, 0.0);-
758 pe.setStartCenter(d->pinchStartCenter);-
759 pe.setPreviousCenter(d->pinchStartCenter);-
760 pe.setPreviousAngle(d->pinchLastAngle);-
761 pe.setPreviousScale(d->pinchLastScale);-
762 pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));-
763 pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));-
764 pe.setPoint1(mapFromScene(d->lastPoint1));-
765 pe.setPoint2(mapFromScene(d->lastPoint2));-
766 pe.setPointCount(2);-
767 d->pinchLastAngle = angle;-
768 if (d->inPinch)
d->inPinchDescription
TRUEnever evaluated
FALSEnever evaluated
0
769 emit pinchUpdated(&pe);
never executed: pinchUpdated(&pe);
0
770 else-
771 emit pinchStarted(&pe);
never executed: pinchStarted(&pe);
0
772 d->inPinch = true;-
773 d->pinchRotation = angle;-
774 updatePinchTarget();-
775 } break;
never executed: break;
0
776 default:
never executed: default:
0
777 return QQuickItem::event(event);
never executed: return QQuickItem::event(event);
0
778 }-
779 } break;
never executed: break;
0
780#endif // gestures-
781 case QEvent::Wheel:
never executed: case QEvent::Wheel:
0
782 event->ignore();-
783 return false;
never executed: return false;
0
784 default:
executed 88 times by 1 test: default:
Executed by:
  • tst_qquickpincharea
88
785 return QQuickItem::event(event);
executed 88 times by 1 test: return QQuickItem::event(event);
Executed by:
  • tst_qquickpincharea
88
786 }-
787-
788 return true;
never executed: return true;
0
789}-
790-
791QQuickPinch *QQuickPinchArea::pinch()-
792{-
793 Q_D(QQuickPinchArea);-
794 if (!d->pinch)
!d->pinchDescription
TRUEevaluated 30 times by 2 tests
Evaluated by:
  • tst_qquickpincharea
  • tst_touchmouse
FALSEevaluated 400 times by 1 test
Evaluated by:
  • tst_qquickpincharea
30-400
795 d->pinch = new QQuickPinch;
executed 30 times by 2 tests: d->pinch = new QQuickPinch;
Executed by:
  • tst_qquickpincharea
  • tst_touchmouse
30
796 return d->pinch;
executed 430 times by 2 tests: return d->pinch;
Executed by:
  • tst_qquickpincharea
  • tst_touchmouse
430
797}-
798-
799QT_END_NAMESPACE-
800-
801#include "moc_qquickpincharea_p.cpp"-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.0