public WindowTexture(Texture2D texture, int spriteWidth, int spriteHeight)
        {
            texture.ThrowIfNull("texture");

            _texture = texture;
            _spriteWidth = spriteWidth;
            _spriteHeight = spriteHeight;
            _padding = new Padding(spriteWidth, spriteHeight);
            _borderTopLeftRectangle = new Rectangle(0, 0, spriteWidth, spriteHeight);
            _borderTopRectangle = new Rectangle(spriteWidth, 0, spriteWidth, spriteHeight);
            _borderTopRightRectangle = new Rectangle(spriteWidth * 2, 0, spriteWidth, spriteHeight);
            _borderRightRectangle = new Rectangle(spriteWidth * 2, spriteHeight, spriteWidth, spriteHeight);
            _borderBottomRightRectangle = new Rectangle(spriteWidth * 2, spriteHeight * 2, spriteWidth, spriteHeight);
            _borderBottomRectangle = new Rectangle(spriteWidth, spriteHeight * 2, spriteWidth, spriteHeight);
            _borderBottomLeftRectangle = new Rectangle(0, spriteHeight * 2, spriteWidth, spriteHeight);
            _borderTextureLeftRectangle = new Rectangle(0, spriteHeight, spriteWidth, spriteHeight);
            _backgroundTopLeftRectangle = new Rectangle(0, spriteHeight * 3, spriteWidth, spriteHeight);
            _backgroundTopRectangle = new Rectangle(spriteWidth, spriteHeight * 3, spriteWidth, spriteHeight);
            _backgroundTopRightRectangle = new Rectangle(spriteWidth * 2, spriteHeight * 3, spriteWidth, spriteHeight);
            _backgroundRightRectangle = new Rectangle(spriteWidth * 2, spriteHeight + (spriteHeight * 3), spriteWidth, spriteHeight);
            _backgroundBottomRightRectangle = new Rectangle(spriteWidth * 2, (spriteHeight * 2) + (spriteHeight * 3), spriteWidth, spriteHeight);
            _backgroundBottomRectangle = new Rectangle(spriteWidth, (spriteHeight * 2) + (spriteHeight * 3), spriteWidth, spriteHeight);
            _backgroundBottomLeftRectangle = new Rectangle(0, (spriteHeight * 2) + (spriteHeight * 3), spriteWidth, spriteHeight);
            _backgroundLeftRectangle = new Rectangle(0, spriteHeight + (spriteHeight * 3), spriteWidth, spriteHeight);
            _backgroundCenterRectangle = new Rectangle(spriteWidth, spriteHeight + (spriteHeight * 3), spriteWidth, spriteHeight);
            _upArrowRectangle = new Rectangle(spriteWidth * 3, 0, spriteWidth, spriteHeight);
            _downArrowRectangle = new Rectangle(spriteWidth * 3, spriteHeight, spriteWidth, spriteHeight);
        }
        public BorderedWindow(Rectangle windowRectangle, Padding padding)
            : base(windowRectangle)
        {
            Rectangle absoluteClientRectangle = windowRectangle;

            absoluteClientRectangle.X += padding.Left;
            absoluteClientRectangle.Y += padding.Top;
            absoluteClientRectangle.Width -= padding.X;
            absoluteClientRectangle.Height -= padding.Y;

            _absoluteClientRectangle = absoluteClientRectangle;
            _relativeClientRectangle = new Rectangle(padding.Left, padding.Top, windowRectangle.Width - padding.X, windowRectangle.Height - padding.Y);
            _topLeftCornerRectangle = new Rectangle(
                WindowRectangle.X,
                WindowRectangle.Y,
                _relativeClientRectangle.X,
                _relativeClientRectangle.Y);
            _topRightCornerRectangle = new Rectangle(
                _absoluteClientRectangle.Right,
                WindowRectangle.Y,
                WindowRectangle.Right - _absoluteClientRectangle.Right,
                _relativeClientRectangle.Y);
            _bottomLeftCornerRectangle = new Rectangle(
                WindowRectangle.X,
                _absoluteClientRectangle.Bottom,
                _relativeClientRectangle.X,
                WindowRectangle.Bottom - _absoluteClientRectangle.Bottom);
            _bottomRightCornerRectangle = new Rectangle(
                _absoluteClientRectangle.Right,
                _absoluteClientRectangle.Bottom,
                WindowRectangle.Right - _absoluteClientRectangle.Right,
                WindowRectangle.Bottom - _absoluteClientRectangle.Bottom);
            _leftRectangle = new Rectangle(
                WindowRectangle.X,
                _absoluteClientRectangle.Y,
                _relativeClientRectangle.X,
                _relativeClientRectangle.Height);
            _rightRectangle = new Rectangle(
                _absoluteClientRectangle.Right,
                _absoluteClientRectangle.Y,
                WindowRectangle.Right - _absoluteClientRectangle.Right,
                _relativeClientRectangle.Height);
            _topRectangle = new Rectangle(
                _absoluteClientRectangle.X,
                WindowRectangle.Y,
                _relativeClientRectangle.Width,
                _relativeClientRectangle.Y);
            _bottomRectangle = new Rectangle(
                _absoluteClientRectangle.X,
                _absoluteClientRectangle.Bottom,
                _relativeClientRectangle.Width,
                WindowRectangle.Bottom - _absoluteClientRectangle.Bottom);
            _centerRectangle = _absoluteClientRectangle;
        }
        protected void SetWindowRectangleUsingWindowYAndWindowSize(WindowHorizontalAlignment alignment, int windowY, int windowWidth, int windowHeight, Padding padding)
        {
            Rectangle windowDestinationRectangle = Constants.GameWindow.DestinationRectangle;
            Point windowCenterPoint = windowDestinationRectangle.Center;
            Rectangle windowRectangle;

            switch (alignment)
            {
                case WindowHorizontalAlignment.Left:
                    windowRectangle = new Rectangle(0, windowY, windowWidth, windowHeight);
                    break;
                case WindowHorizontalAlignment.Center:
                    windowRectangle = new Rectangle(windowCenterPoint.X - (windowWidth / 2), windowY, windowWidth, windowHeight);
                    break;
                case WindowHorizontalAlignment.Right:
                    windowRectangle = new Rectangle(windowDestinationRectangle.Right - windowWidth, windowY, windowWidth, windowHeight);
                    break;
                default:
                    throw new ArgumentOutOfRangeException("alignment");
            }

            Window = new BorderedWindow(windowRectangle, padding);
        }
 protected void SetWindowRectangleUsingWindowYAndClientSize(WindowHorizontalAlignment alignment, int windowY, int clientWidth, int clientHeight, Padding padding)
 {
     SetWindowRectangleUsingWindowYAndWindowSize(alignment, windowY, clientWidth + padding.X, clientHeight + padding.Y, padding);
 }
        protected void SetWindowRectangleUsingWindowXAndWindowSize(WindowVerticalAlignment alignment, int windowX, int windowWidth, int windowHeight, Padding padding)
        {
            Rectangle windowDestinationRectangle = Constants.GameWindow.DestinationRectangle;
            Point windowCenterPoint = windowDestinationRectangle.Center;
            Rectangle windowRectangle;

            switch (alignment)
            {
                case WindowVerticalAlignment.Top:
                    windowRectangle = new Rectangle(windowX, 0, windowWidth, windowHeight);
                    break;
                case WindowVerticalAlignment.Center:
                    windowRectangle = new Rectangle(windowX, windowCenterPoint.Y - (windowHeight / 2), windowWidth, windowHeight);
                    break;
                case WindowVerticalAlignment.Bottom:
                    windowRectangle = new Rectangle(windowX, windowDestinationRectangle.Bottom - windowHeight, windowWidth, windowHeight);
                    break;
                default:
                    throw new ArgumentOutOfRangeException("alignment");
            }

            Window = new BorderedWindow(windowRectangle, padding);
        }
 protected void SetWindowRectangleUsingWindowLocationAndClientSize(int windowX, int windowY, int clientWidth, int clientHeight, Padding padding)
 {
     Window = new BorderedWindow(new Rectangle(windowX, windowY, clientWidth + padding.X, clientHeight + padding.Y), padding);
 }
 protected void SetWindowRectangleUsingClientSize(WindowAlignment alignment, int clientWidth, int clientHeight, Padding padding)
 {
     SetWindowRectangle(alignment, clientWidth + padding.X, clientHeight + padding.Y, padding);
 }
 protected void SetWindowRectangleUsingClientLocationAndClientSize(int clientX, int clientY, int clientWidth, int clientHeight, Padding padding)
 {
     Window = new BorderedWindow(new Rectangle(clientX - padding.Left, clientY - padding.Top, clientWidth + padding.X, clientHeight + padding.Y), padding);
 }
        protected void SetWindowRectangle(WindowAlignment alignment, int windowWidth, int windowHeight, Padding padding)
        {
            Rectangle windowDestinationRectangle = Constants.GameWindow.DestinationRectangle;
            Point windowCenterPoint = windowDestinationRectangle.Center;
            Rectangle rectangle;

            switch (alignment)
            {
                case WindowAlignment.TopLeft:
                    rectangle = new Rectangle(0, 0, windowWidth, windowHeight);
                    break;
                case WindowAlignment.TopCenter:
                    rectangle = new Rectangle(windowCenterPoint.X - (windowWidth / 2), 0, windowWidth, windowHeight);
                    break;
                case WindowAlignment.TopRight:
                    rectangle = new Rectangle(windowDestinationRectangle.Right - windowWidth, 0, windowWidth, windowHeight);
                    break;
                case WindowAlignment.RightCenter:
                    rectangle = new Rectangle(windowDestinationRectangle.Right - windowWidth, windowCenterPoint.Y - (windowHeight / 2), windowWidth, windowHeight);
                    break;
                case WindowAlignment.BottomRight:
                    rectangle = new Rectangle(windowDestinationRectangle.Right - windowWidth, windowDestinationRectangle.Bottom - windowHeight, windowWidth, windowHeight);
                    break;
                case WindowAlignment.BottomCenter:
                    rectangle = new Rectangle(windowCenterPoint.X - (windowWidth / 2), windowDestinationRectangle.Bottom - windowHeight, windowWidth, windowHeight);
                    break;
                case WindowAlignment.BottomLeft:
                    rectangle = new Rectangle(0, windowDestinationRectangle.Bottom - windowHeight, windowWidth, windowHeight);
                    break;
                case WindowAlignment.LeftCenter:
                    rectangle = new Rectangle(0, windowCenterPoint.Y - (windowHeight / 2), windowWidth, windowHeight);
                    break;
                case WindowAlignment.Center:
                    rectangle = new Rectangle(windowCenterPoint.X - (windowWidth / 2), windowCenterPoint.Y - (windowHeight / 2), windowWidth, windowHeight);
                    break;
                default:
                    throw new ArgumentOutOfRangeException("alignment");
            }

            Window = new BorderedWindow(rectangle, padding);
        }
 protected void SetWindowRectangle(int x, int y, int width, int height, Padding padding)
 {
     Window = new BorderedWindow(new Rectangle(x, y, width, height), padding);
 }
 protected void SetWindowRectangle(Rectangle windowRectangle, Padding padding)
 {
     Window = new BorderedWindow(windowRectangle, padding);
 }
 public void Update(Rectangle windowRectangle, Padding padding, Color color, float alpha, Rectangle scissorRectangle, Matrix transformMatrix)
 {
     SetWindowRectangle(windowRectangle, padding);
     BackgroundColor = color;
     BorderColor = color;
     Alpha = alpha;
     _scissorRectangle = scissorRectangle;
     _transformMatrix = transformMatrix;
 }