Exemplo n.º 1
0
        private NumberLineNumber getPooledNumber()
        {
            NumberLineNumber number;

            if (inactiveNumbers.Count > 0)
            {
                number = inactiveNumbers[0];
                inactiveNumbers.RemoveAt(0);
                number.Visible = true;
            }
            else
            {
                number = new NumberLineNumber(numberlineScroller.createWidgetT("TextBox", "TextBox", 0, 0, 10, 15, Align.Left | Align.Top, "") as TextBox,
                                              numberlineScroller.createWidgetT("Widget", "SeparatorSkin", 0, 16, 1, numberlineScroller.Height - 16, Align.Left | Align.Top, ""), this);
            }
            return(number);
        }
Exemplo n.º 2
0
 private void returnNumberToPool(NumberLineNumber number)
 {
     number.Visible = false;
     inactiveNumbers.Add(number);
 }
Exemplo n.º 3
0
        void canvasModified()
        {
            float leftSide  = numberlineScroller.CanvasPosition.x - pixelsPerSecond * numberSeparationDuration;
            float rightSide = leftSide + numberlineScroller.Width + pixelsPerSecond * numberSeparationDuration;

            //Remove inactive numbers
            for (int i = 0; i < activeNumbers.Count; ++i)
            {
                NumberLineNumber number = activeNumbers[i];
                if (number.Right < leftSide)
                {
                    activeNumbers.RemoveAt(i--);
                    returnNumberToPool(number);
                }
                if (number.Left > rightSide)
                {
                    activeNumbers.RemoveAt(i--);
                    returnNumberToPool(number);
                }
            }

            //If there are any active numbers
            if (activeNumbers.Count > 0)
            {
                NumberLineNumber number = null;

                //See if any numbers need to be added to the front of the list
                float startingPoint = activeNumbers[0].Time - numberSeparationDuration;
                for (float i = startingPoint; i *pixelsPerSecond > leftSide; i -= numberSeparationDuration)
                {
                    number      = getPooledNumber();
                    number.Time = i;
                    activeNumbers.Insert(0, number);
                }

                //Add numbers to the back of the list
                number        = null;
                startingPoint = activeNumbers[activeNumbers.Count - 1].Time + numberSeparationDuration;
                for (float i = startingPoint; i <= timelineView.Duration && i * pixelsPerSecond < rightSide; i += numberSeparationDuration)
                {
                    number      = getPooledNumber();
                    number.Time = i;
                    activeNumbers.Add(number);
                }
                if (number != null)
                {
                    IntSize2 canvasSize = numberlineScroller.CanvasSize;
                    if (number.Right > canvasSize.Width)
                    {
                        canvasSize.Width = number.Right;
                        numberlineScroller.CanvasSize = canvasSize;
                    }
                }
            }
            //If there are currently no active numbers
            else
            {
                //Compute the starting point on the next even start point.
                float startingPoint = leftSide / pixelsPerSecond;
                int   numTicks      = (int)(startingPoint / numberSeparationDuration);
                startingPoint = numTicks * numberSeparationDuration;
                NumberLineNumber number = null;
                for (float i = startingPoint; i <= timelineView.Duration && i * pixelsPerSecond < rightSide; i += numberSeparationDuration)
                {
                    number      = getPooledNumber();
                    number.Time = i;
                    activeNumbers.Add(number);
                }
                IntVector2 scrollPos = numberlineScroller.CanvasPosition;
                numberlineScroller.CanvasSize     = new IntSize2(number != null ? number.Right : 0, numberlineScroller.Height);
                numberlineScroller.CanvasPosition = scrollPos; //Have to set the position back cause sometimes it changes.
            }
        }