diff --git a/TuneLab/UI/MainWindow/Editor/PianoWindow/PianoScrollView/PianoScrollViewOperation.cs b/TuneLab/UI/MainWindow/Editor/PianoWindow/PianoScrollView/PianoScrollViewOperation.cs index 166ceb4f..00e6b25b 100644 --- a/TuneLab/UI/MainWindow/Editor/PianoWindow/PianoScrollView/PianoScrollViewOperation.cs +++ b/TuneLab/UI/MainWindow/Editor/PianoWindow/PianoScrollView/PianoScrollViewOperation.cs @@ -27,10 +27,24 @@ protected override void OnScroll(WheelEventArgs e) switch (e.KeyModifiers) { case ModifierKeys.None: - PitchAxis.AnimateMove(70 * e.Delta.Y); + if (Math.Abs(e.Delta.Y) > Math.Abs(e.Delta.X)) + { + PitchAxis.AnimateMove(120 * e.Delta.Y); + } + else + { + TickAxis.AnimateMove(400 * e.Delta.X); + } break; case ModifierKeys.Shift: - TickAxis.AnimateMove(240 * e.Delta.Y); + if (Math.Abs(e.Delta.Y) > Math.Abs(e.Delta.X)) + { + TickAxis.AnimateMove(400 * e.Delta.Y); + } + else + { + PitchAxis.AnimateMove(120 * e.Delta.X); + } break; case ModifierKeys.Ctrl: TickAxis.AnimateScale(TickAxis.Coor2Pos(e.Position.X), e.Delta.Y); @@ -101,7 +115,7 @@ bool DetectWaveformPrimaryButton() if (Part == null) break; - if (DetectWaveformPrimaryButton()) {} + if (DetectWaveformPrimaryButton()) { } else if (item is NoteItem noteItem) { var note = noteItem.Note; @@ -1250,7 +1264,7 @@ public Rect SelectionRect() return new Rect(left, top, right - left, bottom - top); } - protected abstract State SelectState { get; } + protected abstract State SelectState { get; } protected abstract IEnumerable? Collection { get; } protected abstract void Select(IEnumerable items, double minTick, double maxTick, double minPitch, double maxPitch); protected virtual void BeginSelect() { } @@ -2664,9 +2678,9 @@ public void Move(double x, bool alt) { PianoScrollView.Part.RemoveNote(mLeft); } - else - { - mLeft.Dur.Set(pos - mLeft.Pos.Value); + else + { + mLeft.Dur.Set(pos - mLeft.Pos.Value); } } diff --git a/TuneLab/UI/MainWindow/Editor/TrackWindow/TrackScrollView/TrackScrollViewOperation.cs b/TuneLab/UI/MainWindow/Editor/TrackWindow/TrackScrollView/TrackScrollViewOperation.cs index 36fa228e..c47a504b 100644 --- a/TuneLab/UI/MainWindow/Editor/TrackWindow/TrackScrollView/TrackScrollViewOperation.cs +++ b/TuneLab/UI/MainWindow/Editor/TrackWindow/TrackScrollView/TrackScrollViewOperation.cs @@ -33,10 +33,24 @@ protected override void OnScroll(WheelEventArgs e) switch (e.KeyModifiers) { case ModifierKeys.None: - TrackVerticalAxis.AnimateMove(70 * e.Delta.Y); + if (Math.Abs(e.Delta.Y) > Math.Abs(e.Delta.X)) + { + TrackVerticalAxis.AnimateMove(70 * e.Delta.Y); + } + else + { + TickAxis.AnimateMove(240 * e.Delta.X); + } break; case ModifierKeys.Shift: - TickAxis.AnimateMove(240 * e.Delta.Y); + if (Math.Abs(e.Delta.Y) > Math.Abs(e.Delta.X)) + { + TickAxis.AnimateMove(240 * e.Delta.Y); + } + else + { + TrackVerticalAxis.AnimateMove(70 * e.Delta.X); + } break; case ModifierKeys.Ctrl: TickAxis.AnimateScale(TickAxis.Coor2Pos(e.Position.X), e.Delta.Y); @@ -64,7 +78,7 @@ protected override async void OnMouseDown(MouseDownEventArgs e) if (item is PartItem partItem) { var part = partItem.Part; - + if (e.IsDoubleClick) { if (part is IAudioPart audioPart && audioPart.Status.Value == AudioPartStatus.Unlinked) @@ -158,7 +172,7 @@ protected override async void OnMouseDown(MouseDownEventArgs e) var menuItem = new MenuItem().SetName("Rename".Tr(TC.Menu)).SetAction(() => { EnterInputPartName(partItem.Part, partItem.TrackIndex); }); menu.Items.Add(menuItem); } - + if (part is IMidiPart midiPart) { { @@ -185,21 +199,21 @@ protected override async void OnMouseDown(MouseDownEventArgs e) var trackIndex = TrackVerticalAxis.GetPosition(e.Position.Y).TrackIndex; var track = Project.Tracks[trackIndex]; if (part.IsSelected && track.Parts.Count(p => p.IsSelected) > 1) - { + { var partArray = track.Parts.OrderBy(p => p.StartTime).ToArray(); int partIndex = Array.FindIndex(partArray, p => p == part); int prevIndex = partIndex; int nextIndex = partIndex; - while (prevIndex > 0) { if (!partArray[prevIndex - 1].IsSelected || partArray[prevIndex - 1] is not MidiPart) break;prevIndex--; } - while (nextIndex < partArray.Length-1) { if (!partArray[nextIndex + 1].IsSelected || partArray[nextIndex+1] is not MidiPart) break; nextIndex++; } + while (prevIndex > 0) { if (!partArray[prevIndex - 1].IsSelected || partArray[prevIndex - 1] is not MidiPart) break; prevIndex--; } + while (nextIndex < partArray.Length - 1) { if (!partArray[nextIndex + 1].IsSelected || partArray[nextIndex + 1] is not MidiPart) break; nextIndex++; } if (nextIndex > prevIndex) { var menuItem = new MenuItem().SetName("Merge".Tr(TC.Menu)).SetAction(() => { var oldParts = partArray.Skip(prevIndex).Take(nextIndex - prevIndex + 1); - var oldPartInfos = oldParts.Select(p=>(MidiPartInfo)p.GetInfo()).ToArray(); + var oldPartInfos = oldParts.Select(p => (MidiPartInfo)p.GetInfo()).ToArray(); var newPartInfo = IMidiPartExtension.MergePartInfos(oldPartInfos); - foreach(var oldPart in oldParts) track.RemovePart(oldPart); + foreach (var oldPart in oldParts) track.RemovePart(oldPart); track.InsertPart(track.CreatePart(newPartInfo)); track.Commit(); });