1
Fork 0
keyswirl/layout-lens/src/layout.ts

57 lines
1.2 KiB
TypeScript
Raw Normal View History

2023-10-22 16:10:53 +02:00
import { VisualKey, VisualLayout } from "./types";
import * as V from "./vec2";
function visualKey(at: V.Vec2, keySize: number, angle: number = 0): VisualKey {
return { position: at, size: [keySize, keySize], angle };
}
function col(at: V.Vec2, keySize: number): VisualLayout {
return [
visualKey(at, keySize),
visualKey(V.add(at, [0, keySize]), keySize),
visualKey(V.add(at, [0, 2 * keySize]), keySize),
];
}
function radians(deg: number): number {
return (deg / 180) * Math.PI;
}
export function thumbs(
at: V.Vec2,
reverse: boolean,
keySize: number,
thumbRotation = reverse ? -15 : 15,
): VisualLayout {
// Distance between thumb key centers
const factor = keySize;
const offset: V.Vec2 = [
Math.cos(radians(thumbRotation)) * factor,
Math.sin(radians(thumbRotation)) * factor,
];
const result = [
visualKey(at, keySize, thumbRotation),
visualKey(
V.add(at, reverse ? V.neg(offset) : offset),
keySize,
thumbRotation,
),
];
if (reverse) result.reverse();
return result;
}
export function cols(
at: V.Vec2,
cols: V.Vec2[],
keySize: number,
): VisualLayout {
return cols.flatMap((self, index) =>
col(V.add(at, V.add(self, [index * keySize, 0])), keySize),
);
}