mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
deploy dev version
This commit is contained in:
84
dev/js/controller/drawing/DragHandler.js
Normal file
84
dev/js/controller/drawing/DragHandler.js
Normal file
@@ -0,0 +1,84 @@
|
||||
(function () {
|
||||
var ns = $.namespace('pskl.controller.drawing');
|
||||
|
||||
/**
|
||||
* Multiplier applied between the mouse movement and viewport movement
|
||||
* @type {Number}
|
||||
*/
|
||||
var MULTIPLIER = 2;
|
||||
|
||||
/**
|
||||
* Dedicated handler to drag the drawing canvas using the mouse
|
||||
* Will store the initial coordinates as well as the status of the drag
|
||||
* @param {DrawingController} drawingController
|
||||
*/
|
||||
ns.DragHandler = function (drawingController) {
|
||||
this.drawingController = drawingController;
|
||||
|
||||
this.isDragging_ = false;
|
||||
this.updateOrigin_(-1, -1);
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize a drag session.
|
||||
* @param {Number} x : x coordinate of the mouse event that initiated the drag
|
||||
* @param {Number} y : y coordinate of the mouse event that initiated the drag
|
||||
*/
|
||||
ns.DragHandler.prototype.startDrag = function (x, y) {
|
||||
var coords = this.drawingController.getSpriteCoordinates(x, y);
|
||||
this.updateOrigin_(coords.x, coords.y);
|
||||
};
|
||||
|
||||
/**
|
||||
* Update the drag status
|
||||
* @param {Number} x : x coordinate of the mouse event that triggered the update
|
||||
* @param {Number} y : y coordinate of the mouse event that triggered the update
|
||||
*/
|
||||
ns.DragHandler.prototype.updateDrag = function (x, y) {
|
||||
var currentOffset = this.drawingController.getOffset();
|
||||
var offset = this.calculateOffset_(x, y);
|
||||
if (currentOffset.y !== offset.y || currentOffset.x !== offset.x) {
|
||||
this.isDragging_ = true;
|
||||
this.drawingController.setOffset(offset.x, offset.y);
|
||||
|
||||
// retrieve the updated coordinates after moving the sprite
|
||||
// and store them as the new drag origin
|
||||
var coords = this.drawingController.getSpriteCoordinates(x, y);
|
||||
this.updateOrigin_(coords.x, coords.y);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Stop the drag session
|
||||
*/
|
||||
ns.DragHandler.prototype.stopDrag = function () {
|
||||
this.isDragging_ = false;
|
||||
this.origin = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Will return true if the drag handler effectively MOVED the offset
|
||||
* during the current drag session
|
||||
*/
|
||||
ns.DragHandler.prototype.isDragging = function () {
|
||||
return this.isDragging_;
|
||||
};
|
||||
|
||||
ns.DragHandler.prototype.calculateOffset_ = function (x, y) {
|
||||
var coords = this.drawingController.getSpriteCoordinates(x, y);
|
||||
var currentOffset = this.drawingController.getOffset();
|
||||
|
||||
var offset = {
|
||||
x : currentOffset.x - MULTIPLIER * (coords.x - this.origin.x),
|
||||
y : currentOffset.y - MULTIPLIER * (coords.y - this.origin.y)
|
||||
};
|
||||
|
||||
return offset;
|
||||
};
|
||||
|
||||
ns.DragHandler.prototype.updateOrigin_ = function (x, y) {
|
||||
this.origin = this.origin || {};
|
||||
this.origin.x = x;
|
||||
this.origin.y = y;
|
||||
};
|
||||
})();
|
||||
Reference in New Issue
Block a user