mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
86 lines
3.0 KiB
JavaScript
86 lines
3.0 KiB
JavaScript
(function () {
|
|
var ns = $.namespace('pskl.utils');
|
|
|
|
ns.ResizeUtils = {
|
|
/**
|
|
* Resize the provided piskel instance and return a new instance using the provided resize options
|
|
* @param {Piskel} piskel [description]
|
|
* @param {Object} options
|
|
* - width {Number} target width after the resize
|
|
* - height {Number} target height after the resize
|
|
* - resizeContent {Booleam} true of the sprite content should be resized
|
|
* - origin {String} should be a valid AnchorWidget origin
|
|
* @return {Piskel} The resized piskel
|
|
*/
|
|
resizePiskel : function (piskel, options) {
|
|
var fps = piskel.getFPS();
|
|
var resizedLayers = piskel.getLayers().map(function (layer) {
|
|
return ns.ResizeUtils.resizeLayer(layer, options);
|
|
});
|
|
|
|
var resizedPiskel = pskl.model.Piskel.fromLayers(resizedLayers, fps, piskel.getDescriptor());
|
|
// propagate savepath to new Piskel
|
|
resizedPiskel.savePath = piskel.savePath;
|
|
|
|
return resizedPiskel;
|
|
},
|
|
|
|
resizeLayer : function (layer, options) {
|
|
var opacity = layer.getOpacity();
|
|
var resizedFrames = layer.getFrames().map(function (frame) {
|
|
return ns.ResizeUtils.resizeFrame(frame, options);
|
|
});
|
|
var resizedLayer = pskl.model.Layer.fromFrames(layer.getName(), resizedFrames);
|
|
resizedLayer.setOpacity(opacity);
|
|
return resizedLayer;
|
|
},
|
|
|
|
resizeFrame : function (frame, options) {
|
|
var width = options.width;
|
|
var height = options.height;
|
|
var origin = options.origin;
|
|
|
|
if (options.resizeContent) {
|
|
return pskl.utils.FrameUtils.resize(frame, width, height, false);
|
|
} else {
|
|
var resizedFrame = new pskl.model.Frame(width, height);
|
|
frame.forEachPixel(function (color, x, y) {
|
|
var translated = ns.ResizeUtils.translateCoordinates(x, y, frame, resizedFrame, origin);
|
|
if (resizedFrame.containsPixel(translated.x, translated.y)) {
|
|
resizedFrame.setPixel(translated.x, translated.y, color);
|
|
}
|
|
});
|
|
|
|
return resizedFrame;
|
|
}
|
|
},
|
|
|
|
translateCoordinates : function (x, y, frame, resizedFrame, origin) {
|
|
return {
|
|
x : ns.ResizeUtils.translateX(x, frame.width, resizedFrame.width, origin),
|
|
y : ns.ResizeUtils.translateY(y, frame.height, resizedFrame.height, origin)
|
|
};
|
|
},
|
|
|
|
translateX : function (x, width, resizedWidth, origin) {
|
|
if (origin.indexOf('LEFT') != -1) {
|
|
return x;
|
|
} else if (origin.indexOf('RIGHT') != -1) {
|
|
return x - (width - resizedWidth);
|
|
} else {
|
|
return x - Math.round((width - resizedWidth) / 2);
|
|
}
|
|
},
|
|
|
|
translateY : function (y, height, resizedHeight, origin) {
|
|
if (origin.indexOf('TOP') != -1) {
|
|
return y;
|
|
} else if (origin.indexOf('BOTTOM') != -1) {
|
|
return y - (height - resizedHeight);
|
|
} else {
|
|
return y - Math.round((height - resizedHeight) / 2);
|
|
}
|
|
}
|
|
};
|
|
})();
|