Implement originX/originY support, implement onSet transformation support, implement rendering offset support, fix cacheing to actually cache, fix cache rendering to clearRect before rendering
parent
f0edd3b63e
commit
e5e352247b
@ -0,0 +1,53 @@
|
||||
'use strict';
|
||||
|
||||
const defaultValue = require("default-value");
|
||||
|
||||
const validateSync = require("./validate-sync");
|
||||
|
||||
let originAliases = {
|
||||
top: 0,
|
||||
left: 0,
|
||||
center: "50%",
|
||||
bottom: "100%",
|
||||
right: "100%"
|
||||
}
|
||||
|
||||
function tryAlias(value) {
|
||||
if (originAliases[value] != null) {
|
||||
return originAliases[value];
|
||||
} else {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
function calculateOffset(value, origin) {
|
||||
if (typeof origin === "number") {
|
||||
return -origin;
|
||||
} else {
|
||||
let match = /^(-?[0-9]+(?:\.[0-9]+)?)%$/.exec(origin);
|
||||
|
||||
if (match == null) {
|
||||
throw new Error(`Encountered invalid origin value: ${origin}`);
|
||||
} else {
|
||||
let percentage = match[1];
|
||||
return -(value * (parseFloat(percentage) / 100));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = function calculateOriginOffsets(options) {
|
||||
validateSync(options, {
|
||||
width: "required",
|
||||
height: "required",
|
||||
originX: "required",
|
||||
originY: "required"
|
||||
});
|
||||
|
||||
let originX = tryAlias(options.originX);
|
||||
let originY = tryAlias(options.originY);
|
||||
|
||||
return {
|
||||
x: calculateOffset(options.width, originX),
|
||||
y: calculateOffset(options.height, originY)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue