-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCanvasVersion.qml
133 lines (104 loc) · 3.11 KB
/
CanvasVersion.qml
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import QtQuick 2.15
import QtQuick.Controls
import QtQuick.Layouts
Item {
// properties
property double outerRadius: 400
property double innerRadius: 300
property ListModel listModel: ListModel{}
anchors.fill: parent
Canvas {
id: cMenuCanvas
width: outerRadius * 2
height: outerRadius * 2
anchors.centerIn: parent
onPaint: {
var ctx = getContext("2d");
ctx.reset();
var centreX = width / 2;
var centreY = height / 2;
var startCycle = Math.PI;
var curveLen = Math.PI * 0.4;
var curvesGap = 0.05;
for (var i = 0; i < listModel.count; i++) {
var startAngle = startCycle + curveLen * i;
var endAngle = startAngle + curveLen - curvesGap;
// outer circle
ctx.beginPath();
ctx.fillStyle = "gold";
ctx.moveTo(centreX, centreY);
ctx.arc(centreX, centreY, outerRadius, startAngle, endAngle, false);
ctx.lineTo(centreX, centreY);
ctx.fill();
// inner circle
ctx.beginPath();
ctx.fillStyle = "white";
ctx.moveTo(centreX, centreY);
ctx.arc(centreX, centreY, innerRadius, startAngle, endAngle, false);
ctx.lineTo(centreX, centreY);
ctx.fill();
}
}
}
RowLayout {
id: textFieldsRow
height: 50
anchors.bottom: buttonsRow.top
anchors.left: parent.left
anchors.right: parent.right
TextField {
id: nameField
text: 'add item'
Layout.fillWidth: true
Layout.fillHeight: true
}
}
RowLayout {
id: buttonsRow
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
height: 50
Button {
id: addButton
text: 'add item'
Layout.fillWidth: true
Layout.fillHeight: true
onClicked: {
listModel.append({name: nameField.text, iconSource: 'hand.png'})
cMenuCanvas.requestPaint()
}
}
Button {
id: remove
text: 'remove item'
Layout.fillWidth: true
Layout.fillHeight: true
onClicked: {
console.log(listModel.count)
if (listModel.count > 0)
listModel.remove(0)
cMenuCanvas.requestPaint()
}
}
}
Rectangle {
id: fakeOuterCircle
visible: false
width: outerRadius * 2
height: outerRadius * 2
radius: outerRadius
opacity: 0.5
color: 'pink'
anchors.centerIn: parent
Rectangle {
id: fakeInnerCircle
width: innerRadius * 2
height: innerRadius * 2
radius: innerRadius
opacity: 0.5
color: 'gold'
anchors.centerIn: parent
}
}
}