accelbubble: avoid updating position if NaN.
[qt:qtsensors.git] / examples / sensors / accelbubble / accelbubble.qml
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtSensors module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:BSD$
9 ** You may use this file under the terms of the BSD license as follows:
10 **
11 ** "Redistribution and use in source and binary forms, with or without
12 ** modification, are permitted provided that the following conditions are
13 ** met:
14 **   * Redistributions of source code must retain the above copyright
15 **     notice, this list of conditions and the following disclaimer.
16 **   * Redistributions in binary form must reproduce the above copyright
17 **     notice, this list of conditions and the following disclaimer in
18 **     the documentation and/or other materials provided with the
19 **     distribution.
20 **   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
21 **     of its contributors may be used to endorse or promote products derived
22 **     from this software without specific prior written permission.
23 **
24 **
25 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
36 **
37 ** $QT_END_LICENSE$
38 **
39 ****************************************************************************/
40
41
42 import QtQuick 2.1
43 import QtQuick.Controls 1.0
44
45 //! [0]
46 import QtSensors 5.0
47 //! [0]
48
49
50 ApplicationWindow {
51     title: "Accelerate Bubble"
52     id: mainWindow
53     width: 320
54     height: 480
55     visible: true
56
57
58 //! [1]
59     Accelerometer {
60         id: accel
61         dataRate: 100
62 //! [1]
63 //! [2]
64         active:true
65 //! [2]
66
67 //! [3]
68         onReadingChanged: {
69             var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * .1)
70             var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * .1)
71
72             if (isNaN(newX) || isNaN(newY))
73                 return;
74
75             if (newX < 0)
76                 newX = 0
77
78             if (newX > mainWindow.width - bubble.width)
79                 newX = mainWindow.width - bubble.width
80
81             if (newY < 18)
82                 newY = 18
83
84             if (newY > mainWindow.height - bubble.height)
85                 newY = mainWindow.height - bubble.height
86
87                 bubble.x = newX
88                 bubble.y = newY
89         }
90 //! [3]
91     }
92
93     function calcPitch(x,y,z) {
94         return -(Math.atan(y / Math.sqrt(x * x + z * z)) * 57.2957795);
95     }
96     function calcRoll(x,y,z) {
97          return -(Math.atan(x / Math.sqrt(y * y + z * z)) * 57.2957795);
98     }
99
100     Image {
101         id: bubble
102         source: "content/Bluebubble.svg"
103         smooth: true
104         property real centerX: mainWindow.width / 2
105         property real centerY: mainWindow.height / 2
106         property real bubbleCenter: bubble.width / 2
107         x: centerX - bubbleCenter
108         y: centerY - bubbleCenter
109
110         Behavior on y {
111             SmoothedAnimation {
112                 easing.type: Easing.Linear
113                 duration: 100
114             }
115         }
116         Behavior on x {
117             SmoothedAnimation {
118                 easing.type: Easing.Linear
119                 duration: 100
120             }
121         }
122     }
123 }