7 changed files with 257 additions and 2 deletions
@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
|
||||
#!/bin/sh |
||||
HERE="$(dirname "$(readlink -f "${0}")")" |
||||
export LD_LIBRARY_PATH="${HERE}/usr/lib/x86_64-linux-gnu":"${HERE}/Qt/libs":$LD_LIBRARY_PATH |
||||
export QML2_IMPORT_PATH="${HERE}/Qt/qml" |
||||
export QT_PLUGIN_PATH="${HERE}/Qt/plugins" |
||||
|
||||
# hack until icon issue with AppImage is resolved |
||||
mkdir -p ~/.icons && \cp -f ${HERE}/qgroundcontrol.png ~/.icons |
||||
|
||||
"${HERE}/CustomQGC" "$@" |
@ -0,0 +1,213 @@
@@ -0,0 +1,213 @@
|
||||
import QtQuick 2.0 |
||||
import QtQuick.Controls 2.4 |
||||
import QtGraphicalEffects 1.0 |
||||
|
||||
|
||||
Item { |
||||
id: _root |
||||
|
||||
property color mainColor: "#000000" |
||||
property color contentColor: "#FFFFFF" |
||||
property alias fontPointSize: zoomStatusTextItem.font.pointSize |
||||
property real zoomLevel: NaN |
||||
property alias zoomLevelVisible: zoomStatusItem.visible |
||||
property bool showZoomPrecision: true |
||||
|
||||
signal zoomIn() |
||||
signal zoomOut() |
||||
signal continuousZoomStart(var zoomIn) |
||||
signal continuousZoomStop() |
||||
|
||||
height: zoomStatusTextItem.height * 2 |
||||
width: (zoomLevelVisible ? (zoomStatusItem.width - zoomInButton.width/2) : 0) + zoomInButton.width + zoomOutButton.width |
||||
|
||||
Rectangle { |
||||
id: zoomStatusItem |
||||
|
||||
color: mainColor |
||||
opacity: 0.5 |
||||
radius: height/2 |
||||
|
||||
anchors.left: _root.left |
||||
anchors.verticalCenter: _root.verticalCenter |
||||
|
||||
width: height * 2 |
||||
height: _root.height * 0.8 |
||||
} |
||||
|
||||
Item { |
||||
visible: zoomStatusItem.visible |
||||
|
||||
anchors.left: zoomStatusItem.left |
||||
anchors.top: zoomStatusItem.top |
||||
anchors.right: zoomStatusItem.horizontalCenter |
||||
anchors.bottom: zoomStatusItem.bottom |
||||
|
||||
z: zoomStatusItem.z + 1 |
||||
|
||||
Text { |
||||
id: zoomStatusTextItem |
||||
|
||||
anchors.centerIn: parent |
||||
opacity: 2 |
||||
|
||||
color: _root.contentColor |
||||
|
||||
text: isNaN(zoomLevel) ? "-" : "x" + _root.zoomLevel.toFixed(_root.showZoomPrecision ? 1 : 0) |
||||
} |
||||
} |
||||
|
||||
Button { |
||||
id: zoomInButton |
||||
flat: true |
||||
|
||||
anchors.left: zoomLevelVisible ? zoomStatusItem.horizontalCenter : _root.left |
||||
anchors.top: _root.top |
||||
width: height |
||||
height: _root.height |
||||
|
||||
property bool holding: false |
||||
|
||||
onPressed: { |
||||
_root.zoomIn() |
||||
} |
||||
|
||||
onPressAndHold: { |
||||
holding = true |
||||
} |
||||
|
||||
onReleased: { |
||||
holding = false |
||||
} |
||||
|
||||
background: Rectangle { |
||||
anchors.fill: zoomInButton |
||||
radius: zoomInButton.width/2 |
||||
|
||||
color: _root.mainColor |
||||
} |
||||
|
||||
contentItem: Item { |
||||
anchors.fill: zoomInButton |
||||
Rectangle { |
||||
id: zoomInMinusRectangle |
||||
anchors.centerIn: parent |
||||
|
||||
width: zoomInButton.width * 0.4 |
||||
height: zoomInButton.height * 0.05 |
||||
|
||||
color: _root.contentColor |
||||
} |
||||
Rectangle { |
||||
anchors.centerIn: parent |
||||
|
||||
width: zoomInMinusRectangle.height |
||||
height: zoomInMinusRectangle.width |
||||
|
||||
color: _root.contentColor |
||||
} |
||||
} |
||||
} |
||||
|
||||
Item { |
||||
id: buttonSeparator |
||||
|
||||
anchors.left: zoomInButton.right |
||||
anchors.verticalCenter: zoomInButton.verticalCenter |
||||
width: zoomInButton.width * 0.05 |
||||
height: zoomInButton.height * 0.8 |
||||
|
||||
Rectangle { |
||||
radius: width * 0.2 |
||||
anchors.centerIn: parent |
||||
|
||||
width: zoomInButton.width * 0.01 |
||||
height: parent.height * 0.8 |
||||
|
||||
color: _root.contentColor |
||||
} |
||||
} |
||||
|
||||
Button { |
||||
id: zoomOutButton |
||||
flat: true |
||||
|
||||
anchors.left: buttonSeparator.right |
||||
anchors.top: zoomInButton.top |
||||
width: height |
||||
height: zoomInButton.height |
||||
|
||||
property bool holding: false |
||||
|
||||
onPressed: { |
||||
_root.zoomOut() |
||||
} |
||||
|
||||
onPressAndHold: { |
||||
holding = true |
||||
} |
||||
|
||||
onReleased: { |
||||
holding = false |
||||
} |
||||
|
||||
background: Rectangle { |
||||
anchors.fill: zoomOutButton |
||||
radius: zoomOutButton.width/2 |
||||
|
||||
color: _root.mainColor |
||||
} |
||||
|
||||
contentItem: Item { |
||||
anchors.fill: zoomOutButton |
||||
Rectangle { |
||||
id: zoomOutMinusRectangle |
||||
anchors.centerIn: parent |
||||
|
||||
width: zoomInMinusRectangle.width |
||||
height: zoomInMinusRectangle.height |
||||
|
||||
color: _root.contentColor |
||||
} |
||||
} |
||||
} |
||||
|
||||
// Zoom buttons background |
||||
Rectangle { |
||||
color: _root.mainColor |
||||
z: -1 |
||||
|
||||
anchors.left: zoomInButton.horizontalCenter |
||||
anchors.right: zoomOutButton.horizontalCenter |
||||
anchors.top: zoomInButton.top |
||||
anchors.bottom: zoomOutButton.bottom |
||||
} |
||||
|
||||
onStateChanged: { |
||||
if(state == "ZoomingIn") { |
||||
_root.continuousZoomStart(true) |
||||
} |
||||
else if(state == "ZoomingOut") { |
||||
_root.continuousZoomStart(false) |
||||
} |
||||
else { |
||||
_root.continuousZoomStop() |
||||
} |
||||
} |
||||
|
||||
state: "None" |
||||
states: [ |
||||
State { |
||||
name: "None" |
||||
when: zoomInButton.holding === false && zoomOutButton.holding === false |
||||
}, |
||||
State { |
||||
name: "ZoomingIn" |
||||
when: zoomInButton.holding === true |
||||
}, |
||||
State { |
||||
name: "ZoomingOut" |
||||
when: zoomOutButton.holding === true |
||||
} |
||||
] |
||||
} |
@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
|
||||
module Custom.Camera |
||||
|
||||
ZoomControl 1.0 ZoomControl.qml |
Loading…
Reference in new issue