static RenderElement HitTestOnPreviousChain(HitChain hitPointChain, HitChain previousChain, int x, int y)
{
#if DEBUG
if (hitPointChain == previousChain)
{
throw new NotSupportedException();
}
#endif
if (previousChain.Count > 0)
{
previousChain.SetStartTestPoint(x, y);
//test on prev chain top to bottom
int j = previousChain.Count;
for (int i = 0; i < j; ++i)
{
HitInfo hitInfo = previousChain.GetHitInfo(i);
RenderElement elem = hitInfo.hitElement;
if (elem != null && elem.VisibleAndHasParent)
{
if (elem.Contains(hitInfo.point))
{
RenderElement found = elem.FindUnderlyingSiblingAtPoint(hitInfo.point);
if (found == null)
{
Point leftTop = elem.Location;
hitPointChain.OffsetTestPoint(leftTop.X, leftTop.Y);
hitPointChain.AddHitObject(elem);
//add to chain
}
else
{
break;
}
}
}
else
{
break;
}
}
}
//---------------------------------
if (hitPointChain.Count > 0)
{
var commonElement = hitPointChain.GetHitInfo(hitPointChain.Count - 1).hitElement;
hitPointChain.RemoveCurrentHit();
return commonElement;
}
else
{
return null;
}
}