UNPKG

10.2 kBTypeScriptView Raw
1import { gradient } from "./gradient.d";
2import { image2D_Object } from "./image2D.d";
3
4interface painter_config {
5
6 /**
7 * 填充色或图案,默认"#000"
8 */
9 fillStyle: string,
10
11 /**
12 * 轮廓色或图案,默认"#000"
13 */
14 strokeStyle: string,
15
16 /**
17 * 线条宽度,默认1(单位px)
18 */
19 lineWidth: number,
20
21 /**
22 * 文字水平对齐方式,默认"left"左对齐(还有"center"居中和"right"右对齐)
23 */
24 textAlign: string,
25
26 /**
27 * 文字垂直对齐方式,默认"middle"垂直居中(还有"top"上对齐和"bottom"下对齐)
28 */
29 textBaseline: string,
30
31 /**
32 * 文字大小,默认16
33 */
34 "font-size": number,
35
36 /**
37 * 字体,默认"sans-serif"
38 */
39 "font-family": string,
40
41 /**
42 * 圆弧开始端闭合方式,默认"butt"直线闭合(还有"round"圆帽闭合,"-round"反圆帽闭合)
43 */
44 "arc-start-cap": string,
45
46 /**
47 * 圆弧结束端闭合方式,默认"butt"直线闭合(还有"round"圆帽闭合,"-round"反圆帽闭合)
48 */
49 "arc-end-cap": string,
50
51 /**
52 * 设置线条虚线,默认为[]表示使用实线绘制
53 *
54 * 值应该是一个数组,格式:[实线长,虚线长,实线长 ...],数组长度任意,会自动循环
55 */
56 lineDash: string
57
58}
59
60/**
61 * 画笔
62 */
63export interface painter {
64
65 // 配置画笔
66
67 /**
68 * 对画笔进行配置
69 */
70 config(option: painter_config): painter,
71
72 // 位图画笔
73
74 /**
75 * 【canvas画笔独有】把当前绘制的图形变成base64返回
76 */
77 toDataURL(): string,
78
79 /**
80 * 【canvas画笔独有】擦除画笔上的一个矩形区域
81 * @param x 可选,区域左上角X坐标
82 * @param y 可选,区域左上角y坐标
83 * @param width 可选,区域的宽
84 * @param height 可选,区域的高
85 */
86 clearRect(x?: number, y?: number, width?: number, height?: number): painter,
87
88 /**
89 * 【canvas画笔独有】把图像、画布或视频绘制到画布的指定位置上
90 *
91 * (img, x, y):在画布上定位图像。
92 *
93 * (img, x, y, width, height):在画布上定位图像,并规定图像的宽度和高度。
94 *
95 * (img, sx, sy, swidth, sheight, x, y, width, height):剪切图像,并在画布上定位被剪切的部分。
96 */
97 drawImage(): painter,
98
99 // 矢图画笔
100
101 /**
102 * 【svg画笔独有】当前画笔绘制的目标节点
103 * @param selector 选择器,查找上下文固定为当前svg画布
104 */
105 bind(selector: Function | Element | string | image2D_Object | Array<Element | image2D_Object>): painter,
106
107 /**
108 * 【svg画笔独有】把当前维护的结点加到目标结点内部的结尾
109 * @param selector 可选,选择器,查找上下文固定为当前svg画布
110 */
111 appendTo(selector?: Function | Element | string | image2D_Object | Array<Element | image2D_Object>): painter,
112
113 /**
114 * 【svg画笔独有】把当前维护的结点加到目标结点内部的开头
115 * @param selector 可选,选择器,查找上下文固定为当前svg画布
116 */
117 prependTo(selector?: Function | Element | string | image2D_Object | Array<Element | image2D_Object>): painter,
118
119 /**
120 * 【svg画笔独有】把当前维护的结点加到目标结点之后
121 * @param selector 可选,选择器,查找上下文固定为当前svg画布
122 */
123 afterTo(selector?: Function | Element | string | image2D_Object | Array<Element | image2D_Object>): painter,
124
125 /**
126 * 【svg画笔独有】把当前维护的结点加到目标结点之前
127 * @param selector 可选,选择器,查找上下文固定为当前svg画布
128 */
129 beforeTo(selector?: Function | Element | string | image2D_Object | Array<Element | image2D_Object>): painter,
130
131 // 画笔上的绘图方法
132
133 /**
134 * 绘制一个实心文字
135 * @param text 需要绘制的文字
136 * @param x 绘制位置的x坐标
137 * @param y 绘制位置的y坐标
138 * @param deg 可选,文字旋转角度
139 */
140 fillText(text: any, x: number, y: number, deg?: number): painter,
141
142 /**
143 * 绘制一个空心文字
144 * @param text 需要绘制的文字
145 * @param x 绘制位置的x坐标
146 * @param y 绘制位置的y坐标
147 * @param deg 可选,文字旋转角度
148 */
149 strokeText(text: any, x: number, y: number, deg?: number): painter,
150
151 /**
152 * 绘制一个空实心文字
153 * @param text 需要绘制的文字
154 * @param x 绘制位置的x坐标
155 * @param y 绘制位置的y坐标
156 * @param deg 可选,文字旋转角度
157 */
158 fullText(text: any, x: number, y: number, deg?: number): painter,
159
160 /**
161 * 绘制一个实心的圆弧
162 * @param cx 圆弧的圆心x坐标
163 * @param cy 圆弧的圆心y坐标
164 * @param r1 圆弧的内半径
165 * @param r2 圆弧的外半径
166 * @param beginDeg 开始弧度
167 * @param deg 跨越弧度
168 */
169 fillArc(cx: number, cy: number, r1: number, r2: number, beginDeg: number, deg: number): painter,
170
171 /**
172 * 绘制一个空心的圆弧
173 * @param cx 圆弧的圆心x坐标
174 * @param cy 圆弧的圆心y坐标
175 * @param r1 圆弧的内半径
176 * @param r2 圆弧的外半径
177 * @param beginDeg 开始弧度
178 * @param deg 跨越弧度
179 */
180 strokeArc(cx: number, cy: number, r1: number, r2: number, beginDeg: number, deg: number): painter,
181
182 /**
183 * 绘制一个空实心的圆弧
184 * @param cx 圆弧的圆心x坐标
185 * @param cy 圆弧的圆心y坐标
186 * @param r1 圆弧的内半径
187 * @param r2 圆弧的外半径
188 * @param beginDeg 开始弧度
189 * @param deg 跨越弧度
190 */
191 fullArc(cx: number, cy: number, r1: number, r2: number, beginDeg: number, deg: number): painter,
192
193 /**
194 * 绘制一个实心的圆
195 * @param cx 圆心x坐标
196 * @param cy 圆心y坐标
197 * @param r 圆的半径
198 */
199 fillCircle(cx: number, cy: number, r: number): painter,
200
201 /**
202 * 绘制一个空心的圆
203 * @param cx 圆心x坐标
204 * @param cy 圆心y坐标
205 * @param r 圆的半径
206 */
207 strokeCircle(cx: number, cy: number, r: number): painter,
208
209 /**
210 * 绘制一个空实心的圆
211 * @param cx 圆心x坐标
212 * @param cy 圆心y坐标
213 * @param r 圆的半径
214 */
215 fullCircle(cx: number, cy: number, r: number): painter,
216
217 /**
218 * 绘制一个实心的矩形
219 * @param x 可选,区域左上角X坐标
220 * @param y 可选,区域左上角y坐标
221 * @param width 可选,区域的宽
222 * @param height 可选,区域的高
223 */
224 fillRect(x: number, y: number, width: number, height: number): painter,
225
226 /**
227 * 绘制一个空心的矩形
228 * @param x 可选,区域左上角X坐标
229 * @param y 可选,区域左上角y坐标
230 * @param width 可选,区域的宽
231 * @param height 可选,区域的高
232 */
233 strokeRect(x: number, y: number, width: number, height: number): painter,
234
235 /**
236 * 绘制一个空实心的矩形
237 * @param x 可选,区域左上角X坐标
238 * @param y 可选,区域左上角y坐标
239 * @param width 可选,区域的宽
240 * @param height 可选,区域的高
241 */
242 fullRect(x: number, y: number, width: number, height: number): painter,
243
244 // 路径
245
246 /**
247 * 开始一段独立的路径
248 */
249 beginPath(): painter,
250
251 /**
252 * 闭合当前路径,也就是路径首尾闭合
253 */
254 closePath(): painter,
255
256 /**
257 * 画笔移动到点(x, y),此时笔离开了画布
258 */
259 moveTo(x: number, y: number): painter,
260
261 /**
262 * 画笔移动到点(x, y),此时笔没有离开画布
263 */
264 lineTo(x: number, y: number): painter,
265
266 /**
267 * 以(cx, cy)为圆心,半径r,从弧度beginDeg开始,跨越弧度deg画弧,此时笔没有离开画布
268 */
269 arc(cx: number, cy: number, r: number, beginDeg: number, deg: number): painter,
270
271 /**
272 * 二次贝塞尔曲线到
273 * @param cpx 控制点x坐标
274 * @param cpy 控制点y坐标
275 * @param x 终点x坐标
276 * @param y 终点y坐标
277 */
278 quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): painter,
279
280 /**
281 * 三次贝塞尔曲线到
282 * @param cpx1 控制点1的x坐标
283 * @param cpy1 控制点1的y坐标
284 * @param cpx2 控制点2的x坐标
285 * @param cpy2 控制点2的y坐标
286 * @param x 终点x坐标
287 * @param y 终点y坐标
288 */
289 bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): painter,
290
291 /**
292 * 把当前路径包裹的区域填充颜色
293 */
294 fill(): painter,
295
296 /**
297 * 把当前路径上色(轮廓线)
298 */
299 stroke(): painter,
300
301 /**
302 * 把当前路径画上轮廓线并填充颜色到当前路径所包裹的区域
303 */
304 full(): painter,
305
306 // 渐变色
307
308 /**
309 * 创建线性渐变对象
310 * @param x1 渐变的起点x坐标
311 * @param y1 渐变的起点y坐标
312 * @param x2 渐变的终点x坐标
313 * @param y2 渐变的终点y坐标
314 *
315 * 特别注意:canvas画笔上述参数的单位是px,svg画笔上述参数是%
316 */
317 createLinearGradient(x1: number, y1: number, x2: number, y2: number): gradient,
318
319 /**
320 * 创建环形渐变对象
321 * @param cx 渐变的起点x坐标
322 * @param cy 渐变的起点y坐标
323 * @param r 渐变半径
324 *
325 * 特别注意:canvas画笔上述参数的单位是px,svg画笔上述参数是%
326 */
327 createRadialGradient(cx: number, cy: number, r: number): gradient,
328
329 // 变换
330
331 /**
332 * 保存当前的绘图状态
333 */
334 save(): painter,
335
336 /**
337 * 恢复之前保存的绘图状态
338 */
339 restore(): painter,
340
341 /**
342 * 把绘图的原点x坐标增加dx,y增加dy
343 */
344 translate(dx: number, dy: number): painter,
345
346 /**
347 * 围绕原点旋转deg
348 */
349 rotate(deg: number): painter,
350
351 /**
352 * x坐标和y坐标分别缩放sx和sy倍(sy缺省取sx)
353 */
354 scale(sx: number, sy: number): painter
355
356}