FlatRedBall.Gui.ScrollBar.FixBar C# (CSharp) Method

FixBar() private method

Keeps the ScrollBar's position bar from overlapping the up and down buttons and keeps its horizontal position inside the ScrollBar.
private FixBar ( ) : void
return void
        internal void FixBar()
        {
            if (GuiManagerDrawn)
            {
                if (mAlignment == ScrollBarAlignment.Vertical)
                {
                    float area = ScaleY - 2;

                    if (mPositionBar.ScaleY + mPositionBar.WorldUnitRelativeY > ScaleY - 2)
                        mPositionBar.WorldUnitRelativeY = ScaleY - 2 - mPositionBar.ScaleY;

                    if (-mPositionBar.ScaleY + mPositionBar.WorldUnitRelativeY < -ScaleY + 2)
                        mPositionBar.WorldUnitRelativeY = -ScaleY + 2 + mPositionBar.ScaleY;

                    double topOfPosBarFromTopOfScrollBar =
                        mPositionBar.Parent.ScaleY - 2 - (mPositionBar.WorldUnitRelativeY + mPositionBar.ScaleY);

                    double totalAvailableArea = 2 * (mScaleY - 2) - 2 * mPositionBar.ScaleY;
                    
                    double invisibleCount = mTotalCount * 
                        (1 - view);
                    if (totalAvailableArea == 0)
                    {
                        mFirstVisibleIndex = 0;
                    }
                    else
                    {
                        mFirstVisibleIndex = (int)System.Math.Round(
                            invisibleCount * topOfPosBarFromTopOfScrollBar / totalAvailableArea);
                    }

                    mPositionBar.WorldUnitRelativeX = 0;
                }
                else
                {
                    if (mPositionBar.ScaleX + mPositionBar.WorldUnitRelativeX > ScaleX - 2)
                        mPositionBar.WorldUnitRelativeX = ScaleX - 2 - mPositionBar.ScaleX;

                    if (-mPositionBar.ScaleX + mPositionBar.WorldUnitRelativeX < -ScaleX + 2)
                        mPositionBar.WorldUnitRelativeX = -ScaleX + 2 + mPositionBar.ScaleX;

                    mPositionBar.WorldUnitRelativeY = 0;

                    double topOfPosBarFromTopOfScrollBar =
                        mPositionBar.Parent.ScaleX - 2 - (mPositionBar.WorldUnitRelativeX + mPositionBar.ScaleX);

                    mFirstVisibleIndex = (int)System.Math.Round(topOfPosBarFromTopOfScrollBar /
                                  (2 * (mScaleX - 2) * mSensitivity));

                }
            }
            else
            {
                if (mAlignment == ScrollBarAlignment.Vertical)
                {
                    if (mPositionBar.ScaleY + mPositionBar.WorldUnitRelativeY > ScaleY - 2)
                        mPositionBar.WorldUnitRelativeY = ScaleY - 2 - mPositionBar.ScaleY;

                    if (-mPositionBar.ScaleY + mPositionBar.WorldUnitRelativeY < -ScaleY + 2)
                        mPositionBar.WorldUnitRelativeY = -ScaleY + 2 + mPositionBar.ScaleY;

                    mPositionBar.WorldUnitRelativeX = 0;

                    double topOfPosBarFromTopOfScrollBar =
                        mPositionBar.Parent.ScaleY - 2 - (mPositionBar.WorldUnitRelativeY + mPositionBar.ScaleY);

                    double totalAvailableArea = 2 * (mScaleY - 2) - 2 * mPositionBar.ScaleY;

                    double invisibleCount = mTotalCount *
                        (1 - view);

                    mFirstVisibleIndex = (int)System.Math.Round(
                        invisibleCount * topOfPosBarFromTopOfScrollBar / totalAvailableArea);
                }
                else
                {
                    if (mPositionBar.WorldUnitRelativeX > 2 * mScaleX - 3)
                        mPositionBar.WorldUnitRelativeX = 2 * mScaleX - 3;
                    if (mPositionBar.WorldUnitRelativeX < 3)
                        mPositionBar.WorldUnitRelativeX = 3;

                    mPositionBar.WorldUnitRelativeY = 1;

                    double topOfPosBarFromTopOfScrollBar =
                        mPositionBar.Parent.ScaleX - 2 - (mPositionBar.WorldUnitRelativeX + mPositionBar.ScaleX);

                    mFirstVisibleIndex = (int)System.Math.Round(topOfPosBarFromTopOfScrollBar /
                                  (2 * (mScaleX - 2) * mSensitivity));

                }
            }
        }