/* This scripts contains all the code used to handle the sprite scaling */ // Should I keep the sprite ratio? let keepRatio = true; // Used to store the current ratio let currentRatio; // The currenty selected resizing algorithm (nearest-neighbor or bilinear-interpolation) let currentAlgo = 'nearest-neighbor'; // Current resize data let data = {width: 0, height: 0, widthPercentage: 100, heightPercentage: 100}; // Start resize data let startData = {width: 0, height:0, widthPercentage: 100, heightPercentage: 100}; /** Opens the sprite resizing window * */ function openResizeSpriteWindow() { // Inits the sprie resize inputs initResizeSpriteInputs(); // Computing the current ratio currentRatio = layers[0].canvasSize[0] / layers[0].canvasSize[1]; console.log("Current ratio: " + currentRatio); // Initializing the input fields data.width = layers[0].canvasSize[0]; data.height = layers[1].canvasSize[1]; startData.width = parseInt(data.width); startData.height = parseInt(data.height); startData.heightPercentage = 100; startData.widthPercentage = 100; // Opening the pop up now that it's ready showDialogue('resize-sprite'); } /** Initalizes the input values and binds the elements to their events * */ function initResizeSpriteInputs() { document.getElementById("rs-width").value = layers[0].canvasSize[0]; document.getElementById("rs-height").value = layers[0].canvasSize[1]; document.getElementById("rs-width-percentage").value = 100; document.getElementById("rs-height-percentage").value = 100; document.getElementById("rs-keep-ratio").checked = true; document.getElementById("rs-width").addEventListener("change", changedWidth); document.getElementById("rs-height").addEventListener("change", changedHeight); document.getElementById("rs-width-percentage").addEventListener("change", changedWidthPercentage); document.getElementById("rs-height-percentage").addEventListener("change", changedHeightPercentage); document.getElementById("resize-sprite-confirm").addEventListener("click", resizeSprite); document.getElementById("rs-keep-ratio").addEventListener("click", toggleRatio); document.getElementById("resize-algorithm-combobox").addEventListener("change", changedAlgorithm); } /** Resizes (scales) the sprite * * @param {*} event * @param {*} ratio Keeps infos about the x ratio and y ratio */ function resizeSprite(event, ratio) { // Old data let oldWidth, oldHeight; // New data let newWidth, newHeight; // Current imageDatas let rsImageDatas = []; // Index that will be used a few lines below let layerIndex = 0; // Copy of the imageDatas that will be stored in the history let imageDatasCopy = []; oldWidth = layers[0].canvasSize[0]; oldHeight = layers[1].canvasSize[1]; rcPivot = "middle"; // Updating values if the user didn't press enter switch (document.activeElement.id) { case "rs-width-percentage": changedWidthPercentage(); break; case "rs-width": changedWidth(); break; case "rs-height-percentage": changedHeightPercentage(); break; case "rs-height": changedHeight(); break; default: // In this case everything has been updated correctly break; } // Computing newWidth and newHeight if (ratio == null) { newWidth = data.width; newHeight = data.height; } else { newWidth = layers[0].canvasSize[0] * ratio[0]; newHeight = layers[1].canvasSize[1] * ratio[1]; } // Get all the image datas for (let i=0; i