/// <summary>Called when the mouse position is updated</summary>
        /// <param name="x">X coordinate of the mouse cursor on the GUI</param>
        /// <param name="y">Y coordinate of the mouse cursor on the GUI</param>
        protected override void OnMouseMoved(float x, float y)
        {
            base.OnMouseMoved(x, y);
            if (_beingResized)
            {
                ResizeTo(x, y);
            }
            else
            {
                // Remember the current mouse position so we know where the user picked
                // up the control when a drag operation begins
                _grabX = x;
                _grabY = y;
            }

            if (IsMouseOnBorder(x, y) && !_beingResized && _enableResizing)
            {
                SetResizingDirection();
            }
            else if (_resizingSides != ResizingSides.None && !_beingResized)
            {
                _resizingSides = ResizingSides.None;
                SetCursorForResize(_resizingSides);
            }
        }
        private void SetResizingDirection()
        {
            var _oldResizingSides = _resizingSides;

            _resizingDirections = ResizingDirections.None;
            _resizingSides      = ResizingSides.None;
            if (_grabX >= GetAbsoluteBounds().Size.Width - _borderThickness)
            {
                _resizingDirections |= ResizingDirections.Horizontal;
                _resizingSides      |= ResizingSides.Right;
            }
            if (_grabX <= _borderThickness)
            {
                _resizingDirections |= ResizingDirections.Horizontal;
                _resizingSides      |= ResizingSides.Left;
            }
            if (_grabY >= GetAbsoluteBounds().Size.Height - _borderThickness)
            {
                _resizingDirections |= ResizingDirections.Vertical;
                _resizingSides      |= ResizingSides.Bottom;
            }
            if (_grabY <= _borderThickness)
            {
                _resizingDirections |= ResizingDirections.Vertical;
                _resizingSides      |= ResizingSides.Top;
            }
            if (_oldResizingSides != _resizingSides)
            {
                SetCursorForResize(_resizingSides);
            }
        }
 protected override void OnMouseLeft(float x, float y)
 {
     if (_beingResized)
     {
         ResizeTo(x, y);
     }
     else
     {
         base.OnMouseLeft(x, y);
         _resizingSides = ResizingSides.None;
         SetCursorForResize(_resizingSides);
     }
 }
 public virtual void SetCursorForResize(ResizingSides resizingSides)
 {
     //No Default behavior
 }