Rect HierarchyTreeControlNode::GetRect() const
{
    Rect rect;

    if (uiObject && dynamic_cast<UIScrollView*>(uiObject))
    {
        // We are Scroll View, and our child controls should not be taken into account
        // while calculating the rect. See pls DF-1844 and DF-2704.
        UIScrollView* scrollView = dynamic_cast<UIScrollView*>(uiObject);
        return Rect(scrollView->GetPosition(true), scrollView->GetSize());
    }

    if (uiObject)
        rect = uiObject->GetRect(true);

    const HIERARCHYTREENODESLIST& childs = GetChildNodes();
    for (HIERARCHYTREENODESLIST::const_iterator iter = childs.begin(); iter != childs.end(); ++iter)
    {
        const HierarchyTreeControlNode* control = dynamic_cast<const HierarchyTreeControlNode*>(*iter);
        if (!control)
            continue;

        Rect controlRect = control->GetRect();
        rect = rect.Combine(controlRect);
    }

    return rect;
}
void HierarchyTreeScreenNode::CombineRectWithChild(Rect& rect) const
{
	const HIERARCHYTREENODESLIST& childs = GetChildNodes();
	for (HIERARCHYTREENODESLIST::const_iterator iter = childs.begin(); iter != childs.end(); ++iter)
	{
		const HierarchyTreeControlNode* control = dynamic_cast<const HierarchyTreeControlNode*>(*iter);
		if (!control)
			continue;
		
		Rect controlRect = control->GetRect();
		
		rect = rect.Combine(controlRect);
	}
}
Rect HierarchyTreeControlNode::GetRect() const
{
	Rect rect;
	if (uiObject)
		rect = uiObject->GetRect(true);

	const HIERARCHYTREENODESLIST& childs = GetChildNodes();
	for (HIERARCHYTREENODESLIST::const_iterator iter = childs.begin(); iter != childs.end(); ++iter)
	{
		const HierarchyTreeControlNode* control = dynamic_cast<const HierarchyTreeControlNode*>(*iter);
		if (!control)
			continue;
		
		Rect controlRect = control->GetRect();
		rect = rect.Combine(controlRect);
	}

	return rect;
}
void HeightmapEditorSystem::AddRectToAccumulator(Rect& accumulator, const Rect& rect)
{
	accumulator = accumulator.Combine(rect);
}