/*
* This file is part of AUX.
*
* AUX is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* AUX is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General
* Public License along with this program; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
/**
* @module utils/anchor
*/
/**
* Returns real x and y values from a relative positioning.
*
* @function translateAnchor
*
* @param {string} [anchor="top-left"] - Position of the anchor. Can be one out of
* `top-left`, `top`, `top-right`, `left`, `center`, `right`, `bottom-left`,
* `bottom` or `bottom-right` or a percentual value like `25% 75%` for x and y
* or `50%` to set x and y to the same value.
* @param {number} x - X position to translate.
* @param {number} y - Y position to translate.
* @param {number} width - Width of the element.
* @param {number} height - Height of the element.
*
* @returns {object} Object with members x and y as numbers
*/
export function translateAnchor(anchor, x, y, width, height) {
const amnt = anchor.split('%').length - 1;
if (amnt) {
if (amnt === 1) {
x += (parseInt(anchor) / 100) * width;
y += (parseInt(anchor) / 100) * height;
} else {
const split = anchor.split(' ');
x += (parseInt(split[0]) / 100) * width;
y += (parseInt(split[1]) / 100) * height;
}
} else {
switch (anchor) {
case 'top-left':
break;
case 'top':
x += width / 2;
break;
case 'top-right':
x += width;
break;
case 'left':
y += height / 2;
break;
case 'center':
x += width / 2;
y += height / 2;
break;
case 'right':
x += width;
y += height / 2;
break;
case 'bottom-left':
y += height;
break;
case 'bottom':
x += width / 2;
y += height;
break;
case 'bottom-right':
x += width;
y += height;
break;
default:
throw new Error('Unsupported anchor position');
}
}
return { x: Math.round(x), y: Math.round(y) };
}