diff --git a/src/controls/QskSlider.cpp b/src/controls/QskSlider.cpp index cf9f2846..5fbbccd6 100644 --- a/src/controls/QskSlider.cpp +++ b/src/controls/QskSlider.cpp @@ -9,6 +9,8 @@ #include "QskIntervalF.h" #include "QskEvent.h" +#include + QSK_SUBCONTROL( QskSlider, Panel ) QSK_SUBCONTROL( QskSlider, Groove ) QSK_SUBCONTROL( QskSlider, Fill ) @@ -261,4 +263,12 @@ void QskSlider::moveHandleTo( qreal value, const QskAnimationHint& hint ) update(); } +QString QskSlider::textFromValue( qreal value ) const +{ +#if 1 + // we could try to find the precision from the step size. TODO ... + return locale().toString( value, 'f', 1 ); +#endif +} + #include "moc_QskSlider.cpp" diff --git a/src/controls/QskSlider.h b/src/controls/QskSlider.h index 1bc675a4..c0419b40 100644 --- a/src/controls/QskSlider.h +++ b/src/controls/QskSlider.h @@ -45,6 +45,7 @@ class QSK_EXPORT QskSlider : public QskBoundedValueInput qreal handlePosition() const; // [0,0, 1.0] QskAspect::Variation effectiveVariation() const override; + QString textFromValue( qreal ) const override; Q_SIGNALS: void pressedChanged( bool ); diff --git a/src/controls/QskSliderSkinlet.cpp b/src/controls/QskSliderSkinlet.cpp index 840d03e6..ef7169c9 100644 --- a/src/controls/QskSliderSkinlet.cpp +++ b/src/controls/QskSliderSkinlet.cpp @@ -112,7 +112,8 @@ QRectF QskSliderSkinlet::subControlRect( const QskSkinnable* skinnable, return Inherited::subControlRect( skinnable, contentsRect, subControl ); } -int QskSliderSkinlet::sampleCount( const QskSkinnable* skinnable, QskAspect::Subcontrol subControl ) const +int QskSliderSkinlet::sampleCount( const QskSkinnable* skinnable, + QskAspect::Subcontrol subControl ) const { const auto slider = static_cast< const QskSlider* >( skinnable ); @@ -127,7 +128,8 @@ int QskSliderSkinlet::sampleCount( const QskSkinnable* skinnable, QskAspect::Sub } } -QRectF QskSliderSkinlet::sampleRect( const QskSkinnable* skinnable, const QRectF& contentsRect, +QRectF QskSliderSkinlet::sampleRect( + const QskSkinnable* skinnable, const QRectF& contentsRect, QskAspect::Subcontrol subControl, int index ) const { const auto slider = static_cast< const QskSlider* >( skinnable ); @@ -223,8 +225,7 @@ QSGNode* QskSliderSkinlet::updateSubNode( case LabelTextRole: { - const auto text = labelValue( slider ); - return updateTextNode( slider, node, text, Q::LabelText ); + return updateTextNode( slider, node, slider->valueText(), Q::LabelText ); } } @@ -395,12 +396,10 @@ QRectF QskSliderSkinlet::labelContainerRect( auto size = slider->strutSizeHint( Q::LabelContainer ); if( size.isEmpty() ) - { - return {}; - } + return QRectF(); - QFontMetricsF fm( slider->effectiveFont( Q::LabelText ) ); - const auto w = qskHorizontalAdvance( fm, labelValue( slider ) ); + const QFontMetricsF fm( slider->effectiveFont( Q::LabelText ) ); + const auto w = qskHorizontalAdvance( fm, slider->valueText() ); const auto padding = slider->paddingHint( Q::LabelContainer ); const auto h = fm.height() + padding.top() + padding.bottom(); @@ -423,9 +422,7 @@ QRectF QskSliderSkinlet::labelContainerRect( y = hr.center().y() - size.height() / 2; } - const QRectF r( x, y, size.width(), size.height() ); - - return r; + return QRectF( x, y, size.width(), size.height() ); } QSizeF QskSliderSkinlet::sizeHint( const QskSkinnable* skinnable, @@ -447,9 +444,4 @@ QSizeF QskSliderSkinlet::sizeHint( const QskSkinnable* skinnable, return hint; } -QString QskSliderSkinlet::labelValue( const QskSlider* slider ) const -{ - return QString::number( slider->value(), 'f', 1 ); -} - #include "moc_QskSliderSkinlet.cpp" diff --git a/src/controls/QskSliderSkinlet.h b/src/controls/QskSliderSkinlet.h index 5f2b8040..a9c13365 100644 --- a/src/controls/QskSliderSkinlet.h +++ b/src/controls/QskSliderSkinlet.h @@ -66,8 +66,6 @@ class QSK_EXPORT QskSliderSkinlet : public QskSkinlet QRectF labelContainerRect( const QskSlider*, const QRectF& ) const; QRectF innerRect( const QskSlider*, const QRectF&, QskAspect::Subcontrol ) const; - - QString labelValue( const QskSlider* ) const; }; #endif