コード例 #1
0
        public virtual void BuildBoundingsLookup(MasterBarBounds masterBarBounds, float cx, float cy)
        {
            var barBounds = new BarBounds();

            barBounds.Bar          = Bar;
            barBounds.VisualBounds = new Bounds(cx + X, cy + Y + TopPadding, Width, Height - TopPadding - BottomPadding);
            barBounds.RealBounds   = new Bounds(cx + X, cy + Y, Width, Height);
            masterBarBounds.AddBar(barBounds);

            foreach (var voice in _voiceContainers)
            {
                var c = _voiceContainers[voice];
                if (!c.Voice.IsEmpty)
                {
                    for (int i = 0, j = c.BeatGlyphs.Count; i < j; i++)
                    {
                        var bc = c.BeatGlyphs[i];

                        var beatBoundings = new BeatBounds();
                        beatBoundings.Beat         = bc.Beat;
                        beatBoundings.VisualBounds = new Bounds(cx + X + c.X + bc.X + bc.OnNotes.X,
                                                                barBounds.VisualBounds.Y, bc.OnNotes.Width, barBounds.VisualBounds.H);
                        beatBoundings.RealBounds = new Bounds(cx + X + c.X + bc.X, barBounds.RealBounds.Y, bc.Width,
                                                              barBounds.RealBounds.H);
                        barBounds.AddBeat(beatBoundings);
                    }
                }
            }
        }
コード例 #2
0
ファイル: BarRendererBase.cs プロジェクト: zwdesigns/alphaTab
        public virtual void BuildBoundingsLookup(MasterBarBounds masterBarBounds, float cx, float cy)
        {
            var barBounds = new BarBounds();

            barBounds.Bar          = Bar;
            barBounds.VisualBounds = new Bounds
            {
                X = cx + X,
                Y = cy + Y + TopPadding,
                W = Width,
                H = Height - TopPadding - BottomPadding
            };
            barBounds.RealBounds = new Bounds
            {
                X = cx + X,
                Y = cy + Y,
                W = Width,
                H = Height
            };
            masterBarBounds.AddBar(barBounds);

            foreach (var voice in _voiceContainers)
            {
                var c          = _voiceContainers[voice];
                var isEmptyBar = (Bar.IsEmpty && voice == 0);
                if (!c.Voice.IsEmpty || isEmptyBar)
                {
                    for (int i = 0, j = c.BeatGlyphs.Count; i < j; i++)
                    {
                        var bc = c.BeatGlyphs[i];

                        var beatBoundings = new BeatBounds();
                        beatBoundings.Beat         = bc.Beat;
                        beatBoundings.VisualBounds = new Bounds
                        {
                            X = cx + X + c.X + bc.X + bc.OnNotes.X,
                            Y = barBounds.VisualBounds.Y,
                            W = bc.OnNotes.Width,
                            H = barBounds.VisualBounds.H
                        };
                        beatBoundings.RealBounds = new Bounds
                        {
                            X = cx + X + c.X + bc.X,
                            Y = barBounds.RealBounds.Y,
                            W = bc.Width,
                            H = barBounds.RealBounds.H
                        };

                        if (isEmptyBar)
                        {
                            beatBoundings.VisualBounds.X = cx + X;
                            beatBoundings.RealBounds.X   = beatBoundings.VisualBounds.X;
                        }

                        barBounds.AddBeat(beatBoundings);
                    }
                }
            }
        }
コード例 #3
0
ファイル: StaveGroup.cs プロジェクト: zolnierowski/alphaTab
        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(cx, cy + Y, Width, Height);
            staveGroupBounds.RealBounds   = new Bounds(cx, cy + Y, Width, 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 + renderer.X, realTop, renderer.Width, realHeight);
                        masterBarBounds.VisualBounds  = new Bounds(x + renderer.X, visualTop, renderer.Width, visualHeight);
                        Layout.Renderer.BoundsLookup.AddMasterBar(masterBarBounds);
                        masterBarBoundsLookup.Add(masterBarBounds);
                    }

                    renderer.BuildBoundingsLookup(masterBarBoundsLookup[j], x, cy + Y + _firstStaffInAccolade.Y);
                }
            }
        }
コード例 #4
0
ファイル: StaveGroup.cs プロジェクト: zwdesigns/alphaTab
        private void BuildBoundingsLookup(float cx, float cy)
        {
            if (Layout.Renderer.BoundsLookup.IsFinished)
            {
                return;
            }
            if (_firstStaffInAccolade == null || _lastStaffInAccolade == null)
            {
                return;
            }

            var lastStaff = _allStaves[_allStaves.Count - 1];

            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 + lastStaff.Y + lastStaff.Height;
            var lineTop      = cy + Y + _firstStaffInAccolade.Y
                               + _firstStaffInAccolade.TopSpacing
                               + _firstStaffInAccolade.TopOverflow
                               + (_firstStaffInAccolade.BarRenderers.Count > 0 ? _firstStaffInAccolade.BarRenderers[0].TopPadding : 0);
            var lineBottom = cy + Y + lastStaff.Y + lastStaff.Height
                             - lastStaff.BottomSpacing
                             - lastStaff.BottomOverflow
                             - (lastStaff.BarRenderers.Count > 0 ? lastStaff.BarRenderers[0].BottomPadding : 0);

            var visualHeight = visualBottom - visualTop;
            var lineHeight   = lineBottom - lineTop;
            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.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.Add(masterBarBounds);
                    }

                    renderer.BuildBoundingsLookup(masterBarBoundsLookup[j], x, cy + Y + _firstStaffInAccolade.Y);
                }
            }
        }