move some functionality to the arc renderer
This commit is contained in:
parent
d1f79e2f72
commit
b90af00685
|
@ -4,6 +4,7 @@
|
|||
*****************************************************************************/
|
||||
|
||||
#include "QskArcNode.h"
|
||||
#include "QskArcRenderer.h"
|
||||
|
||||
#include <QPainter>
|
||||
|
||||
|
@ -47,35 +48,12 @@ void QskArcNode::paint( QPainter *painter, const QSizeF &size )
|
|||
spanAngle = -1 * ( m_value / m_maximum ) * 360;
|
||||
}
|
||||
|
||||
painter->setRenderHint( QPainter::Antialiasing, true );
|
||||
|
||||
const QRectF r( 0.5 * m_width, 0.5 * m_width,
|
||||
size.width() - m_width, size.height() - m_width );
|
||||
|
||||
QGradientStops stops;
|
||||
|
||||
for( const QskGradientStop& stop : m_gradient.stops() )
|
||||
{
|
||||
QGradientStop s( stop.position(), stop.color() );
|
||||
stops.append( s );
|
||||
}
|
||||
|
||||
if( m_gradientType == QGradient::RadialGradient )
|
||||
{
|
||||
QRadialGradient radialGradient( r.center(), qMin( r.width(), r.height() ) );
|
||||
radialGradient.setStops( stops );
|
||||
|
||||
painter->setPen( QPen( radialGradient, m_width, Qt::SolidLine, Qt::FlatCap ) );
|
||||
painter->drawArc( r, startAngle * 16, spanAngle * 16 );
|
||||
}
|
||||
else
|
||||
{
|
||||
QConicalGradient conicalGradient( r.center(), startAngle );
|
||||
conicalGradient.setStops( stops );
|
||||
|
||||
painter->setPen( QPen( conicalGradient, m_width, Qt::SolidLine, Qt::FlatCap ) );
|
||||
painter->drawArc( r, startAngle * 16, spanAngle * 16 );
|
||||
}
|
||||
QskArcRenderer renderer;
|
||||
renderer.renderArc( r, m_gradient, m_gradientType, m_width, startAngle, spanAngle,
|
||||
painter );
|
||||
}
|
||||
|
||||
uint QskArcNode::hash() const
|
||||
|
|
|
@ -16,13 +16,41 @@ class QSK_EXPORT QskArcRenderer
|
|||
{
|
||||
public:
|
||||
void renderArc( const QRectF& rect, const QskGradient& gradient,
|
||||
QGradient::Type gradientType, int startAngle, int endAngle, QPainter* );
|
||||
QGradient::Type gradientType, double width, int startAngle,
|
||||
int endAngle, QPainter* );
|
||||
};
|
||||
|
||||
inline void QskArcRenderer::renderArc( const QRectF& rect,
|
||||
const QskGradient& gradient, QGradient::Type gradientType,
|
||||
int startAngle, int endAngle, QPainter* painter )
|
||||
const QskGradient& gradient, QGradient::Type gradientType, double width,
|
||||
int startAngle, int spanAngle, QPainter* painter )
|
||||
{
|
||||
painter->setRenderHint( QPainter::Antialiasing, true );
|
||||
|
||||
QGradientStops stops;
|
||||
|
||||
for( const QskGradientStop& stop : gradient.stops() )
|
||||
{
|
||||
QGradientStop s( stop.position(), stop.color() );
|
||||
stops.append( s );
|
||||
}
|
||||
|
||||
if( gradientType == QGradient::RadialGradient )
|
||||
{
|
||||
QRadialGradient radialGradient( rect.center(), qMin( rect.width(), rect.height() ) );
|
||||
radialGradient.setStops( stops );
|
||||
|
||||
painter->setPen( QPen( radialGradient, width, Qt::SolidLine, Qt::FlatCap ) );
|
||||
painter->drawArc( rect, startAngle * 16, spanAngle * 16 );
|
||||
}
|
||||
else
|
||||
{
|
||||
QConicalGradient conicalGradient( rect.center(), startAngle );
|
||||
conicalGradient.setStops( stops );
|
||||
|
||||
painter->setPen( QPen( conicalGradient, width, Qt::SolidLine, Qt::FlatCap ) );
|
||||
painter->drawArc( rect, startAngle * 16, spanAngle * 16 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue