override protected DisplayObject HitTest()
{
if (_disabled)
return null;
if (this.cachedTransform.localScale.x == 0 || this.cachedTransform.localScale.y == 0)
return null;
Vector2 localPoint = new Vector2();
Vector3 savedWorldPoint = HitTestContext.worldPoint;
Vector3 savedDirection = HitTestContext.direction;
if (hitArea != null)
{
if (!hitArea.HitTest(this, ref localPoint))
{
HitTestContext.worldPoint = savedWorldPoint;
HitTestContext.direction = savedDirection;
return null;
}
}
else
{
localPoint = GetHitTestLocalPoint();
if (_clipRect != null && !((Rect)_clipRect).Contains(localPoint))
{
HitTestContext.worldPoint = savedWorldPoint;
HitTestContext.direction = savedDirection;
return null;
}
}
if (_mask != null && _mask.InternalHitTestMask() == null)
return null;
DisplayObject target = null;
if (touchChildren)
{
int count = _children.Count;
for (int i = count - 1; i >= 0; --i) // front to back!
{
DisplayObject child = _children[i];
if (child == _mask)
continue;
target = child.InternalHitTest();
if (target != null)
break;
}
}
if (target == null && opaque && (hitArea != null || _contentRect.Contains(localPoint)))
target = this;
HitTestContext.worldPoint = savedWorldPoint;
HitTestContext.direction = savedDirection;
return target;
}