From f6a4e8d2d6b52be2a400ca60ba8e5a660575c2bb Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Tue, 5 Jul 2022 17:33:37 +0200 Subject: [PATCH] QskSubWindow: Respect minimum size E.g. Material 3 dialogs have a minimum size --- src/controls/QskSubWindowSkinlet.cpp | 25 +++++++++++++++++++++++++ src/controls/QskSubWindowSkinlet.h | 3 +++ 2 files changed, 28 insertions(+) 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;