2 * Copyright (C) 2015 Canonical Ltd.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18import Lomiri.Components 1.3
21 An edge barrier for the mouse pointer
23 The further you push against it, the stronger the visual hint. Until it's
24 overcome, when passed() is emitted.
29 // Supported values are: Qt.LeftEdge, Qt.RightEdge
30 property int edge: Qt.LeftEdge
32 readonly property alias progress: controller.progress
33 readonly property alias containsMouse: controller.containsMouse
35 property Item target: parent
36 function push(amount) { controller.push(amount); }
39 anchors.top: (edge == Qt.LeftEdge || edge == Qt.RightEdge) ? target.top : undefined
40 anchors.bottom: (edge == Qt.LeftEdge || edge == Qt.RightEdge) ? target.bottom : undefined
41 anchors.left: edge == Qt.LeftEdge ? target.left : undefined
42 anchors.right: edge == Qt.RightEdge ? target.right : undefined
46 property Component material
51 sourceComponent: root.material
53 anchors.top: parent.top
54 anchors.bottom: parent.bottom
55 anchors.left: root.edge == Qt.LeftEdge ? root.left : undefined
56 anchors.right: root.edge == Qt.RightEdge ? root.right : undefined
58 anchors.leftMargin: root.edge == Qt.LeftEdge ? -width * (1 - positionProgress) : 0
59 anchors.rightMargin: root.edge == Qt.RightEdge ? -width * (1 - positionProgress) : 0
61 property real positionProgress
63 visible: positionProgress > 0
68 EdgeBarrierController {
70 objectName: "edgeBarrierController"
72 onPassed: root.passed();
76 if (controller.progress === 0.0) {
78 } else if (controller.progress < 1.0) {
80 } else { // controller.progress == 1.0
87 PropertyChanges { target: materialContainer; opacity: 0.0 }
88 PropertyChanges { target: materialContainer; positionProgress: 0.0 }
92 PropertyChanges { target: materialContainer; opacity: controller.progress }
93 PropertyChanges { target: materialContainer; positionProgress: controller.progress }
97 PropertyChanges { target: materialContainer; opacity: 0.0 }
98 PropertyChanges { target: materialContainer; positionProgress: 1.0 }
103 from: "passed"; to: ""
106 from: "resisting"; to: ""
107 LomiriNumberAnimation { target: materialContainer; properties: "opacity,positionProgress" }
110 from: "resisting"; to: "passed"
111 LomiriNumberAnimation { duration: LomiriAnimation.BriskDuration; target: materialContainer; property: "opacity" }