public void HitTest(Point point, out DiagramItem element, out DiagramHitTestRegion region)
{
element = null;
if (ScaleRectangle(_boundingBox).Contains(point))
{
element = this;
if (ScaleRectangle(new Rectangle(_location, _size)).Contains(point))
{
if (_hasChildElements && ScaleRectangle(_childExpandButtonBox).Contains(point))
region = DiagramHitTestRegion.ChildExpandButton;
else
region = DiagramHitTestRegion.Element;
}
else
{
region = DiagramHitTestRegion.BoundingBox;
if (_showChildElements)
{
foreach (DiagramItem childElement in _childElements)
{
DiagramItem resultElement;
DiagramHitTestRegion resultRegion;
childElement.HitTest(point, out resultElement, out resultRegion);
if (resultRegion != DiagramHitTestRegion.None)
{
element = resultElement;
region = resultRegion;
break;
}
}
}
}
}
else
{
region = DiagramHitTestRegion.None;
}
}