/** * \copydoc MythUIType::ParseElement() */ bool MythScreenType::ParseElement( const QString &filename, QDomElement &element, bool showWarnings) { if (element.tagName() == "area") { MythRect rect = parseRect(element, false); MythRect rectN = parseRect(element); QRect screenArea = GetMythMainWindow()->GetUIScreenRect(); if (rect.x() == -1) rectN.moveLeft((screenArea.width() - rectN.width()) / 2); if (rect.y() == -1) rectN.moveTop((screenArea.height() - rectN.height()) / 2); SetArea(rectN); if (m_Area.width() < screenArea.width() || m_Area.height() < screenArea.height()) { m_FullScreen = false; } else { m_FullScreen = true; } } else { return MythUIType::ParseElement(filename, element, showWarnings); } return true; }
/** * 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); }