Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed jumping on cursor for multi staff setups #324

Merged
merged 2 commits into from
Feb 9, 2020
Merged
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
4 changes: 3 additions & 1 deletion Source/AlphaTab/Audio/MidiTickLookup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,9 @@ public MidiTickLookupFindBeatResult FindBeat(Track[] tracks, int tick)
var result = new MidiTickLookupFindBeatResult();
result.CurrentBeat = beat.Beat;
result.NextBeat = nextBeat == null ? null : nextBeat.Beat;
result.Duration = MidiUtils.TicksToMillis(beat.End - beat.Start, masterBar.Tempo);
result.Duration = nextBeat == null
? MidiUtils.TicksToMillis(beat.End - beat.Start, masterBar.Tempo)
: MidiUtils.TicksToMillis(nextBeat.Start - beat.Start, masterBar.Tempo);
return result;
}

Expand Down
2 changes: 2 additions & 0 deletions Source/AlphaTab/Rendering/BarRendererFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ namespace AlphaTab.Rendering
internal abstract class BarRendererFactory
{
public bool IsInAccolade { get; set; }
public bool IsRelevantForBoundsLookup { get; set; }
public bool HideOnMultiTrack { get; set; }
public bool HideOnPercussionTrack { get; set; }
public abstract string StaffId { get; }

protected BarRendererFactory()
{
IsInAccolade = true;
IsRelevantForBoundsLookup = true;
HideOnPercussionTrack = false;
HideOnMultiTrack = false;
}
Expand Down
1 change: 1 addition & 0 deletions Source/AlphaTab/Rendering/EffectBarRendererFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public EffectBarRendererFactory(string staffId, IEffectBarRendererInfo[] infos)
_infos = infos;
_staffId = staffId;
IsInAccolade = false;
IsRelevantForBoundsLookup = false;
}

public override BarRendererBase Create(ScoreRenderer renderer, Bar bar)
Expand Down
1 change: 1 addition & 0 deletions Source/AlphaTab/Rendering/Staves/Staff.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public void SetSharedLayoutData<T>(string key, T def)
}

public bool IsInAccolade => _factory.IsInAccolade;
public bool IsRelevantForBoundsLookup => _factory.IsRelevantForBoundsLookup;

public void RegisterStaffTop(float offset)
{
Expand Down
71 changes: 39 additions & 32 deletions Source/AlphaTab/Rendering/Staves/StaveGroup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ public void AddStaff(Track track, Staff staff)
staff.StaveGroup = this;
staff.Index = _allStaves.Count;
_allStaves.Add(staff);
group.Staves.Add(staff);
group.AddStaff(staff);

if (staff.IsInAccolade)
{
Expand Down Expand Up @@ -458,44 +458,51 @@ private void BuildBoundingsLookup(float cx, float cy)
};
Layout.Renderer.BoundsLookup.AddStaveGroup(staveGroupBounds);

var masterBarBoundsLookup = new FastList<MasterBarBounds>();
var masterBarBoundsLookup = new FastDictionary<int, MasterBarBounds>();
for (var i = 0; i < Staves.Count; i++)
{
for (int j = 0, k = Staves[i].FirstStaffInAccolade.BarRenderers.Count; j < k; j++)
foreach (var staff in Staves[i].StavesRelevantForBoundsLookup)
{
var renderer = Staves[i].FirstStaffInAccolade.BarRenderers[j];

if (i == 0)
foreach (var renderer in staff.BarRenderers)
{
var masterBarBounds = new MasterBarBounds();
masterBarBounds.Index = renderer.Bar.MasterBar.Index;
masterBarBounds.IsFirstOfLine = renderer.IsFirstOfLine;
masterBarBounds.RealBounds = new Bounds
{
X = x + renderer.X,
Y = realTop,
W = renderer.Width,
H = realHeight
};
masterBarBounds.VisualBounds = new Bounds
MasterBarBounds masterBarBounds;
if (!masterBarBoundsLookup.ContainsKey(renderer.Bar.MasterBar.Index))
{
X = x + renderer.X,
Y = visualTop,
W = renderer.Width,
H = visualHeight
};
masterBarBounds.LineAlignedBounds = new Bounds
masterBarBounds = new MasterBarBounds();
masterBarBounds.Index = renderer.Bar.MasterBar.Index;
masterBarBounds.IsFirstOfLine = renderer.IsFirstOfLine;
masterBarBounds.RealBounds = new Bounds
{
X = x + renderer.X,
Y = realTop,
W = renderer.Width,
H = realHeight
};
masterBarBounds.VisualBounds = new Bounds
{
X = x + renderer.X,
Y = visualTop,
W = renderer.Width,
H = visualHeight
};
masterBarBounds.LineAlignedBounds = new Bounds
{
X = x + renderer.X,
Y = lineTop,
W = renderer.Width,
H = lineHeight
};
Layout.Renderer.BoundsLookup.AddMasterBar(masterBarBounds);
masterBarBoundsLookup[masterBarBounds.Index] = masterBarBounds;
}
else
{
X = x + renderer.X,
Y = lineTop,
W = renderer.Width,
H = lineHeight
};
Layout.Renderer.BoundsLookup.AddMasterBar(masterBarBounds);
masterBarBoundsLookup.Add(masterBarBounds);
}
masterBarBounds = masterBarBoundsLookup[renderer.Bar.MasterBar.Index];
}


renderer.BuildBoundingsLookup(masterBarBoundsLookup[j], x, cy + Y + _firstStaffInAccolade.Y);
renderer.BuildBoundingsLookup(masterBarBounds, x, cy + Y + staff.Y);
}
}
}
}
Expand Down
11 changes: 11 additions & 0 deletions Source/AlphaTab/Rendering/Staves/StaveTrackGroup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ internal class StaveTrackGroup
public Track Track { get; set; }
public StaveGroup StaveGroup { get; set; }
public FastList<Staff> Staves { get; set; }
public FastList<Staff> StavesRelevantForBoundsLookup { get; set; }

public Staff FirstStaffInAccolade { get; set; }
public Staff LastStaffInAccolade { get; set; }
Expand All @@ -17,6 +18,16 @@ public StaveTrackGroup(StaveGroup staveGroup, Track track)
StaveGroup = staveGroup;
Track = track;
Staves = new FastList<Staff>();
StavesRelevantForBoundsLookup = new FastList<Staff>();
}

public void AddStaff(Staff staff)
{
Staves.Add(staff);
if (staff.IsRelevantForBoundsLookup)
{
StavesRelevantForBoundsLookup.Add(staff);
}
}
}
}
1 change: 0 additions & 1 deletion appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ install:
- npm install -g jasmine-core
- npm install -g karma
- npm install -g karma-jasmine
- npm install -g karma-cli
- npm install -g karma-chrome-launcher
- npm install -g puppeteer
- npm install -g karma-trx-reporter
Expand Down