QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
OnScreenGimbalController.qml
Go to the documentation of this file.
1import QtQuick
2
3import QGroundControl
4import QGroundControl.Controls
5
6Item {
7 id: rootItem
8 anchors.fill: parent
9
10 required property bool cameraTrackingEnabled
11
12 property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
13 property var _gimbalController: _activeVehicle ? _activeVehicle.gimbalController : undefined
14 property var _activeGimbal: _gimbalController ? _gimbalController.activeGimbal : undefined
15 property bool _gimbalAvailable: _activeGimbal != undefined
16 property var _gimbalControllerSettings: QGroundControl.settingsManager.gimbalControllerSettings
17 property bool _shouldProcessClicks: _gimbalControllerSettings.enableOnScreenControl.value && _activeGimbal && !cameraTrackingEnabled ? true : false
18
19 property real _mouseX: 0
20 property real _mouseY: 0
21 property real _dragStartNormX: 0
22 property real _dragStartNormY: 0
23
24 function _toNormX(mouseX) { return ((mouseX / width) * 2) - 1 }
25 function _toNormY(mouseY) { return -((mouseY / height) * 2) + 1 }
26
27 function mouseClicked(mouseX, mouseY) {
28 if (!_shouldProcessClicks) {
29 return
30 }
31 if (_gimbalControllerSettings.clickAndDrag.rawValue) {
32 return
33 }
34 if (rootItem._gimbalAvailable) {
35 _gimbalController.gimbalOnScreenControl(_toNormX(mouseX), _toNormY(mouseY), true, false, false)
36 }
37 }
38
39 function mouseDragStart(mouseX, mouseY) {
40 if (!_shouldProcessClicks) {
41 return
42 }
43 if (!_gimbalControllerSettings.clickAndDrag.rawValue) {
44 return
45 }
46 _mouseX = mouseX
47 _mouseY = mouseY
48 _dragStartNormX = _toNormX(mouseX)
49 _dragStartNormY = _toNormY(mouseY)
50 sendRateTimer.start()
51 }
52
53 function mouseDragPositionChanged(mouseX, mouseY) {
54 _mouseX = mouseX
55 _mouseY = mouseY
56 }
57
58 function mouseDragEnd() {
59 sendRateTimer.stop()
60 }
61
62 Timer {
63 id: sendRateTimer
64 interval: 100
65 repeat: true
66 onTriggered: {
67 if (rootItem._gimbalAvailable) {
68 var dx = rootItem._toNormX(rootItem._mouseX) - rootItem._dragStartNormX
69 var dy = rootItem._toNormY(rootItem._mouseY) - rootItem._dragStartNormY
70 _gimbalController.gimbalOnScreenControl(dx, dy, false, true, true)
71 }
72 }
73 }
74}