diff --git a/src/nodes/QskBoxClipNode.cpp b/src/nodes/QskBoxClipNode.cpp index 40b288e0..7cd5f2b7 100644 --- a/src/nodes/QskBoxClipNode.cpp +++ b/src/nodes/QskBoxClipNode.cpp @@ -49,7 +49,7 @@ void QskBoxClipNode::setBox( const QRectF& rect, else { setIsRectangular( false ); - QskBoxRenderer().renderFill( rect, shape, border, m_geometry ); + QskBoxRenderer::renderFill( rect, shape, border, m_geometry ); } /* diff --git a/src/nodes/QskBoxFillNode.cpp b/src/nodes/QskBoxFillNode.cpp index 02e8bd81..a84323f3 100644 --- a/src/nodes/QskBoxFillNode.cpp +++ b/src/nodes/QskBoxFillNode.cpp @@ -90,7 +90,7 @@ void QskBoxFillNode::updateNode( if ( dirtyGeometry ) { - QskBoxRenderer().renderFill( rect, shapeMetrics, borderMetrics, d->geometry ); + QskBoxRenderer::renderFill( rect, shapeMetrics, borderMetrics, d->geometry ); markDirty( QSGNode::DirtyGeometry ); } diff --git a/src/nodes/QskBoxRectangleNode.cpp b/src/nodes/QskBoxRectangleNode.cpp index 94f4e238..90bc11c3 100644 --- a/src/nodes/QskBoxRectangleNode.cpp +++ b/src/nodes/QskBoxRectangleNode.cpp @@ -19,7 +19,7 @@ QSK_QT_PRIVATE_BEGIN #include QSK_QT_PRIVATE_END -Q_GLOBAL_STATIC( QSGVertexColorMaterial, qskMaterialVertex ) +Q_GLOBAL_STATIC( QSGVertexColorMaterial, qskMaterialColorVertex ) static inline QskHashValue qskMetricsHash( const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& borderMetrics ) @@ -73,7 +73,7 @@ static inline QskGradient qskEffectiveGradient( const QskGradient& gradient ) } case QskGradient::Radial: case QskGradient::Conic: - { + { qWarning() << "QskBoxRectangleNode does not support radial/conic gradients"; g.setLinearDirection( Qt::Vertical ); @@ -115,13 +115,13 @@ QskBoxRectangleNode::QskBoxRectangleNode() { Q_D( QskBoxRectangleNode ); - setMaterial( qskMaterialVertex ); + setMaterial( qskMaterialColorVertex ); setGeometry( &d->geometry ); } QskBoxRectangleNode::~QskBoxRectangleNode() { - if ( material() != qskMaterialVertex ) + if ( material() != qskMaterialColorVertex ) delete material(); } @@ -139,7 +139,7 @@ void QskBoxRectangleNode::updateNode( const QRectF& rect, Q_D( QskBoxRectangleNode ); /* - QskBoxRenderer supports certain linear gradients only. + QskBoxRenderer supports certain linear gradients only. For everything else we would have to use a QskGradientMaterial instead. As a temporary solution we simply "convert" gradient into a @@ -229,13 +229,11 @@ void QskBoxRectangleNode::updateNode( const QRectF& rect, bool maybeFlat = false; #endif - QskBoxRenderer renderer; - if ( !maybeFlat ) { setMonochrome( false ); - renderer.renderBox( d->rect, shape, borderMetrics, + QskBoxRenderer::renderBox( d->rect, shape, borderMetrics, borderColors, fillGradient, *geometry() ); } else @@ -248,12 +246,12 @@ void QskBoxRectangleNode::updateNode( const QRectF& rect, if ( hasFill ) { flatMaterial->setColor( fillGradient.rgbStart() ); - renderer.renderFill( d->rect, shape, QskBoxBorderMetrics(), *geometry() ); + QskBoxRenderer::renderFill( d->rect, shape, QskBoxBorderMetrics(), *geometry() ); } else { flatMaterial->setColor( borderColors.left().rgbStart() ); - renderer.renderBorder( d->rect, shape, borderMetrics, *geometry() ); + QskBoxRenderer::renderBorder( d->rect, shape, borderMetrics, *geometry() ); } } } @@ -262,7 +260,7 @@ void QskBoxRectangleNode::setMonochrome( bool on ) { const auto material = this->material(); - if ( on == ( material != qskMaterialVertex ) ) + if ( on == ( material != qskMaterialColorVertex ) ) return; Q_D( QskBoxRectangleNode ); @@ -278,7 +276,7 @@ void QskBoxRectangleNode::setMonochrome( bool on ) } else { - setMaterial( qskMaterialVertex ); + setMaterial( qskMaterialColorVertex ); delete material; const QSGGeometry g( QSGGeometry::defaultAttributes_ColoredPoint2D(), 0 ); diff --git a/src/nodes/QskBoxRectangleNode.h b/src/nodes/QskBoxRectangleNode.h index 131712a0..c623f76c 100644 --- a/src/nodes/QskBoxRectangleNode.h +++ b/src/nodes/QskBoxRectangleNode.h @@ -32,7 +32,6 @@ class QSK_EXPORT QskBoxRectangleNode : public QSGGeometryNode void setMonochrome( bool on ); Q_DECLARE_PRIVATE( QskBoxRectangleNode ) - }; #endif diff --git a/src/nodes/QskBoxRenderer.h b/src/nodes/QskBoxRenderer.h index d7668b78..37c26325 100644 --- a/src/nodes/QskBoxRenderer.h +++ b/src/nodes/QskBoxRenderer.h @@ -23,16 +23,19 @@ namespace QskVertex class QSK_EXPORT QskBoxRenderer { public: - void renderBorder( const QRectF&, + static void renderBorder( const QRectF&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); - void renderFill( const QRectF&, + static void renderFill( const QRectF&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); - void renderBox( const QRectF&, + static void renderBox( const QRectF&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, const QskBoxBorderColors&, const QskGradient&, QSGGeometry& ); + static void renderRect( const QRectF&, const QskGradient&, QSGGeometry& ); + static void renderRect( const QRectF&, QSGGeometry& ); + class Quad { public: @@ -106,29 +109,29 @@ class QSK_EXPORT QskBoxRenderer }; private: - void renderRectFill( const QRectF&, + static void renderRectFill( const QRectF&, const QskBoxBorderMetrics&, QSGGeometry& ); - void renderRectBorder( const QRectF&, + static void renderRectBorder( const QRectF&, const QskBoxBorderMetrics&, QSGGeometry& ); - void renderRect( const QRectF&, const QskBoxBorderMetrics&, + static void renderRect( const QRectF&, const QskBoxBorderMetrics&, const QskBoxBorderColors&, const QskGradient&, QSGGeometry& ); - void renderRectellipseFill( const QRectF&, + static void renderRectellipseFill( const QRectF&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); - void renderRectellipseBorder( const QRectF&, + static void renderRectellipseBorder( const QRectF&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); - void renderRectellipse( const QRectF&, + static void renderRectellipse( const QRectF&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, const QskBoxBorderColors&, const QskGradient&, QSGGeometry& ); - void renderDiagonalFill( const Metrics&, const QskGradient&, + static void renderDiagonalFill( const Metrics&, const QskGradient&, int lineCount, QskVertex::ColoredLine* ); - void renderRectFill( const Quad&, const QskGradient&, QskVertex::ColoredLine* ); + static void renderRectFill( const Quad&, const QskGradient&, QskVertex::ColoredLine* ); }; inline void QskBoxRenderer::renderBorder( diff --git a/src/nodes/QskBoxRendererRect.cpp b/src/nodes/QskBoxRendererRect.cpp index 997ae8d8..6c210eb9 100644 --- a/src/nodes/QskBoxRendererRect.cpp +++ b/src/nodes/QskBoxRendererRect.cpp @@ -543,7 +543,6 @@ void QskBoxRenderer::renderRectFill( const QRectF& rect, return; } - geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip ); geometry.allocate( 4 ); auto p = geometry.vertexDataAsPoint2D(); @@ -553,6 +552,18 @@ void QskBoxRenderer::renderRectFill( const QRectF& rect, p[3].set( quad.right, quad.bottom ); } +void QskBoxRenderer::renderRect( const QRectF& rect, + const QskGradient& gradient, QSGGeometry& geometry ) +{ + renderRect( rect, QskBoxBorderMetrics(), + QskBoxBorderColors(), gradient, geometry ); +} + +void QskBoxRenderer::renderRect( const QRectF& rect, QSGGeometry& geometry ) +{ + renderRectFill( rect, QskBoxBorderMetrics(), geometry ); +} + void QskBoxRenderer::renderRect( const QRectF& rect, const QskBoxBorderMetrics& border, const QskBoxBorderColors& borderColors, const QskGradient& gradient, QSGGeometry& geometry )