Spaces:
Running
Running
File size: 1,677 Bytes
f23825d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
import cloneDeep from "lodash/cloneDeep"
import { MaxNoteNumber } from "../../main/Constants"
import { IRect } from "../geometry"
import { NoteCoordTransform } from "../transform"
import { clampNotePoint, NotePoint } from "../transform/NotePoint"
export interface Selection {
from: NotePoint
to: NotePoint
}
export const getSelectionBounds = (
selection: Selection,
transform: NoteCoordTransform,
): IRect => {
const left = transform.getX(selection.from.tick)
const right = transform.getX(selection.to.tick)
const top = transform.getY(selection.from.noteNumber)
const bottom = transform.getY(selection.to.noteNumber)
return {
x: left,
y: top,
width: right - left,
height: bottom - top,
}
}
export const movedSelection = (
selection: Selection,
dt: number,
dn: number,
): Selection => {
const s = cloneDeep(selection)
s.from.tick += dt
s.to.tick += dt
s.from.noteNumber += dn
s.to.noteNumber += dn
return s
}
// to γε³δΈγ«γͺγγγγ«γγ
// to Make the lower right
export const regularizedSelection = (
fromTick: number,
fromNoteNumber: number,
toTick: number,
toNoteNumber: number,
): Selection => ({
from: {
tick: Math.max(0, Math.min(fromTick, toTick)),
noteNumber: Math.min(
MaxNoteNumber,
Math.max(0, Math.max(fromNoteNumber, toNoteNumber)),
),
},
to: {
tick: Math.max(fromTick, toTick),
noteNumber: Math.min(
MaxNoteNumber,
Math.max(0, Math.min(fromNoteNumber, toNoteNumber)),
),
},
})
export const clampSelection = (selection: Selection): Selection => ({
from: clampNotePoint(selection.from),
to: clampNotePoint(selection.to),
})
|