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; using Q = QskSegmentedBar;
const QSizeF sizeSymbol =
bar->symbolHint( Q::Icon | Q::Selected ).defaultSize();
QSizeF segmentSize; QSizeF segmentSize;
for ( int i = 0; i < bar->count(); i++ ) for ( int i = 0; i < bar->count(); i++ )
{ {
const auto option = bar->optionAt( i ); const auto size = sampleSizeHint( bar, which, QSizeF(), Q::Segment, 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() );
segmentSize = segmentSize.expandedTo( size ); segmentSize = segmentSize.expandedTo( size );
} }
@ -490,6 +478,30 @@ QskAspect::States QskSegmentedBarSkinlet::sampleStates(
return states; 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, QSGNode* QskSegmentedBarSkinlet::updateSampleNode( const QskSkinnable* skinnable,
QskAspect::Subcontrol subControl, int index, QSGNode* node ) const 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::States sampleStates( const QskSkinnable*,
QskAspect::Subcontrol, int index ) const override; QskAspect::Subcontrol, int index ) const override;
QSizeF sampleSizeHint( const QskSkinnable*, Qt::SizeHint, const QSizeF&,
QskAspect::Subcontrol, int ) const override;
protected: protected:
QSGNode* updateSubNode( const QskSkinnable*, QSGNode* updateSubNode( const QskSkinnable*,
quint8 nodeRole, QSGNode* ) const override; quint8 nodeRole, QSGNode* ) const override;

View File

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

View File

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