diff --git a/src/controls/QskSubWindowSkinlet.cpp b/src/controls/QskSubWindowSkinlet.cpp index fe4e1e5d..47f94b06 100644 --- a/src/controls/QskSubWindowSkinlet.cpp +++ b/src/controls/QskSubWindowSkinlet.cpp @@ -21,6 +21,31 @@ 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 { diff --git a/src/controls/QskSubWindowSkinlet.h b/src/controls/QskSubWindowSkinlet.h index d29325d4..80ccd398 100644 --- a/src/controls/QskSubWindowSkinlet.h +++ b/src/controls/QskSubWindowSkinlet.h @@ -30,6 +30,9 @@ class QSK_EXPORT QskSubWindowSkinlet : public QskPopupSkinlet Q_INVOKABLE QskSubWindowSkinlet( QskSkin* = nullptr ); ~QskSubWindowSkinlet() override; + virtual QSizeF sizeHint( const QskSkinnable*, + Qt::SizeHint, const QSizeF& ) const override; + QRectF subControlRect( const QskSkinnable*, const QRectF&, QskAspect::Subcontrol ) const override;