minor API changes

This commit is contained in:
Uwe Rathmann 2023-01-11 12:51:16 +01:00
parent 5ba34eb11c
commit e66520294c
10 changed files with 86 additions and 60 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::renderFillGeometry( rect, shape, border, m_geometry );
} }
/* /*

View File

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

View File

@ -207,12 +207,14 @@ void QskBoxRectangleNode::updateNode( const QRectF& rect,
if ( hasFill ) if ( hasFill )
{ {
flatMaterial->setColor( fillGradient.rgbStart() ); flatMaterial->setColor( fillGradient.rgbStart() );
QskBoxRenderer::renderFill( d->rect, shape, QskBoxBorderMetrics(), *geometry() ); QskBoxRenderer::renderFillGeometry(
d->rect, shape, QskBoxBorderMetrics(), *geometry() );
} }
else else
{ {
flatMaterial->setColor( borderColors.left().rgbStart() ); flatMaterial->setColor( borderColors.left().rgbStart() );
QskBoxRenderer::renderBorder( d->rect, shape, borderMetrics, *geometry() ); QskBoxRenderer::renderBorderGeometry(
d->rect, shape, borderMetrics, *geometry() );
} }
} }
} }

View File

@ -7,6 +7,8 @@
#include "QskRectRenderer.h" #include "QskRectRenderer.h"
#include "QskRoundedRectRenderer.h" #include "QskRoundedRectRenderer.h"
#include "QskBoxShapeMetrics.h" #include "QskBoxShapeMetrics.h"
#include "QskBoxBorderMetrics.h"
#include "QskBoxBorderColors.h"
#include "QskGradient.h" #include "QskGradient.h"
#include "QskGradientDirection.h" #include "QskGradientDirection.h"
@ -35,24 +37,42 @@ static inline QskGradient qskNormalizedGradient( const QskGradient gradient )
return gradient; return gradient;
} }
void QskBoxRenderer::renderBorder( void QskBoxRenderer::renderBorderGeometry(
const QRectF& rect, const QskBoxShapeMetrics& shape, const QRectF& rect, const QskBoxShapeMetrics& shape,
const QskBoxBorderMetrics& border, QSGGeometry& geometry ) const QskBoxBorderMetrics& border, QSGGeometry& geometry )
{ {
geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip );
if ( shape.isRectangle() ) if ( shape.isRectangle() )
QskRectRenderer::renderBorder( rect, border, geometry ); QskRectRenderer::renderBorderGeometry( rect, border, geometry );
else else
QskRoundedRectRenderer::renderBorder( rect, shape, border, geometry ); QskRoundedRectRenderer::renderBorderGeometry( rect, shape, border, geometry );
} }
void QskBoxRenderer::renderFill( void QskBoxRenderer::renderFillGeometry(
const QRectF& rect, const QskBoxShapeMetrics& shape, QSGGeometry& geometry )
{
renderFillGeometry( rect, shape, QskBoxBorderMetrics(), geometry );
}
void QskBoxRenderer::renderFillGeometry(
const QRectF& rect, const QskBoxShapeMetrics& shape, const QRectF& rect, const QskBoxShapeMetrics& shape,
const QskBoxBorderMetrics& border, QSGGeometry& geometry ) const QskBoxBorderMetrics& border, QSGGeometry& geometry )
{ {
geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip );
if ( shape.isRectangle() ) if ( shape.isRectangle() )
QskRectRenderer::renderFill( rect, border, geometry ); QskRectRenderer::renderFillGeometry( rect, border, geometry );
else else
QskRoundedRectRenderer::renderFill( rect, shape, border, geometry ); QskRoundedRectRenderer::renderFillGeometry( rect, shape, border, geometry );
}
void QskBoxRenderer::renderBox( const QRectF& rect,
const QskBoxShapeMetrics& shape, const QskGradient& gradient,
QSGGeometry& geometry )
{
renderBox( rect, shape, QskBoxBorderMetrics(),
QskBoxBorderColors(), gradient, geometry );
} }
void QskBoxRenderer::renderBox( const QRectF& rect, void QskBoxRenderer::renderBox( const QRectF& rect,
@ -60,6 +80,8 @@ void QskBoxRenderer::renderBox( const QRectF& rect,
const QskBoxBorderColors& borderColors, const QskGradient& gradient, const QskBoxBorderColors& borderColors, const QskGradient& gradient,
QSGGeometry& geometry ) QSGGeometry& geometry )
{ {
geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip );
const auto gradientN = qskNormalizedGradient( gradient ); const auto gradientN = qskNormalizedGradient( gradient );
if ( shape.isRectangle() ) if ( shape.isRectangle() )

View File

@ -18,17 +18,35 @@ class QRectF;
namespace QskBoxRenderer namespace QskBoxRenderer
{ {
QSK_EXPORT void renderBorder( const QRectF&, /*
Filling the geometry without any color information:
see QSGGeometry::defaultAttributes_Point2D()
- clip nodes
- using shaders setting the color information
*/
QSK_EXPORT void renderBorderGeometry( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& );
QSK_EXPORT void renderFill( const QRectF&, QSK_EXPORT void renderFillGeometry( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& );
QSK_EXPORT void renderFillGeometry( const QRectF&,
const QskBoxShapeMetrics&, QSGGeometry& );
/*
Filling the geometry usually with color information:
see QSGGeometry::defaultAttributes_ColoredPoint2D()
*/
QSK_EXPORT bool isGradientSupported( const QskBoxShapeMetrics&, const QskGradient& );
QSK_EXPORT void renderBox( const QRectF&, QSK_EXPORT void renderBox( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&,
const QskBoxBorderColors&, const QskGradient&, QSGGeometry& ); const QskBoxBorderColors&, const QskGradient&, QSGGeometry& );
QSK_EXPORT bool isGradientSupported( const QskBoxShapeMetrics&, const QskGradient& ); QSK_EXPORT void renderBox( const QRectF&,
const QskBoxShapeMetrics&, const QskGradient&, QSGGeometry& );
} }
#endif #endif

