7 changed files with 257 additions and 2 deletions
@ -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 @@ |
|||||||
|
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 @@ |
|||||||
|
module Custom.Camera |
||||||
|
|
||||||
|
ZoomControl 1.0 ZoomControl.qml |
Loading…
Reference in new issue