private void BuildBoundingsLookup(float cx, float cy)
{
if (Layout.Renderer.BoundsLookup.IsFinished) return;
if (_firstStaffInAccolade == null || _lastStaffInAccolade == null) return;
var visualTop = cy + Y + _firstStaffInAccolade.Y;
var visualBottom = cy + Y + _lastStaffInAccolade.Y + _lastStaffInAccolade.Height;
var realTop = cy + Y + _allStaves[0].Y;
var realBottom = cy + Y + _allStaves[_allStaves.Count - 1].Y + _allStaves[_allStaves.Count - 1].Height;
var visualHeight = visualBottom - visualTop;
var realHeight = realBottom - realTop;
var x = X + _firstStaffInAccolade.X;
var staveGroupBounds = new StaveGroupBounds();
staveGroupBounds.VisualBounds = new Bounds
{
X = cx,
Y = cy + Y,
W = Width,
H = Height
};
staveGroupBounds.RealBounds = new Bounds
{
X = cx,
Y = cy + Y,
W = Width,
H = Height
};
Layout.Renderer.BoundsLookup.AddStaveGroup(staveGroupBounds);
var masterBarBoundsLookup = new FastList<MasterBarBounds>();
for (int i = 0; i < Staves.Count; i++)
{
for (int j = 0, k = Staves[i].FirstStaffInAccolade.BarRenderers.Count; j < k; j++)
{
var renderer = Staves[i].FirstStaffInAccolade.BarRenderers[j];
if (i == 0)
{
var masterBarBounds = new MasterBarBounds();
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
};
Layout.Renderer.BoundsLookup.AddMasterBar(masterBarBounds);
masterBarBoundsLookup.Add(masterBarBounds);
}
renderer.BuildBoundingsLookup(masterBarBoundsLookup[j], x, cy + Y + _firstStaffInAccolade.Y);
}
}
}