コード例 #1
0
ファイル: BarRendererBase.cs プロジェクト: zwdesigns/alphaTab
        public float GetBeatX(Beat beat, BeatXPosition requestedPosition = BeatXPosition.PreNotes)
        {
            var container = GetBeatContainer(beat);

            if (container != null)
            {
                switch (requestedPosition)
                {
                case BeatXPosition.PreNotes:
                    return(container.VoiceContainer.X + container.X);

                case BeatXPosition.OnNotes:
                    return(container.VoiceContainer.X + container.X + container.OnNotes.X);

                case BeatXPosition.MiddleNotes:
                    return(container.VoiceContainer.X + container.X + container.OnTimeX);

                case BeatXPosition.PostNotes:
                    return(container.VoiceContainer.X + container.X + container.OnNotes.X + container.OnNotes.Width);

                case BeatXPosition.EndBeat:
                    return(container.VoiceContainer.X + container.X + container.Width);
                }
            }
            return(0);
        }
コード例 #2
0
 protected GroupedEffectGlyph(BeatXPosition endPosition) : base(0, 0)
 {
     _endPosition = endPosition;
 }
コード例 #3
0
ファイル: BarRendererBase.cs プロジェクト: CoderLine/alphaTab
 public float GetBeatX(Beat beat, BeatXPosition requestedPosition = BeatXPosition.PreNotes)
 {
     var container = GetBeatContainer(beat);
     if (container != null)
     {
         switch (requestedPosition)
         {
             case BeatXPosition.PreNotes:
                 return container.VoiceContainer.X + container.X + container.PreNotes.X;
             case BeatXPosition.OnNotes:
                 return container.VoiceContainer.X + container.X + container.OnNotes.X;
             case BeatXPosition.PostNotes:
                 return container.VoiceContainer.X + container.X + container.OnNotes.X + container.OnNotes.Width;
             case BeatXPosition.EndBeat:
                 return container.VoiceContainer.X + container.X + container.Width;
         }
     }
     return 0;
 }
コード例 #4
0
        public override void Paint(float cx, float cy, ICanvas canvas)
        {
            var startNoteRenderer = Renderer;

            Beat           endBeat          = _beat.NextBeat;
            TabBarRenderer endNoteRenderer  = null;
            BeatXPosition  endXPositionType = BeatXPosition.PreNotes;

            if (endBeat != null)
            {
                endNoteRenderer = Renderer.ScoreRenderer.Layout.GetRendererForBar <TabBarRenderer>(Renderer.Staff.StaveId, endBeat.Voice.Bar);
                if (endNoteRenderer == null || endNoteRenderer.Staff != startNoteRenderer.Staff)
                {
                    endBeat         = null;
                    endNoteRenderer = null;
                }
                else if (endNoteRenderer != startNoteRenderer && !endBeat.HasWhammyBar)
                {
                    endBeat         = null;
                    endNoteRenderer = null;
                }
                else
                {
                    endXPositionType = endBeat.HasWhammyBar &&
                                       (startNoteRenderer.Settings.DisplayMode != DisplayMode.SongBook ||
                                        endBeat.WhammyBarType != WhammyType.Dip)
                        ? BeatXPosition.MiddleNotes
                        : BeatXPosition.PreNotes;
                }
            }

            float startX;
            float endX;

            if (_isSimpleDip)
            {
                startX = cx + startNoteRenderer.X + startNoteRenderer.GetBeatX(_beat, BeatXPosition.OnNotes)
                         - ScoreWhammyBarGlyph.SimpleDipPadding * Scale;
                endX = cx + startNoteRenderer.X + startNoteRenderer.GetBeatX(_beat, BeatXPosition.PostNotes)
                       + ScoreWhammyBarGlyph.SimpleDipPadding * Scale;
            }
            else
            {
                startX = cx + startNoteRenderer.X + startNoteRenderer.GetBeatX(_beat, BeatXPosition.MiddleNotes);
                endX   = endNoteRenderer == null
                    ? cx + startNoteRenderer.X + startNoteRenderer.Width - 2 * Scale
                    : cx + endNoteRenderer.X + endNoteRenderer.GetBeatX(endBeat, endXPositionType);
            }


            var old = canvas.TextAlign;

            canvas.TextAlign = TextAlign.Center;
            if (_renderPoints.Count >= 2)
            {
                var dx = (endX - startX) / BendPoint.MaxPosition;
                canvas.BeginPath();

                var zeroY = cy + Renderer.Staff.GetSharedLayoutData(TopOffsetSharedDataKey, 0);

                var slurText = _beat.WhammyStyle == BendStyle.Gradual ? "grad." : "";

                for (int i = 0, j = _renderPoints.Count - 1; i < j; i++)
                {
                    var firstPt  = _renderPoints[i];
                    var secondPt = _renderPoints[i + 1];
                    var nextPt   = i < j - 2 ? _renderPoints[i + 2] : null;

                    var isFirst = i == 0;
                    // draw pre-bend if previous
                    if (i == 0 && firstPt.Value != 0 && !_beat.IsContinuedWhammy)
                    {
                        PaintWhammy(false, new BendPoint(), firstPt, secondPt, startX, zeroY, dx, canvas);
                        isFirst = false;
                    }

                    PaintWhammy(isFirst, firstPt, secondPt, nextPt, startX, zeroY, dx, canvas, slurText);

                    slurText = "";
                }
                canvas.Stroke();
            }
            canvas.TextAlign = old;
        }
コード例 #5
0
 protected GroupedEffectGlyph(BeatXPosition endPosition)
     : base(0, 0)
 {
     _endPosition = endPosition;
 }
コード例 #6
0
 protected virtual float CalculateEndX(BarRendererBase endBeatRenderer, Beat endBeat, float cx, BeatXPosition endPosition)
 {
     if (endBeat == null)
     {
         return(cx + endBeatRenderer.X + X + Width);
     }
     else
     {
         return(cx + endBeatRenderer.X + endBeatRenderer.GetBeatX(endBeat, endPosition));
     }
 }