地面站终端 App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.9 KiB

import QtQuick 2.5
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import QGroundControl.ScreenTools 1.0
import QGroundControl.Palette 1.0
Canvas {
id: root
width: _width + (_singleChar ? 0 : _label.width)
height: specifiesCoordinate ? (_width * 1.5) : _width
signal clicked
property alias label: _label.text
property bool checked: false
property bool small: false
property var color: checked ? "green" : qgcPal.mapButtonHighlight
property real anchorPointX: _width / 2
property real anchorPointY: _width * 1.5
property bool specifiesCoordinate: true
property real _width: small ? ScreenTools.defaultFontPixelHeight * ScreenTools.smallFontPointRatio * 1.25 : ScreenTools.defaultFontPixelHeight * 1.25
property bool _singleChar: _label.text.length <= 1
onColorChanged: requestPaint()
QGCPalette { id: qgcPal }
function paintSingleCoordinate(context) {
context.arc(_width / 2, _width / 2, _width / 2, (Math.PI / 8) * 7, Math.PI / 8);
context.lineTo(_width / 2, _width * 1.5)
}
function paintSingleNoCoordinate(context) {
context.arc(_width / 2, _width / 2, _width / 2, Math.PI * 2, 0);
}
function paintMultipleCoordinate(context) {
context.arc(_width / 2, _width / 2, _width / 2, (Math.PI / 8) * 7, (Math.PI / 2) * 3);
context.lineTo(_label.width, 0)
context.arc(_label.width, _width / 2, _width / 2, (Math.PI / 2) * 3, Math.PI / 2);
context.lineTo((_width / 4) * 3, _width)
context.lineTo(_width / 2, _width * 1.5)
}
onPaint: {
var context = getContext("2d")
context.reset()
context.beginPath()
if (_singleChar) {
if (specifiesCoordinate) {
paintSingleCoordinate(context)
} else {
paintSingleNoCoordinate(context)
}
} else {
paintMultipleCoordinate(context)
}
context.closePath()
context.fillStyle = color
context.fill()
}
QGCLabel {
id: _label
x: Math.round((_width / 2) - (_singleChar ? (width / 2) : (ScreenTools.defaultFontPixelWidth / 2)))
y: Math.round((_width / 2) - (height / 2))
color: "white"
font.pointSize: small ? ScreenTools.smallFontPointSize : ScreenTools.defaultFontPointSize
onWidthChanged: requestPaint()
}
MouseArea {
anchors.leftMargin: -_expandMargin
anchors.rightMargin: _expandMargin
anchors.topMargin: -_expandMargin
anchors.bottomMargin: _expandMargin
anchors.fill: parent
onClicked: parent.clicked()
property real _expandMargin: ScreenTools.isMobile ? ScreenTools.defaultFontPixelWidth : 0
}
}