qskinny/src/nodes/QskArcRenderer.h

59 lines
1.7 KiB
C
Raw Normal View History

2021-10-11 09:13:40 +00:00
/******************************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the QSkinny License, Version 1.0
*****************************************************************************/
#ifndef QSK_ARC_RENDERER_H
#define QSK_ARC_RENDERER_H
2021-10-12 11:31:50 +00:00
#include "QskArcMetrics.h"
2021-10-11 09:13:40 +00:00
#include "QskGlobal.h"
#include "QskGradient.h"
#include <QPainter>
#include <QRect>
class QSK_EXPORT QskArcRenderer
{
public:
2021-10-12 11:31:50 +00:00
void renderArc( const QRectF& rect, const QskArcMetrics& metrics,
const QskGradient& gradient, QPainter* );
2021-10-11 09:13:40 +00:00
};
2021-10-12 11:31:50 +00:00
void QskArcRenderer::renderArc(const QRectF& rect,
const QskArcMetrics& metrics, const QskGradient& gradient,
QPainter* painter )
2021-10-11 09:13:40 +00:00
{
painter->setRenderHint( QPainter::Antialiasing, true );
QGradientStops stops;
for( const QskGradientStop& stop : gradient.stops() )
{
QGradientStop s( stop.position(), stop.color() );
stops.append( s );
}
2021-10-12 11:31:50 +00:00
if( gradient.orientation() == QskGradient::Radial )
{
2021-10-12 11:31:50 +00:00
QRadialGradient radialGradient( rect.center(), qMin( rect.width(),
rect.height() ) );
radialGradient.setStops( stops );
2021-10-12 11:31:50 +00:00
painter->setPen( QPen( radialGradient, metrics.width(), Qt::SolidLine,
Qt::FlatCap ) );
}
2021-10-12 11:31:50 +00:00
else if( gradient.orientation() == QskGradient::Conical )
{
2021-10-12 11:31:50 +00:00
QConicalGradient conicalGradient( rect.center(),
metrics.startAngle() / 16.0 );
conicalGradient.setStops( stops );
2021-10-12 11:31:50 +00:00
painter->setPen( QPen( conicalGradient, metrics.width(), Qt::SolidLine,
Qt::FlatCap ) );
}
2021-10-12 11:31:50 +00:00
// ### add other types
2021-10-12 11:31:50 +00:00
painter->drawArc( rect, metrics.startAngle(), metrics.spanAngle() );
2021-10-11 09:13:40 +00:00
}
#endif