| author | Harris Baptiste <harris.baptiste@iri.centrepompidou.fr> |
| Fri, 19 Aug 2016 19:04:26 +0200 | |
| changeset 146 | f912b591e1c1 |
| permissions | -rw-r--r-- |
|
146
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
1 |
/* Enabling us to resize a shape width a handler |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
2 |
#http://stackoverflow.com/questions/32390028/how-to-drag-and-resize-svg-rectangle-using-cursor-types |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
3 |
*/ |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
4 |
import { eventEmitter } from "../utils" |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
5 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
6 |
var ShapeResizer = function (paper, shape, vp, vb) { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
7 |
this.paper = paper; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
8 |
this.shape = shape; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
9 |
this.handlers = []; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
10 |
this.viewPort = vp; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
11 |
this.viewBox = vb; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
12 |
this.isResizing = false; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
13 |
this.currentPosition = {}; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
14 |
this.HANDLER_SIZE = 8; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
15 |
this.SHAPE_MIN_SIZE = 20; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
16 |
this.states = {}; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
17 |
this.noop = function (){} |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
18 |
this.init(); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
19 |
} |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
20 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
21 |
var api = ShapeResizer.prototype = { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
22 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
23 |
init: function () { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
24 |
this.showHandlers(); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
25 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
26 |
}, |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
27 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
28 |
computeHandlerSize: function () { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
29 |
return this.HANDLER_SIZE * (Math.min(this.viewBox[2], this.viewBox[3])) / this.viewPort.width; //w==h |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
30 |
}, |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
31 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
32 |
showHandlers: function () { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
33 |
/* show handler here */ |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
34 |
var bbox = this.shape.getBBox(); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
35 |
var handleX = bbox.x - (this.computeHandlerSize()/2); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
36 |
var handleY = bbox.y - (this.computeHandlerSize()/2); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
37 |
var handler = this.paper.rect(handleX, handleY, this.computeHandlerSize(), this.computeHandlerSize()).attr({fill: 'red'}); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
38 |
handler.addClass("drawingHandler"); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
39 |
this.shape.addClass("drawingHandler"); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
40 |
var handlerInfos = {position: "t_r", handler: handler}; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
41 |
this.handlers.push(handlerInfos); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
42 |
this.shapesGroup = this.paper.g(this.shape, handler); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
43 |
this.attachEvents(); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
44 |
}, |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
45 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
46 |
/*one handlers */ |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
47 |
updateShapePositions: function (handlerData, dx, dy) { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
48 |
//start |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
49 |
var handlerBBox = handlerData.handler.getBBox(); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
50 |
var shapeBBox = this.shape.data("origBbox"); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
51 |
var newX = handlerBBox.x + (this.computeHandlerSize() / 2); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
52 |
var newY = handlerBBox.y + (this.computeHandlerSize() / 2); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
53 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
54 |
/*to the right => reduce the size */ |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
55 |
var newWidth = (dx > 0) ? shapeBBox.width - dx : shapeBBox.width + Math.abs(dx); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
56 |
var newHeight = (dy > 0) ? shapeBBox.height - dy : shapeBBox.height + Math.abs(dy); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
57 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
58 |
var transformValue = this.shape.data('origTransform') + (this.shape.data('origTransform') ? "T" : "t") + [dx, dy]; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
59 |
this.shape.attr({'transform': transformValue, width: newWidth, height: newHeight}); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
60 |
}, |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
61 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
62 |
dragEvents: { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
63 |
onStart: function (handlerData, dx, dy, e) { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
64 |
this.startPosition = {x: e.clientX, y: e.clientY}; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
65 |
this.isResizing = true; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
66 |
this.currentPosition = {}; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
67 |
handlerData.handler.data("origTransform", handlerData.handler.transform().local); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
68 |
this.shape.data("origBbox", this.shape.getBBox()); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
69 |
this.shape.data("origBounding", this.shape.node.getBoundingClientRect()); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
70 |
this.shape.data("origTransform", this.shape.transform().local); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
71 |
}, |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
72 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
73 |
onMove: function (handlerData, dx, dy, x, y, e) { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
74 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
75 |
var tdx, tdy; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
76 |
var snapInvMatrix = handlerData.handler.transform().diffMatrix.invert(); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
77 |
snapInvMatrix.e = snapInvMatrix.f = 0; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
78 |
tdx = snapInvMatrix.x( dx,dy ); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
79 |
tdy = snapInvMatrix.y( dx,dy ); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
80 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
81 |
this.currentPosition.x = e.clientX; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
82 |
this.currentPosition.y = e.clientY; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
83 |
if (! this.checkBondaries(dx, dy)) { return; } |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
84 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
85 |
handlerData.handler.transform( "t" + [ tdx, tdy ] + handlerData.handler.data("origTransform") ); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
86 |
this.updateShapePositions(handlerData, tdx, tdy); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
87 |
}, |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
88 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
89 |
onStop: function () { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
90 |
this.isResizing = false; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
91 |
this.startPosition = {}; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
92 |
this.currentPosition = {}; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
93 |
} |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
94 |
}, |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
95 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
96 |
checkBondaries: function (dx, dy) { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
97 |
var result = true; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
98 |
var origBounding = this.shape.data("origBounding"); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
99 |
var getBoundingClientRect = this.shape.node.getBoundingClientRect(); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
100 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
101 |
if (origBounding.width - dx <= this.SHAPE_MIN_SIZE) { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
102 |
result = false; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
103 |
} |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
104 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
105 |
if (origBounding.height - dy <= this.SHAPE_MIN_SIZE) { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
106 |
result = false; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
107 |
} |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
108 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
109 |
return result; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
110 |
}, |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
111 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
112 |
destroy: function () { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
113 |
this.handlers.map(function (handlerData) { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
114 |
handlerData.handler.remove(); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
115 |
}); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
116 |
delete this; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
117 |
}, |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
118 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
119 |
getZoomFactor: function () { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
120 |
return { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
121 |
x: this.viewPort.width / this.viewBox[2], |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
122 |
y: this.viewPort.height / this.viewBox[3] |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
123 |
}; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
124 |
}, |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
125 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
126 |
attachEvents: function () { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
127 |
var self = this; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
128 |
this.handlers.map(function (handlerData) { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
129 |
handlerData.handler.drag( |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
130 |
self.dragEvents.onMove.bind(self, handlerData), |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
131 |
self.dragEvents.onStart.bind(self, handlerData), |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
132 |
self.dragEvents.onStop.bind(self, handlerData)); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
133 |
}); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
134 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
135 |
eventEmitter.on("cutout:clear", function () { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
136 |
self.destroy(); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
137 |
}); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
138 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
139 |
this.shapesGroup.drag(function (dx, dy) { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
140 |
if (self.isResizing) { return; } |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
141 |
var snapInvMatrix = this.transform().diffMatrix.invert(); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
142 |
snapInvMatrix.e = snapInvMatrix.f = 0; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
143 |
var tdx = snapInvMatrix.x( dx,dy ); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
144 |
var tdy = snapInvMatrix.y( dx,dy ); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
145 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
146 |
var transformValue = this.data('origTransform') + (this.data('origTransform') ? "T" : "t") + [tdx, tdy]; |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
147 |
this.transform(transformValue); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
148 |
}, function () { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
149 |
this.data('origTransform', this.transform().local); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
150 |
}, this.noop); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
151 |
}, |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
152 |
} |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
153 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
154 |
export default { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
155 |
|
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
156 |
enable_resizer : function (paper, rect, viewPort, cViewbox) { |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
157 |
new ShapeResizer(paper, rect, viewPort, cViewbox); |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
158 |
} |
|
f912b591e1c1
new src_js folder
Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
parents:
diff
changeset
|
159 |
} |