]>
Commit | Line | Data |
---|---|---|
6527f429 DM |
1 | Ext.define('KitchenSink.view.XRay', {\r |
2 | alias: 'sprite.xray',\r | |
3 | extend: 'Ext.draw.sprite.Path',\r | |
4 | render: function (surface, ctx) {\r | |
5 | var attr = this.attr,\r | |
6 | mat = attr.matrix,\r | |
7 | imat = attr.inverseMatrix,\r | |
8 | path = attr.path,\r | |
9 | size = imat.x(2, 0) - imat.x(0, 0);\r | |
10 | if (attr.path.params.length === 0) {\r | |
11 | return;\r | |
12 | }\r | |
13 | mat.toContext(ctx);\r | |
14 | var i = 0, j = 0,\r | |
15 | commands = path.commands,\r | |
16 | params = path.params,\r | |
17 | ln = commands.length;\r | |
18 | \r | |
19 | ctx.beginPath();\r | |
20 | for (; i < ln; i++) {\r | |
21 | switch (commands[i]) {\r | |
22 | case "M":\r | |
23 | ctx.moveTo(params[j], params[j + 1]);\r | |
24 | j += 2;\r | |
25 | break;\r | |
26 | case "L":\r | |
27 | ctx.lineTo(params[j], params[j + 1]);\r | |
28 | j += 2;\r | |
29 | break;\r | |
30 | case "C":\r | |
31 | ctx.bezierCurveTo(\r | |
32 | params[j], params[j + 1],\r | |
33 | params[j + 2], params[j + 3],\r | |
34 | params[j + 4], params[j + 5]\r | |
35 | );\r | |
36 | j += 6;\r | |
37 | break;\r | |
38 | case "Z":\r | |
39 | ctx.closePath();\r | |
40 | break;\r | |
41 | default:\r | |
42 | }\r | |
43 | }\r | |
44 | ctx.fillStroke(attr);\r | |
45 | \r | |
46 | mat.toContext(ctx);\r | |
47 | ctx.beginPath();\r | |
48 | for (i = 0, j = 0; i < ln; i++) {\r | |
49 | switch (commands[i]) {\r | |
50 | case "M":\r | |
51 | ctx.moveTo(params[j] - size, params[j + 1] - size);\r | |
52 | ctx.rect(params[j] - size, params[j + 1] - size, size * 2, size * 2);\r | |
53 | j += 2;\r | |
54 | break;\r | |
55 | case "L":\r | |
56 | ctx.moveTo(params[j] - size, params[j + 1] - size);\r | |
57 | ctx.rect(params[j] - size, params[j + 1] - size, size * 2, size * 2);\r | |
58 | j += 2;\r | |
59 | break;\r | |
60 | case "C":\r | |
61 | ctx.moveTo(params[j] + size, params[j + 1]);\r | |
62 | ctx.arc(params[j], params[j + 1], size, 0, Math.PI * 2, true);\r | |
63 | j += 2;\r | |
64 | ctx.moveTo(params[j] + size, params[j + 1]);\r | |
65 | ctx.arc(params[j], params[j + 1], size, 0, Math.PI * 2, true);\r | |
66 | j += 2;\r | |
67 | ctx.moveTo(params[j] + size * 2, params[j + 1]);\r | |
68 | ctx.rect(params[j] - size, params[j + 1] - size, size * 2, size * 2);\r | |
69 | j += 2;\r | |
70 | break;\r | |
71 | default:\r | |
72 | }\r | |
73 | }\r | |
74 | imat.toContext(ctx);\r | |
75 | ctx.strokeStyle = "black";\r | |
76 | ctx.strokeOpacity = 1;\r | |
77 | ctx.lineWidth = 1;\r | |
78 | ctx.stroke();\r | |
79 | \r | |
80 | mat.toContext(ctx);\r | |
81 | ctx.beginPath();\r | |
82 | for (i = 0, j = 0; i < ln; i++) {\r | |
83 | switch (commands[i]) {\r | |
84 | case "M":\r | |
85 | ctx.moveTo(params[j], params[j + 1]);\r | |
86 | j += 2;\r | |
87 | break;\r | |
88 | case "L":\r | |
89 | ctx.moveTo(params[j], params[j + 1]);\r | |
90 | j += 2;\r | |
91 | break;\r | |
92 | case "C":\r | |
93 | ctx.lineTo(params[j], params[j + 1]);\r | |
94 | j += 2;\r | |
95 | ctx.moveTo(params[j], params[j + 1]);\r | |
96 | j += 2;\r | |
97 | ctx.lineTo(params[j], params[j + 1]);\r | |
98 | j += 2;\r | |
99 | break;\r | |
100 | default:\r | |
101 | }\r | |
102 | }\r | |
103 | imat.toContext(ctx);\r | |
104 | ctx.lineWidth = 1 / 2;\r | |
105 | ctx.stroke();\r | |
106 | }\r | |
107 | }); |