void OSD::PositionWindow(MythScreenType *window) { if (!window) return; MythRect rect = window->GetArea(); rect.translate(m_Rect.left(), m_Rect.top()); window->SetArea(rect); }
/** * Adjust the size of sibling objects within the button. */ void MythUIType::SetMinAreaParent(MythRect actual_area, MythRect allowed_area, const MythUIType *calling_child) { int delta_x = 0, delta_y = 0; MythRect area; // If a minsize is not set, don't use MinArea if (!m_MinSize.isValid()) return; m_MinArea.setWidth(0); if (m_Area.width() < m_NormalSize.width()) m_Area.setWidth(m_NormalSize.width()); if (m_Area.height() < m_NormalSize.height()) m_Area.setHeight(m_NormalSize.height()); if (calling_child->m_Vanished) { actual_area.moveLeft(0); actual_area.moveTop(0); allowed_area.moveLeft(0); allowed_area.moveTop(0); } actual_area.translate(m_Area.topLeft()); allowed_area.translate(m_Area.topLeft()); QList<MythUIType *>::iterator it; for (it = m_ChildrenList.begin(); it != m_ChildrenList.end(); ++it) { if (*it == calling_child || !(*it)->m_Initiator) continue; // Find union of area(s) area = (*it)->GetArea(); area.translate(m_Area.topLeft()); actual_area = actual_area.united(area); area = (*it)->m_Area; area.translate(m_Area.topLeft()); allowed_area = allowed_area.united(area); } // Make sure it is not larger than the area allowed actual_area = actual_area.intersected(m_Area); allowed_area = allowed_area.intersected(m_Area); if (m_Vanish && actual_area.size().isNull()) { m_Vanished = true; } else { if (calling_child->m_Vanished) { delta_x = (actual_area.x() + actual_area.width()) - (m_Area.x() + m_Area.width()); delta_y = (actual_area.y() + actual_area.height()) - (m_Area.y() + m_Area.height()); } else { delta_x = (actual_area.x() + actual_area.width()) - (allowed_area.x() + allowed_area.width()); delta_y = (actual_area.y() + actual_area.height()) - (allowed_area.y() + allowed_area.height()); } m_Vanished = false; } for (it = m_ChildrenList.begin(); it != m_ChildrenList.end(); ++it) { if (*it == calling_child) continue; if (!(*it)->m_Initiator) { if (m_Vanished) (*it)->VanishSibling(); else (*it)->AdjustMinArea(delta_x, delta_y); } area = (*it)->GetArea(); area.translate(m_Area.topLeft()); actual_area = actual_area.united(area); } QSize bound(actual_area.width(), actual_area.height()); if (m_Vanished) { m_MinArea.moveLeft(0); m_MinArea.moveTop(0); } else bound = bound.expandedTo(GetMinSize()); m_MinArea.setWidth(bound.width()); m_MinArea.setHeight(bound.height()); if (m_Parent) m_Parent->SetMinAreaParent(actual_area, m_Area, this); }