This commit is contained in:
Peter Hartmann 2025-06-24 18:54:38 +00:00 committed by GitHub
commit f010da4f0e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 37 additions and 13 deletions

View File

@ -325,23 +325,11 @@ QSizeF QskSegmentedBarSkinlet::segmentSizeHint(
{
using Q = QskSegmentedBar;
const QSizeF sizeSymbol =
bar->symbolHint( Q::Icon | Q::Selected ).defaultSize();
QSizeF segmentSize;
for ( int i = 0; i < bar->count(); i++ )
{
const auto option = bar->optionAt( i );
auto iconSize = option.icon().graphic().defaultSize();
iconSize = iconSize.expandedTo( sizeSymbol );
LayoutEngine layoutEngine( bar, i );
layoutEngine.setGraphicTextElements( bar,
Q::Text, option.text(), Q::Icon, iconSize );
const auto size = layoutEngine.sizeHint( which, QSizeF() );
const auto size = sampleSizeHint( bar, which, QSizeF(), Q::Segment, i );
segmentSize = segmentSize.expandedTo( size );
}
@ -490,6 +478,30 @@ QskAspect::States QskSegmentedBarSkinlet::sampleStates(
return states;
}
QSizeF QskSegmentedBarSkinlet::sampleSizeHint( const QskSkinnable* skinnable,
Qt::SizeHint which, const QSizeF& constraint, QskAspect::Subcontrol, int index ) const
{
if ( which != Qt::PreferredSize )
return QSizeF();
using Q = QskSegmentedBar;
auto bar = static_cast< const QskSegmentedBar* >( skinnable );
const auto option = bar->optionAt( index );
const QSizeF sizeSymbol =
bar->symbolHint( Q::Icon | Q::Selected ).defaultSize();
auto iconSize = option.icon().graphic().defaultSize();
iconSize = iconSize.expandedTo( sizeSymbol );
LayoutEngine layoutEngine( bar, index );
layoutEngine.setGraphicTextElements( bar,
Q::Text, option.text(), Q::Icon, iconSize );
const auto size = layoutEngine.sizeHint( which, constraint );
return size;
}
QSGNode* QskSegmentedBarSkinlet::updateSampleNode( const QskSkinnable* skinnable,
QskAspect::Subcontrol subControl, int index, QSGNode* node ) const
{

View File

@ -48,6 +48,9 @@ class QSK_EXPORT QskSegmentedBarSkinlet : public QskSkinlet
QskAspect::States sampleStates( const QskSkinnable*,
QskAspect::Subcontrol, int index ) const override;
QSizeF sampleSizeHint( const QskSkinnable*, Qt::SizeHint, const QSizeF&,
QskAspect::Subcontrol, int ) const override;
protected:
QSGNode* updateSubNode( const QskSkinnable*,
quint8 nodeRole, QSGNode* ) const override;

View File

@ -753,6 +753,12 @@ QVariant QskSkinlet::sampleAt( const QskSkinnable*,
return QVariant();
}
QSizeF QskSkinlet::sampleSizeHint( const QskSkinnable*,
Qt::SizeHint, const QSizeF&, QskAspect::Subcontrol, int ) const
{
return QSizeF();
}
QSizeF QskSkinlet::hintWithoutConstraint(
const QSizeF& hint, const QSizeF& constraint ) const
{

View File

@ -64,6 +64,9 @@ class QSK_EXPORT QskSkinlet
virtual QVariant sampleAt( const QskSkinnable*,
QskAspect::Subcontrol, int index ) const;
virtual QSizeF sampleSizeHint( const QskSkinnable*,
Qt::SizeHint, const QSizeF&, QskAspect::Subcontrol, int ) const;
const QVector< quint8 >& nodeRoles() const;
void setOwnedBySkinnable( bool on );