subcontrol renamed from Knob to Handle

This commit is contained in:
Uwe Rathmann 2024-11-28 15:47:20 +01:00
parent 7a180cfe5e
commit 9d13cd1edf
4 changed files with 28 additions and 32 deletions

View File

@ -18,7 +18,7 @@ QSK_SUBCONTROL( LightDisplay, Tickmarks )
QSK_SUBCONTROL( LightDisplay, ValueText )
QSK_SUBCONTROL( LightDisplay, LeftLabel )
QSK_SUBCONTROL( LightDisplay, RightLabel )
QSK_SUBCONTROL( LightDisplay, Knob )
QSK_SUBCONTROL( LightDisplay, Handle )
QSK_STATE( LightDisplay, Pressed, ( QskAspect::FirstUserState << 1 ) )
@ -53,16 +53,14 @@ bool LightDisplay::isPressed() const
void LightDisplay::mousePressEvent( QMouseEvent* event )
{
QRectF handleRect = subControlRect( LightDisplay::Knob );
const auto handleRect = subControlRect( LightDisplay::Handle );
if ( handleRect.contains( event->pos() ) )
{
setSkinStateFlag( Pressed );
return;
}
else
{
QskBoundedValueInput::mousePressEvent( event );
}
Inherited::mousePressEvent( event );
}
void LightDisplay::mouseMoveEvent( QMouseEvent* event )
@ -73,19 +71,17 @@ void LightDisplay::mouseMoveEvent( QMouseEvent* event )
const auto mousePos = qskMousePosition( event );
const auto rect = subControlRect( ColdAndWarmArc );
bool arcContainsMousePos = arcContainsPoint( rect, mousePos );
if( !arcContainsMousePos )
if( !arcContainsPoint( rect, mousePos ) )
{
setSkinStateFlag( Pressed, false );
return;
}
const auto metrics = arcMetricsHint( ColdAndWarmArc );
qreal angle = angleFromPoint( rect, mousePos );
const int tolerance = 20;
auto angle = angleFromPoint( rect, mousePos );
if( !angleInRange( metrics, angle ) )
{
// we're slightly outside the range, but don't want to give up
@ -101,7 +97,7 @@ void LightDisplay::mouseMoveEvent( QMouseEvent* event )
}
}
qreal ratio = ( metrics.spanAngle() - angle ) / metrics.spanAngle();
const auto ratio = ( metrics.spanAngle() - angle ) / metrics.spanAngle();
setValueAsRatio( ratio );
}
@ -112,12 +108,11 @@ void LightDisplay::mouseReleaseEvent( QMouseEvent* /*event*/ )
qreal LightDisplay::angleFromPoint( const QRectF& rect, const QPointF& point ) const
{
QPointF circlePos( point.x() - rect.center().x(),
const QPointF circlePos( point.x() - rect.center().x(),
rect.center().y() - point.y() );
const qreal atan = qAtan2( circlePos.y(), circlePos.x() );
const qreal angle = qRadiansToDegrees( atan );
return angle;
const qreal angle = qAtan2( circlePos.y(), circlePos.x() );
return qRadiansToDegrees( angle );
}
bool LightDisplay::arcContainsPoint( const QRectF& rect, const QPointF& point ) const
@ -148,9 +143,7 @@ bool LightDisplay::arcContainsPoint( const QRectF& rect, const QPointF& point )
const bool pointOnArc = ( polarRadius + tolerance ) > radiusMin
&& ( polarRadius - tolerance ) < radiusMax;
bool ret = angleWithinRange && pointOnArc;
return ret;
return angleWithinRange && pointOnArc;
}
#include "moc_LightDisplay.cpp"

View File

@ -12,9 +12,12 @@ class LightDisplay : public QskBoundedValueInput
{
Q_OBJECT
using Inherited = QskBoundedValueInput;
public:
QSK_SUBCONTROLS( Panel, Groove, ColdAndWarmArc, Tickmarks, ValueText,
LeftLabel, RightLabel, Knob ) // ### rename knob to handle?
QSK_SUBCONTROLS( Panel, Groove, ColdAndWarmArc, Tickmarks,
ValueText, LeftLabel, RightLabel, Handle )
QSK_STATES( Pressed )
LightDisplay( QQuickItem* parent = nullptr );
@ -22,9 +25,9 @@ class LightDisplay : public QskBoundedValueInput
bool isPressed() const;
protected:
void mousePressEvent( QMouseEvent* e ) override;
void mouseMoveEvent( QMouseEvent* e ) override;
void mouseReleaseEvent( QMouseEvent* e ) override;
void mousePressEvent( QMouseEvent* ) override;
void mouseMoveEvent( QMouseEvent* ) override;
void mouseReleaseEvent( QMouseEvent* ) override;
private:
qreal angleFromPoint( const QRectF&, const QPointF& ) const;

View File

@ -105,12 +105,12 @@ QRectF LightDisplaySkinlet::subControlRect( const QskSkinnable* skinnable,
return rect;
}
else if( subControl == LightDisplay::Knob )
else if( subControl == LightDisplay::Handle )
{
const auto arcRect = subControlRect( skinnable,
contentsRect, LightDisplay::ColdAndWarmArc );
const auto arcMetrics = display->arcMetricsHint( LightDisplay::ColdAndWarmArc );
const auto knobSize = display->strutSizeHint( LightDisplay::Knob );
const auto knobSize = display->strutSizeHint( LightDisplay::Handle );
const qreal radius = ( arcRect.width() - arcMetrics.thickness() ) / 2;
const qreal angle = display->valueAsRatio() * 180;
@ -183,7 +183,7 @@ QSGNode* LightDisplaySkinlet::updateSubNode(
}
case KnobRole:
{
return updateBoxNode( skinnable, node, LightDisplay::Knob );
return updateBoxNode( skinnable, node, LightDisplay::Handle );
}
}

View File

@ -241,9 +241,9 @@ void Skin::initHints()
ed.setFontRole( LightDisplay::ValueText, QskFontRole::Headline );
ed.setColor( LightDisplay::ValueText, 0xff929cb2 );
ed.setStrutSize( LightDisplay::Knob, { 20, 20 } );
ed.setBoxBorderMetrics( LightDisplay::Knob, 1 );
ed.setBoxShape( LightDisplay::Knob, 100, Qt::RelativeSize );
ed.setStrutSize( LightDisplay::Handle, { 20, 20 } );
ed.setBoxBorderMetrics( LightDisplay::Handle, 1 );
ed.setBoxShape( LightDisplay::Handle, 100, Qt::RelativeSize );
// palette dependent skin hints:
ed.setGradient( MenuBar::Panel, palette.menuBar );
@ -265,9 +265,9 @@ void Skin::initHints()
ed.setShadowColor( UsageDiagramBox::Panel, palette.shadow );
ed.setGradient( LightDisplay::Panel, palette.box );
ed.setGradient( LightDisplay::Knob, palette.box );
ed.setGradient( LightDisplay::Handle, palette.box );
ed.setGradient( LightDisplay::ColdAndWarmArc, palette.lightDisplayColdAndWarmArc );
ed.setBoxBorderColors( LightDisplay::Knob, palette.lightDisplayKnobBorder );
ed.setBoxBorderColors( LightDisplay::Handle, palette.lightDisplayKnobBorder );
ed.setShadowMetrics( LightDisplay::Groove, { 0, 20 } );
ed.setShadowColor( LightDisplay::Groove, palette.shadow );
ed.setGradient( LightDisplay::Groove, palette.box );