mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
Finished first step of refactor.
This commit is contained in:
62
js/controller/AnimatedPreviewController.js
Normal file
62
js/controller/AnimatedPreviewController.js
Normal file
@ -0,0 +1,62 @@
|
||||
(function () {
|
||||
var ns = $.namespace("pskl.controller");
|
||||
ns.AnimatedPreviewController = function (framesheet, container, dpi) {
|
||||
this.dpi = dpi;
|
||||
this.framesheet = framesheet;
|
||||
this.container = container;
|
||||
this.animIndex = 0;
|
||||
|
||||
this.fps = parseInt($("#preview-fps")[0].value, 10);
|
||||
|
||||
this.renderer = new pskl.rendering.FrameRenderer();
|
||||
};
|
||||
|
||||
ns.AnimatedPreviewController.prototype.init = function () {
|
||||
this.initDom();
|
||||
this.startAnimationTimer();
|
||||
};
|
||||
|
||||
ns.AnimatedPreviewController.prototype.initDom = function () {
|
||||
var frame = this.framesheet.getFrameByIndex(0);
|
||||
var height = frame.getHeight() * this.dpi,
|
||||
width = frame.getWidth() * this.dpi;
|
||||
|
||||
previewCanvas = document.createElement('canvas');
|
||||
previewCanvas.className = 'canvas';
|
||||
|
||||
this.container.setAttribute('style', 'width:' + width + 'px; height:' + height + 'px;');
|
||||
previewCanvas.setAttribute('width', width);
|
||||
previewCanvas.setAttribute('height', height);
|
||||
|
||||
this.container.appendChild(previewCanvas);
|
||||
this.previewCanvas = previewCanvas;
|
||||
|
||||
$("#preview-fps")[0].addEventListener('change', this.onFPSSliderChange.bind(this));
|
||||
};
|
||||
|
||||
ns.AnimatedPreviewController.prototype.startAnimationTimer = function () {
|
||||
this.stopAnimationTimer();
|
||||
this.animationTimer = window.setTimeout(this.refreshAnimatedPreview.bind(this), 1000/this.fps);
|
||||
};
|
||||
|
||||
ns.AnimatedPreviewController.prototype.stopAnimationTimer = function () {
|
||||
if (this.animationTimer) {
|
||||
window.clearInterval(this.animationTimer);
|
||||
this.animationTimer = null;
|
||||
}
|
||||
};
|
||||
|
||||
ns.AnimatedPreviewController.prototype.onFPSSliderChange = function(evt) {
|
||||
this.fps = parseInt($("#preview-fps")[0].value, 10);
|
||||
};
|
||||
|
||||
ns.AnimatedPreviewController.prototype.refreshAnimatedPreview = function () {
|
||||
this.renderer.render(this.framesheet.getFrameByIndex(this.animIndex), this.previewCanvas, this.dpi);
|
||||
this.animIndex++;
|
||||
if (this.animIndex == this.framesheet.getFrameCount()) {
|
||||
this.animIndex = 0;
|
||||
}
|
||||
this.startAnimationTimer();
|
||||
};
|
||||
|
||||
})();
|
89
js/controller/PreviewFilmController.js
Normal file
89
js/controller/PreviewFilmController.js
Normal file
@ -0,0 +1,89 @@
|
||||
(function () {
|
||||
var ns = $.namespace("pskl.controller");
|
||||
ns.PreviewFilmController = function (framesheet, container, dpi) {
|
||||
|
||||
this.dpi = dpi;
|
||||
this.framesheet = framesheet;
|
||||
this.container = container;
|
||||
|
||||
this.renderer = new pskl.rendering.FrameRenderer();
|
||||
};
|
||||
|
||||
ns.PreviewFilmController.prototype.init = function() {
|
||||
var addFrameButton = $('#add-frame-button')[0];
|
||||
addFrameButton.addEventListener('mousedown', this.addFrame.bind(this));
|
||||
this.createPreviews();
|
||||
};
|
||||
|
||||
ns.PreviewFilmController.prototype.addFrame = function () {
|
||||
this.framesheet.addEmptyFrame();
|
||||
piskel.setActiveFrameAndRedraw(this.framesheet.getFrameCount() - 1);
|
||||
};
|
||||
|
||||
ns.PreviewFilmController.prototype.createPreviews = function () {
|
||||
this.container.innerHTML = "";
|
||||
for (var i = 0, l = this.framesheet.getFrameCount(); i < l ; i++) {
|
||||
this.container.appendChild(this.createPreviewTile(i));
|
||||
}
|
||||
};
|
||||
|
||||
ns.PreviewFilmController.prototype.createPreviewTile = function(tileNumber) {
|
||||
var frame = this.framesheet.getFrameByIndex(tileNumber);
|
||||
var width = frame.getWidth() * this.dpi,
|
||||
height = frame.getHeight() * this.dpi;
|
||||
|
||||
var previewTileRoot = document.createElement("li");
|
||||
var classname = "preview-tile";
|
||||
|
||||
if (piskel.getActiveFrameIndex() == tileNumber) {
|
||||
classname += " selected";
|
||||
}
|
||||
previewTileRoot.className = classname;
|
||||
|
||||
var canvasContainer = document.createElement("div");
|
||||
canvasContainer.className = "canvas-container";
|
||||
canvasContainer.setAttribute('style', 'width:' + width + 'px; height:' + height + 'px;');
|
||||
|
||||
var canvasBackground = document.createElement("div");
|
||||
canvasBackground.className = "canvas-background";
|
||||
canvasContainer.appendChild(canvasBackground);
|
||||
|
||||
var canvasPreview = document.createElement("canvas");
|
||||
canvasPreview.className = "canvas tile-view"
|
||||
|
||||
canvasPreview.setAttribute('width', width);
|
||||
canvasPreview.setAttribute('height', height);
|
||||
|
||||
previewTileRoot.addEventListener('click', function(evt) {
|
||||
// has not class tile-action:
|
||||
if(!evt.target.classList.contains('tile-action')) {
|
||||
piskel.setActiveFrameAndRedraw(tileNumber);
|
||||
}
|
||||
});
|
||||
|
||||
var canvasPreviewDuplicateAction = document.createElement("button");
|
||||
canvasPreviewDuplicateAction.className = "tile-action"
|
||||
canvasPreviewDuplicateAction.innerHTML = "dup"
|
||||
|
||||
canvasPreviewDuplicateAction.addEventListener('click', function(evt) {
|
||||
piskel.duplicateFrame(tileNumber);
|
||||
});
|
||||
|
||||
this.renderer.render(this.framesheet.getFrameByIndex(tileNumber), canvasPreview, this.dpi);
|
||||
canvasContainer.appendChild(canvasPreview);
|
||||
previewTileRoot.appendChild(canvasContainer);
|
||||
previewTileRoot.appendChild(canvasPreviewDuplicateAction);
|
||||
|
||||
if(tileNumber > 0 || this.framesheet.getFrameCount() > 1) {
|
||||
var canvasPreviewDeleteAction = document.createElement("button");
|
||||
canvasPreviewDeleteAction.className = "tile-action"
|
||||
canvasPreviewDeleteAction.innerHTML = "del"
|
||||
canvasPreviewDeleteAction.addEventListener('click', function(evt) {
|
||||
piskel.removeFrame(tileNumber);
|
||||
});
|
||||
previewTileRoot.appendChild(canvasPreviewDeleteAction);
|
||||
}
|
||||
|
||||
return previewTileRoot;
|
||||
};
|
||||
})();
|
Reference in New Issue
Block a user