Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -101,7 +115,7 @@ bool DetectWaveformPrimaryButton()
if (Part == null)
break;

if (DetectWaveformPrimaryButton()) {}
if (DetectWaveformPrimaryButton()) { }
else if (item is NoteItem noteItem)
{
var note = noteItem.Note;
Expand Down Expand Up @@ -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<T>? Collection { get; }
protected abstract void Select(IEnumerable<T> items, double minTick, double maxTick, double minPitch, double maxPitch);
protected virtual void BeginSelect() { }
Expand Down Expand Up @@ -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);
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
{
{
Expand All @@ -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();
});
Expand Down
Loading