protected void HandlePointerExitAndEnter(PointerEventData currentPointerData, GameObject newEnterTarget)
{
if ((newEnterTarget == null) || (currentPointerData.pointerEnter == null))
{
for (int i = 0; i < currentPointerData.hovered.Count; i++)
{
ExecuteEvents.Execute<IPointerExitHandler>(currentPointerData.hovered[i], currentPointerData, ExecuteEvents.pointerExitHandler);
}
currentPointerData.hovered.Clear();
if (newEnterTarget == null)
{
currentPointerData.pointerEnter = newEnterTarget;
return;
}
}
if ((currentPointerData.pointerEnter != newEnterTarget) || (newEnterTarget == null))
{
GameObject obj2 = FindCommonRoot(currentPointerData.pointerEnter, newEnterTarget);
if (currentPointerData.pointerEnter != null)
{
for (Transform transform = currentPointerData.pointerEnter.transform; transform != null; transform = transform.parent)
{
if ((obj2 != null) && (obj2.transform == transform))
{
break;
}
ExecuteEvents.Execute<IPointerExitHandler>(transform.gameObject, currentPointerData, ExecuteEvents.pointerExitHandler);
currentPointerData.hovered.Remove(transform.gameObject);
}
}
currentPointerData.pointerEnter = newEnterTarget;
if (newEnterTarget != null)
{
for (Transform transform2 = newEnterTarget.transform; (transform2 != null) && (transform2.gameObject != obj2); transform2 = transform2.parent)
{
ExecuteEvents.Execute<IPointerEnterHandler>(transform2.gameObject, currentPointerData, ExecuteEvents.pointerEnterHandler);
currentPointerData.hovered.Add(transform2.gameObject);
}
}
}
}