diff --git a/qgcresources.qrc b/qgcresources.qrc
index b27361e..ed60dee 100644
--- a/qgcresources.qrc
+++ b/qgcresources.qrc
@@ -107,6 +107,7 @@
src/FlightMap/Images/compassInstrumentDial.svg
src/FlightMap/Images/crossHair.svg
src/FlightMap/Images/PiP.svg
+ src/FlightMap/Images/pipResize.svg
src/FlightMap/Images/rollDialWhite.svg
src/FlightMap/Images/rollPointerWhite.svg
src/FlightMap/Images/scale.png
diff --git a/src/FlightDisplay/FlightDisplayView.qml b/src/FlightDisplay/FlightDisplayView.qml
index 2f7e48e..3122a22 100644
--- a/src/FlightDisplay/FlightDisplayView.qml
+++ b/src/FlightDisplay/FlightDisplayView.qml
@@ -311,23 +311,8 @@ QGCView {
onHideIt: {
setPipVisibility(!state)
}
- onGrow: {
- if (_pipSize >= 825) {
- return
- }
-
- _pipSize += 50
- _flightVideoPipControl.width = _pipSize
- _flightVideoPipControl.height= _pipSize * (9/16)
- }
- onShrink: {
- if (_pipSize <= 225) {
- return
- }
-
- _pipSize -= 50
- _flightVideoPipControl.width = _pipSize
- _flightVideoPipControl.height= _pipSize * (9/16)
+ onNewWidth: {
+ _pipSize = newWidth
}
}
diff --git a/src/FlightMap/Images/pipResize.svg b/src/FlightMap/Images/pipResize.svg
new file mode 100644
index 0000000..94b3284
--- /dev/null
+++ b/src/FlightMap/Images/pipResize.svg
@@ -0,0 +1,373 @@
+
+
diff --git a/src/QmlControls/QGCPipable.qml b/src/QmlControls/QGCPipable.qml
index 9c1169c..6efbddb 100644
--- a/src/QmlControls/QGCPipable.qml
+++ b/src/QmlControls/QGCPipable.qml
@@ -22,43 +22,98 @@ Item {
property bool isHidden: false
property bool isDark: false
+ // As a percentage of the window width
+ property real maxSize: 0.75
+ property real minSize: 0.10
+
signal activated()
signal hideIt(bool state)
- signal grow()
- signal shrink()
+ signal newWidth(real newWidth)
MouseArea {
+ id: pipMouseArea
anchors.fill: parent
enabled: !isHidden
+ hoverEnabled: true
onClicked: {
pip.activated()
}
}
- QGCButton {
- id: growButton
- visible: !isHidden && !ScreenTools.isShortScreen && !ScreenTools.isTinyScreen
- anchors.left: parent.left
- anchors.bottom: shrinkButton.top
- height: 20
+ // MouseArea to drag in order to resize the PiP area
+ MouseArea {
+ id: pipResize
+ anchors.top: parent.top
+ anchors.right: parent.right
+ height: ScreenTools.minTouchPixels
width: height
- anchors.margins: 5
- text: "+"
- opacity: 0.5
- onClicked: pip.grow()
+ property var initialX: 0
+ property var initialWidth: 0
+
+ onClicked: {
+ // TODO propagate
+ }
+
+ // When we push the mouse button down, we un-anchor the mouse area to prevent a resizing loop
+ onPressed: {
+ pipResize.anchors.top = undefined // Top doesn't seem to 'detach'
+ pipResize.anchors.right = undefined // This one works right, which is what we really need
+ pipResize.initialX = mouse.x
+ pipResize.initialWidth = pip.width
+ }
+
+ // When we let go of the mouse button, we re-anchor the mouse area in the correct position
+ onReleased: {
+ pipResize.anchors.top = pip.top
+ pipResize.anchors.right = pip.right
+ }
+
+ // Drag
+ onPositionChanged: {
+ if (pipResize.pressed) {
+ var parentW = pip.parent.width // flightView
+ var newW = pipResize.initialWidth + mouse.x - pipResize.initialX
+ if (newW < parentW * maxSize && newW > parentW * minSize) {
+ newWidth(newW)
+ }
+ }
+ }
}
- QGCButton {
- id: shrinkButton
- visible: !isHidden && !ScreenTools.isShortScreen && !ScreenTools.isTinyScreen
- anchors.left: parent.left
- anchors.bottom: closePIP.top
- height: 20
- width: height
- anchors.margins: 5
- text: "-"
- opacity: 0.5
- onClicked: pip.shrink()
+ // Resize icon
+ Image {
+ source: "/qmlimages/pipResize.svg"
+ fillMode: Image.PreserveAspectFit
+ mipmap: true
+ anchors.right: parent.right
+ anchors.top: parent.top
+ visible: !isHidden && pipMouseArea.containsMouse
+ height: ScreenTools.defaultFontPixelHeight * 2.5
+ width: ScreenTools.defaultFontPixelHeight * 2.5
+ sourceSize.height: height
+ }
+
+ // Resize pip window if necessary when main window is resized
+ property var pipLock: 2
+
+ Connections {
+ target: pip.parent
+ onWidthChanged: {
+ // hackity hack...
+ // don't fire this while app is loading/initializing (it happens twice)
+ if (pipLock) {
+ pipLock--
+ return
+ }
+
+ var parentW = pip.parent.width
+
+ if (pip.width > parentW * maxSize) {
+ newWidth(parentW * maxSize)
+ } else if (pip.width < parentW * minSize) {
+ newWidth(parentW * minSize)
+ }
+ }
}
//-- PIP Corner Indicator