View File

@ -387,7 +387,7 @@ static inline Line* qskAddBorderLines(
return line; return line;
} }
void QskRectRenderer::renderBorder( const QRectF& rect, void QskRectRenderer::renderBorderGeometry( const QRectF& rect,
const QskBoxBorderMetrics& border, QSGGeometry& geometry ) const QskBoxBorderMetrics& border, QSGGeometry& geometry )
{ {
const Quad out = rect; const Quad out = rect;
@ -409,7 +409,7 @@ void QskRectRenderer::renderFill0( const QskVertex::Quad& rect,
qskAddFillLines( rect, gradient, lineCount, line ); qskAddFillLines( rect, gradient, lineCount, line );
} }
void QskRectRenderer::renderFill( const QRectF& rect, void QskRectRenderer::renderFillGeometry( const QRectF& rect,
const QskBoxBorderMetrics& border, QSGGeometry& geometry ) const QskBoxBorderMetrics& border, QSGGeometry& geometry )
{ {
const Quad quad = qskValidOrEmptyInnerRect( rect, border.widths() ); const Quad quad = qskValidOrEmptyInnerRect( rect, border.widths() );

View File

@ -17,10 +17,10 @@ class QRectF;
namespace QskRectRenderer namespace QskRectRenderer
{ {
void renderBorder( const QRectF&, void renderBorderGeometry( const QRectF&,
const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxBorderMetrics&, QSGGeometry& );
void renderFill( const QRectF&, void renderFillGeometry( const QRectF&,
const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxBorderMetrics&, QSGGeometry& );
void renderRect( const QRectF&, const QskBoxBorderMetrics&, void renderRect( const QRectF&, const QskBoxBorderMetrics&,

View File

@ -7,11 +7,8 @@
#include "QskGradient.h" #include "QskGradient.h"
#include "QskSGNode.h" #include "QskSGNode.h"
#include "QskBoxRenderer.h" #include "QskBoxRenderer.h"
#include "QskGradientMaterial.h"
#include "QskBoxBorderMetrics.h"
#include "QskBoxBorderColors.h"
#include "QskBoxShapeMetrics.h" #include "QskBoxShapeMetrics.h"
#include "QskGradientMaterial.h"
#include <qglobalstatic.h> #include <qglobalstatic.h>
#include <qsgvertexcolormaterial.h> #include <qsgvertexcolormaterial.h>
@ -22,21 +19,6 @@ QSK_QT_PRIVATE_END
Q_GLOBAL_STATIC( QSGVertexColorMaterial, qskMaterialColorVertex ) Q_GLOBAL_STATIC( QSGVertexColorMaterial, qskMaterialColorVertex )
static inline void qskUpdateColoredPoint2D( const QRectF& rect,
const QskBoxShapeMetrics& shape, const QskGradient& gradient,
QSGGeometry& geometry )
{
QskBoxRenderer::renderBox( rect, shape,
QskBoxBorderMetrics(), QskBoxBorderColors(), gradient, geometry );
}
static inline void qskUpdatePoint2D( const QRectF& rect,
const QskBoxShapeMetrics& shape, QSGGeometry& geometry )
{
QskBoxRenderer::renderFill( rect, shape,
QskBoxBorderMetrics(), geometry );
}
class QskRectangleNodePrivate final : public QSGGeometryNodePrivate class QskRectangleNodePrivate final : public QSGGeometryNodePrivate
{ {
public: public:
@ -154,8 +136,9 @@ void QskRectangleNode::updateNode(
*/ */
if ( dirtyMetrics || dirtyColors ) if ( dirtyMetrics || dirtyColors )
{ {
qskUpdateColoredPoint2D( rect, effectiveShape, QskBoxRenderer::renderBox( rect,
effectiveGradient, d->geometry ); effectiveShape, effectiveGradient, d->geometry );
markDirty( QSGNode::DirtyGeometry ); markDirty( QSGNode::DirtyGeometry );
} }
} }
@ -169,7 +152,7 @@ void QskRectangleNode::updateNode(
*/ */
if ( dirtyMetrics ) if ( dirtyMetrics )
{ {
qskUpdatePoint2D( rect, effectiveShape, d->geometry ); QskBoxRenderer::renderFillGeometry( rect, effectiveShape, d->geometry );
markDirty( QSGNode::DirtyGeometry ); markDirty( QSGNode::DirtyGeometry );
} }

View File

@ -1157,7 +1157,7 @@ QskRoundedRectRenderer::Metrics::Metrics( const QRectF& rect,
( borderRight == borderBottom ); ( borderRight == borderBottom );
} }
void QskRoundedRectRenderer::renderBorder( void QskRoundedRectRenderer::renderBorderGeometry(
const QRectF& rect, const QskBoxShapeMetrics& shape, const QRectF& rect, const QskBoxShapeMetrics& shape,
const QskBoxBorderMetrics& border, QSGGeometry& geometry ) const QskBoxBorderMetrics& border, QSGGeometry& geometry )
{ {
@ -1176,7 +1176,7 @@ void QskRoundedRectRenderer::renderBorder(
qskRenderBorderLines( metrics, Qt::Vertical, line, BorderMapNone() ); qskRenderBorderLines( metrics, Qt::Vertical, line, BorderMapNone() );
} }
void QskRoundedRectRenderer::renderFill( void QskRoundedRectRenderer::renderFillGeometry(
const QRectF& rect, const QskBoxShapeMetrics& shape, const QRectF& rect, const QskBoxShapeMetrics& shape,
const QskBoxBorderMetrics& border, QSGGeometry& geometry ) const QskBoxBorderMetrics& border, QSGGeometry& geometry )
{ {
@ -1205,10 +1205,27 @@ void QskRoundedRectRenderer::renderFill(
return; return;
} }
#if 0
if ( metrics.isBorderRegular && metrics.isRadiusRegular )
{
int lineCount += metrics.corner[ TopLeft ].stepCount +
metrics.corner[ BottomLeft ].stepCount;
if ( metrics.centerQuad.top >= metrics.centerQuad.bottom )
lineCount--;
geometry.allocate( 2 * lineCount );
// TODO ...
qskRenderLines( metrics, Qt::Vertical, ... );
return;
}
#endif
/* /*
Unfortunately QSGGeometry::DrawTriangleFan is no longer supported with Unfortunately QSGGeometry::DrawTriangleFan is no longer supported with
Qt6 and we have to go with DrawTriangleStrip, duplicating the center with Qt6 and we have to go with DrawTriangleStrip, duplicating the center with
each each vertex. each vertex.
*/ */
const auto numPoints = const auto numPoints =
@ -1289,22 +1306,6 @@ void QskRoundedRectRenderer::renderFill(
*idx++ = 0; *idx++ = 0;
*idx++ = 1; *idx++ = 1;
#if 0
{
auto p = geometry.vertexDataAsPoint2D();
qDebug() << "Vertexes:" << geometry.vertexCount();
for ( int i = 0; i < geometry.vertexCount(); i++ )
qDebug() << "\t" << i << p[i].x << p[i].y;
auto idx = geometry.indexDataAsUShort();
qDebug() << "Indexes:" << geometry.indexCount();
for ( int i = 0; i < geometry.indexCount(); i++ )
qDebug() << "\t" << i << idx[i];
}
#endif
} }
void QskRoundedRectRenderer::renderRect( const QRectF& rect, void QskRoundedRectRenderer::renderRect( const QRectF& rect,

View File

@ -43,10 +43,10 @@ namespace QskRoundedRectRenderer
bool isTotallyCropped; bool isTotallyCropped;
}; };
void renderFill( const QRectF&, void renderFillGeometry( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& );
void renderBorder( const QRectF&, void renderBorderGeometry( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& );
void renderRect( const QRectF&, void renderRect( const QRectF&,