|
@@ -877,6 +877,7 @@ export class GraphicalMusicSheet {
|
|
|
} else {
|
|
|
nextStaffEntryMusicSystem = previousStaffEntry.parentMeasure.ParentStaffLine?.ParentMusicSystem;
|
|
|
}
|
|
|
+ let prevMeasure: SourceMeasure;
|
|
|
if (previousStaffEntryMusicSystem === nextStaffEntryMusicSystem) {
|
|
|
currentMusicSystem = previousStaffEntryMusicSystem;
|
|
|
let fraction: number;
|
|
@@ -888,12 +889,13 @@ export class GraphicalMusicSheet {
|
|
|
} else if (!nextStaffEntry) {
|
|
|
previousStaffEntryPositionX = previousStaffEntry.PositionAndShape.AbsolutePosition.x;
|
|
|
nextStaffEntryPositionX = currentMusicSystem.GetRightBorderAbsoluteXPosition();
|
|
|
- const sm: SourceMeasure = previousStaffEntry.parentMeasure.parentSourceMeasure;
|
|
|
+ prevMeasure = previousStaffEntry.parentMeasure.parentSourceMeasure;
|
|
|
fraction = (currentTimeStamp - previousStaffEntry.getAbsoluteTimestamp().RealValue) / (
|
|
|
- Fraction.plus(sm.AbsoluteTimestamp, sm.Duration).RealValue - previousStaffEntry.getAbsoluteTimestamp().RealValue);
|
|
|
+ Fraction.plus(prevMeasure.AbsoluteTimestamp, prevMeasure.Duration).RealValue - previousStaffEntry.getAbsoluteTimestamp().RealValue);
|
|
|
} else {
|
|
|
previousStaffEntryPositionX = previousStaffEntry.PositionAndShape.AbsolutePosition.x;
|
|
|
nextStaffEntryPositionX = nextStaffEntry.PositionAndShape.AbsolutePosition.x;
|
|
|
+ prevMeasure = previousStaffEntry.parentMeasure.parentSourceMeasure;
|
|
|
if (previousStaffEntry === nextStaffEntry) {
|
|
|
fraction = 0;
|
|
|
} else {
|
|
@@ -902,7 +904,12 @@ export class GraphicalMusicSheet {
|
|
|
}
|
|
|
}
|
|
|
fraction = Math.min(1, Math.max(0, fraction));
|
|
|
- const interpolatedXPosition: number = previousStaffEntryPositionX + fraction * (nextStaffEntryPositionX - previousStaffEntryPositionX);
|
|
|
+ let limitX: number = nextStaffEntryPositionX;
|
|
|
+ if (prevMeasure?.Rules.LimitCursorPositionToCurrentMeasure) {
|
|
|
+ limitX = Math.min(previousStaffEntry.parentMeasure.PositionAndShape.AbsolutePosition.x +
|
|
|
+ previousStaffEntry.parentMeasure.PositionAndShape.BorderRight, limitX);
|
|
|
+ }
|
|
|
+ const interpolatedXPosition: number = previousStaffEntryPositionX + fraction * (limitX - previousStaffEntryPositionX);
|
|
|
return [interpolatedXPosition, currentMusicSystem, previousStaffEntry];
|
|
|
} else {
|
|
|
const nextSystemLeftBorderTimeStamp: number = nextStaffEntry.parentMeasure.parentSourceMeasure.AbsoluteTimestamp.RealValue;
|