QskBoxRenderer with static methods
This commit is contained in:
parent
6ed417873e
commit
9d409ab89b
|
@ -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 );
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ QSK_QT_PRIVATE_BEGIN
|
|||
#include <private/qsgnode_p.h>
|
||||
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 );
|
||||
|
|
|
@ -32,7 +32,6 @@ class QSK_EXPORT QskBoxRectangleNode : public QSGGeometryNode
|
|||
void setMonochrome( bool on );
|
||||
|
||||
Q_DECLARE_PRIVATE( QskBoxRectangleNode )
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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 )
|
||||
|
|
Loading…
Reference in New Issue