static QSizeF closestAcceptableSize(const QSizeF &proposed, const QGraphicsWidget *widget) { const QSizeF current = widget->size(); qreal minw = proposed.width(); qreal maxw = current.width(); qreal minh = proposed.height(); qreal maxh = current.height(); qreal middlew = maxw; qreal middleh = maxh; qreal min_hfw; min_hfw = minimumHeightForWidth(maxw, minh, maxh, widget); do { if (maxw - minw < 0.1) { // we still haven't found anything, cut off binary search minw = maxw; minh = maxh; } middlew = minw + (maxw - minw)/2.0; middleh = minh + (maxh - minh)/2.0; min_hfw = minimumHeightForWidth(middlew, minh, maxh, widget); if (min_hfw > middleh) { minw = middlew; minh = middleh; } else if (min_hfw <= middleh) { maxw = middlew; maxh = middleh; } } while (maxw != minw); min_hfw = minimumHeightForWidth(middlew, minh, maxh, widget); QSizeF result; if (min_hfw < maxh) { result = QSizeF(middlew, min_hfw); } else { // Needed because of the cut-off we do above. result = QSizeF(minimumWidthForHeight(maxh, proposed.width(), current.width(), widget), maxh); } return result; }
int QBoxLayout_QtDShell::__override_minimumHeightForWidth(int arg__1, bool static_call) const { if (static_call) { return QBoxLayout::minimumHeightForWidth((int )arg__1); } else { return minimumHeightForWidth((int )arg__1); } }
int QSpacerItem_QtDShell::__override_minimumHeightForWidth(int arg__1, bool static_call) const { if (static_call) { return QLayoutItem::minimumHeightForWidth((int )arg__1); } else { return minimumHeightForWidth((int )arg__1); } }
static void _q_boundGeometryToSizeConstraints(const QRectF &startGeometry, QRectF *rect, Qt::WindowFrameSection section, const QSizeF &min, const QSizeF &max, const QGraphicsWidget *widget) { const QRectF proposedRect = *rect; qreal width = qBound(min.width(), proposedRect.width(), max.width()); qreal height = qBound(min.height(), proposedRect.height(), max.height()); const bool hasHFW = QGraphicsLayoutItemPrivate::get(widget)->hasHeightForWidth(); const bool hasWFH = QGraphicsLayoutItemPrivate::get(widget)->hasWidthForHeight(); const bool widthChanged = proposedRect.width() != widget->size().width(); const bool heightChanged = proposedRect.height() != widget->size().height(); if (hasHFW || hasWFH) { if (widthChanged || heightChanged) { qreal minExtent; qreal maxExtent; qreal constraint; qreal proposed; if (hasHFW) { minExtent = min.height(); maxExtent = max.height(); constraint = width; proposed = proposedRect.height(); } else { // width for height minExtent = min.width(); maxExtent = max.width(); constraint = height; proposed = proposedRect.width(); } if (minimumHeightForWidth(constraint, minExtent, maxExtent, widget, hasHFW) > proposed) { QSizeF effectiveSize = closestAcceptableSize(QSizeF(width, height), widget); width = effectiveSize.width(); height = effectiveSize.height(); } } } switch (section) { case Qt::LeftSection: rect->setRect(startGeometry.right() - qRound(width), startGeometry.top(), qRound(width), startGeometry.height()); break; case Qt::TopLeftSection: rect->setRect(startGeometry.right() - qRound(width), startGeometry.bottom() - qRound(height), qRound(width), qRound(height)); break; case Qt::TopSection: rect->setRect(startGeometry.left(), startGeometry.bottom() - qRound(height), startGeometry.width(), qRound(height)); break; case Qt::TopRightSection: rect->setTop(rect->bottom() - qRound(height)); rect->setWidth(qRound(width)); break; case Qt::RightSection: rect->setWidth(qRound(width)); break; case Qt::BottomRightSection: rect->setWidth(qRound(width)); rect->setHeight(qRound(height)); break; case Qt::BottomSection: rect->setHeight(qRound(height)); break; case Qt::BottomLeftSection: rect->setRect(startGeometry.right() - qRound(width), startGeometry.top(), qRound(width), qRound(height)); break; default: break; } }
static qreal minimumWidthForHeight(qreal height, qreal minw, qreal maxw, const QGraphicsWidget *widget) { return minimumHeightForWidth(height, minw, maxw, widget, false); }
static void _q_boundGeometryToSizeConstraints(const QRectF &startGeometry, QRectF *rect, Qt::WindowFrameSection section, const QSizeF &min, const QSizeF &max, const QGraphicsWidget *widget) { const QRectF proposedRect = *rect; qreal width = qBound(min.width(), proposedRect.width(), max.width()); qreal height = qBound(min.height(), proposedRect.height(), max.height()); QSizePolicy sp = widget->sizePolicy(); if (const QGraphicsLayout *l = widget->layout()) { sp = l->sizePolicy(); } const bool hasHFW = sp.hasHeightForWidth(); // || sp.hasWidthForHeight(); const bool widthChanged = proposedRect.width() < widget->size().width(); const bool heightChanged = proposedRect.height() < widget->size().height(); if (hasHFW) { if (widthChanged || heightChanged) { const qreal minh = min.height(); const qreal maxh = max.height(); const qreal proposedHFW = minimumHeightForWidth(width, minh, maxh, widget); if (proposedHFW > proposedRect.height()) { QSizeF effectiveSize = closestAcceptableSize(QSizeF(width, height), widget); width = effectiveSize.width(); height = effectiveSize.height(); } } } switch (section) { case Qt::LeftSection: rect->setRect(startGeometry.right() - qRound(width), startGeometry.top(), qRound(width), startGeometry.height()); break; case Qt::TopLeftSection: rect->setRect(startGeometry.right() - qRound(width), startGeometry.bottom() - qRound(height), qRound(width), qRound(height)); break; case Qt::TopSection: rect->setRect(startGeometry.left(), startGeometry.bottom() - qRound(height), startGeometry.width(), qRound(height)); break; case Qt::TopRightSection: rect->setTop(rect->bottom() - qRound(height)); rect->setWidth(qRound(width)); break; case Qt::RightSection: rect->setWidth(qRound(width)); break; case Qt::BottomRightSection: rect->setWidth(qRound(width)); rect->setHeight(qRound(height)); break; case Qt::BottomSection: rect->setHeight(qRound(height)); break; case Qt::BottomLeftSection: rect->setRect(startGeometry.right() - qRound(width), startGeometry.top(), qRound(width), qRound(height)); break; default: break; } }
int DhQLayout::DvhminimumHeightForWidth(int x1) const { return minimumHeightForWidth(x1); }