Slider: Add ripple and style it
This commit is contained in:
parent
d97f17c859
commit
9ecafddc49
|
@ -87,7 +87,6 @@ namespace
|
||||||
void setupTextLabel();
|
void setupTextLabel();
|
||||||
|
|
||||||
const QskMaterial3Theme& m_pal;
|
const QskMaterial3Theme& m_pal;
|
||||||
const uint rippleSize = 40; // ### remove
|
|
||||||
};
|
};
|
||||||
|
|
||||||
QFont createFont( int pixelSize, QFont::Weight weight = QFont::Normal )
|
QFont createFont( int pixelSize, QFont::Weight weight = QFont::Normal )
|
||||||
|
@ -567,15 +566,18 @@ void Editor::setupSlider()
|
||||||
setBoxShape( Q::Handle, 100, Qt::RelativeSize );
|
setBoxShape( Q::Handle, 100, Qt::RelativeSize );
|
||||||
setBoxBorderMetrics( Q::Handle, 0 );
|
setBoxBorderMetrics( Q::Handle, 0 );
|
||||||
|
|
||||||
setStrutSize( Q::Handle, qskDpiScaled( 20 + rippleSize ),
|
setStrutSize( Q::Handle, { 20, 20 } );
|
||||||
qskDpiScaled( 20 + rippleSize ) );
|
|
||||||
|
|
||||||
setGradient( Q::Handle, m_pal.primary );
|
setGradient( Q::Handle, m_pal.primary );
|
||||||
setGradient( Q::Handle | Q::Pressed, m_pal.primary );
|
setGradient( Q::Handle | Q::Pressed, m_pal.primary );
|
||||||
|
|
||||||
setGradient( Q::Handle | Q::Disabled, m_pal.onSurface38 );
|
setGradient( Q::Handle | Q::Disabled, m_pal.onSurface38 );
|
||||||
|
|
||||||
setBoxBorderMetrics( Q::Handle, qskDpiScaled( rippleSize / 2 ) );
|
setStrutSize( Q::Ripple, { 40, 40 } );
|
||||||
|
setBoxShape( Q::Ripple, 100, Qt::RelativeSize );
|
||||||
|
setGradient( Q::Ripple, Qt::transparent );
|
||||||
|
setGradient( Q::Ripple | Q::Hovered, m_pal.primary12 );
|
||||||
|
setGradient( Q::Ripple | Q::Pressed, m_pal.primary12 );
|
||||||
|
|
||||||
// move the handle smoothly, when using keys
|
// move the handle smoothly, when using keys
|
||||||
setAnimation( Q::Handle | A::Metric | A::Position, 2 * qskDuration );
|
setAnimation( Q::Handle | A::Metric | A::Position, 2 * qskDuration );
|
||||||
|
|
|
@ -14,6 +14,7 @@ QSK_SUBCONTROL( QskSlider, Groove )
|
||||||
QSK_SUBCONTROL( QskSlider, Fill )
|
QSK_SUBCONTROL( QskSlider, Fill )
|
||||||
QSK_SUBCONTROL( QskSlider, Scale )
|
QSK_SUBCONTROL( QskSlider, Scale )
|
||||||
QSK_SUBCONTROL( QskSlider, Handle )
|
QSK_SUBCONTROL( QskSlider, Handle )
|
||||||
|
QSK_SUBCONTROL( QskSlider, Ripple )
|
||||||
|
|
||||||
QSK_SYSTEM_STATE( QskSlider, Pressed, QskAspect::FirstSystemState << 2 )
|
QSK_SYSTEM_STATE( QskSlider, Pressed, QskAspect::FirstSystemState << 2 )
|
||||||
QSK_SYSTEM_STATE( QskSlider, Minimum, QskAspect::LastUserState << 1 )
|
QSK_SYSTEM_STATE( QskSlider, Minimum, QskAspect::LastUserState << 1 )
|
||||||
|
|
|
@ -23,7 +23,7 @@ class QSK_EXPORT QskSlider : public QskBoundedValueInput
|
||||||
using Inherited = QskBoundedValueInput;
|
using Inherited = QskBoundedValueInput;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QSK_SUBCONTROLS( Panel, Groove, Fill, Scale, Handle )
|
QSK_SUBCONTROLS( Panel, Groove, Fill, Scale, Handle, Ripple )
|
||||||
QSK_STATES( Pressed, Minimum, Maximum )
|
QSK_STATES( Pressed, Minimum, Maximum )
|
||||||
|
|
||||||
explicit QskSlider( QQuickItem* parent = nullptr );
|
explicit QskSlider( QQuickItem* parent = nullptr );
|
||||||
|
|
|
@ -31,7 +31,7 @@ static inline QRectF qskInnerPanelRect(
|
||||||
QskSliderSkinlet::QskSliderSkinlet( QskSkin* skin )
|
QskSliderSkinlet::QskSliderSkinlet( QskSkin* skin )
|
||||||
: Inherited( skin )
|
: Inherited( skin )
|
||||||
{
|
{
|
||||||
setNodeRoles( { PanelRole, GrooveRole, FillRole, HandleRole } );
|
setNodeRoles( { PanelRole, GrooveRole, FillRole, HandleRole, RippleRole } );
|
||||||
}
|
}
|
||||||
|
|
||||||
QskSliderSkinlet::~QskSliderSkinlet()
|
QskSliderSkinlet::~QskSliderSkinlet()
|
||||||
|
@ -68,6 +68,11 @@ QRectF QskSliderSkinlet::subControlRect( const QskSkinnable* skinnable,
|
||||||
return scaleRect( slider, contentsRect );
|
return scaleRect( slider, contentsRect );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( subControl == QskSlider::Ripple )
|
||||||
|
{
|
||||||
|
return rippleRect( slider, contentsRect );
|
||||||
|
}
|
||||||
|
|
||||||
return Inherited::subControlRect( skinnable, contentsRect, subControl );
|
return Inherited::subControlRect( skinnable, contentsRect, subControl );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,6 +102,11 @@ QSGNode* QskSliderSkinlet::updateSubNode(
|
||||||
{
|
{
|
||||||
return updateBoxNode( slider, node, QskSlider::Handle );
|
return updateBoxNode( slider, node, QskSlider::Handle );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case RippleRole:
|
||||||
|
{
|
||||||
|
return updateBoxNode( slider, node, QskSlider::Ripple );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Inherited::updateSubNode( skinnable, nodeRole, node );
|
return Inherited::updateSubNode( skinnable, nodeRole, node );
|
||||||
|
@ -223,6 +233,18 @@ QRectF QskSliderSkinlet::handleRect(
|
||||||
return handleRect;
|
return handleRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QRectF QskSliderSkinlet::rippleRect(
|
||||||
|
const QskSlider* slider, const QRectF& rect ) const
|
||||||
|
{
|
||||||
|
auto r = handleRect( slider, rect );
|
||||||
|
auto rippleSize = slider->strutSizeHint( QskSlider::Ripple );
|
||||||
|
auto handleSize = slider->strutSizeHint( QskSlider::Handle );
|
||||||
|
auto w = ( rippleSize.width() - handleSize.width() ) / 2,
|
||||||
|
h = ( rippleSize.height() - handleSize.height() ) / 2;
|
||||||
|
r = r.marginsAdded( { w, h, w, h } );
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
QSizeF QskSliderSkinlet::sizeHint( const QskSkinnable* skinnable,
|
QSizeF QskSliderSkinlet::sizeHint( const QskSkinnable* skinnable,
|
||||||
Qt::SizeHint which, const QSizeF& ) const
|
Qt::SizeHint which, const QSizeF& ) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,6 +23,7 @@ class QSK_EXPORT QskSliderSkinlet : public QskSkinlet
|
||||||
GrooveRole,
|
GrooveRole,
|
||||||
FillRole,
|
FillRole,
|
||||||
HandleRole,
|
HandleRole,
|
||||||
|
RippleRole,
|
||||||
|
|
||||||
RoleCount
|
RoleCount
|
||||||
};
|
};
|
||||||
|
@ -46,6 +47,7 @@ class QSK_EXPORT QskSliderSkinlet : public QskSkinlet
|
||||||
QRectF fillRect( const QskSlider*, const QRectF& ) const;
|
QRectF fillRect( const QskSlider*, const QRectF& ) const;
|
||||||
QRectF handleRect( const QskSlider*, const QRectF& ) const;
|
QRectF handleRect( const QskSlider*, const QRectF& ) const;
|
||||||
QRectF scaleRect( const QskSlider*, const QRectF& ) const;
|
QRectF scaleRect( const QskSlider*, const QRectF& ) const;
|
||||||
|
QRectF rippleRect( const QskSlider*, const QRectF& ) const;
|
||||||
|
|
||||||
QRectF innerRect( const QskSlider*, const QRectF&, QskAspect::Subcontrol ) const;
|
QRectF innerRect( const QskSlider*, const QRectF&, QskAspect::Subcontrol ) const;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue