diff --git a/src/controls/QskSubWindowSkinlet.cpp b/src/controls/QskSubWindowSkinlet.cpp index 47f94b06..7a94eaf3 100644 --- a/src/controls/QskSubWindowSkinlet.cpp +++ b/src/controls/QskSubWindowSkinlet.cpp @@ -21,31 +21,6 @@ QskSubWindowSkinlet::QskSubWindowSkinlet( QskSkin* skin ) QskSubWindowSkinlet::~QskSubWindowSkinlet() = default; -QSizeF QskSubWindowSkinlet::sizeHint( const QskSkinnable* skinnable, - Qt::SizeHint, const QSizeF& size ) const -{ - using Q = QskSubWindow; - - const auto subWindow = static_cast< const QskSubWindow* >( skinnable ); - - auto panelSize = subWindow->strutSizeHint( QskSubWindow::Panel ); - auto s = size.expandedTo( panelSize ); - - const auto decorations = subWindow->decorations(); - - if ( ( decorations & Q::TitleBar ) && ( decorations & Q::Title ) ) - { - auto titleBarSize = subWindow->strutSizeHint( QskSubWindow::TitleBarPanel ); - if( titleBarSize.isValid() ) - { - s = s.expandedTo( { titleBarSize.width(), 0 } ); - s.rheight() += titleBarSize.height(); - } - } - - return s; -} - QRectF QskSubWindowSkinlet::subControlRect( const QskSkinnable* skinnable, const QRectF& contentsRect, QskAspect::Subcontrol subControl ) const { @@ -210,4 +185,32 @@ QRectF QskSubWindowSkinlet::titleRect( return rect; } +QSizeF QskSubWindowSkinlet::sizeHint( const QskSkinnable* skinnable, + Qt::SizeHint which, const QSizeF& ) const +{ + using Q = QskSubWindow; + + if ( which != Qt::MinimumSize ) + return QSizeF(); + + const auto subWindow = static_cast< const QskSubWindow* >( skinnable ); + + auto hint = subWindow->strutSizeHint( Q::Panel ); + + if ( subWindow->decorations() != Q::NoDecoration ) + { + const auto size = subWindow->strutSizeHint( Q::TitleBarPanel ); + + hint.rwidth() = qMax( hint.width(), size.width() ); + + if ( size.height() >= 0 ) + { + hint.rheight() = qMax( hint.height(), 0.0 ); + hint.rheight() += size.height(); + } + } + + return hint; +} + #include "moc_QskSubWindowSkinlet.cpp"