]> git.proxmox.com Git - extjs.git/blame - extjs/build/examples/kitchensink/classic/samples/view/draw/IntersectionsComponent.js
add extjs 6.0.1 sources
[extjs.git] / extjs / build / examples / kitchensink / classic / samples / view / draw / IntersectionsComponent.js
CommitLineData
6527f429
DM
1Ext.define('KitchenSink.view.IntersectionsComponent', {\r
2 extend: 'Ext.draw.Component',\r
3 xtype: 'intersections-component',\r
4\r
5 // Loading PathUtil is required to be able to hit test\r
6 // and test for path intersections in sprites.\r
7 requires: ['Ext.draw.PathUtil'],\r
8\r
9 isDragging: false,\r
10 startX: 0,\r
11 startY: 0,\r
12 translationX: 0,\r
13 translationY: 0,\r
14 target: null,\r
15\r
16 listeners: {\r
17 element: 'element',\r
18 scope: 'this',\r
19 mousedown: 'onMouseDown',\r
20 mousemove: 'onMouseMove',\r
21 mouseup: 'onMouseUp',\r
22 mouseleave: 'onMouseUp'\r
23 },\r
24\r
25 findTarget: function (sprites, x, y) {\r
26 var me = this,\r
27 sprite,\r
28 i, ln;\r
29\r
30 if (me.target) {\r
31 me.target.setAttributes({\r
32 strokeStyle: 'black'\r
33 });\r
34 }\r
35 for (i = 0, ln = sprites.length; i < ln; i++) {\r
36 sprite = sprites[i];\r
37 if (sprite.isPath && sprite.isPointInPath(x, y)) {\r
38 me.target = sprite;\r
39 return sprite;\r
40 }\r
41 }\r
42 },\r
43\r
44 onMouseDown: function (e) {\r
45 var me = this,\r
46 surface = me.getSurface(),\r
47 sprites = surface.getItems(),\r
48 xy = surface.getEventXY(e),\r
49 x = xy[0],\r
50 y = xy[1],\r
51 target;\r
52\r
53 target = me.findTarget(sprites, x, y);\r
54\r
55 if (target) {\r
56 target.setAttributes({\r
57 strokeStyle: 'red'\r
58 });\r
59 me.isDragging = true;\r
60 me.startX = x;\r
61 me.startY = y;\r
62 me.translationX = target.attr.translationX;\r
63 me.translationY = target.attr.translationY;\r
64 }\r
65 },\r
66\r
67 onMouseMove: function (e) {\r
68 var me = this,\r
69 surface = me.getSurface(),\r
70 sprites = surface.getItems(),\r
71 xy = surface.getEventXY(e),\r
72 intersections = [],\r
73 x = xy[0],\r
74 y = xy[1],\r
75 deltaX, deltaY,\r
76 sprite, target,\r
77 points,\r
78 i, ln;\r
79\r
80 if (me.isDragging) {\r
81 deltaX = x - me.startX;\r
82 deltaY = y - me.startY;\r
83 me.target.setAttributes({\r
84 translationX: me.translationX + deltaX,\r
85 translationY: me.translationY + deltaY\r
86 });\r
87 for (i = 0, ln = sprites.length; i < ln; i++) {\r
88 sprite = sprites[i];\r
89 if (sprite !== me.target) {\r
90 points = me.target.getIntersections(sprite);\r
91 intersections.push.apply(intersections, points);\r
92 }\r
93 }\r
94 me.showIntersections(intersections);\r
95 } else {\r
96 target = me.findTarget(sprites, x, y);\r
97 if (target) {\r
98 target.setAttributes({\r
99 strokeStyle: 'red'\r
100 });\r
101 }\r
102 }\r
103 surface.renderFrame();\r
104 },\r
105\r
106 onMouseUp: function (e) {\r
107 var me = this,\r
108 surface = me.getSurface();\r
109\r
110 me.isDragging = false;\r
111 me.dots.clearAll();\r
112 surface.renderFrame();\r
113 },\r
114\r
115 showIntersections: function (intersections) {\r
116 var me = this,\r
117 i, ln, point;\r
118 me.dots.clearAll();\r
119 for (i = 0, ln = intersections.length; i < ln; i++) {\r
120 point = intersections[i];\r
121 me.dots.createInstance({\r
122 cx: point[0],\r
123 cy: point[1]\r
124 });\r
125 }\r
126 },\r
127\r
128 initComponent: function () {\r
129 var me = this,\r
130 surface = me.getSurface();\r
131 me.callParent(arguments);\r
132 me.dots = Ext.create('Ext.draw.sprite.Instancing', {\r
133 template: {\r
134 type: 'circle',\r
135 radius: 5,\r
136 fillStyle: 'black'\r
137 }\r
138 });\r
139 surface.add(me.dots);\r
140 }\r
141\r
142});