Spaces:
Sleeping
Sleeping
File size: 1,979 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 73 |
import Quantizer from "../quantizer"
import { ArrangePoint } from "../transform/ArrangePoint"
export interface ArrangeSelection {
fromTick: number
fromTrackIndex: number
toTick: number
toTrackIndex: number
}
export function arrangeSelectionFromPoints(
start: ArrangePoint,
end: ArrangePoint,
quantizer: Quantizer,
maxTrackIndex: number,
): ArrangeSelection {
const startSelection = selectionForPoint(start, quantizer)
const endSelection = selectionForPoint(end, quantizer)
return clampSelection(
unionSelections(startSelection, endSelection),
maxTrackIndex,
)
}
export const selectionForPoint = (
point: ArrangePoint,
quantizer: Quantizer,
): ArrangeSelection => {
const fromTick = quantizer.floor(point.tick)
const toTick = quantizer.ceil(point.tick)
return {
fromTick,
toTick,
fromTrackIndex: Math.floor(point.trackIndex),
toTrackIndex: Math.floor(point.trackIndex) + 1,
}
}
export const unionSelections = (
a: ArrangeSelection,
b: ArrangeSelection,
): ArrangeSelection => {
return {
fromTick: Math.min(a.fromTick, b.fromTick),
toTick: Math.max(a.toTick, b.toTick),
fromTrackIndex: Math.min(a.fromTrackIndex, b.fromTrackIndex),
toTrackIndex: Math.max(a.toTrackIndex, b.toTrackIndex),
}
}
export const clampSelection = (
selection: ArrangeSelection,
maxTrackIndex: number,
): ArrangeSelection => ({
fromTick: Math.max(0, selection.fromTick),
toTick: Math.max(0, selection.toTick),
fromTrackIndex: Math.min(
maxTrackIndex,
Math.max(0, selection.fromTrackIndex),
),
toTrackIndex: Math.min(maxTrackIndex, Math.max(0, selection.toTrackIndex)),
})
export const movedSelection = (
selection: ArrangeSelection,
delta: ArrangePoint,
): ArrangeSelection => ({
fromTick: selection.fromTick + delta.tick,
toTick: selection.toTick + delta.tick,
fromTrackIndex: selection.fromTrackIndex + delta.trackIndex,
toTrackIndex: selection.toTrackIndex + delta.trackIndex,
})
|