1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
/*
* Copyright (c) 2017 TOYOTA MOTOR CORPORATION
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import QtQuick 2.6
import QtWebSockets 1.0
Item {
property real imgwidth: 600
property real imgheight: 600
property real tacho: enginespeed === undefined ? 0 : (enginespeed > 9000 ? 9 : enginespeed*9/9000)
Image {
width: imgwidth
height: imgheight
fillMode: Image.PreserveAspectFit
smooth: true
asynchronous: true
source: "images/meters/tacho_center.svg"
}
Image {
width: imgwidth
height: imgheight
fillMode: Image.PreserveAspectFit
smooth: true
asynchronous: true
source: "images/meters/tacho_frame.svg"
}
Image {
width: imgwidth
height: imgheight
fillMode: Image.PreserveAspectFit
smooth: true
asynchronous: true
source: "images/meters/tacho_scale.svg"
}
Shift {
percent: imgwidth/480
anchors.right: parent.right
anchors.rightMargin: wshift > 0 ? (imgwidth-width)/2+25 : (imgwidth-width)/2-5
anchors.bottom: parent.bottom
anchors.bottomMargin: 100
spacing: -10
}
Canvas {
id: canvas
property real engleoffset: Math.PI*3/2.04
property int linewidth: 90
anchors.centerIn: parent
width: 420
height: 420
visible: tacho >= 0.05
rotation: 135
opacity: 0.5
onPaint: {
var ctx = getContext("2d")
var gradient = ctx.createLinearGradient(0, 0, canvas.width, canvas.height)
gradient.addColorStop(0.0, Qt.rgba(1.0, 1.0, 1.0, 1.0))
gradient.addColorStop(1.0, Qt.rgba(1.0, 1.0, 1.0, 0.0))
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
ctx.lineWidth = linewidth;
ctx.strokeStyle = gradient
ctx.arc(canvas.width/2,
canvas.height/2,
(canvas.width-ctx.lineWidth)/2,
0.1,
engleoffset*(tacho/9) + (tacho < 3 ? 0.1 : (tacho < 7 ? 0.05 : 0.0)),
false)
ctx.stroke()
ctx.closePath()
}
}
Image {
width: imgwidth
height: imgheight
fillMode: Image.PreserveAspectFit
smooth: true
asynchronous: true
rotation: 28.8*tacho
source: "images/meters/tacho_hand.svg"
}
onTachoChanged: {
canvas.requestPaint()
}
}
|