aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
Commit message (Collapse)AuthorAgeFilesLines
* optimization: get acceptedButtons before checking it twiceShawn Rutledge2017-08-251-2/+3
| | | | | | | It also makes debugging easier to be able to see this value. Change-Id: I4d68e7561cbc533a6cd3296a3b193732eb7f8d3e Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
* Add property to disable shaping on fontsEskil Abrahamsen Blomfeldt2017-08-257-0/+77
| | | | | | | | | | | | | | | Major performance improvements can be gained if you know for sure your text does not require any shaping features. This patch adds Qt Quick support for the QFont::PreferNoShaping flag (though as a boolean property to work better with property bindings). [ChangeLog][QtQuick][Text] Added "font.preferShaping" property to Text, TextEdit and TextInput. This makes it possible to improve performance at the expense of some cosmetic font features. Task-number: QTBUG-56728 Change-Id: Ib4e23d5b21b9d4929562df521347285b2586a62e Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Fix symbol clash in static builds in etc texture providerSimon Hausmann2017-08-252-10/+10
| | | | | | | | | All symbols must be prefixed with Q to avoid clashes with user code when linking statically. Task-number: QTBUG-62772 Change-Id: Ib4d44ad2db3053fc8dba3235ee2774774a38bf6c Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Restore filtering behaviorShawn Rutledge2017-08-242-12/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We cannot cull pairs from filteringParentItems ahead of time on the basis of not visiting the same parent twice, because we don't know which child will get the press event. Skipping parents which have already seen the event once MUST be done during event delivery, as it was done before 9b5fc80af28580e9672792dd511d876a93947882 But another behavior difference is that the same parent can filter twice, if it's filtering the same event on behalf of a different item. For example: ListView delegate: Rectangle MouseArea Text If you click on the text, the MouseArea can filter for the Text, then ListView filters for the Text. Nobody accepts. So we try to deliver to the MouseArea; and then ListView filters again, this time for the MouseArea. So we need to go back to interleaving regular delivery and parent-filtering to get back to the behavior we had in 5.9. It's not the same if we try to do all the parent-filtering first, and then all the regular delivery afterwards. Revises and reverts parts of 1b0c9b46ce13b0f9c533f18fb420ff10ad56e4f6 Done-with: Jan Arve Sæther Task-number: QTBUG-62412 Task-number: QTBUG-62549 Task-number: QTBUG-62628 Task-number: QTBUG-62631 Change-Id: Id0bf64cb54668cc0eecfba01746a00ed7ea0359f Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
* improve cat. logging during event delivery to child-filtering itemsShawn Rutledge2017-08-231-8/+8
| | | | | | | | It's useful to see target items and parents which need to filter events for them, together. Change-Id: I2d072a91ccb382077caf71b7413a9a10b34cb121 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* Add a way to set the default render type of text-like elementsGiuseppe D'Angelo2017-08-239-20/+91
| | | | | | | | | | | | | | | | | | | | | | | | | f3446071da8357620d0c8593a04e3b4fbba88f21 introduced a build-time way to select the default render type of text-like elements. This patch adds also a way to select it at runtime, via a setter on QQuickWindow. (QQuickWindow has been chosen as convenience, rather than adding another namespace/class to just have this setter.) Given that QT_QUICK_DEFAULT_TEXT_RENDER_TYPE was never documented, I've taken the liberty of changing the accepted values for it (to match the new enumerator names in QQuickWindow, rather than the ones in QQuickText/QQuickTextEdit/etc.). [ChangeLog][QtQuick][QQuickWindow] It is now possible to set the default render type of text-like elements globally via the QQuickWindow::setTextRenderType() function. If you were using the (undocumented) QT_QUICK_DEFAULT_TEXT_RENDER_TYPE macro when building Qt Quick for the same purpose, note that the macro value needs now to be set to the "NativeTextRendering" value, instead of "NativeRendering". Change-Id: Id4b2dc3ec823971486e445ca4173b8be848fb4e3 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* Merge remote-tracking branch 'origin/5.9' into devSimon Hausmann2017-08-233-5/+5
|\ | | | | | | | | | | | | Conflicts: tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/tst_qqmlenginedebuginspectorintegration.cpp Change-Id: I31375151eb239f348bec988d2d0506c2b4d9604c
| * Fix memory leaks with threaded rendererJoni Poikelin2017-08-223-5/+5
| | | | | | | | | | | | | | | | | | | | Reverts 39061af50cc3092289cdd71d17802139590ecb59 and calls endSync() instead after syncSceneGraph(). Task-number: QTBUG-61754 Change-Id: I7b51ffdc93557bacd93927dd642ec3715980b21c Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Roger Zanoni <rogerzanoni@gmail.com>
* | Use QRandomGenerator instead of q?randThiago Macieira2017-08-233-8/+11
| | | | | | | | | | Change-Id: Icd0e0d4b27cb4e5eb892fffd14b5285d43f4afbf Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Merge "Merge remote-tracking branch 'origin/5.9' into dev" into refs/staging/devSimon Hausmann2017-08-188-27/+48
|\ \
| * | Merge remote-tracking branch 'origin/5.9' into devSimon Hausmann2017-08-188-27/+48
| |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/qml/compiler/qqmltypecompiler.cpp src/qml/jsruntime/qv4qmlcontext.cpp src/qml/jsruntime/qv4qobjectwrapper.cpp src/qml/qml/qqmlcustomparser.cpp src/qml/qml/qqmlimport.cpp src/qml/qml/qqmlimport_p.h src/qml/qml/qqmlmetatype.cpp src/qml/qml/qqmlmetatype_p.h src/qml/qml/qqmltypenamecache.cpp src/qml/qml/qqmltypenamecache_p.h src/qml/qml/qqmltypewrapper.cpp src/qml/qml/qqmltypewrapper_p.h src/qml/qml/qqmlvmemetaobject.cpp src/qml/util/qqmladaptormodel.cpp Change-Id: Ic959d03e6f9c328fb02710d9abbb0f27cddde131
| | * Fix crash in QQuickAnimatedImageAleksei Ilin2017-08-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Check d->_movie pointer before dereferencing Task-number: QTBUG-62380 Change-Id: I62314c7c0d4a7e41fa6f8c4629d16f30d6036156 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> (cherry-picked from fc3ecd2522deb3f6d8d48b66dbd89402e1ab4b53)
| | * QQuickTextInput: Allow going from an Acceptable to an Intermediate stateAndy Shaw2017-08-151-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When editing text with a validator set then it can happen that it would no longer be in the acceptable state. This ensures that it does not prevent editing the text when an input mask is used to go back to an Intermediate state. Change-Id: I6da533d18035e9da468939c28a961bc8f2f3090b Reviewed-by: Robin Burchell <robin.burchell@crimson.no> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * Fix ListView::StrictlyEnforceRange with resizing delegateMichael Brasser2017-08-093-1/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When fixupPosition is called for a ListView with StrictlyEnforceRange, the original reason for the move is lost, and the fixup is applied immediately. There are already checks for whether the view is moving, so expand these checks to include movement caused by highlight. Change-Id: I25f771b9a529d31dc28acb9f91fcd2b582428200 Task-number: QTBUG-33568 Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
| | * Doc: Mention license in Qt Quick documentationKai Koehne2017-08-031-0/+8
| | | | | | | | | | | | | | | Change-Id: Ib7cb0781799191636a13aba9d357313a860876e9 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| | * Move the engine pointer from the property cache to the VME meta objectLars Knoll2017-08-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | This is where it belongs, and it makes the PropertyCache independent of the engine used. Task-number: QTBUG-61536 Change-Id: I21c2674ee3e2895abd2418764d140b154b47b868 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| | * Use QQmlType by valueLars Knoll2017-08-022-25/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QQmlType is now refcounted, and we need to use it by value, to control it's lifetime properly. This is required, so we can clean up the QQmlMetaTypeData cache on engine destruction and with trimComponentCache() Task-number: QTBUG-61536 Change-Id: If86391c86ea20a646ded7c9925d8f743f628fb91 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Remove unnecesary if and dead codeJesus Fernandez2017-08-171-20/+17
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 182648 Dereference before null check There may be a null pointer dereference, or else the comparison against null is unnecessary. In QQuickEventPoint::estimatedVelocity(): All paths that lead to this null pointer comparison already dereference the pointer earlier (CWE-476) Coverity-Id: 182648 Change-Id: Ie8ca1a58b9c11f7c459d719ccd0a3f3fa9eaeea5 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io> Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
* | Doc: Fix PointerHandler QML docsTopi Reinio2017-08-113-40/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | qquickpinchhandler.cpp:138: warning: Missing property type for QQuickPinchHandler::minimumX qquickpinchhandler.cpp:151: warning: Missing property type for QQuickPinchHandler::maximumX qquickpinchhandler.cpp:164: warning: Missing property type for QQuickPinchHandler::minimumY qquickpinchhandler.cpp:177: warning: Missing property type for QQuickPinchHandler::maximumY qquickpinchhandler.cpp:194: warning: Missing property type for QQuickPinchHandler::minimumTouchPoints qquickpinchhandler.cpp:198: warning: Missing property type for QQuickPinchHandler::active qquickpointerdevicehandler.cpp:107: warning: Missing property type for QQuickPointerDeviceHandler::acceptedModifiers qquickpointerhandler.cpp:47: warning: C++ class QQuickPointerHandler not found: \instantiates QQuickPointerHandler qquickpointerhandler.cpp:176: warning: Missing property type for QQuickPointerHandler::enabled qquickpointerhandler.cpp:255: warning: Missing property type for QQuickPointerHandler::parent qquicktaphandler.cpp:175: warning: Missing property type for longPressThreshold qquicktaphandler.cpp:235: warning: Missing property type for gesturePolicy qquicktaphandler.cpp:252: warning: Missing property type for pressed qquicktaphandler.cpp:329: warning: Missing '\endqml' qquicktaphandler.cpp:340: warning: Missing property type for tapCount qquicktaphandler.cpp:353: warning: Missing property type for timeHeld Change-Id: I8a5bd0ec7c5603573f39f5b5f1f24d5735ba98dd Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* | Fix crash in QQuickAnimatedImageAleksei Ilin2017-08-101-1/+1
| | | | | | | | | | | | | | | | | | | | Check d->_movie pointer before dereferencing Task-number: QTBUG-62380 Change-Id: I62314c7c0d4a7e41fa6f8c4629d16f30d6036156 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* | Fix hardcoding font family before the font is loadedEskil Abrahamsen Blomfeldt2017-08-092-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When you hardcoded the font family of an application font before the font was actually loaded, the QTextLayout would cache the glyph indexes from the fallback font, and these would later be applied to the proper font in the render thread, causing corrupted text and warnings. It is easy enough to work around this by binding the font.family property to the name property of the FontLoader, but to handle the error case more gracefully, we now check during the polish phase whether the actual font assignment has changed, and redo the QTextLayout when we have to. [ChangeLog][QtQuick][Text] Fixed an issue when the family of an application font was hardcoded and applied to text before the font itself was loaded. Task-number: QTBUG-61984 Change-Id: Ib0e80a78f3b6fe4a3b0188c69516a20d0bf4cb45 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | Merge branch 'wip/pointerhandler' into devShawn Rutledge2017-08-0830-266/+3933
|\ \ | | | | | | | | | Change-Id: Ifae425744d69779a661c7465d33163a7d53fb8a4
| * | Fix some bugs related to child mouse filteringwip/pointerhandlerJan Arve Saether2017-08-082-5/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Only abort event delivery early if event that got filtered was accepted (previously we aborted as soon as the event got filtered, even if the event was filtered, but explicitly *not* accepted) - If the event that got filtered was *not* accepted, we do not abort event delivery, but we need to remove the item from the list of target items that we will deliver to later - If childMouseEventFilter returns true it should not automatically mean that the event was accepted. Change-Id: I2f2415379061131af1d5102e03d01f010e1a8168 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
| * | Merge remote-tracking branch 'origin/dev' into wip/pointerhandlerShawn Rutledge2017-08-0847-111/+800
| |\ \ | | | | | | | | | | | | Change-Id: I0af7b0c3e0a21aae68c82ec11c5ca579c1661ce9
| * | | Do not break qtlocation when integratingJan Arve Saether2017-07-131-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Once pointerhandlers are merged it should be fixed in qtlocation, and then this should be removed. Change-Id: I8b6364fff762417ac45ea76bfe1c06836c7fdf15 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | | Merge remote-tracking branch 'origin/dev' into wip/pointerhandlerJan Arve Saether2017-07-1172-268/+911
| |\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: examples/quick/shared/LauncherList.qml src/quick/items/qquickevents.cpp src/quick/items/qquickevents_p_p.h src/quick/items/qquickwindow.cpp tests/auto/quick/touchmouse/tst_touchmouse.cpp Change-Id: Id692d291455093fc72db61f1b854f3fc9190267b
| * | | | Do not crash on WindowsJan Arve Saether2017-06-233-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It seems that moving the registration to the block where the rest of the type registration was done avoids the crash. According to the documentation, a Q_GADGET doesn't have to be explicitly registered into the meta type system, but I never managed to get that working (and our existing Q_GADGETS seems to require explicit registration too) Change-Id: Iab1c258dbe40bd1c8062fab2c4b68fce208f5144 Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
| * | | | Add tst_multipointtoucharea_interop autotestShawn Rutledge2017-05-271-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | to test interoperability of PointerHandlers with conventional touch- handling Items (with MultiPointTouchArea being the prototypical instance) Change-Id: Id19f312b17b70df072d66cd91816d2b19250a500 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | | | Fix some problems with MouseDblClick handlingJan Arve Saether2017-05-264-3/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The sequence of events delivered from a double click is: [Press,Release,Press,DblClick,Release] The problem was that a DblClick was delivered just like a press event, so it would clear the passive grabber that was established because of the former Press event. When the Release event then got processed, there was therefore a risk that the Release event was not delivered to the passive grabber. The fix is to not deliver DblClick events at all to handlers, and to not deliver DblClick to items if the former Press event was accepted by a handler. Change-Id: I49c0e32ef4e33f7b6014d35dc065da2527b94779 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | Move properties into grouped "point" propertyJan Arve Saether2017-05-234-91/+109
| | | | | | | | | | | | | | | | | | | | | | | | | Change-Id: I80000110a2e0ca69210322a0fcc587d86158358e Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | | | Change enum values to not start from 0Jan Arve Saether2017-05-221-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | And allow potential combination of passive and exclusive grabbers Change-Id: I0bd2d6863305c3db7c91b064c0a58cd5e167470e Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | | | Start over with event delivery when touchpoint releases occurShawn Rutledge2017-05-2210-53/+87
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The new rule is that when the number of touchpoints changes, we start over with event delivery as if the touch had just begun, to give more opportunities to hand off processing from one item or handler to another. And MultiPointTouchArea can now handle the handoff: for example in tests/manual/pointer/pinchDragFlingMPTA.qml when the user is pressing three fingers, the PinchHandler is active; when the user then lifts one finger, the MPTA can resume handling the two remaining touchpoints as if they were just pressed. The change in QQuickMultiPointerHandler::wantsPointerEvent is both a behavior change and an optimization: released points aren't eligible; but if some points are released, then pressed, updated and stationary points are all eligible. And, figure this out without looping over the points twice. Change-Id: I26b7593de8e72b471adfec4a4482dd87a8288442 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | TapHandler: don't give up passive grab on setPressed(false)Shawn Rutledge2017-05-151-5/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a button with a TapHandler with the DragThreshold policy is inside a Flickable, and you press on the button and start dragging, when you exceed the drag threshold, TapHandler will not "want" the EventPoint anymore. That triggers it to call setPressed(false). Flickable does not have a grab because it was relying on filtering the children's events; and QQuickWindow does not deliver touch updates to non-grabber items. So when TapHandler gives up its passive grab, Flickable does not get a chance to filter TapHandler's touch update events anymore. Thus, we cannot do that. When the touchpoint is actually released though, passive grabs are ungrabbed anyway. This is required to get the new tst_FlickableInterop::touchDragFlickableBehindButton() autotest working. Change-Id: I55a175ae358f75b9d7ab64f0b8124d91b6a9e1d6 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | Don't allow one handler to cancel another's grab, unless it is stealingShawn Rutledge2017-05-151-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is required to keep the tst_flickableinterop touchDragSlider test passing after the change to TapHandler to never give up passive grab. And QQuickEventPoint::setGrabberPointerHandler(nullptr, true) will just go ahead and allow TapHandler to cancel the grab which the DragHandler currently has at that time, when you have pressed the TapHandler but started dragging so that the drag threshold is exceeded. (Perhaps this points to an API problem.) For now, we at least can enforce the rule in QQuickPointerHandler::setExclusiveGrab that if grab is false, it won't nullify the grab of a different handler. Change-Id: I7c93188cfdce51b3b5a17c13e5efc7fcbd123d4b Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | QQuickPointerEvent debug operator: don't crash if original event nullShawn Rutledge2017-05-111-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QQuickPointerEvent is a wrapper for a QInputEvent. Between event deliveries, the object exists but it doesn't have a current event to which to refer. qDebug() should still work OK anyway in that case. Change-Id: I5aa9584c5d7988bb748befa90785efe8bd24678a Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | | | QQuickPointerEvent debug operator: add timestampShawn Rutledge2017-05-111-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It can help to distinguish the time period when we are still delivering the same event. Change-Id: Id738d3e210431f1803cad9ace000c0f702e930fc Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | Default QQuickItem::acceptTouchEvents to true until Qt 6Shawn Rutledge2017-05-105-2/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a partial revert of 1457df74f4c1d770e1e820de8cd082be1bd2489e to avoid making a mandatory API change so soon. Change-Id: I05040579fa36d3dc5ef7616861f6d17adf500d2c Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | | | Only send filtered events to the parent of the receiverJan Arve Saether2017-05-081-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If receiver is nullptr, all filteringParentItems are candidates for filtering. Change-Id: I9c388a9a2e83c1f5815c99c059f0e507e0bc1040 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | | | Merge remote-tracking branch 'origin/dev' into wip/pointerhandlerShawn Rutledge2017-05-08116-149/+352
| |\ \ \ \ | | | | | | | | | | | | | | | | | | Change-Id: Ia06843de255547174efa556b1ab76be4b4be4287
| * | | | | Add and use QQuickPointerSingleHandler::moveTarget()Shawn Rutledge2017-04-283-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Until now, DragHandler::pos() was not staying constant during a drag, because we update m_pos from the EventPoint, then move the Item. scenePos() also returns mapToScene(m_pos). If the Item is being dragged to follow the finger or the mouse cursor exactly, unconstrained, then pos() should always be the same as the parent-relative position where the press occurred. Change-Id: Ia02738c0cf458e039cf90371f9c8a7becb75a035 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | | QQPSingleHandler: accept only left mouse button by defaultShawn Rutledge2017-04-282-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It makes as much sense for DragHandler as it does for TapHandler. If you want to allow right-button dragging, you need to enable it in QML. In general, UIs have always relied on the left button for normal interaction, while the other buttons are for special cases. Change-Id: I708d5d080832c32ef581ca333c9be06e987ef007 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | | TapHandler: CancelGrabPassive => setPressed(false)Shawn Rutledge2017-04-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a TapHandler's Item is inside a Flickable, the user has pressed the mouse button over the TapHandler, and then the Flickable takes the mouse grab during dragging from there, if the TapHandler has only a passive grab, it is cancelled. In this case the TapHandler should no longer be pressed, because it's being dragged instead. Change-Id: I129f44cc9b8d8e99b00e23cd5943dd57d4ae5d16 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | | | | DragHandler: allow parent to be different from targetShawn Rutledge2017-04-272-7/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The most obvious way to implement a Slider is to allow dragging the knob - as on a real-world physical sliding potentiometer. But to make it easier on a touchscreen, it should be possible to touch anywhere along the slider's travel, as on a QtQuick.Controls 2 Slider. For that purpose, we need to respond to events within the bounds of one Item while actually dragging a different Item (the knob). It's similar to the way that PinchHandler can handle pinch gestures within one Item while transforming another (which may be too small to get both fingers inside). Change-Id: Iac9a5f11a7a45e22d93fe52bf62d157c48d72d3d Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | | | | Start over with event delivery when touchpoint presses occurShawn Rutledge2017-04-272-10/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It was part of the intended design for pointer handlers; omitting this feature has until now prevented some opportunities for handoff from one handler to another. Now if PinchHandler has grabbed, pressing one more point will let something else have a chance again, for example. But this is incomplete in that if we release a point, we should do the same thing, actually. Change-Id: I10f567e7e4388bf0caab54c261178f19db20b14a Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | | QQPSingleHandler: store m_scenePressPos separatelyShawn Rutledge2017-04-272-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The scene-relative position at which an EventPoint was pressed does not change during a drag. The target item is moving, so we cannot convert a point relative to the target item back to a scene position and expect it to stay constant. Change-Id: I07389993c6b15316b686824c37dbad83b4b10861 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | | QQMultiPointerHandler: don't steal grab if keepMouseGrab/keepTouchGrabShawn Rutledge2017-04-273-6/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | An Item (such as MPTA with onGestureStarted: gesture.grab()) may set these flags, traditionally to prevent Flickable from stealing the grab. QQuickMultiPointerHandler (and thus PinchHandler) now respects these flags too. Change-Id: Iac3ab796c5aa410be45639d679ecf82b7c44a442 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | | QQuickMultiPointerHandler::wantsPointerEvent ignores grabs on pressShawn Rutledge2017-04-271-6/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A PinchHandler for example has strict requirements, so when they are finally met, it needs to be willing to take over the grab from something else. This occurs when a point is pressed or released (in which case a grabbing PointerHandler might probably give up its grab anyway, if its requirements are not met anymore). MPTA can typically handle a variable number of points though, so it will not give up its grabs, and PinchHandler must be able to steal from it. The first step in stealing is for the handler to say that it wants the points despite any existing grabs. Change-Id: Ic3a2586d43e4cfe1877f90ce2e2862a9abc4b81b Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | | PointerHandler: add wants/declines logging to qt.quick.handler.dispatchShawn Rutledge2017-04-272-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | and remove the similar "delivering to" log from QQuickItem. It's more useful to know whether delivery will continue rather than simply that we made an attempt. Change-Id: I58c37fb50d4d0c99ef6aa68662ab304194b6d128 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| * | | | | Remove redundant entriesJan Arve Saether2017-04-251-8/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sort the entries to ease lookup Change-Id: I306ca508e8b382b9a60fe737f28f5fa2c9471dc1 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | | | | QQuickPointerDeviceHandler: add acceptedModifiersShawn Rutledge2017-04-252-1/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sometimes you want to require holding down a key in order to enable some interaction. As with the other "accepted" flags, it's better to do this with a property than with Javascript. Change-Id: Ie29880f5f9f496ddca1bee462e2c0e6dd30fa9f5 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>