File: FloatingFlickable.qml

package info (click to toggle)
lomiri 0.5.0-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 24,088 kB
  • sloc: cpp: 39,498; python: 2,559; javascript: 1,426; ansic: 1,012; sh: 289; xml: 252; makefile: 69
file content (64 lines) | stat: -rw-r--r-- 2,289 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
 * Copyright (C) 2015-2016 Canonical Ltd.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 3.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

import QtQuick 2.15
import Lomiri.Components 1.3
import Lomiri.Gestures 0.1
import "."

/*
    A Flickable that can be put in front of the item to be flicked and
    still have the item-to-be-flicked receive input events that are not flicks.

    Ie, it's a Flickable that, input-wise, is transparent to non-flick gestures.

    With a regular Flickable you would have to make the item-to-be-flicked a child
    of Flicakble to achieve the same result. FloatingFlickable has no such requirement
    or limitation.
 */
Item {
    property alias contentWidth: flickable.contentWidth
    property alias contentHeight: flickable.contentHeight
    property alias contentX: flickable.contentX
    property alias contentY: flickable.contentY
    property alias direction: swipeArea.direction
    property alias leftMargin: flickable.leftMargin
    property alias rightMargin: flickable.rightMargin
    property alias dragging: flickable.dragging

    MouseEventGenerator {
        id: mouseEventGenerator
        targetItem: flickable
    }

    Flickable {
        id: flickable
        enabled: false
        anchors.fill: parent
        flickableDirection: Direction.isHorizontal(swipeArea.direction) ? Flickable.HorizontalFlick : Flickable.VerticalFlick
    }

    SwipeArea {
        id: swipeArea
        anchors.fill: parent
        direction: Direction.Horizontal
        immediateRecognition: flickable.moving

        onTouchPositionChanged: mouseEventGenerator.move(touchPosition);
        onDraggingChanged: dragging ? mouseEventGenerator.press(touchPosition)
                                    : mouseEventGenerator.release(touchPosition)
    }
}