Spaces:
Running
Running
| 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, | |
| }) | |