/*! Sets the geometry of this item's widget to be contained within \a r, taking alignment and maximum size into account. */ void QWidgetItem::setGeometry( const QRect &r ) { QSize s = r.size().boundedTo( smartMaxSize( wid ) ); int x = r.x(); int y = r.y(); if ( align & (HorAlign|VerAlign) ) { QSize pref = wid->sizeHint().expandedTo( wid->minimumSize() ); //### if ( align & HorAlign ) s.setWidth( QMIN( s.width(), pref.width() ) ); if ( align & VerAlign ) { if ( hasHeightForWidth() ) s.setHeight( QMIN( s.height(), heightForWidth(s.width()) ) ); else s.setHeight( QMIN( s.height(), pref.height() ) ); } } if ( align & Qt::AlignRight ) x = x + ( r.width() - s.width() ); else if ( !(align & Qt::AlignLeft) ) x = x + ( r.width() - s.width() ) / 2; if ( align & Qt::AlignBottom ) y = y + ( r.height() - s.height() ); else if ( !(align & Qt::AlignTop) ) y = y + ( r.height() - s.height() ) / 2; if ( !wid->isHidden() && !wid->isTopLevel() ) wid->setGeometry( x, y, s.width(), s.height() ); }
QRect QLayout::alignmentRect( const QRect &r ) const { QSize s = sizeHint(); int a = alignment(); if ( expanding() & QSizePolicy::Horizontal || !(a & HorAlign ) ) { s.setWidth( r.width() ); } if ( expanding() & QSizePolicy::Vertical || !(a & VerAlign )) { s.setHeight( r.height() ); } else if ( hasHeightForWidth() ) { s.setHeight( QMIN( s.height(), heightForWidth(s.width()) ) ); } int x = r.x(); int y = r.y(); if ( a & Qt::AlignRight ) x = x + ( r.width() - s.width() ); else if ( !(a & Qt::AlignLeft) ) x = x + ( r.width() - s.width() ) / 2; if ( a & Qt::AlignBottom ) y = y + ( r.height() - s.height() ); else if ( !(a & Qt::AlignTop) ) y = y + ( r.height() - s.height() ) / 2; return QRect( x, y, s.width(), s.height() ); }
bool QBoxLayout_QtDShell::__override_hasHeightForWidth(bool static_call) const { if (static_call) { return QBoxLayout::hasHeightForWidth(); } else { return hasHeightForWidth(); } }
bool QWidgetItem_QtDShell::__override_hasHeightForWidth(bool static_call) const { if (static_call) { return QWidgetItem::hasHeightForWidth(); } else { return hasHeightForWidth(); } }
/*! \reimp */ void QWidgetItem::setGeometry(const QRect &rect) { if (isEmpty()) return; QRect r = !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect) ? fromLayoutItemRect(wid->d_func(), rect) : rect; const QSize widgetRectSurplus = r.size() - rect.size(); /* For historical reasons, this code is done using widget rect coordinates, not layout item rect coordinates. However, QWidgetItem's sizeHint(), maximumSize(), and heightForWidth() all work in terms of layout item rect coordinates, so we have to add or subtract widgetRectSurplus here and there. The code could be much simpler if we did everything using layout item rect coordinates and did the conversion right before the call to QWidget::setGeometry(). */ QSize s = r.size().boundedTo(maximumSize() + widgetRectSurplus); int x = r.x(); int y = r.y(); if (align & (Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask)) { QSize pref(sizeHint()); QSizePolicy sp = wid->sizePolicy(); if (sp.horizontalPolicy() == QSizePolicy::Ignored) pref.setWidth(wid->sizeHint().expandedTo(wid->minimumSize()).width()); if (sp.verticalPolicy() == QSizePolicy::Ignored) pref.setHeight(wid->sizeHint().expandedTo(wid->minimumSize()).height()); pref += widgetRectSurplus; if (align & Qt::AlignHorizontal_Mask) s.setWidth(qMin(s.width(), pref.width())); if (align & Qt::AlignVertical_Mask) { if (hasHeightForWidth()) s.setHeight(qMin(s.height(), heightForWidth(s.width() - widgetRectSurplus.width()) + widgetRectSurplus.height())); else s.setHeight(qMin(s.height(), pref.height())); } } Qt::Alignment alignHoriz = QStyle::visualAlignment(wid->layoutDirection(), align); if (alignHoriz & Qt::AlignRight) x = x + (r.width() - s.width()); else if (!(alignHoriz & Qt::AlignLeft)) x = x + (r.width() - s.width()) / 2; if (align & Qt::AlignBottom) y = y + (r.height() - s.height()); else if (!(align & Qt::AlignTop)) y = y + (r.height() - s.height()) / 2; wid->setGeometry(x, y, s.width(), s.height()); }
QSize QDockAreaLayout::sizeHint() const { if ( !dockWindows || !dockWindows->first() ) return QSize( 0, 0 ); if ( dirty ) { QDockAreaLayout *that = (QDockAreaLayout *) this; that->layoutItems( geometry() ); } int w = 0; int h = 0; QPtrListIterator<QDockWindow> it( *dockWindows ); QDockWindow *dw = 0; it.toFirst(); int y = -1; int x = -1; int ph = 0; int pw = 0; while ( ( dw = it.current() ) != 0 ) { int plush = 0, plusw = 0; ++it; if ( dw->isHidden() ) continue; if ( hasHeightForWidth() ) { if ( y != dw->y() ) plush = ph; y = dw->y(); ph = dw->height(); } else { if ( x != dw->x() ) plusw = pw; x = dw->x(); pw = dw->width(); } h = QMAX( h, dw->height() + plush ); w = QMAX( w, dw->width() + plusw ); } if ( hasHeightForWidth() ) return QSize( 0, h ); return QSize( w, 0 ); }
QSize Q3DockAreaLayout::sizeHint() const { if (dockWindows->isEmpty()) return QSize(0, 0); if (dirty) { Q3DockAreaLayout *that = (Q3DockAreaLayout *) this; that->layoutItems(geometry()); } int w = 0; int h = 0; int y = -1; int x = -1; int ph = 0; int pw = 0; for (int i = 0; i < dockWindows->size(); ++i) { Q3DockWindow *dw = dockWindows->at(i); int plush = 0, plusw = 0; if (dw->isHidden()) continue; if (hasHeightForWidth()) { if (y != dw->y()) plush = ph; y = dw->y(); ph = dw->height(); } else { if (x != dw->x()) plusw = pw; x = dw->x(); pw = dw->width(); } h = qMax(h, dw->height() + plush); w = qMax(w, dw->width() + plusw); } if (hasHeightForWidth()) return QSize(0, h); return QSize(w, 0); }
/*! \reimp */ int QBoxLayout::heightForWidth(int w) const { Q_D(const QBoxLayout); if (!hasHeightForWidth()) return -1; int left, top, right, bottom; d->effectiveMargins(&left, &top, &right, &bottom); w -= left + right; if (w != d->hfwWidth) const_cast<QBoxLayout*>(this)->d_func()->calcHfw(w); return d->hfwHeight + top + bottom; }
bool DhQLayout::DvhhasHeightForWidth() const { return hasHeightForWidth(); }