From bdc068c4d667bf9989efbba9178227d5f6c833c6 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Mon, 21 Dec 2020 09:57:57 +0100 Subject: [PATCH] ubcontro, substitution moved to setSkinHint/resetHint --- examples/gallery/slider/CustomSlider.cpp | 4 +- src/controls/QskBox.cpp | 6 +- src/controls/QskControl.cpp | 4 +- src/controls/QskGraphicLabel.cpp | 2 +- src/controls/QskPopup.cpp | 3 +- src/controls/QskProgressBar.cpp | 4 +- src/controls/QskPushButton.cpp | 9 +- src/controls/QskSeparator.cpp | 2 +- src/controls/QskSkinnable.cpp | 168 +++++++++++++++-------- src/controls/QskSkinnable.h | 5 +- src/controls/QskSlider.cpp | 21 ++- src/controls/QskSubWindow.cpp | 3 +- src/controls/QskTabView.cpp | 2 +- src/controls/QskTextInput.cpp | 14 +- src/controls/QskTextLabel.cpp | 29 ++-- 15 files changed, 156 insertions(+), 120 deletions(-) diff --git a/examples/gallery/slider/CustomSlider.cpp b/examples/gallery/slider/CustomSlider.cpp index 503e6b9b..003cecd4 100644 --- a/examples/gallery/slider/CustomSlider.cpp +++ b/examples/gallery/slider/CustomSlider.cpp @@ -30,9 +30,9 @@ CustomSlider::CustomSlider( QQuickItem* parentItem ) for ( auto state : { Pressed, Focused | Hovered, Hovered, Focused } ) setColor( Handle | state, Orange600 ); - setAnimation( QskSlider::Handle | QskAspect::Color, 1000 ); + setAnimationHint( Handle | QskAspect::Color, 1000 ); for ( auto state : { Focused | Hovered, Hovered, Focused } ) - setAnimation( QskSlider::Handle | QskAspect::Color | state, 300 ); + setAnimationHint( Handle | QskAspect::Color | state, 300 ); // using an individual skinlet, not known by the skin diff --git a/src/controls/QskBox.cpp b/src/controls/QskBox.cpp index 8777f1b8..37d6c01c 100644 --- a/src/controls/QskBox.cpp +++ b/src/controls/QskBox.cpp @@ -53,11 +53,9 @@ void QskBox::setPadding( const QMarginsF& padding ) qMax( qreal( padding.right() ), qreal( 0.0 ) ), qMax( qreal( padding.bottom() ), qreal( 0.0 ) ) ); - if ( pd != this->padding() ) + if ( pd != paddingHint( Panel ) ) { - const auto subControl = effectiveSubcontrol( Panel ); - - setPaddingHint( subControl, pd ); + setPaddingHint( Panel, pd ); resetImplicitSize(); if ( polishOnResize() || autoLayoutChildren() ) diff --git a/src/controls/QskControl.cpp b/src/controls/QskControl.cpp index 4800e80e..2e51e1e2 100644 --- a/src/controls/QskControl.cpp +++ b/src/controls/QskControl.cpp @@ -185,9 +185,7 @@ void QskControl::setMargins( const QMarginsF& margins ) if ( m != this->margins() ) { - const auto subControl = effectiveSubcontrol( QskAspect::Control ); - - setMarginHint( subControl, m ); + setMarginHint( QskAspect::Control, m ); resetImplicitSize(); Q_D( const QskControl ); diff --git a/src/controls/QskGraphicLabel.cpp b/src/controls/QskGraphicLabel.cpp index 73829098..7c4c3303 100644 --- a/src/controls/QskGraphicLabel.cpp +++ b/src/controls/QskGraphicLabel.cpp @@ -133,7 +133,7 @@ void QskGraphicLabel::setGraphicRole( int role ) { const int oldRole = graphicRole(); - QskSkinnable::setGraphicRole( effectiveSubcontrol( Graphic ), role ); + QskSkinnable::setGraphicRole( Graphic, role ); if ( role != oldRole ) { diff --git a/src/controls/QskPopup.cpp b/src/controls/QskPopup.cpp index a5ddcbb3..c2628651 100644 --- a/src/controls/QskPopup.cpp +++ b/src/controls/QskPopup.cpp @@ -388,8 +388,7 @@ void QskPopup::setOverlay( bool on ) { if ( hasOverlay() != on ) { - const auto subControl = effectiveSubcontrol( QskPopup::Overlay ); - setFlagHint( subControl | QskAspect::Style, on ); + setFlagHint( Overlay | QskAspect::Style, on ); update(); Q_EMIT overlayChanged( on ); diff --git a/src/controls/QskProgressBar.cpp b/src/controls/QskProgressBar.cpp index ce14a3d3..fb2ed016 100644 --- a/src/controls/QskProgressBar.cpp +++ b/src/controls/QskProgressBar.cpp @@ -179,7 +179,7 @@ void QskProgressBar::resetBarGradient() { using namespace QskAspect; - if ( resetColor( Bar | Vertical ) || resetHint( Bar | Horizontal ) ) + if ( resetColor( Bar | Vertical ) || resetColor( Bar | Horizontal ) ) update(); } @@ -192,7 +192,7 @@ void QskProgressBar::setExtent( qreal extent ) { extent = qMax( extent, 0.0 ); - const auto aspect = effectiveSubcontrol( Groove ) | QskAspect::Size; + const auto aspect = Groove | QskAspect::Size; if ( extent != metric( aspect ) ) { diff --git a/src/controls/QskPushButton.cpp b/src/controls/QskPushButton.cpp index c9ee21c4..6eee01f6 100644 --- a/src/controls/QskPushButton.cpp +++ b/src/controls/QskPushButton.cpp @@ -60,12 +60,9 @@ QskPushButton::~QskPushButton() void QskPushButton::setCorner( const QskCorner& corner ) { - // effectiveSubcontrol TODO ... - const auto aspect = Panel | QskAspect::Shape; - - if ( corner.metrics() != boxShapeHint( aspect ) ) + if ( corner.metrics() != boxShapeHint( Panel ) ) { - setBoxShapeHint( aspect, corner.metrics() ); + setBoxShapeHint( Panel, corner.metrics() ); update(); Q_EMIT cornerChanged(); @@ -74,7 +71,7 @@ void QskPushButton::setCorner( const QskCorner& corner ) QskCorner QskPushButton::corner() const { - const auto shape = boxShapeHint( Panel | QskAspect::Shape ); + const auto shape = boxShapeHint( Panel ); #if 1 QskCorner corner; diff --git a/src/controls/QskSeparator.cpp b/src/controls/QskSeparator.cpp index 983faef1..5db2e209 100644 --- a/src/controls/QskSeparator.cpp +++ b/src/controls/QskSeparator.cpp @@ -54,7 +54,7 @@ void QskSeparator::setExtent( qreal extent ) { extent = qMax( extent, 0.0 ); - const auto aspect = effectiveSubcontrol( Panel ) | QskAspect::Size; + const auto aspect = Panel | QskAspect::Size; if ( extent != metric( aspect ) ) { diff --git a/src/controls/QskSkinnable.cpp b/src/controls/QskSkinnable.cpp index d997bf96..9c873d53 100644 --- a/src/controls/QskSkinnable.cpp +++ b/src/controls/QskSkinnable.cpp @@ -111,6 +111,60 @@ static inline QVariant qskTypedNullValue( const QVariant& value ) return QVariant( vType, nullptr ); } +static inline void qskSetFlag( QskSkinnable* skinnable, + const QskAspect::Aspect aspect, int flag ) +{ + skinnable->setSkinHint( aspect | QskAspect::Flag, QVariant( flag ) ); +} + +static inline int qskFlag( const QskSkinnable* skinnable, + const QskAspect::Aspect aspect, QskSkinHintStatus* status = nullptr ) +{ + return skinnable->effectiveHint( aspect | QskAspect::Flag, status ).toInt(); +} + +static inline void qskSetMetric( QskSkinnable* skinnable, + const QskAspect::Aspect aspect, const QVariant& metric ) +{ + skinnable->setSkinHint( aspect | QskAspect::Metric, metric ); +} + +template< typename T > +static inline void qskSetMetric( QskSkinnable* skinnable, + QskAspect::Aspect aspect, const T& metric ) +{ + qskSetMetric( skinnable, aspect, QVariant::fromValue( metric ) ); +} + +template< typename T > +static inline T qskMetric( const QskSkinnable* skinnable, + QskAspect::Aspect aspect, QskSkinHintStatus* status = nullptr ) +{ + return skinnable->effectiveHint( + aspect | QskAspect::Metric, status ).value< T >(); +} + +static inline void qskSetColor( QskSkinnable* skinnable, + const QskAspect::Aspect aspect, const QVariant& color ) +{ + skinnable->setSkinHint( aspect | QskAspect::Color, color ); +} + +template< typename T > +static inline void qskSetColor( QskSkinnable* skinnable, + const QskAspect::Aspect aspect, const T& color ) +{ + qskSetColor( skinnable, aspect, QVariant::fromValue( color ) ); +} + +template< typename T > +static inline T qskColor( const QskSkinnable* skinnable, + QskAspect::Aspect aspect, QskSkinHintStatus* status = nullptr ) +{ + return skinnable->effectiveHint( + aspect | QskAspect::Color, status ).value< T >(); +} + class QskSkinnable::PrivateData { public: @@ -197,7 +251,7 @@ const QskSkinHintTable& QskSkinnable::hintTable() const void QskSkinnable::setFlagHint( QskAspect::Aspect aspect, int flag ) { - m_data->hintTable.setHint( aspect, QVariant( flag ) ); + qskSetFlag( this, aspect, flag ); } int QskSkinnable::flagHint( QskAspect::Aspect aspect ) const @@ -205,10 +259,9 @@ int QskSkinnable::flagHint( QskAspect::Aspect aspect ) const return effectiveHint( aspect ).toInt(); } -void QskSkinnable::setAlignmentHint( - QskAspect::Aspect aspect, Qt::Alignment alignment ) +void QskSkinnable::setAlignmentHint( QskAspect::Aspect aspect, Qt::Alignment alignment ) { - setFlagHint( aspect | QskAspect::Alignment, alignment ); + qskSetFlag( this, aspect | QskAspect::Alignment, alignment ); } bool QskSkinnable::resetAlignmentHint( QskAspect::Aspect aspect ) @@ -218,138 +271,132 @@ bool QskSkinnable::resetAlignmentHint( QskAspect::Aspect aspect ) void QskSkinnable::setColor( QskAspect::Aspect aspect, const QColor& color ) { - m_data->hintTable.setColor( aspect, color ); + qskSetColor( this, aspect, color ); } void QskSkinnable::setColor( QskAspect::Aspect aspect, Qt::GlobalColor color ) { - m_data->hintTable.setColor( aspect, color ); + qskSetColor( this, aspect, QColor( color ) ); } void QskSkinnable::setColor( QskAspect::Aspect aspect, QRgb rgb ) { - m_data->hintTable.setColor( aspect, rgb ); + qskSetColor( this, aspect, QColor::fromRgba( rgb ) ); } QColor QskSkinnable::color( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - return effectiveHint( aspect | QskAspect::Color, status ).value< QColor >(); + return qskColor< QColor >( this, aspect, status ); } void QskSkinnable::setMetric( QskAspect::Aspect aspect, qreal metric ) { - m_data->hintTable.setMetric( aspect, metric ); + qskSetMetric( this, aspect, metric ); } qreal QskSkinnable::metric( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - return effectiveHint( aspect | QskAspect::Metric, status ).toReal(); + return qskMetric< qreal >( this, aspect, status ); } void QskSkinnable::setStrutSizeHint( QskAspect::Aspect aspect, qreal width, qreal height ) { - setStrutSizeHint( aspect, QSizeF( width, height ) ); + qskSetMetric( this, aspect, QSizeF( width, height ) ); } void QskSkinnable::setStrutSizeHint( const QskAspect::Aspect aspect, const QSizeF& strut ) { - m_data->hintTable.setStrutSize( aspect, strut ); + qskSetMetric( this, aspect, strut ); } bool QskSkinnable::resetStrutSizeHint( const QskAspect::Aspect aspect ) { - return resetHint( aspect | QskAspect::Metric | QskAspect::StrutSize ); + return resetMetric( aspect | QskAspect::StrutSize ); } QSizeF QskSkinnable::strutSizeHint( const QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - const auto asp = aspect | QskAspect::Metric | QskAspect::StrutSize; - return effectiveHint( asp, status ).value< QSizeF >(); + return qskMetric< QSizeF >( this, aspect | QskAspect::StrutSize, status ); } void QskSkinnable::setMarginHint( QskAspect::Aspect aspect, qreal margins ) { - m_data->hintTable.setMargin( aspect, QskMargins( margins ) ); + qskSetMetric( this, aspect | QskAspect::Margin, QskMargins( margins ) ); } void QskSkinnable::setMarginHint( QskAspect::Aspect aspect, const QMarginsF& margins ) { - m_data->hintTable.setMargin( aspect, margins ); + qskSetMetric( this, aspect | QskAspect::Margin, QskMargins( margins ) ); } bool QskSkinnable::resetMarginHint( QskAspect::Aspect aspect ) { - const auto asp = aspect | QskAspect::Metric | QskAspect::Margin; - return resetHint( asp ); + return resetMetric( aspect | QskAspect::Margin ); } QMarginsF QskSkinnable::marginHint( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - const auto asp = aspect | QskAspect::Metric | QskAspect::Margin; - return effectiveHint( asp, status ).value< QskMargins >(); + return qskMetric< QskMargins >( this, aspect | QskAspect::Margin, status ); } void QskSkinnable::setPaddingHint( QskAspect::Aspect aspect, qreal padding ) { - m_data->hintTable.setPadding( aspect, QskMargins( padding ) ); + qskSetMetric( this, aspect | QskAspect::Padding, QskMargins( padding ) ); } void QskSkinnable::setPaddingHint( QskAspect::Aspect aspect, const QMarginsF& padding ) { - m_data->hintTable.setPadding( aspect, padding ); + qskSetMetric( this, aspect | QskAspect::Padding, QskMargins( padding ) ); } bool QskSkinnable::resetPaddingHint( QskAspect::Aspect aspect ) { - const auto asp = aspect | QskAspect::Metric | QskAspect::Padding; - return resetHint( asp ); + return resetMetric( aspect | QskAspect::Padding ); } QMarginsF QskSkinnable::paddingHint( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - const auto asp = aspect | QskAspect::Metric | QskAspect::Padding; - return effectiveHint( asp, status ).value< QskMargins >(); + return qskMetric< QskMargins >( this, aspect | QskAspect::Padding, status ); } void QskSkinnable::setGradientHint( QskAspect::Aspect aspect, const QskGradient& gradient ) { - m_data->hintTable.setGradient( aspect, gradient ); + qskSetColor( this, aspect, gradient ); } QskGradient QskSkinnable::gradientHint( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - return effectiveHint( aspect | QskAspect::Color, status ).value< QskGradient >(); + return qskColor< QskGradient >( this, aspect, status ); } void QskSkinnable::setBoxShapeHint( QskAspect::Aspect aspect, const QskBoxShapeMetrics& shape ) { - m_data->hintTable.setBoxShape( aspect, shape ); + qskSetMetric( this, aspect | QskAspect::Shape, shape ); } bool QskSkinnable::resetBoxShapeHint( QskAspect::Aspect aspect ) { - const auto asp = aspect | QskAspect::Metric | QskAspect::Shape; - return resetHint( asp ); + return resetMetric( aspect | QskAspect::Shape ); } QskBoxShapeMetrics QskSkinnable::boxShapeHint( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - const auto asp = aspect | QskAspect::Metric | QskAspect::Shape; - return effectiveHint( asp, status ).value< QskBoxShapeMetrics >(); + return qskMetric< QskBoxShapeMetrics >( + this, aspect | QskAspect::Shape, status ); } void QskSkinnable::setBoxBorderMetricsHint( QskAspect::Aspect aspect, const QskBoxBorderMetrics& border ) { - m_data->hintTable.setBoxBorder( aspect, border ); + qskSetMetric( this, aspect | QskAspect::Border, border ); } bool QskSkinnable::resetBoxBorderMetricsHint( QskAspect::Aspect aspect ) @@ -361,45 +408,43 @@ bool QskSkinnable::resetBoxBorderMetricsHint( QskAspect::Aspect aspect ) QskBoxBorderMetrics QskSkinnable::boxBorderMetricsHint( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - const auto asp = aspect | QskAspect::Metric | QskAspect::Border; - return effectiveHint( asp, status ).value< QskBoxBorderMetrics >(); + return qskMetric< QskBoxBorderMetrics >( + this, aspect | QskAspect::Border, status ); } void QskSkinnable::setBoxBorderColorsHint( QskAspect::Aspect aspect, const QskBoxBorderColors& colors ) { - m_data->hintTable.setBoxBorderColors( aspect, colors ); + qskSetColor( this, aspect | QskAspect::Border, colors ); } bool QskSkinnable::resetBoxBorderColorsHint( QskAspect::Aspect aspect ) { - const auto asp = aspect | QskAspect::Color | QskAspect::Border; - return resetHint( asp ); + return resetColor( aspect | QskAspect::Border ); } QskBoxBorderColors QskSkinnable::boxBorderColorsHint( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - const auto asp = aspect | QskAspect::Color | QskAspect::Border; - return effectiveHint( asp, status ).value< QskBoxBorderColors >(); + return qskColor< QskBoxBorderColors >( + this, aspect | QskAspect::Border, status ); } void QskSkinnable::setIntervalHint( QskAspect::Aspect aspect, const QskIntervalF& interval ) { - m_data->hintTable.setInterval( aspect, interval ); + qskSetMetric( this, aspect, interval ); } QskIntervalF QskSkinnable::intervalHint( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - const auto hint = effectiveHint( aspect | QskAspect::Metric, status ); - return hint.value< QskIntervalF >(); + return qskMetric< QskIntervalF >( this, aspect, status ); } void QskSkinnable::setSpacingHint( QskAspect::Aspect aspect, qreal spacing ) { - m_data->hintTable.setSpacing( aspect, spacing ); + qskSetMetric( this, aspect | QskAspect::Spacing, spacing ); } bool QskSkinnable::resetSpacingHint( QskAspect::Aspect aspect ) @@ -410,18 +455,18 @@ bool QskSkinnable::resetSpacingHint( QskAspect::Aspect aspect ) qreal QskSkinnable::spacingHint( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - return metric( aspect | QskAspect::Spacing, status ); + return qskMetric< qreal >( this, aspect | QskAspect::Spacing, status ); } void QskSkinnable::setFontRole( QskAspect::Aspect aspect, int role ) { - m_data->hintTable.setFontRole( aspect, role ); + qskSetFlag( this, aspect | QskAspect::FontRole, role ); } int QskSkinnable::fontRole( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - return effectiveHint( aspect | QskAspect::FontRole, status ).toInt(); + return qskFlag( this, aspect | QskAspect::FontRole, status ); } QFont QskSkinnable::effectiveFont( QskAspect::Aspect aspect ) const @@ -431,13 +476,13 @@ QFont QskSkinnable::effectiveFont( QskAspect::Aspect aspect ) const void QskSkinnable::setGraphicRole( QskAspect::Aspect aspect, int role ) { - m_data->hintTable.setGraphicRole( aspect, role ); + qskSetFlag( this, aspect | QskAspect::GraphicRole, role ); } int QskSkinnable::graphicRole( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - return effectiveHint( aspect | QskAspect::GraphicRole, status ).toInt(); + return qskFlag( this, aspect | QskAspect::GraphicRole, status ); } QskColorFilter QskSkinnable::effectiveGraphicFilter( @@ -460,7 +505,7 @@ QskColorFilter QskSkinnable::effectiveGraphicFilter( if ( !aspect.isAnimator() ) { - QVariant v = animatedValue( aspect, nullptr ); + auto v = animatedValue( aspect, nullptr ); if ( v.canConvert< QskColorFilter >() ) return v.value< QskColorFilter >(); @@ -485,13 +530,13 @@ QskColorFilter QskSkinnable::effectiveGraphicFilter( return effectiveSkin()->graphicFilter( hint.toInt() ); } -void QskSkinnable::setAnimation( +void QskSkinnable::setAnimationHint( QskAspect::Aspect aspect, QskAnimationHint animation ) { m_data->hintTable.setAnimation( aspect, animation ); } -QskAnimationHint QskSkinnable::animation( +QskAnimationHint QskSkinnable::animationHint( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { aspect.setAnimator( true ); @@ -502,7 +547,7 @@ QskAnimationHint QskSkinnable::effectiveAnimation( QskAspect::Type type, QskAspect::Subcontrol subControl, QskAspect::State state, QskSkinHintStatus* status ) const { - QskAspect::Aspect aspect = subControl | type | state; + auto aspect = subControl | type | state; aspect.setAnimator( true ); QskAnimationHint hint; @@ -543,8 +588,16 @@ QskAnimationHint QskSkinnable::effectiveAnimation( return hint; } +void QskSkinnable::setSkinHint( QskAspect::Aspect aspect, const QVariant& skinHint ) +{ + aspect.setSubControl( effectiveSubcontrol( aspect.subControl() ) ); + m_data->hintTable.setHint( aspect, skinHint ); +} + bool QskSkinnable::resetHint( QskAspect::Aspect aspect ) { + aspect.setSubControl( effectiveSubcontrol( aspect.subControl() ) ); + if ( !m_data->hintTable.hasHint( aspect ) ) return false; @@ -557,7 +610,6 @@ bool QskSkinnable::resetHint( QskAspect::Aspect aspect ) */ auto a = aspect; - a.setSubControl( effectiveSubcontrol( a.subControl() ) ); a.setPlacement( effectivePlacement() ); if ( a.state() == QskAspect::NoState ) @@ -573,9 +625,7 @@ bool QskSkinnable::resetHint( QskAspect::Aspect aspect ) QVariant QskSkinnable::effectiveHint( QskAspect::Aspect aspect, QskSkinHintStatus* status ) const { - if ( const auto subControl = aspect.subControl() ) - aspect.setSubControl( effectiveSubcontrol( subControl ) ); - + aspect.setSubControl( effectiveSubcontrol( aspect.subControl() ) ); aspect.setPlacement( effectivePlacement() ); if ( aspect.isAnimator() ) diff --git a/src/controls/QskSkinnable.h b/src/controls/QskSkinnable.h index 5ccbc672..a284642d 100644 --- a/src/controls/QskSkinnable.h +++ b/src/controls/QskSkinnable.h @@ -143,9 +143,10 @@ class QSK_EXPORT QskSkinnable QskColorFilter effectiveGraphicFilter( QskAspect::Aspect ) const; - void setAnimation( QskAspect::Aspect, QskAnimationHint ); - QskAnimationHint animation( QskAspect::Aspect, QskSkinHintStatus* = nullptr ) const; + void setAnimationHint( QskAspect::Aspect, QskAnimationHint ); + QskAnimationHint animationHint( QskAspect::Aspect, QskSkinHintStatus* = nullptr ) const; + void setSkinHint( QskAspect::Aspect, const QVariant& ); bool resetHint( QskAspect::Aspect ); QskAnimationHint effectiveAnimation( QskAspect::Type, QskAspect::Subcontrol, diff --git a/src/controls/QskSlider.cpp b/src/controls/QskSlider.cpp index 178da73c..af369236 100644 --- a/src/controls/QskSlider.cpp +++ b/src/controls/QskSlider.cpp @@ -19,12 +19,6 @@ QSK_SYSTEM_STATE( QskSlider, Pressed, QskAspect::FirstSystemState << 2 ) QSK_SYSTEM_STATE( QskSlider, Minimum, QskAspect::FirstSystemState << 3 ) QSK_SYSTEM_STATE( QskSlider, Maximum, QskAspect::FirstSystemState << 4 ) -static inline QskAspect::Aspect qskAspectPosition( const QskSlider* slider ) -{ - const auto subControl = slider->effectiveSubcontrol( QskSlider::Handle ); - return subControl | QskAspect::Position | QskAspect::Metric; -} - class QskSlider::PrivateData { public: @@ -113,7 +107,7 @@ bool QskSlider::isTracking() const void QskSlider::aboutToShow() { - setMetric( qskAspectPosition( this ), valueAsRatio() ); + setMetric( Handle | QskAspect::Position, valueAsRatio() ); Inherited::aboutToShow(); } @@ -238,13 +232,13 @@ void QskSlider::mouseReleaseEvent( QMouseEvent* event ) qreal QskSlider::handlePosition() const { - return metric( qskAspectPosition( this ) ); + return metric( Handle | QskAspect::Position ); } void QskSlider::moveHandle() { - const auto hint = animation( qskAspectPosition( this ) | skinState() ); - moveHandleTo( value(), hint ); + const auto aspect = Handle | QskAspect::Metric | QskAspect::Position; + moveHandleTo( value(), animationHint( aspect | skinState() ) ); } void QskSlider::moveHandleTo( qreal value, const QskAnimationHint& hint ) @@ -252,7 +246,8 @@ void QskSlider::moveHandleTo( qreal value, const QskAnimationHint& hint ) setSkinStateFlag( QskSlider::Minimum, value <= minimum() ); setSkinStateFlag( QskSlider::Maximum, value >= maximum() ); - const auto aspect = qskAspectPosition( this ); + auto aspect = Handle | QskAspect::Metric | QskAspect::Position; + const qreal pos = valueAsRatio( value ); if ( hint.duration > 0 ) @@ -260,6 +255,10 @@ void QskSlider::moveHandleTo( qreal value, const QskAnimationHint& hint ) const qreal oldPos = metric( aspect ); setMetric( aspect, pos ); +#if 1 + // startTransition should do this: TODO ... + aspect.setSubControl( effectiveSubcontrol( Handle ) ); +#endif startTransition( aspect, hint, oldPos, pos ); } else diff --git a/src/controls/QskSubWindow.cpp b/src/controls/QskSubWindow.cpp index 4f3fe4d2..a0ff84d6 100644 --- a/src/controls/QskSubWindow.cpp +++ b/src/controls/QskSubWindow.cpp @@ -62,8 +62,7 @@ void QskSubWindow::setDecorated( bool on ) if ( on == isDecorated() ) return; - const auto subControl = effectiveSubcontrol( QskSubWindow::Panel ); - setFlagHint( subControl | QskAspect::Decoration, on ); + setFlagHint( Panel | QskAspect::Decoration, on ); resetImplicitSize(); // in case some parent wants to layout diff --git a/src/controls/QskTabView.cpp b/src/controls/QskTabView.cpp index b0896111..8da2a14f 100644 --- a/src/controls/QskTabView.cpp +++ b/src/controls/QskTabView.cpp @@ -45,7 +45,7 @@ QskTabView::QskTabView( Qsk::Position tabPosition, QQuickItem* parent ) m_data->stackBox->setObjectName( QStringLiteral( "QskTabViewStackBox" ) ); #if 1 - const auto hint = animation( Page ); + const auto hint = animationHint( Page ); if ( hint.duration > 0 ) { // When changing the skin, we have to update the animator. TODO ... diff --git a/src/controls/QskTextInput.cpp b/src/controls/QskTextInput.cpp index 413eea62..08831a83 100644 --- a/src/controls/QskTextInput.cpp +++ b/src/controls/QskTextInput.cpp @@ -526,16 +526,14 @@ int QskTextInput::fontRole() const void QskTextInput::setFontRole( int role ) { - const int oldRole = fontRole(); - - QskSkinnable::setFontRole( effectiveSubcontrol( Text ), role ); - - if ( oldRole != role ) + if ( role != fontRole() ) { + QskSkinnable::setFontRole( Text, role ); + polish(); resetImplicitSize(); - Qt::InputMethodQueries queries = Qt::ImCursorRectangle | Qt::ImFont; + auto queries = Qt::ImCursorRectangle | Qt::ImFont; #if QT_VERSION >= QT_VERSION_CHECK( 5, 7, 0 ) queries |= Qt::ImAnchorRectangle; #endif @@ -549,9 +547,7 @@ void QskTextInput::setAlignment( Qt::Alignment alignment ) { if ( alignment != this->alignment() ) { - const auto subControl = effectiveSubcontrol( Text ); - setAlignmentHint( subControl, alignment ); - + setAlignmentHint( Text, alignment ); m_data->textInput->setAlignment( alignment ); polish(); diff --git a/src/controls/QskTextLabel.cpp b/src/controls/QskTextLabel.cpp index 4d5e0e1a..39264c44 100644 --- a/src/controls/QskTextLabel.cpp +++ b/src/controls/QskTextLabel.cpp @@ -171,7 +171,7 @@ void QskTextLabel::setFontRole( int role ) { const int oldRole = fontRole(); - QskSkinnable::setFontRole( effectiveSubcontrol( Text ), role ); + QskSkinnable::setFontRole( Text, role ); if ( oldRole != role ) { @@ -189,13 +189,13 @@ int QskTextLabel::fontRole() const void QskTextLabel::setTextColor( const QColor& color ) { - const QColor oldColor = textColor(); - - QskSkinnable::setColor( effectiveSubcontrol( Text ), color ); - - if ( oldColor != color ) + if ( color != textColor() ) { - update(); + QskSkinnable::setColor( Text, color ); + + if ( !m_data->text.isEmpty() ) + update(); + Q_EMIT textColorChanged( color ); } } @@ -212,16 +212,15 @@ Qt::Alignment QskTextLabel::alignment() const void QskTextLabel::setAlignment( Qt::Alignment alignment ) { - if ( alignment == this->alignment() ) - return; + if ( alignment != this->alignment() ) + { + setAlignmentHint( Text, alignment ); - const auto subControl = effectiveSubcontrol( Text ); - setAlignmentHint( subControl, alignment ); + if ( !m_data->text.isEmpty() ) + update(); - if ( m_data->text.isEmpty() ) - update(); - - Q_EMIT alignmentChanged(); + Q_EMIT alignmentChanged(); + } } QFont QskTextLabel::font() const