piskel/dev/js/controller/CursorCoordinatesController.js
2017-05-22 09:56:42 +02:00

72 lines
2.0 KiB
JavaScript

(function () {
var ns = $.namespace('pskl.controller');
ns.CursorCoordinatesController = function (piskelController) {
this.piskelController = piskelController;
this.origin = null;
this.coordinates = {
x : -1,
y : -1
};
};
ns.CursorCoordinatesController.prototype.init = function () {
this.coordinatesContainer = document.querySelector('.cursor-coordinates');
$.subscribe(Events.CURSOR_MOVED, this.onCursorMoved_.bind(this));
$.subscribe(Events.DRAG_START, this.onDragStart_.bind(this));
$.subscribe(Events.DRAG_END, this.onDragEnd_.bind(this));
$.subscribe(Events.FRAME_SIZE_CHANGED, this.redraw.bind(this));
this.redraw();
};
ns.CursorCoordinatesController.prototype.redraw = function () {
var html = '';
if (this.origin) {
html += this.origin.x + ':' + this.origin.y + ' to ';
}
var x = this.coordinates.x;
var y = this.coordinates.y;
var currentFrame = this.piskelController.getCurrentFrame();
if (currentFrame.containsPixel(x, y)) {
html += x + ':' + y;
if (this.origin) {
var dX = Math.abs(x - this.origin.x) + 1;
var dY = Math.abs(y - this.origin.y) + 1;
html += ' (' + dX + 'x' + dY + ')';
}
}
this.coordinatesContainer.innerHTML = this.getFrameSizeHTML_() + html;
};
ns.CursorCoordinatesController.prototype.getFrameSizeHTML_ = function () {
var w = this.piskelController.getWidth();
var h = this.piskelController.getHeight();
return '[' + w + 'x' + h + '] ';
};
ns.CursorCoordinatesController.prototype.onCursorMoved_ = function (event, x, y) {
this.coordinates = {
x : x,
y : y
};
this.redraw();
};
ns.CursorCoordinatesController.prototype.onDragStart_ = function (event, x, y) {
this.origin = {
x : x,
y : y
};
this.redraw();
};
ns.CursorCoordinatesController.prototype.onDragEnd_ = function (event) {
this.origin = null;
this.redraw();
};
})();