some fixes

This commit is contained in:
Uwe Rathmann 2024-06-13 13:03:17 +02:00
parent 3157acc4ae
commit ecf51b79e3
1 changed files with 17 additions and 19 deletions

View File

@ -137,11 +137,10 @@ namespace
const qreal m_cy; const qreal m_cy;
}; };
class EllipseStroker class ArcStroker
{ {
public: public:
EllipseStroker( const QRectF&, const QskArcMetrics&, ArcStroker( const QRectF&, const QskArcMetrics&, bool radial, const QskGradient& );
bool radial, const QskGradient& );
int fillCount() const; int fillCount() const;
int borderCount() const; int borderCount() const;
@ -162,27 +161,27 @@ namespace
const qreal m_radians1; const qreal m_radians1;
const qreal m_radians2; const qreal m_radians2;
const bool m_radial; const bool m_radial; // for circular arcs radial/orthogonal does not differ
const QskGradient& m_gradient; const QskGradient& m_gradient;
}; };
EllipseStroker::EllipseStroker( const QRectF& rect, ArcStroker::ArcStroker( const QRectF& rect,
const QskArcMetrics& metrics, bool radial, const QskGradient& gradient ) const QskArcMetrics& metrics, bool radial, const QskGradient& gradient )
: m_rect( rect ) : m_rect( rect )
, m_radians1( qDegreesToRadians( metrics.startAngle() ) ) , m_radians1( qDegreesToRadians( metrics.startAngle() ) )
, m_radians2( qDegreesToRadians( metrics.endAngle() ) ) , m_radians2( qDegreesToRadians( metrics.endAngle() ) )
, m_radial( radial ) , m_radial( qFuzzyCompare( rect.width(), rect.height() ) ? true : radial )
, m_gradient( gradient ) , m_gradient( gradient )
{ {
} }
int EllipseStroker::fillCount() const int ArcStroker::fillCount() const
{ {
return arcLineCount() + m_gradient.stepCount() - 1; return arcLineCount() + m_gradient.stepCount() - 1;
} }
int EllipseStroker::arcLineCount() const int ArcStroker::arcLineCount() const
{ {
// not very sophisticated - TODO ... // not very sophisticated - TODO ...
@ -193,12 +192,12 @@ namespace
return qBound( 3, count, 160 ); return qBound( 3, count, 160 );
} }
int EllipseStroker::borderCount() const int ArcStroker::borderCount() const
{ {
return 0; return 0;
} }
int EllipseStroker::setBorderLines( QskVertex::ColoredLine* lines, int ArcStroker::setBorderLines( QskVertex::ColoredLine* lines,
const QskVertex::Color color ) const const QskVertex::Color color ) const
{ {
Q_UNUSED( lines ); Q_UNUSED( lines );
@ -207,7 +206,7 @@ namespace
return 0; return 0;
} }
inline int EllipseStroker::setFillLines( inline int ArcStroker::setFillLines(
const int length, QskVertex::ColoredLine* lines ) const const int length, QskVertex::ColoredLine* lines ) const
{ {
if ( m_radial ) if ( m_radial )
@ -223,7 +222,7 @@ namespace
} }
template< class LineStroker > template< class LineStroker >
inline int EllipseStroker::renderFillLines( inline int ArcStroker::renderFillLines(
const LineStroker& stroker, QskVertex::ColoredLine* lines ) const const LineStroker& stroker, QskVertex::ColoredLine* lines ) const
{ {
auto l = lines; auto l = lines;
@ -261,7 +260,7 @@ namespace
return l - lines; return l - lines;
} }
inline qreal EllipseStroker::radiansAt( qreal progress ) const inline qreal ArcStroker::radiansAt( qreal progress ) const
{ {
return m_radians1 + progress * ( m_radians2 - m_radians1 ); return m_radians1 + progress * ( m_radians2 - m_radians1 );
} }
@ -279,13 +278,12 @@ void QskArcRenderer::renderFillGeometry( const QRectF& rect,
const QskArcMetrics& metrics, bool radial, qreal borderWidth, const QskArcMetrics& metrics, bool radial, qreal borderWidth,
const QskGradient& gradient, QSGGeometry& geometry ) const QskGradient& gradient, QSGGeometry& geometry )
{ {
#if 1
// TODO ...
borderWidth = 0.0;
#endif
geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip ); geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip );
EllipseStroker stroker( rect, metrics, radial, gradient ); const auto b2 = 0.5 * borderWidth;
const auto r = rect.adjusted( b2, b2, -b2, -b2 );
ArcStroker stroker( r, metrics, radial, gradient );
const auto lineCount = stroker.fillCount(); const auto lineCount = stroker.fillCount();
@ -322,7 +320,7 @@ void QskArcRenderer::renderBorder( const QRectF& rect, const QskArcMetrics& metr
geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip ); geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip );
EllipseStroker stroker( rect, metrics, radial, QskGradient() ); ArcStroker stroker( rect, metrics, radial, QskGradient() );
const auto lineCount = stroker.borderCount(); const auto lineCount = stroker.borderCount();