Browse Source

Use new QGCMouseArea and minTouchPixels

QGC4.4
DonLakeFlyer 8 years ago
parent
commit
1d0f517f39
  1. 38
      src/FlightMap/MapItems/MissionItemIndicatorDrag.qml
  2. 20
      src/MissionEditor/MissionItemEditor.qml
  3. 8
      src/QmlControls/ToolStrip.qml

38
src/FlightMap/MapItems/MissionItemIndicatorDrag.qml

@ -17,30 +17,31 @@ import QGroundControl.Controls 1.0 @@ -17,30 +17,31 @@ import QGroundControl.Controls 1.0
/// Use the drag a MissionItemIndicator
Rectangle {
id: itemDragger
x: itemIndicator.x - _expandMargin
y: itemIndicator.y - _expandMargin
width: itemIndicator.width + (_expandMargin * 2)
height: itemIndicator.height + (_expandMargin * 2)
x: itemIndicator.x - _touchMarginHorizontal
y: itemIndicator.y - _touchMarginVertical
width: itemIndicator.width + (_touchMarginHorizontal * 2)
height: itemIndicator.height + (_touchMarginVertical * 2)
color: "transparent"
z: QGroundControl.zOrderMapItems + 1 // Above item icons
// These are handy for debugging so left in for now
//border.width: 1
//border.color: "white"
// Properties which must be specific by consumer
property var itemIndicator ///< The mission item indicator to drag around
property var itemCoordinate ///< Coordinate we are updating during drag
property bool _preventCoordinateBindingLoop: false
property real _expandMargin: ScreenTools.isMobile ? ScreenTools.defaultFontPixelWidth : 0
property bool _mobile: true//ScreenTools.isMobile
property real _touchWidth: Math.max(itemIndicator.width, ScreenTools.minTouchPixels)
property real _touchHeight: Math.max(itemIndicator.height, ScreenTools.minTouchPixels)
property real _touchMarginHorizontal: _mobile ? (_touchWidth - itemIndicator.width) / 2 : 0
property real _touchMarginVertical: _mobile ? (_touchHeight - itemIndicator.height) / 2 : 0
onXChanged: liveDrag()
onYChanged: liveDrag()
function liveDrag() {
if (!itemDragger._preventCoordinateBindingLoop && Drag.active) {
var point = Qt.point(itemDragger.x + _expandMargin + itemIndicator.anchorPoint.x, itemDragger.y + _expandMargin + itemIndicator.anchorPoint.y)
var point = Qt.point(itemDragger.x + _touchMarginHorizontal + itemIndicator.anchorPoint.x, itemDragger.y + _touchMarginVertical + itemIndicator.anchorPoint.y)
var coordinate = map.toCoordinate(point)
itemDragger._preventCoordinateBindingLoop = true
coordinate.altitude = itemCoordinate.altitude
@ -51,13 +52,14 @@ Rectangle { @@ -51,13 +52,14 @@ Rectangle {
Drag.active: itemDrag.drag.active
MouseArea {
id: itemDrag
anchors.fill: parent
drag.target: parent
drag.minimumX: 0
drag.minimumY: 0
drag.maximumX: itemDragger.parent.width - parent.width
drag.maximumY: itemDragger.parent.height - parent.height
QGCMouseArea {
id: itemDrag
anchors.fill: parent
drag.target: parent
drag.minimumX: 0
drag.minimumY: 0
drag.maximumX: itemDragger.parent.width - parent.width
drag.maximumY: itemDragger.parent.height - parent.height
preventStealing: true
}
}

20
src/MissionEditor/MissionItemEditor.qml

@ -68,15 +68,21 @@ Rectangle { @@ -68,15 +68,21 @@ Rectangle {
}
MouseArea {
QGCMouseArea {
// The MouseArea for the hamburger is larger than the hamburger image itself in order to provide a larger
// touch area on mobile
anchors.top: parent.top
anchors.bottom: editorLoader.top
anchors.leftMargin: -hamburger.anchors.rightMargin
anchors.left: hamburger.left
anchors.right: parent.right
onClicked: hamburgerMenu.popup()
anchors.leftMargin: -_touchMarginHorizontal
anchors.rightMargin: -_touchMarginHorizontal
anchors.topMargin: -_touchMarginVertical
anchors.bottomMargin: -_touchMarginVertical
anchors.fill: hamburger
visible: hamburger.visible
onClicked: hamburgerMenu.popup()
property real _touchWidth: Math.max(hamburger.width, ScreenTools.minTouchPixels)
property real _touchHeight: Math.max(hamburger.height, ScreenTools.minTouchPixels)
property real _touchMarginHorizontal: ScreenTools.isMobile ? (_touchWidth - hamburger.width) / 2 : 0
property real _touchMarginVertical: ScreenTools.isMobile ? (_touchHeight - hamburger.height) / 2 : 0
Menu {
id: hamburgerMenu

8
src/QmlControls/ToolStrip.qml

@ -16,7 +16,7 @@ import QGroundControl.Palette 1.0 @@ -16,7 +16,7 @@ import QGroundControl.Palette 1.0
Rectangle {
id: _root
color: qgcPal.window
width: ScreenTools.defaultFontPixelWidth * 6
width: ScreenTools.isMobile ? ScreenTools.minTouchPixels : ScreenTools.defaultFontPixelWidth * 6
height: buttonStripColumn.height + (buttonStripColumn.anchors.margins * 2)
radius: _radius
@ -172,10 +172,10 @@ Rectangle { @@ -172,10 +172,10 @@ Rectangle {
}
MouseArea {
QGCMouseArea {
// Size of mouse area is expanded to make touch easier
anchors.leftMargin: buttonStripColumn.margins
anchors.rightMargin: buttonStripColumn.margins
anchors.leftMargin: -buttonStripColumn.anchors.margins
anchors.rightMargin: -buttonStripColumn.anchors.margins
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top

Loading…
Cancel
Save