vislite 0.6.0-alpha.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +26 -0
- package/CHANGELOG +3 -1
- package/README.md +11 -3
- package/lib/Buffer/index.umd.js +2 -2
- package/lib/Buffer/index.umd.min.js +2 -2
- package/lib/Canvas/index.umd.js +13 -8
- package/lib/Canvas/index.umd.min.js +3 -3
- package/lib/Cardinal/index.umd.js +2 -2
- package/lib/Cardinal/index.umd.min.js +2 -2
- package/lib/Eoap/index.umd.js +2 -2
- package/lib/Eoap/index.umd.min.js +2 -2
- package/lib/Geometry/index.umd.js +7 -4
- package/lib/Geometry/index.umd.min.js +2 -2
- package/lib/Hermite/index.umd.js +2 -2
- package/lib/Hermite/index.umd.min.js +2 -2
- package/lib/Matrix4/index.umd.js +2 -2
- package/lib/Matrix4/index.umd.min.js +2 -2
- package/lib/Mercator/index.umd.js +2 -2
- package/lib/Mercator/index.umd.min.js +2 -2
- package/lib/OralCanvas/index.es.js +8 -6
- package/lib/OralCanvas/index.es.min.js +3 -3
- package/lib/OralWebGL/index.es.js +7 -5
- package/lib/OralWebGL/index.es.min.js +3 -3
- package/lib/SVG/index.umd.js +6 -4
- package/lib/SVG/index.umd.min.js +2 -2
- package/lib/Shader/index.umd.js +2 -2
- package/lib/Shader/index.umd.min.js +2 -2
- package/lib/Texture/index.umd.js +4 -3
- package/lib/Texture/index.umd.min.js +2 -2
- package/lib/TreeLayout/index.umd.js +8 -5
- package/lib/TreeLayout/index.umd.min.js +2 -2
- package/lib/WebGL/index.umd.js +7 -5
- package/lib/WebGL/index.umd.min.js +3 -3
- package/lib/animation/index.umd.js +4 -3
- package/lib/animation/index.umd.min.js +2 -2
- package/lib/formatColor/index.umd.js +2 -2
- package/lib/formatColor/index.umd.min.js +2 -2
- package/lib/getLoopColors/index.umd.js +2 -2
- package/lib/getLoopColors/index.umd.min.js +2 -2
- package/lib/getWebGLContext/index.umd.js +4 -3
- package/lib/getWebGLContext/index.umd.min.js +2 -2
- package/lib/index.umd.js +35 -20
- package/lib/index.umd.min.js +3 -3
- package/lib/move/index.umd.js +2 -2
- package/lib/move/index.umd.min.js +2 -2
- package/lib/resizeObserver/index.umd.js +4 -3
- package/lib/resizeObserver/index.umd.min.js +2 -2
- package/lib/rotate/index.umd.js +2 -2
- package/lib/rotate/index.umd.min.js +2 -2
- package/lib/ruler/index.umd.js +2 -2
- package/lib/ruler/index.umd.min.js +2 -2
- package/lib/scale/index.umd.js +2 -2
- package/lib/scale/index.umd.min.js +2 -2
- package/lib/throttle/index.umd.js +2 -2
- package/lib/throttle/index.umd.min.js +2 -2
- package/lib/viewHandler/index.umd.js +4 -4
- package/lib/viewHandler/index.umd.min.js +3 -3
- package/package.json +6 -2
- package/src/Canvas.ts +70 -67
- package/src/Eoap.ts +66 -66
- package/src/Geometry.ts +82 -82
- package/src/Matrix4/index.ts +4 -4
- package/src/Matrix4/move.ts +12 -12
- package/src/Matrix4/rotate.ts +15 -15
- package/src/Matrix4/transform.ts +64 -64
- package/src/Mercator.ts +27 -27
- package/src/SVG.ts +24 -24
- package/src/WebGL.ts +66 -66
- package/src/animation.ts +98 -98
- package/src/common/assemble.ts +22 -22
- package/src/common/canvas/arc.ts +51 -50
- package/src/common/canvas/config.ts +158 -158
- package/src/common/canvas/gradient.ts +29 -29
- package/src/common/canvas/index.ts +13 -12
- package/src/common/canvas/painter.ts +417 -426
- package/src/common/geometry/prism-horizontal.ts +35 -33
- package/src/common/geometry/prism-vertical.ts +40 -40
- package/src/common/geometry/sphere-fragment.ts +40 -39
- package/src/common/geometry/tool/circle.ts +11 -11
- package/src/common/mergeOption.ts +6 -6
- package/src/common/setStyle.ts +5 -5
- package/src/common/svg/config.ts +186 -186
- package/src/common/svg/dictionary.ts +1 -1
- package/src/common/svg/gradient.ts +63 -63
- package/src/common/svg/index.ts +356 -356
- package/src/common/svg/tool.ts +44 -44
- package/src/common/tree/toInnerTree.ts +57 -56
- package/src/common/tree/toPlainTree.ts +132 -131
- package/src/common/webgl/buffer.ts +79 -79
- package/src/common/webgl/doDraw.ts +108 -108
- package/src/common/webgl/getColorFactory.ts +26 -26
- package/src/common/webgl/getShader.ts +48 -48
- package/src/common/webgl/getTexture.ts +11 -11
- package/src/common/webgl/getWebGLContext.ts +28 -27
- package/src/common/webgl/index.ts +224 -223
- package/src/common/webgl/shader.ts +75 -75
- package/src/common/webgl/texture.ts +97 -96
- package/src/formatColor.ts +44 -44
- package/src/getLoopColors.ts +42 -42
- package/src/interpolation/Cardinal.ts +110 -110
- package/src/interpolation/Hermite.ts +65 -65
- package/src/layout/TreeLayout.ts +21 -21
- package/src/move.ts +7 -7
- package/src/resizeObserver.ts +37 -36
- package/src/rotate.ts +7 -7
- package/src/ruler.ts +18 -18
- package/src/throttle.ts +52 -51
- package/src/viewHandler.ts +158 -158
- package/types/CanvasOption.d.ts +8 -7
- package/types/CanvasOpts.d.ts +10 -0
package/src/common/canvas/arc.ts
CHANGED
|
@@ -1,50 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
// 点(x,y)围绕中心(cx,cy)旋转deg度
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
return [
|
|
7
|
-
+((x - cx) * cos - (y - cy) * sin + cx).toFixed(7),
|
|
8
|
-
+((x - cx) * sin + (y - cy) * cos + cy).toFixed(7)
|
|
9
|
-
]
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
// r1和r2,内半径和外半径
|
|
13
|
-
// beginA起点弧度,rotateA旋转弧度式
|
|
14
|
-
|
|
15
|
-
export default function (beginA: number, rotateA: number, cx: number, cy: number, r1: number, r2: number, doback: Function) {
|
|
16
|
-
|
|
17
|
-
// 保证逆时针也是可以的
|
|
18
|
-
if (rotateA < 0) {
|
|
19
|
-
beginA += rotateA
|
|
20
|
-
rotateA *= -1
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
temp[
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
temp[
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
temp[
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
temp[
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
temp[
|
|
45
|
-
temp[
|
|
46
|
-
temp[
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
1
|
+
|
|
2
|
+
// 点(x,y)围绕中心(cx,cy)旋转deg度
|
|
3
|
+
|
|
4
|
+
const rotate = function (cx: number, cy: number, deg: number, x: number, y: number) {
|
|
5
|
+
const cos = Math.cos(deg), sin = Math.sin(deg)
|
|
6
|
+
return [
|
|
7
|
+
+((x - cx) * cos - (y - cy) * sin + cx).toFixed(7),
|
|
8
|
+
+((x - cx) * sin + (y - cy) * cos + cy).toFixed(7)
|
|
9
|
+
]
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// r1和r2,内半径和外半径
|
|
13
|
+
// beginA起点弧度,rotateA旋转弧度式
|
|
14
|
+
|
|
15
|
+
export default function (beginA: number, rotateA: number, cx: number, cy: number, r1: number, r2: number, doback: Function) {
|
|
16
|
+
|
|
17
|
+
// 保证逆时针也是可以的
|
|
18
|
+
if (rotateA < 0) {
|
|
19
|
+
beginA += rotateA
|
|
20
|
+
rotateA *= -1
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const temp: number[] = []
|
|
24
|
+
let p: number[]
|
|
25
|
+
|
|
26
|
+
// 内部
|
|
27
|
+
p = rotate(0, 0, beginA, r1, 0)
|
|
28
|
+
temp[0] = p[0]
|
|
29
|
+
temp[1] = p[1]
|
|
30
|
+
p = rotate(0, 0, rotateA, p[0], p[1])
|
|
31
|
+
temp[2] = p[0]
|
|
32
|
+
temp[3] = p[1]
|
|
33
|
+
|
|
34
|
+
// 外部
|
|
35
|
+
p = rotate(0, 0, beginA, r2, 0)
|
|
36
|
+
temp[4] = p[0]
|
|
37
|
+
temp[5] = p[1]
|
|
38
|
+
p = rotate(0, 0, rotateA, p[0], p[1])
|
|
39
|
+
temp[6] = p[0]
|
|
40
|
+
temp[7] = p[1]
|
|
41
|
+
|
|
42
|
+
doback(
|
|
43
|
+
beginA, beginA + rotateA,
|
|
44
|
+
temp[0] + cx, temp[1] + cy,
|
|
45
|
+
temp[4] + cx, temp[5] + cy,
|
|
46
|
+
temp[2] + cx, temp[3] + cy,
|
|
47
|
+
temp[6] + cx, temp[7] + cy,
|
|
48
|
+
(r2 - r1) * 0.5
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
}
|
|
@@ -1,158 +1,158 @@
|
|
|
1
|
-
import type CanvasConfigType from "../../../types/CanvasConfig"
|
|
2
|
-
|
|
3
|
-
import arc from "./arc"
|
|
4
|
-
|
|
5
|
-
// 文字统一设置方法
|
|
6
|
-
export
|
|
7
|
-
painter: CanvasRenderingContext2D,
|
|
8
|
-
config: CanvasConfigType,
|
|
9
|
-
x: number,
|
|
10
|
-
y: number,
|
|
11
|
-
deg: number
|
|
12
|
-
) {
|
|
13
|
-
painter.beginPath();
|
|
14
|
-
painter.translate(x, y);
|
|
15
|
-
painter.rotate(deg);
|
|
16
|
-
painter.font =
|
|
17
|
-
config.fontStyle +
|
|
18
|
-
" " +
|
|
19
|
-
config.fontWeight +
|
|
20
|
-
" " +
|
|
21
|
-
config.fontSize +
|
|
22
|
-
"px " +
|
|
23
|
-
config.fontFamily;
|
|
24
|
-
return painter
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// 画弧统一设置方法
|
|
28
|
-
export
|
|
29
|
-
painter: CanvasRenderingContext2D,
|
|
30
|
-
config: CanvasConfigType,
|
|
31
|
-
cx: number,
|
|
32
|
-
cy: number,
|
|
33
|
-
r1: number,
|
|
34
|
-
r2: number,
|
|
35
|
-
beginDeg: number,
|
|
36
|
-
deg: number
|
|
37
|
-
) {
|
|
38
|
-
if (r1 > r2) {
|
|
39
|
-
|
|
40
|
-
r1 = r2
|
|
41
|
-
r2 = temp
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
beginDeg = beginDeg % (Math.PI * 2)
|
|
45
|
-
|
|
46
|
-
// 当|deg|>=2π的时候都认为是一个圆环
|
|
47
|
-
// 为什么不取2π比较,是怕部分浏览器浮点不精确
|
|
48
|
-
if (deg >= Math.PI * 1.999999 || deg <= -Math.PI * 1.999999) {
|
|
49
|
-
deg = Math.PI * 2
|
|
50
|
-
} else {
|
|
51
|
-
deg = deg % (Math.PI * 2)
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
arc(
|
|
55
|
-
beginDeg,
|
|
56
|
-
deg,
|
|
57
|
-
cx,
|
|
58
|
-
cy,
|
|
59
|
-
r1,
|
|
60
|
-
r2,
|
|
61
|
-
function (
|
|
62
|
-
beginA: number,
|
|
63
|
-
endA: number,
|
|
64
|
-
begInnerX: number,
|
|
65
|
-
begInnerY: number,
|
|
66
|
-
begOuterX: number,
|
|
67
|
-
begOuterY: number,
|
|
68
|
-
endInnerX: number,
|
|
69
|
-
endInnerY: number,
|
|
70
|
-
endOuterX: number,
|
|
71
|
-
endOuterY: number,
|
|
72
|
-
r: number
|
|
73
|
-
) {
|
|
74
|
-
if (r < 0) r = -r
|
|
75
|
-
painter.beginPath()
|
|
76
|
-
painter.moveTo(begInnerX, begInnerY)
|
|
77
|
-
painter.arc(
|
|
78
|
-
// (圆心x,圆心y,半径,开始角度,结束角度,true逆时针/false顺时针)
|
|
79
|
-
cx,
|
|
80
|
-
cy,
|
|
81
|
-
r1,
|
|
82
|
-
beginA,
|
|
83
|
-
endA,
|
|
84
|
-
false
|
|
85
|
-
)
|
|
86
|
-
// 结尾
|
|
87
|
-
if (config.arcEndCap == "round")
|
|
88
|
-
painter.arc(
|
|
89
|
-
(endInnerX + endOuterX) * 0.5,
|
|
90
|
-
(endInnerY + endOuterY) * 0.5,
|
|
91
|
-
r,
|
|
92
|
-
endA - Math.PI,
|
|
93
|
-
endA,
|
|
94
|
-
true
|
|
95
|
-
)
|
|
96
|
-
else if (config.arcEndCap == "-round")
|
|
97
|
-
painter.arc(
|
|
98
|
-
(endInnerX + endOuterX) * 0.5,
|
|
99
|
-
(endInnerY + endOuterY) * 0.5,
|
|
100
|
-
r,
|
|
101
|
-
endA - Math.PI,
|
|
102
|
-
endA,
|
|
103
|
-
false
|
|
104
|
-
)
|
|
105
|
-
else painter.lineTo(endOuterX, endOuterY)
|
|
106
|
-
|
|
107
|
-
painter.arc(cx, cy, r2, endA, beginA, true)
|
|
108
|
-
// 开头
|
|
109
|
-
if (config.arcStartCap == "round")
|
|
110
|
-
painter.arc(
|
|
111
|
-
(begInnerX + begOuterX) * 0.5,
|
|
112
|
-
(begInnerY + begOuterY) * 0.5,
|
|
113
|
-
r,
|
|
114
|
-
beginA,
|
|
115
|
-
beginA - Math.PI,
|
|
116
|
-
true
|
|
117
|
-
)
|
|
118
|
-
else if (config.arcStartCap == "-round")
|
|
119
|
-
painter.arc(
|
|
120
|
-
(begInnerX + begOuterX) * 0.5,
|
|
121
|
-
(begInnerY + begOuterY) * 0.5,
|
|
122
|
-
r,
|
|
123
|
-
beginA,
|
|
124
|
-
beginA - Math.PI,
|
|
125
|
-
false
|
|
126
|
-
)
|
|
127
|
-
else painter.lineTo(begInnerX, begInnerY)
|
|
128
|
-
}
|
|
129
|
-
)
|
|
130
|
-
if (config.arcStartCap == "butt") painter.closePath()
|
|
131
|
-
return painter
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// 画圆统一设置方法
|
|
135
|
-
export
|
|
136
|
-
painter: CanvasRenderingContext2D,
|
|
137
|
-
cx: number,
|
|
138
|
-
cy: number,
|
|
139
|
-
r: number
|
|
140
|
-
) {
|
|
141
|
-
painter.beginPath()
|
|
142
|
-
painter.moveTo(cx + r, cy)
|
|
143
|
-
painter.arc(cx, cy, r, 0, Math.PI * 2)
|
|
144
|
-
return painter
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
// 画矩形统一设置方法
|
|
148
|
-
export
|
|
149
|
-
painter: CanvasRenderingContext2D,
|
|
150
|
-
x: number,
|
|
151
|
-
y: number,
|
|
152
|
-
width: number,
|
|
153
|
-
height: number
|
|
154
|
-
) {
|
|
155
|
-
painter.beginPath()
|
|
156
|
-
painter.rect(x, y, width, height)
|
|
157
|
-
return painter
|
|
158
|
-
}
|
|
1
|
+
import type CanvasConfigType from "../../../types/CanvasConfig"
|
|
2
|
+
|
|
3
|
+
import arc from "./arc"
|
|
4
|
+
|
|
5
|
+
// 文字统一设置方法
|
|
6
|
+
export const initText = function (
|
|
7
|
+
painter: CanvasRenderingContext2D,
|
|
8
|
+
config: CanvasConfigType,
|
|
9
|
+
x: number,
|
|
10
|
+
y: number,
|
|
11
|
+
deg: number
|
|
12
|
+
) {
|
|
13
|
+
painter.beginPath();
|
|
14
|
+
painter.translate(x, y);
|
|
15
|
+
painter.rotate(deg);
|
|
16
|
+
painter.font =
|
|
17
|
+
config.fontStyle +
|
|
18
|
+
" " +
|
|
19
|
+
config.fontWeight +
|
|
20
|
+
" " +
|
|
21
|
+
config.fontSize +
|
|
22
|
+
"px " +
|
|
23
|
+
config.fontFamily;
|
|
24
|
+
return painter
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// 画弧统一设置方法
|
|
28
|
+
export const initArc = function (
|
|
29
|
+
painter: CanvasRenderingContext2D,
|
|
30
|
+
config: CanvasConfigType,
|
|
31
|
+
cx: number,
|
|
32
|
+
cy: number,
|
|
33
|
+
r1: number,
|
|
34
|
+
r2: number,
|
|
35
|
+
beginDeg: number,
|
|
36
|
+
deg: number
|
|
37
|
+
) {
|
|
38
|
+
if (r1 > r2) {
|
|
39
|
+
const temp = r1
|
|
40
|
+
r1 = r2
|
|
41
|
+
r2 = temp
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
beginDeg = beginDeg % (Math.PI * 2)
|
|
45
|
+
|
|
46
|
+
// 当|deg|>=2π的时候都认为是一个圆环
|
|
47
|
+
// 为什么不取2π比较,是怕部分浏览器浮点不精确
|
|
48
|
+
if (deg >= Math.PI * 1.999999 || deg <= -Math.PI * 1.999999) {
|
|
49
|
+
deg = Math.PI * 2
|
|
50
|
+
} else {
|
|
51
|
+
deg = deg % (Math.PI * 2)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
arc(
|
|
55
|
+
beginDeg,
|
|
56
|
+
deg,
|
|
57
|
+
cx,
|
|
58
|
+
cy,
|
|
59
|
+
r1,
|
|
60
|
+
r2,
|
|
61
|
+
function (
|
|
62
|
+
beginA: number,
|
|
63
|
+
endA: number,
|
|
64
|
+
begInnerX: number,
|
|
65
|
+
begInnerY: number,
|
|
66
|
+
begOuterX: number,
|
|
67
|
+
begOuterY: number,
|
|
68
|
+
endInnerX: number,
|
|
69
|
+
endInnerY: number,
|
|
70
|
+
endOuterX: number,
|
|
71
|
+
endOuterY: number,
|
|
72
|
+
r: number
|
|
73
|
+
) {
|
|
74
|
+
if (r < 0) r = -r
|
|
75
|
+
painter.beginPath()
|
|
76
|
+
painter.moveTo(begInnerX, begInnerY)
|
|
77
|
+
painter.arc(
|
|
78
|
+
// (圆心x,圆心y,半径,开始角度,结束角度,true逆时针/false顺时针)
|
|
79
|
+
cx,
|
|
80
|
+
cy,
|
|
81
|
+
r1,
|
|
82
|
+
beginA,
|
|
83
|
+
endA,
|
|
84
|
+
false
|
|
85
|
+
)
|
|
86
|
+
// 结尾
|
|
87
|
+
if (config.arcEndCap == "round")
|
|
88
|
+
painter.arc(
|
|
89
|
+
(endInnerX + endOuterX) * 0.5,
|
|
90
|
+
(endInnerY + endOuterY) * 0.5,
|
|
91
|
+
r,
|
|
92
|
+
endA - Math.PI,
|
|
93
|
+
endA,
|
|
94
|
+
true
|
|
95
|
+
)
|
|
96
|
+
else if (config.arcEndCap == "-round")
|
|
97
|
+
painter.arc(
|
|
98
|
+
(endInnerX + endOuterX) * 0.5,
|
|
99
|
+
(endInnerY + endOuterY) * 0.5,
|
|
100
|
+
r,
|
|
101
|
+
endA - Math.PI,
|
|
102
|
+
endA,
|
|
103
|
+
false
|
|
104
|
+
)
|
|
105
|
+
else painter.lineTo(endOuterX, endOuterY)
|
|
106
|
+
|
|
107
|
+
painter.arc(cx, cy, r2, endA, beginA, true)
|
|
108
|
+
// 开头
|
|
109
|
+
if (config.arcStartCap == "round")
|
|
110
|
+
painter.arc(
|
|
111
|
+
(begInnerX + begOuterX) * 0.5,
|
|
112
|
+
(begInnerY + begOuterY) * 0.5,
|
|
113
|
+
r,
|
|
114
|
+
beginA,
|
|
115
|
+
beginA - Math.PI,
|
|
116
|
+
true
|
|
117
|
+
)
|
|
118
|
+
else if (config.arcStartCap == "-round")
|
|
119
|
+
painter.arc(
|
|
120
|
+
(begInnerX + begOuterX) * 0.5,
|
|
121
|
+
(begInnerY + begOuterY) * 0.5,
|
|
122
|
+
r,
|
|
123
|
+
beginA,
|
|
124
|
+
beginA - Math.PI,
|
|
125
|
+
false
|
|
126
|
+
)
|
|
127
|
+
else painter.lineTo(begInnerX, begInnerY)
|
|
128
|
+
}
|
|
129
|
+
)
|
|
130
|
+
if (config.arcStartCap == "butt") painter.closePath()
|
|
131
|
+
return painter
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// 画圆统一设置方法
|
|
135
|
+
export const initCircle = function (
|
|
136
|
+
painter: CanvasRenderingContext2D,
|
|
137
|
+
cx: number,
|
|
138
|
+
cy: number,
|
|
139
|
+
r: number
|
|
140
|
+
) {
|
|
141
|
+
painter.beginPath()
|
|
142
|
+
painter.moveTo(cx + r, cy)
|
|
143
|
+
painter.arc(cx, cy, r, 0, Math.PI * 2)
|
|
144
|
+
return painter
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// 画矩形统一设置方法
|
|
148
|
+
export const initRect = function (
|
|
149
|
+
painter: CanvasRenderingContext2D,
|
|
150
|
+
x: number,
|
|
151
|
+
y: number,
|
|
152
|
+
width: number,
|
|
153
|
+
height: number
|
|
154
|
+
) {
|
|
155
|
+
painter.beginPath()
|
|
156
|
+
painter.rect(x, y, width, height)
|
|
157
|
+
return painter
|
|
158
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
// 线性渐变
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
"value": function () {
|
|
6
|
-
return gradient
|
|
7
|
-
},
|
|
8
|
-
"setColor": function (stop: number, color: string) {
|
|
9
|
-
gradient.addColorStop(stop, color)
|
|
10
|
-
return enhanceGradient
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
return enhanceGradient
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// 环形渐变
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"value": function () {
|
|
21
|
-
return gradient
|
|
22
|
-
},
|
|
23
|
-
"setColor": function (stop: number, color: string) {
|
|
24
|
-
gradient.addColorStop(stop, color)
|
|
25
|
-
return enhanceGradient
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return enhanceGradient
|
|
29
|
-
}
|
|
1
|
+
// 线性渐变
|
|
2
|
+
export const linearGradient = function (painter: CanvasRenderingContext2D, x0: number, y0: number, x1: number, y1: number) {
|
|
3
|
+
const gradient = painter.createLinearGradient(x0, y0, x1, y1)
|
|
4
|
+
const enhanceGradient = {
|
|
5
|
+
"value": function () {
|
|
6
|
+
return gradient
|
|
7
|
+
},
|
|
8
|
+
"setColor": function (stop: number, color: string) {
|
|
9
|
+
gradient.addColorStop(stop, color)
|
|
10
|
+
return enhanceGradient
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
return enhanceGradient
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// 环形渐变
|
|
17
|
+
export const radialGradient = function (painter: CanvasRenderingContext2D, cx: number, cy: number, r: number) {
|
|
18
|
+
const gradient = painter.createRadialGradient(cx, cy, 0, cx, cy, r)
|
|
19
|
+
const enhanceGradient = {
|
|
20
|
+
"value": function () {
|
|
21
|
+
return gradient
|
|
22
|
+
},
|
|
23
|
+
"setColor": function (stop: number, color: string) {
|
|
24
|
+
gradient.addColorStop(stop, color)
|
|
25
|
+
return enhanceGradient
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return enhanceGradient
|
|
29
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type CanvasConfigType from "../../../types/CanvasConfig"
|
|
2
|
+
import type CanvasOptsType from '../../../types/CanvasOpts'
|
|
2
3
|
|
|
3
4
|
import PainterRender from "./painter"
|
|
4
5
|
import assemble from "../assemble"
|
|
@@ -6,7 +7,7 @@ import { linearGradient, radialGradient } from "./gradient"
|
|
|
6
7
|
import { initText } from './config'
|
|
7
8
|
|
|
8
9
|
// 属性名向下兼容
|
|
9
|
-
|
|
10
|
+
const oldAttrName = {
|
|
10
11
|
"font-size": "fontSize",
|
|
11
12
|
"font-family": "fontFamily",
|
|
12
13
|
"font-weight": "fontWeight",
|
|
@@ -24,10 +25,10 @@ class Canvas extends PainterRender {
|
|
|
24
25
|
// 2023年7月6日 于南京
|
|
25
26
|
private __regionAssemble = assemble(0, 255, 10, 3)
|
|
26
27
|
|
|
27
|
-
constructor(ViewCanvas: HTMLCanvasElement, RegionCanvas: HTMLCanvasElement) {
|
|
28
|
+
constructor(ViewCanvas: HTMLCanvasElement, RegionCanvas: HTMLCanvasElement, opts: CanvasOptsType = {}) {
|
|
28
29
|
super(
|
|
29
30
|
ViewCanvas,
|
|
30
|
-
|
|
31
|
+
opts,
|
|
31
32
|
RegionCanvas ? new PainterRender(RegionCanvas, {
|
|
32
33
|
willReadFrequently: true,
|
|
33
34
|
}) : null, true
|
|
@@ -37,8 +38,8 @@ class Canvas extends PainterRender {
|
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
config(configs: CanvasConfigType) {
|
|
40
|
-
for (
|
|
41
|
-
|
|
41
|
+
for (const key in configs) {
|
|
42
|
+
const _key = oldAttrName[key] || key
|
|
42
43
|
this.useConfig(_key, configs[key])
|
|
43
44
|
}
|
|
44
45
|
|
|
@@ -56,7 +57,7 @@ class Canvas extends PainterRender {
|
|
|
56
57
|
if (this.__region) {
|
|
57
58
|
if (regionName) {
|
|
58
59
|
if (this.__regionList[regionName] == void 0) {
|
|
59
|
-
|
|
60
|
+
const tempColor = this.__regionAssemble()
|
|
60
61
|
this.__regionList[regionName] =
|
|
61
62
|
"rgb(" + tempColor[0] + "," + tempColor[1] + "," + tempColor[2] + ")"
|
|
62
63
|
}
|
|
@@ -73,19 +74,19 @@ class Canvas extends PainterRender {
|
|
|
73
74
|
|
|
74
75
|
// 获取当前事件触发的区域名称
|
|
75
76
|
getRegion(x: number, y: number): Promise<string> {
|
|
76
|
-
return new Promise((resolve
|
|
77
|
-
|
|
77
|
+
return new Promise((resolve) => {
|
|
78
|
+
const imgData = this.__region ? this.__region.painter.getImageData(x - 0.5, y - 0.5, 1, 1) : {
|
|
78
79
|
data: [0, 0, 0, 0]
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
// 获取点击点的颜色
|
|
82
83
|
let currentRGBA = imgData.data
|
|
83
84
|
|
|
84
|
-
|
|
85
|
+
const doit = () => {
|
|
85
86
|
if (this.__region) {
|
|
86
87
|
|
|
87
88
|
// 查找当前点击的区域
|
|
88
|
-
for (
|
|
89
|
+
for (const key in this.__regionList) {
|
|
89
90
|
if (
|
|
90
91
|
"rgb(" +
|
|
91
92
|
currentRGBA[0] +
|
|
@@ -126,7 +127,7 @@ class Canvas extends PainterRender {
|
|
|
126
127
|
initText(this.painter, this.__specialConfig, 0, 0, 0)
|
|
127
128
|
|
|
128
129
|
// 虽然我们限制了只可以输入字符串,可是不代表所有环境都可以保证,为了确保方法不失效,强转成字符串
|
|
129
|
-
|
|
130
|
+
const width = this.painter.measureText(text + "").width
|
|
130
131
|
|
|
131
132
|
this.painter.restore()
|
|
132
133
|
|
|
@@ -158,7 +159,7 @@ class Canvas extends PainterRender {
|
|
|
158
159
|
|
|
159
160
|
// 获取指定位置颜色
|
|
160
161
|
getColor(x: number, y: number) {
|
|
161
|
-
|
|
162
|
+
const currentRGBA = this.painter.getImageData(x - 0.5, y - 0.5, 1, 1).data
|
|
162
163
|
return (
|
|
163
164
|
"rgba(" +
|
|
164
165
|
currentRGBA[0] +
|