QskSubWindow: Respect minimum size

E.g. Material 3 dialogs have a minimum size
This commit is contained in:
Peter Hartmann 2022-07-05 17:33:37 +02:00 committed by uwerat
parent f7cd259fb0
commit f6a4e8d2d6
2 changed files with 28 additions and 0 deletions

View File

@ -21,6 +21,31 @@ QskSubWindowSkinlet::QskSubWindowSkinlet( QskSkin* skin )
QskSubWindowSkinlet::~QskSubWindowSkinlet() = default; 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, QRectF QskSubWindowSkinlet::subControlRect( const QskSkinnable* skinnable,
const QRectF& contentsRect, QskAspect::Subcontrol subControl ) const const QRectF& contentsRect, QskAspect::Subcontrol subControl ) const
{ {

View File

@ -30,6 +30,9 @@ class QSK_EXPORT QskSubWindowSkinlet : public QskPopupSkinlet
Q_INVOKABLE QskSubWindowSkinlet( QskSkin* = nullptr ); Q_INVOKABLE QskSubWindowSkinlet( QskSkin* = nullptr );
~QskSubWindowSkinlet() override; ~QskSubWindowSkinlet() override;
virtual QSizeF sizeHint( const QskSkinnable*,
Qt::SizeHint, const QSizeF& ) const override;
QRectF subControlRect( const QskSkinnable*, QRectF subControlRect( const QskSkinnable*,
const QRectF&, QskAspect::Subcontrol ) const override; const QRectF&, QskAspect::Subcontrol ) const override;