FSO.Client.UI.Framework.UIElement.HitTestArea C# (CSharp) Method

HitTestArea() public method

Returns true if the mouse is over the given area
public HitTestArea ( UpdateState state, Rectangle area, bool cache ) : bool
state FSO.Common.Rendering.Framework.Model.UpdateState
area Microsoft.Xna.Framework.Rectangle
cache bool
return bool
        public bool HitTestArea(UpdateState state, Rectangle area, bool cache)
        {
            if (!Visible) { return false; }

            var globalLeft = 0.0f;
            var globalTop = 0.0f;
            var globalRight = 0.0f;
            var globalBottom = 0.0f;

            if (_HitTestCache.ContainsKey(area))
            {
                var positions = _HitTestCache[area];
                globalLeft = positions.X;
                globalTop = positions.Y;
                globalRight = positions.Z;
                globalBottom = positions.W;
            }
            else
            {
                var globalPosition = LocalRect(area.X, area.Y, area.Width, area.Height);

                if (cache)
                {
                    globalLeft = globalPosition.X;
                    globalTop = globalPosition.Y;
                    globalRight = globalPosition.Right;
                    globalBottom = globalPosition.Bottom;
                    _HitTestCache.Add(area, new Vector4(globalPosition.X, globalPosition.Y, globalPosition.Right, globalPosition.Bottom));
                }
            }

            var mx = state.MouseState.X;
            var my = state.MouseState.Y;

            if (mx >= globalLeft && mx <= globalRight &&
                my >= globalTop && my <= globalBottom)
            {
                return true;
            }

            return false;
        }