QskSlider ticks implementaton completed
This commit is contained in:
parent
77731954eb
commit
e2c76aa121
@ -46,6 +46,8 @@
|
||||
#include <QskTextLabel.h>
|
||||
#include <QskVirtualKeyboard.h>
|
||||
|
||||
#include <QskSliderSkinlet.h>
|
||||
|
||||
#include <QskAnimationHint.h>
|
||||
#include <QskAspect.h>
|
||||
#include <QskBoxBorderColors.h>
|
||||
@ -773,6 +775,7 @@ void Editor::setupSlider()
|
||||
{
|
||||
using A = QskAspect;
|
||||
using Q = QskSlider;
|
||||
using SK = QskSliderSkinlet;
|
||||
using P = QPalette;
|
||||
|
||||
const qreal extent = 16_px;
|
||||
@ -824,6 +827,39 @@ void Editor::setupSlider()
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
/*
|
||||
Tick
|
||||
|
||||
QSlider optionally allows to display ticks left/right or top/bottom
|
||||
of the groove. However this not supported by the skinlets yet.
|
||||
( Qt/Quick slider does not support showing ticks at all )
|
||||
|
||||
For the moment we make something up. TODO ...
|
||||
*/
|
||||
|
||||
setFlag( Q::Tick | A::Option, Qsk::Maybe );
|
||||
setStrutSize( Q::Tick, 2_px, 2_px );
|
||||
|
||||
const QskStateCombination combination(
|
||||
QskStateCombination::CombinationNoState, Q::Focused | Q::Pressed );
|
||||
|
||||
const auto rgb = m_pal.active( P::Text );
|
||||
|
||||
setColor( Q::Tick,
|
||||
QskRgb::interpolated( rgb, m_pal.groove, 0.2 ), combination );
|
||||
|
||||
setColor( Q::Tick | Q::Disabled,
|
||||
QskRgb::interpolated( rgb, m_pal.groove, 0.5 ) );
|
||||
|
||||
setColor( Q::Tick | SK::Filled,
|
||||
m_pal.active( P::HighlightedText ), combination );
|
||||
setColor( Q::Tick | SK::Filled | Q::Disabled,
|
||||
m_pal.disabled( P::HighlightedText ) );
|
||||
}
|
||||
|
||||
// Handle
|
||||
|
||||
setBoxShape( Q::Handle, 2 );
|
||||
setBoxBorderMetrics( Q::Handle, 1 );
|
||||
setBoxBorderColors( Q::Handle, m_pal.outline );
|
||||
|
@ -11,11 +11,6 @@
|
||||
|
||||
using Q = QskSlider;
|
||||
|
||||
static inline bool qskHasBoundaryTicks( const QskSlider* slider )
|
||||
{
|
||||
return ( slider->graduationPolicy() == Qsk::Maybe ) && !slider->isSnapping();
|
||||
}
|
||||
|
||||
QskMaterial3SliderSkinlet::QskMaterial3SliderSkinlet( QskSkin* skin )
|
||||
: Inherited( skin )
|
||||
{
|
||||
@ -80,49 +75,11 @@ QSGNode* QskMaterial3SliderSkinlet::updateSubNode(
|
||||
return Inherited::updateSubNode( skinnable, nodeRole, node );
|
||||
}
|
||||
|
||||
int QskMaterial3SliderSkinlet::sampleCount( const QskSkinnable* skinnable,
|
||||
QskAspect::Subcontrol subControl ) const
|
||||
{
|
||||
if ( subControl == Q::Tick )
|
||||
{
|
||||
const auto slider = static_cast< const QskSlider* >( skinnable );
|
||||
|
||||
if ( ( slider->graduationPolicy() == Qsk::Maybe ) && !slider->isSnapping() )
|
||||
{
|
||||
const bool hasOrigin = false;
|
||||
|
||||
// min/origin/max or max
|
||||
return hasOrigin ? 3 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
return Inherited::sampleCount( skinnable, subControl );
|
||||
}
|
||||
|
||||
QVector< qreal > QskMaterial3SliderSkinlet::graduation( const QskSlider* slider ) const
|
||||
{
|
||||
QVector< qreal > graduation;
|
||||
|
||||
if ( ( slider->graduationPolicy() == Qsk::Maybe ) && !slider->isSnapping() )
|
||||
{
|
||||
const bool hasOrigin = false;
|
||||
|
||||
if ( hasOrigin )
|
||||
{
|
||||
graduation.reserve( 3 );
|
||||
graduation += slider->minimum();
|
||||
#if 1
|
||||
graduation += slider->maximum(); // origin !!!
|
||||
#endif
|
||||
graduation += slider->maximum();
|
||||
}
|
||||
else
|
||||
{
|
||||
graduation.reserve( 1 );
|
||||
graduation += slider->maximum();
|
||||
}
|
||||
}
|
||||
else
|
||||
if ( hasGraduation( slider ) )
|
||||
{
|
||||
const auto g = Inherited::graduation( slider );
|
||||
|
||||
@ -133,6 +90,17 @@ QVector< qreal > QskMaterial3SliderSkinlet::graduation( const QskSlider* slider
|
||||
graduation += g;
|
||||
graduation += slider->maximum();
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto policy = slider->flagHint< Qsk::Policy >(
|
||||
Q::Tick | QskAspect::Option, Qsk::Maybe );
|
||||
|
||||
if ( policy != Qsk::Never )
|
||||
{
|
||||
graduation.reserve( 1 );
|
||||
graduation += slider->maximum();
|
||||
}
|
||||
}
|
||||
|
||||
return graduation;
|
||||
}
|
||||
|
@ -20,8 +20,6 @@ class QskMaterial3SliderSkinlet : QskSliderSkinlet
|
||||
QRectF subControlRect( const QskSkinnable*,
|
||||
const QRectF& rect, QskAspect::Subcontrol ) const override;
|
||||
|
||||
int sampleCount( const QskSkinnable*, QskAspect::Subcontrol ) const override;
|
||||
|
||||
protected:
|
||||
QSGNode* updateSubNode( const QskSkinnable*,
|
||||
quint8 nodeRole, QSGNode* ) const override;
|
||||
|
@ -17,11 +17,6 @@ QSK_SUBCONTROL( QskSlider, Handle )
|
||||
|
||||
QSK_SYSTEM_STATE( QskSlider, Pressed, QskAspect::FirstSystemState << 2 )
|
||||
|
||||
static inline QskAspect qskAspectGraduationPolicy()
|
||||
{
|
||||
return QskSlider::Tick | QskAspect::Option;
|
||||
}
|
||||
|
||||
static QRectF qskHandleSelectionRect( const QskSlider* slider )
|
||||
{
|
||||
auto rect = slider->subControlRect( QskSlider::Handle );
|
||||
@ -136,23 +131,6 @@ QskAspect::Variation QskSlider::effectiveVariation() const
|
||||
return static_cast< QskAspect::Variation >( m_data->orientation );
|
||||
}
|
||||
|
||||
void QskSlider::setGraduationPolicy( Qsk::Policy policy )
|
||||
{
|
||||
if ( setFlagHint( qskAspectGraduationPolicy(), policy ) )
|
||||
Q_EMIT graduationPolicyChanged( graduationPolicy() );
|
||||
}
|
||||
|
||||
void QskSlider::resetGraduationPolicy()
|
||||
{
|
||||
if ( resetSkinHint( qskAspectGraduationPolicy() ) )
|
||||
Q_EMIT graduationPolicyChanged( graduationPolicy() );
|
||||
}
|
||||
|
||||
Qsk::Policy QskSlider::graduationPolicy() const
|
||||
{
|
||||
return flagHint< Qsk::Policy >( qskAspectGraduationPolicy(), Qsk::Never );
|
||||
}
|
||||
|
||||
void QskSlider::setTracking( bool on )
|
||||
{
|
||||
if ( on != m_data->tracking )
|
||||
|
@ -15,10 +15,6 @@ class QSK_EXPORT QskSlider : public QskBoundedValueInput
|
||||
|
||||
Q_PROPERTY( bool isPressed READ isPressed NOTIFY pressedChanged )
|
||||
|
||||
Q_PROPERTY( Qsk::Policy graduationPolicy READ graduationPolicy
|
||||
WRITE setGraduationPolicy RESET resetGraduationPolicy
|
||||
NOTIFY graduationPolicyChanged )
|
||||
|
||||
Q_PROPERTY( Qt::Orientation orientation READ orientation
|
||||
WRITE setOrientation NOTIFY orientationChanged )
|
||||
|
||||
@ -43,10 +39,6 @@ class QSK_EXPORT QskSlider : public QskBoundedValueInput
|
||||
void setOrientation( Qt::Orientation );
|
||||
Qt::Orientation orientation() const;
|
||||
|
||||
void setGraduationPolicy( Qsk::Policy );
|
||||
void resetGraduationPolicy();
|
||||
Qsk::Policy graduationPolicy() const;
|
||||
|
||||
void setTracking( bool );
|
||||
bool isTracking() const;
|
||||
|
||||
@ -58,7 +50,6 @@ class QSK_EXPORT QskSlider : public QskBoundedValueInput
|
||||
void pressedChanged( bool );
|
||||
void orientationChanged( Qt::Orientation );
|
||||
void trackingChanged( bool );
|
||||
void graduationPolicyChanged( Qsk::Policy );
|
||||
|
||||
protected:
|
||||
void mousePressEvent( QMouseEvent* ) override;
|
||||
|
@ -52,26 +52,6 @@ static QRectF qskInnerRect( const QskSlider* slider,
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline bool qskHasGraduation( const QskSlider* slider )
|
||||
{
|
||||
if ( slider->stepSize() )
|
||||
{
|
||||
switch( slider->graduationPolicy() )
|
||||
{
|
||||
case Qsk::Always:
|
||||
return true;
|
||||
|
||||
case Qsk::Maybe:
|
||||
return slider->isSnapping();
|
||||
|
||||
case Qsk::Never:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline QPair< qreal, qreal > qskTickSpan( qreal min, qreal max, qreal length )
|
||||
{
|
||||
if ( length >= 0.0 )
|
||||
@ -345,11 +325,34 @@ QSizeF QskSliderSkinlet::sizeHint( const QskSkinnable* skinnable,
|
||||
return hint;
|
||||
}
|
||||
|
||||
bool QskSliderSkinlet::hasGraduation( const QskSlider* slider ) const
|
||||
{
|
||||
if ( slider->stepSize() )
|
||||
{
|
||||
const auto policy = slider->flagHint< Qsk::Policy >(
|
||||
Q::Tick | QskAspect::Option, Qsk::Never );
|
||||
|
||||
switch( policy )
|
||||
{
|
||||
case Qsk::Always:
|
||||
return true;
|
||||
|
||||
case Qsk::Maybe:
|
||||
return slider->isSnapping();
|
||||
|
||||
case Qsk::Never:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
QVector< qreal > QskSliderSkinlet::graduation( const QskSlider* slider ) const
|
||||
{
|
||||
QVector< qreal > graduation;
|
||||
|
||||
if ( qskHasGraduation( slider ) )
|
||||
if ( hasGraduation( slider ) )
|
||||
{
|
||||
const auto from = slider->minimum();
|
||||
const auto to = slider->maximum();
|
||||
|
@ -58,6 +58,7 @@ class QSK_EXPORT QskSliderSkinlet : public QskSkinlet
|
||||
QskAspect::Subcontrol, int index, QSGNode* ) const override;
|
||||
|
||||
virtual QVector< qreal > graduation( const QskSlider* ) const;
|
||||
bool hasGraduation( const QskSlider* ) const;
|
||||
|
||||
private:
|
||||
QRectF panelRect( const QskSlider*, const QRectF& ) const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user