QskBoxRenderer with static methods

This commit is contained in:
Uwe Rathmann 2022-12-05 17:06:55 +01:00
parent 6ed417873e
commit 9d409ab89b
6 changed files with 38 additions and 27 deletions

View File

@ -49,7 +49,7 @@ void QskBoxClipNode::setBox( const QRectF& rect,
else else
{ {
setIsRectangular( false ); setIsRectangular( false );
QskBoxRenderer().renderFill( rect, shape, border, m_geometry ); QskBoxRenderer::renderFill( rect, shape, border, m_geometry );
} }
/* /*

View File

@ -90,7 +90,7 @@ void QskBoxFillNode::updateNode(
if ( dirtyGeometry ) if ( dirtyGeometry )
{ {
QskBoxRenderer().renderFill( rect, shapeMetrics, borderMetrics, d->geometry ); QskBoxRenderer::renderFill( rect, shapeMetrics, borderMetrics, d->geometry );
markDirty( QSGNode::DirtyGeometry ); markDirty( QSGNode::DirtyGeometry );
} }

View File

@ -19,7 +19,7 @@ QSK_QT_PRIVATE_BEGIN
#include <private/qsgnode_p.h> #include <private/qsgnode_p.h>
QSK_QT_PRIVATE_END QSK_QT_PRIVATE_END
Q_GLOBAL_STATIC( QSGVertexColorMaterial, qskMaterialVertex ) Q_GLOBAL_STATIC( QSGVertexColorMaterial, qskMaterialColorVertex )
static inline QskHashValue qskMetricsHash( static inline QskHashValue qskMetricsHash(
const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& borderMetrics ) const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& borderMetrics )
@ -115,13 +115,13 @@ QskBoxRectangleNode::QskBoxRectangleNode()
{ {
Q_D( QskBoxRectangleNode ); Q_D( QskBoxRectangleNode );
setMaterial( qskMaterialVertex ); setMaterial( qskMaterialColorVertex );
setGeometry( &d->geometry ); setGeometry( &d->geometry );
} }
QskBoxRectangleNode::~QskBoxRectangleNode() QskBoxRectangleNode::~QskBoxRectangleNode()
{ {
if ( material() != qskMaterialVertex ) if ( material() != qskMaterialColorVertex )
delete material(); delete material();
} }
@ -229,13 +229,11 @@ void QskBoxRectangleNode::updateNode( const QRectF& rect,
bool maybeFlat = false; bool maybeFlat = false;
#endif #endif
QskBoxRenderer renderer;
if ( !maybeFlat ) if ( !maybeFlat )
{ {
setMonochrome( false ); setMonochrome( false );
renderer.renderBox( d->rect, shape, borderMetrics, QskBoxRenderer::renderBox( d->rect, shape, borderMetrics,
borderColors, fillGradient, *geometry() ); borderColors, fillGradient, *geometry() );
} }
else else
@ -248,12 +246,12 @@ void QskBoxRectangleNode::updateNode( const QRectF& rect,
if ( hasFill ) if ( hasFill )
{ {
flatMaterial->setColor( fillGradient.rgbStart() ); flatMaterial->setColor( fillGradient.rgbStart() );
renderer.renderFill( d->rect, shape, QskBoxBorderMetrics(), *geometry() ); QskBoxRenderer::renderFill( d->rect, shape, QskBoxBorderMetrics(), *geometry() );
} }
else else
{ {
flatMaterial->setColor( borderColors.left().rgbStart() ); 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(); const auto material = this->material();
if ( on == ( material != qskMaterialVertex ) ) if ( on == ( material != qskMaterialColorVertex ) )
return; return;
Q_D( QskBoxRectangleNode ); Q_D( QskBoxRectangleNode );
@ -278,7 +276,7 @@ void QskBoxRectangleNode::setMonochrome( bool on )
} }
else else
{ {
setMaterial( qskMaterialVertex ); setMaterial( qskMaterialColorVertex );
delete material; delete material;
const QSGGeometry g( QSGGeometry::defaultAttributes_ColoredPoint2D(), 0 ); const QSGGeometry g( QSGGeometry::defaultAttributes_ColoredPoint2D(), 0 );

View File

@ -32,7 +32,6 @@ class QSK_EXPORT QskBoxRectangleNode : public QSGGeometryNode
void setMonochrome( bool on ); void setMonochrome( bool on );
Q_DECLARE_PRIVATE( QskBoxRectangleNode ) Q_DECLARE_PRIVATE( QskBoxRectangleNode )
}; };
#endif #endif

View File

@ -23,16 +23,19 @@ namespace QskVertex
class QSK_EXPORT QskBoxRenderer class QSK_EXPORT QskBoxRenderer
{ {
public: public:
void renderBorder( const QRectF&, static void renderBorder( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& );
void renderFill( const QRectF&, static void renderFill( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& );
void renderBox( const QRectF&, static void renderBox( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&,
const QskBoxBorderColors&, const QskGradient&, QSGGeometry& ); const QskBoxBorderColors&, const QskGradient&, QSGGeometry& );
static void renderRect( const QRectF&, const QskGradient&, QSGGeometry& );
static void renderRect( const QRectF&, QSGGeometry& );
class Quad class Quad
{ {
public: public:
@ -106,29 +109,29 @@ class QSK_EXPORT QskBoxRenderer
}; };
private: private:
void renderRectFill( const QRectF&, static void renderRectFill( const QRectF&,
const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxBorderMetrics&, QSGGeometry& );
void renderRectBorder( const QRectF&, static void renderRectBorder( const QRectF&,
const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxBorderMetrics&, QSGGeometry& );
void renderRect( const QRectF&, const QskBoxBorderMetrics&, static void renderRect( const QRectF&, const QskBoxBorderMetrics&,
const QskBoxBorderColors&, const QskGradient&, QSGGeometry& ); const QskBoxBorderColors&, const QskGradient&, QSGGeometry& );
void renderRectellipseFill( const QRectF&, static void renderRectellipseFill( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& );
void renderRectellipseBorder( const QRectF&, static void renderRectellipseBorder( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& );
void renderRectellipse( const QRectF&, static void renderRectellipse( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&,
const QskBoxBorderColors&, const QskGradient&, QSGGeometry& ); const QskBoxBorderColors&, const QskGradient&, QSGGeometry& );
void renderDiagonalFill( const Metrics&, const QskGradient&, static void renderDiagonalFill( const Metrics&, const QskGradient&,
int lineCount, QskVertex::ColoredLine* ); 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( inline void QskBoxRenderer::renderBorder(

View File

@ -543,7 +543,6 @@ void QskBoxRenderer::renderRectFill( const QRectF& rect,
return; return;
} }
geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip );
geometry.allocate( 4 ); geometry.allocate( 4 );
auto p = geometry.vertexDataAsPoint2D(); auto p = geometry.vertexDataAsPoint2D();
@ -553,6 +552,18 @@ void QskBoxRenderer::renderRectFill( const QRectF& rect,
p[3].set( quad.right, quad.bottom ); 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, void QskBoxRenderer::renderRect( const QRectF& rect,
const QskBoxBorderMetrics& border, const QskBoxBorderColors& borderColors, const QskBoxBorderMetrics& border, const QskBoxBorderColors& borderColors,
const QskGradient& gradient, QSGGeometry& geometry ) const QskGradient& gradient, QSGGeometry& geometry )