Speedometer: Inherit from QskRangeControl
We don't need start/endAngle() etc. and value() anymore, but can use the methods from QskRangeControl.
This commit is contained in:
parent
c46b105879
commit
41d97c8c91
|
@ -8,44 +8,10 @@ QSK_SUBCONTROL( Speedometer, Labels )
|
|||
QSK_SUBCONTROL( Speedometer, Needle )
|
||||
|
||||
Speedometer::Speedometer( QQuickItem* parent ) :
|
||||
QskControl( parent ),
|
||||
m_value( 0.0 ),
|
||||
m_startAngle( -215 ),
|
||||
m_endAngle( 35 )
|
||||
QskRangeControl( parent )
|
||||
{
|
||||
}
|
||||
|
||||
float Speedometer::value() const
|
||||
{
|
||||
return m_value;
|
||||
}
|
||||
|
||||
void Speedometer::setValue( float value )
|
||||
{
|
||||
m_value = value;
|
||||
update();
|
||||
}
|
||||
|
||||
float Speedometer::startAngle() const
|
||||
{
|
||||
return m_startAngle;
|
||||
}
|
||||
|
||||
void Speedometer::setStartAngle( float startAngle )
|
||||
{
|
||||
m_startAngle = startAngle;
|
||||
}
|
||||
|
||||
float Speedometer::endAngle() const
|
||||
{
|
||||
return m_endAngle;
|
||||
}
|
||||
|
||||
void Speedometer::setEndAngle( float endAngle )
|
||||
{
|
||||
m_endAngle = endAngle;
|
||||
}
|
||||
|
||||
QVector< QString > Speedometer::labels() const
|
||||
{
|
||||
return m_labels;
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#ifndef SPEEDOMETER_H
|
||||
#define SPEEDOMETER_H
|
||||
|
||||
#include <QskControl.h>
|
||||
#include <QskRangeControl.h>
|
||||
|
||||
class Speedometer : public QskControl
|
||||
class Speedometer : public QskRangeControl
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
|
@ -12,22 +12,10 @@ public:
|
|||
|
||||
Speedometer( QQuickItem* parent = nullptr );
|
||||
|
||||
float value() const;
|
||||
void setValue( float value ); // angle; should be within a set range
|
||||
|
||||
float startAngle() const;
|
||||
void setStartAngle( float startAngle );
|
||||
|
||||
float endAngle() const;
|
||||
void setEndAngle( float endAngle );
|
||||
|
||||
QVector< QString > labels() const;
|
||||
void setLabels( const QVector< QString >& labels );
|
||||
|
||||
private:
|
||||
float m_value;
|
||||
float m_startAngle;
|
||||
float m_endAngle;
|
||||
float m_labelsStep;
|
||||
QVector< QString > m_labels;
|
||||
};
|
||||
|
|
|
@ -29,11 +29,12 @@ SpeedometerDisplay::SpeedometerDisplay( QQuickItem *parent ) :
|
|||
m_box->setSpacing( 20 );
|
||||
|
||||
m_revCounter->setObjectName( QStringLiteral( "RevCounter" ) );
|
||||
int startAngle = 145, endAngle = 305, value = 200, numberLabels = 8;
|
||||
m_revCounter->setStartAngle( startAngle );
|
||||
m_revCounter->setEndAngle( endAngle );
|
||||
m_revCounter->setValue( value );
|
||||
m_revCounter->setMinimum( 145 );
|
||||
m_revCounter->setMaximum( 305 );
|
||||
m_revCounter->setValue( 200 );
|
||||
QVector< QString > revCounterLabels;
|
||||
int numberLabels = 8;
|
||||
revCounterLabels.reserve( numberLabels );
|
||||
|
||||
for ( int i = 0; i < numberLabels; ++i )
|
||||
{
|
||||
|
@ -43,14 +44,11 @@ SpeedometerDisplay::SpeedometerDisplay( QQuickItem *parent ) :
|
|||
m_revCounter->setLabels( revCounterLabels );
|
||||
|
||||
m_speedometer->setObjectName( QStringLiteral( "Speedometer" ) );
|
||||
value = 280;
|
||||
numberLabels = 23;
|
||||
startAngle = -215;
|
||||
endAngle = 35;
|
||||
m_speedometer->setStartAngle( startAngle );
|
||||
m_speedometer->setEndAngle( endAngle );
|
||||
m_speedometer->setValue( value );
|
||||
m_speedometer->setMinimum( -215 );
|
||||
m_speedometer->setMaximum( 35 );
|
||||
m_speedometer->setValue( -90 );
|
||||
QVector< QString > speedometerLabels;
|
||||
numberLabels = 23;
|
||||
speedometerLabels.reserve( numberLabels );
|
||||
|
||||
for ( int i = 0; i < numberLabels; ++i )
|
||||
|
@ -76,8 +74,8 @@ SpeedometerDisplay::SpeedometerDisplay( QQuickItem *parent ) :
|
|||
|
||||
|
||||
m_fuelGauge->setObjectName( QStringLiteral( "Fuel Gauge" ) );
|
||||
m_fuelGauge->setStartAngle( 195 );
|
||||
m_fuelGauge->setEndAngle( 345 );
|
||||
m_fuelGauge->setMinimum( 195 );
|
||||
m_fuelGauge->setMaximum( 345 );
|
||||
m_fuelGauge->setValue( 330 );
|
||||
|
||||
QVector< QString > fuelGaugeLabels;
|
||||
|
|
|
@ -112,8 +112,8 @@ QSGNode* SpeedometerSkinlet::updateLabelsNode( const Speedometer* speedometer, Q
|
|||
ticksNode = new TicksNode( Qt::white );
|
||||
}
|
||||
|
||||
const float startAngle = speedometer->startAngle();
|
||||
const float endAngle = speedometer->endAngle();
|
||||
const auto startAngle = speedometer->minimum();
|
||||
const auto endAngle = speedometer->maximum();
|
||||
const auto step = ( endAngle - startAngle ) / ( labelsCount - 1 );
|
||||
|
||||
auto geometry = ticksNode->geometry();
|
||||
|
@ -133,7 +133,7 @@ QSGNode* SpeedometerSkinlet::updateLabelsNode( const Speedometer* speedometer, Q
|
|||
const QMarginsF numbersMargins = speedometer->marginsHint( Speedometer::Labels | QskAspect::Margin );
|
||||
QFontMetrics fontMetrics( speedometer->effectiveFont( Speedometer::Labels ) );
|
||||
|
||||
float angle = startAngle;
|
||||
auto angle = startAngle;
|
||||
|
||||
// Create a series of tickmarks from minimum to maximum
|
||||
for( int i = 0; i < labelsCount; ++i, angle += step )
|
||||
|
@ -141,13 +141,13 @@ QSGNode* SpeedometerSkinlet::updateLabelsNode( const Speedometer* speedometer, Q
|
|||
qreal cosine = qCos( qDegreesToRadians( angle ) );
|
||||
qreal sine = qSin( qDegreesToRadians( angle ) );
|
||||
|
||||
float xStart = center.x() + radius * cosine;
|
||||
float yStart = center.y() + radius * sine;
|
||||
auto xStart = center.x() + radius * cosine;
|
||||
auto yStart = center.y() + radius * sine;
|
||||
|
||||
// ### skin hint for each of highlighted / normal marks
|
||||
qreal length = 15;
|
||||
float xEnd = center.x() + ( radius - length ) * cosine;
|
||||
float yEnd = center.y() + ( radius - length ) * sine;
|
||||
auto xEnd = center.x() + ( radius - length ) * cosine;
|
||||
auto yEnd = center.y() + ( radius - length ) * sine;
|
||||
|
||||
vertexData[0].set( xStart, yStart );
|
||||
vertexData[1].set( xEnd, yEnd );
|
||||
|
@ -161,13 +161,13 @@ QSGNode* SpeedometerSkinlet::updateLabelsNode( const Speedometer* speedometer, Q
|
|||
{
|
||||
const QString& text = labels.at( i );
|
||||
|
||||
float w = fontMetrics.width( text );
|
||||
float h = fontMetrics.height();
|
||||
float adjustX = ( -0.5 * cosine - 0.5 ) * w;
|
||||
float adjustY = ( -0.5 * sine - 0.5 ) * h;
|
||||
auto w = fontMetrics.width( text );
|
||||
auto h = fontMetrics.height();
|
||||
auto adjustX = ( -0.5 * cosine - 0.5 ) * w;
|
||||
auto adjustY = ( -0.5 * sine - 0.5 ) * h;
|
||||
|
||||
float numbersX = xEnd + ( -1 * numbersMargins.left() * cosine ) + adjustX;
|
||||
float numbersY = yEnd + ( -1 * numbersMargins.top() * sine ) + adjustY;
|
||||
auto numbersX = xEnd + ( -1 * numbersMargins.left() * cosine ) + adjustX;
|
||||
auto numbersY = yEnd + ( -1 * numbersMargins.top() * sine ) + adjustY;
|
||||
|
||||
QRectF numbersRect( numbersX, numbersY, w, h );
|
||||
|
||||
|
|
Loading…
Reference in New Issue