@foblex/core
Version:
A core library providing a set of utilities and interfaces for various projects.
25 lines • 4.87 kB
JavaScript
import { PointExtensions } from '../../types';
export function mixinChangeZoom(base) {
return class extends base {
setZoom(scaleValue, toPosition) {
if (scaleValue !== this.transform.scale) {
const summaryPosition = PointExtensions.sum(this.transform.scaledPosition, this.transform.position);
const newX = toPosition.x - (toPosition.x - summaryPosition.x) * scaleValue / this.transform.scale;
const newY = toPosition.y - (toPosition.y - summaryPosition.y) * scaleValue / this.transform.scale;
this.transform.scale = scaleValue;
this.transform.scaledPosition = PointExtensions.sub(PointExtensions.initialize(newX, newY), this.transform.position);
}
}
setScalePosition(value) {
this.transform.scaledPosition = value;
}
resetZoom() {
this.transform.scale = 1;
this.transform.scaledPosition = PointExtensions.initialize();
}
constructor(...args) {
super(...args);
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlLXpvb20uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWNvcmUvc3JjL21peGlucy9jaGFuZ2Utem9vbS9jaGFuZ2Utem9vbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQVUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBS3RELE1BQU0sVUFBVSxlQUFlLENBQXdDLElBQU87SUFDNUUsT0FBTyxLQUFNLFNBQVEsSUFBSTtRQUVoQixPQUFPLENBQUMsVUFBa0IsRUFBRSxVQUFrQjtZQUNuRCxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtnQkFFdkMsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVwRyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUNuRyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUVuRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN0SDtRQUNILENBQUM7UUFFTSxnQkFBZ0IsQ0FBQyxLQUFhO1lBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUN4QyxDQUFDO1FBRU0sU0FBUztZQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0QsQ0FBQztRQUVELFlBQVksR0FBRyxJQUFXO1lBQ3hCLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2pCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29uc3RydWN0b3IsIENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vY29uc3RydWN0b3InO1xuaW1wb3J0IHsgSUNhbkNoYW5nZVpvb20gfSBmcm9tICcuL2ktY2FuLWNoYW5nZS16b29tJztcbmltcG9ydCB7IElUcmFuc2Zvcm1hYmxlIH0gZnJvbSAnLi4vaS10cmFuc2Zvcm1hYmxlJztcbmltcG9ydCB7IElQb2ludCwgUG9pbnRFeHRlbnNpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG50eXBlIENhbkNoYW5nZVpvb21Db25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yPElDYW5DaGFuZ2Vab29tPiAmIEFic3RyYWN0Q29uc3RydWN0b3I8SUNhbkNoYW5nZVpvb20+O1xuXG5leHBvcnQgZnVuY3Rpb24gbWl4aW5DaGFuZ2Vab29tPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPElUcmFuc2Zvcm1hYmxlPj4oYmFzZTogVCk6IENhbkNoYW5nZVpvb21Db25zdHJ1Y3RvciAmIFQ7XG5leHBvcnQgZnVuY3Rpb24gbWl4aW5DaGFuZ2Vab29tPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxJVHJhbnNmb3JtYWJsZT4+KGJhc2U6IFQpOiBDYW5DaGFuZ2Vab29tQ29uc3RydWN0b3IgJiBUIHtcbiAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgYmFzZSB7XG5cbiAgICBwdWJsaWMgc2V0Wm9vbShzY2FsZVZhbHVlOiBudW1iZXIsIHRvUG9zaXRpb246IElQb2ludCk6IHZvaWQge1xuICAgICAgaWYgKHNjYWxlVmFsdWUgIT09IHRoaXMudHJhbnNmb3JtLnNjYWxlKSB7XG5cbiAgICAgICAgY29uc3Qgc3VtbWFyeVBvc2l0aW9uID0gUG9pbnRFeHRlbnNpb25zLnN1bSh0aGlzLnRyYW5zZm9ybS5zY2FsZWRQb3NpdGlvbiwgdGhpcy50cmFuc2Zvcm0ucG9zaXRpb24pO1xuXG4gICAgICAgIGNvbnN0IG5ld1ggPSB0b1Bvc2l0aW9uLnggLSAodG9Qb3NpdGlvbi54IC0gc3VtbWFyeVBvc2l0aW9uLngpICogc2NhbGVWYWx1ZSAvIHRoaXMudHJhbnNmb3JtLnNjYWxlO1xuICAgICAgICBjb25zdCBuZXdZID0gdG9Qb3NpdGlvbi55IC0gKHRvUG9zaXRpb24ueSAtIHN1bW1hcnlQb3NpdGlvbi55KSAqIHNjYWxlVmFsdWUgLyB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcblxuICAgICAgICB0aGlzLnRyYW5zZm9ybS5zY2FsZSA9IHNjYWxlVmFsdWU7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtLnNjYWxlZFBvc2l0aW9uID0gUG9pbnRFeHRlbnNpb25zLnN1YihQb2ludEV4dGVuc2lvbnMuaW5pdGlhbGl6ZShuZXdYLCBuZXdZKSwgdGhpcy50cmFuc2Zvcm0ucG9zaXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTY2FsZVBvc2l0aW9uKHZhbHVlOiBJUG9pbnQpOiB2b2lkIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtLnNjYWxlZFBvc2l0aW9uID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0Wm9vbSgpOiB2b2lkIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtLnNjYWxlID0gMTtcbiAgICAgIHRoaXMudHJhbnNmb3JtLnNjYWxlZFBvc2l0aW9uID0gUG9pbnRFeHRlbnNpb25zLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgfVxuICB9O1xufVxuIl19