diff options
Diffstat (limited to 'js/tools/PanTool.js')
-rwxr-xr-x | js/tools/PanTool.js | 66 |
1 files changed, 47 insertions, 19 deletions
diff --git a/js/tools/PanTool.js b/js/tools/PanTool.js index ce7606a1..132ac0b1 100755 --- a/js/tools/PanTool.js +++ b/js/tools/PanTool.js | |||
@@ -21,6 +21,9 @@ exports.PanTool = Montage.create(toolBase, | |||
21 | _lastGPt :{value: [0,0], writable:true}, | 21 | _lastGPt :{value: [0,0], writable:true}, |
22 | _lastY :{value: 0, writable:true}, | 22 | _lastY :{value: 0, writable:true}, |
23 | 23 | ||
24 | _maxHorizontalScroll: {value: 0, writable:true}, | ||
25 | _maxVerticalScroll: {value: 0, writable:true}, | ||
26 | |||
24 | Configure: { | 27 | Configure: { |
25 | value: function ( doActivate ) | 28 | value: function ( doActivate ) |
26 | { | 29 | { |
@@ -43,10 +46,19 @@ exports.PanTool = Montage.create(toolBase, | |||
43 | 46 | ||
44 | HandleLeftButtonDown: { | 47 | HandleLeftButtonDown: { |
45 | value : function ( event ) { | 48 | value : function ( event ) { |
46 | this._isDrawing = true; | 49 | // Determine the maximum horizontal and vertical scroll values |
47 | this.isDrawing = true; | 50 | this._maxHorizontalScroll = this.application.ninja.currentDocument.documentRoot.scrollWidth - this.application.ninja.stage._canvas.width - 11; |
48 | 51 | this._maxVerticalScroll = this.application.ninja.currentDocument.documentRoot.scrollHeight - this.application.ninja.stage._canvas.height - 11; | |
49 | this.mouseDown( event ); | 52 | if((this._maxHorizontalScroll > 0) || (this._maxVerticalScroll > 0) || this._altKeyDown) |
53 | { | ||
54 | this._isDrawing = true; | ||
55 | this.isDrawing = true; | ||
56 | this.mouseDown( event ); | ||
57 | } | ||
58 | // else | ||
59 | // { | ||
60 | // console.log("nothing to scroll"); | ||
61 | // } | ||
50 | } | 62 | } |
51 | }, | 63 | }, |
52 | 64 | ||
@@ -136,8 +148,8 @@ exports.PanTool = Montage.create(toolBase, | |||
136 | delta = 10*event.wheelDelta/120; | 148 | delta = 10*event.wheelDelta/120; |
137 | //console.log( "delta: " + delta ); | 149 | //console.log( "delta: " + delta ); |
138 | 150 | ||
139 | this.application.ninja.stage._iframeContainer.scrollLeft += delta; | 151 | this.application.ninja.currentDocument.documentRoot.scrollLeft += delta; |
140 | this.application.ninja.stage._scrollLeft += delta; | 152 | // this.application.ninja.stage._scrollLeft += delta; |
141 | 153 | ||
142 | delta *= zoom; | 154 | delta *= zoom; |
143 | 155 | ||
@@ -291,17 +303,19 @@ exports.PanTool = Montage.create(toolBase, | |||
291 | if (this._isDrawing) | 303 | if (this._isDrawing) |
292 | { | 304 | { |
293 | // get the global screen point | 305 | // get the global screen point |
294 | var gPt = [point.x, point.y, this._globalPt[2]]; | 306 | var gPt = [point.x, point.y, this._globalPt[2]], |
307 | dx, | ||
308 | dy; | ||
295 | if (this._altKeyDown) | 309 | if (this._altKeyDown) |
296 | { | 310 | { |
297 | var dy = 5*(point.y - this._lastY); | 311 | dy = 5*(point.y - this._lastY); |
298 | this._globalPt[2] += dy; | 312 | this._globalPt[2] += dy; |
299 | gPt = [this._lastGPt[0], this._lastGPt[1], this._globalPt[2]]; | 313 | gPt = [this._lastGPt[0], this._lastGPt[1], this._globalPt[2]]; |
300 | } | 314 | } |
301 | else if (this._shiftKeyDown) | 315 | else if (this._shiftKeyDown) |
302 | { | 316 | { |
303 | var dx = Math.abs( this._shiftPt[0] - gPt[0] ), | 317 | dx = Math.abs( this._shiftPt[0] - gPt[0] ); |
304 | dy = Math.abs( this._shiftPt[1] - gPt[1] ); | 318 | dy = Math.abs( this._shiftPt[1] - gPt[1] ); |
305 | 319 | ||
306 | if (dx >= dy) | 320 | if (dx >= dy) |
307 | gPt[1] = this._shiftPt[1]; | 321 | gPt[1] = this._shiftPt[1]; |
@@ -310,16 +324,28 @@ exports.PanTool = Montage.create(toolBase, | |||
310 | } | 324 | } |
311 | 325 | ||
312 | // update the scrollbars | 326 | // update the scrollbars |
313 | var deltaGPt = VecUtils.vecSubtract(2, gPt, this._lastGPt); | 327 | var deltaGPt = vecUtils.vecSubtract(2, gPt, this._lastGPt); |
314 | this._lastGPt = gPt.slice(); | 328 | this._lastGPt = gPt.slice(); |
315 | this._lastY = point.y; | 329 | this._lastY = point.y; |
316 | 330 | var limitX = false; | |
317 | var oldLeft = this.application.ninja.stage._iframeContainer.scrollLeft, | 331 | var limitY = false; |
318 | oldTop = this.application.ninja.stage._iframeContainer.scrollTop; | 332 | |
319 | this.application.ninja.stage._iframeContainer.scrollLeft -= deltaGPt[0]; | 333 | var oldLeft = this.application.ninja.currentDocument.documentRoot.scrollLeft, |
320 | this.application.ninja.stage._iframeContainer.scrollTop -= deltaGPt[1]; | 334 | oldTop = this.application.ninja.currentDocument.documentRoot.scrollTop, |
321 | deltaGPt[0] = oldLeft - this.application.ninja.stage._iframeContainer.scrollLeft; | 335 | newLeft = oldLeft - deltaGPt[0], |
322 | deltaGPt[1] = oldTop - this.application.ninja.stage._iframeContainer.scrollTop; | 336 | newTop = oldTop - deltaGPt[1]; |
337 | if((newLeft < 0) || (newLeft > this._maxHorizontalScroll)) | ||
338 | { | ||
339 | limitX = true; | ||
340 | } | ||
341 | if((newTop < 0) || (newTop > this._maxVerticalScroll)) | ||
342 | { | ||
343 | limitY = true; | ||
344 | } | ||
345 | this.application.ninja.currentDocument.documentRoot.scrollLeft -= deltaGPt[0]; | ||
346 | this.application.ninja.currentDocument.documentRoot.scrollTop -= deltaGPt[1]; | ||
347 | deltaGPt[0] = oldLeft - this.application.ninja.currentDocument.documentRoot.scrollLeft; | ||
348 | deltaGPt[1] = oldTop - this.application.ninja.currentDocument.documentRoot.scrollTop; | ||
323 | 349 | ||
324 | gPt[0] -= deltaGPt[0]; | 350 | gPt[0] -= deltaGPt[0]; |
325 | gPt[1] -= deltaGPt[1]; | 351 | gPt[1] -= deltaGPt[1]; |
@@ -334,7 +360,7 @@ exports.PanTool = Montage.create(toolBase, | |||
334 | 360 | ||
335 | // limit the change | 361 | // limit the change |
336 | var ucMat = viewUtils.getMatrixFromElement(this.application.ninja.currentDocument.documentRoot); | 362 | var ucMat = viewUtils.getMatrixFromElement(this.application.ninja.currentDocument.documentRoot); |
337 | var tooMuch = false | 363 | var tooMuch = false; |
338 | if ((ucMat[12] > 12000) && (delta[0] > 0)) tooMuch = true; | 364 | if ((ucMat[12] > 12000) && (delta[0] > 0)) tooMuch = true; |
339 | if ((ucMat[12] < -12000) && (delta[0] < 0)) tooMuch = true; | 365 | if ((ucMat[12] < -12000) && (delta[0] < 0)) tooMuch = true; |
340 | if ((ucMat[13] > 12000) && (delta[1] > 0)) tooMuch = true; | 366 | if ((ucMat[13] > 12000) && (delta[1] > 0)) tooMuch = true; |
@@ -349,6 +375,8 @@ exports.PanTool = Montage.create(toolBase, | |||
349 | else | 375 | else |
350 | this._worldPt = wPt; | 376 | this._worldPt = wPt; |
351 | 377 | ||
378 | if(limitX) delta[0] = 0; | ||
379 | if(limitY) delta[1] = 0; | ||
352 | // update everything | 380 | // update everything |
353 | var transMat = Matrix.Translation( delta ); | 381 | var transMat = Matrix.Translation( delta ); |
354 | this.applyDeltaMat( transMat ); | 382 | this.applyDeltaMat( transMat ); |