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
{
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 )
{
QskBoxRenderer::renderFill( rect, shapeMetrics, borderMetrics, d->geometry );
QskBoxRenderer::renderFillGeometry( rect, shapeMetrics, borderMetrics, d->geometry );
markDirty( QSGNode::DirtyGeometry );
}

View File

@ -207,12 +207,14 @@ void QskBoxRectangleNode::updateNode( const QRectF& rect,
if ( hasFill )
{
flatMaterial->setColor( fillGradient.rgbStart() );
QskBoxRenderer::renderFill( d->rect, shape, QskBoxBorderMetrics(), *geometry() );
QskBoxRenderer::renderFillGeometry(
d->rect, shape, QskBoxBorderMetrics(), *geometry() );
}
else
{
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 "QskRoundedRectRenderer.h"
#include "QskBoxShapeMetrics.h"
#include "QskBoxBorderMetrics.h"
#include "QskBoxBorderColors.h"
#include "QskGradient.h"
#include "QskGradientDirection.h"
@ -35,24 +37,42 @@ static inline QskGradient qskNormalizedGradient( const QskGradient gradient )
return gradient;
}
void QskBoxRenderer::renderBorder(
void QskBoxRenderer::renderBorderGeometry(
const QRectF& rect, const QskBoxShapeMetrics& shape,
const QskBoxBorderMetrics& border, QSGGeometry& geometry )
{
geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip );
if ( shape.isRectangle() )
QskRectRenderer::renderBorder( rect, border, geometry );
QskRectRenderer::renderBorderGeometry( rect, border, geometry );
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 QskBoxBorderMetrics& border, QSGGeometry& geometry )
{
geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip );
if ( shape.isRectangle() )
QskRectRenderer::renderFill( rect, border, geometry );
QskRectRenderer::renderFillGeometry( rect, border, geometry );
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,
@ -60,6 +80,8 @@ void QskBoxRenderer::renderBox( const QRectF& rect,
const QskBoxBorderColors& borderColors, const QskGradient& gradient,
QSGGeometry& geometry )
{
geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip );
const auto gradientN = qskNormalizedGradient( gradient );
if ( shape.isRectangle() )

View File

@ -18,17 +18,35 @@ class QRectF;
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& );
QSK_EXPORT void renderFill( const QRectF&,
QSK_EXPORT void renderFillGeometry( const QRectF&,
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&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&,
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

View File

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

View File

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

View File

@ -7,11 +7,8 @@
#include "QskGradient.h"
#include "QskSGNode.h"
#include "QskBoxRenderer.h"
#include "QskGradientMaterial.h"
#include "QskBoxBorderMetrics.h"
#include "QskBoxBorderColors.h"
#include "QskBoxShapeMetrics.h"
#include "QskGradientMaterial.h"
#include <qglobalstatic.h>
#include <qsgvertexcolormaterial.h>
@ -22,21 +19,6 @@ QSK_QT_PRIVATE_END
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
{
public:
@ -154,8 +136,9 @@ void QskRectangleNode::updateNode(
*/
if ( dirtyMetrics || dirtyColors )
{
qskUpdateColoredPoint2D( rect, effectiveShape,
effectiveGradient, d->geometry );
QskBoxRenderer::renderBox( rect,
effectiveShape, effectiveGradient, d->geometry );
markDirty( QSGNode::DirtyGeometry );
}
}
@ -169,7 +152,7 @@ void QskRectangleNode::updateNode(
*/
if ( dirtyMetrics )
{
qskUpdatePoint2D( rect, effectiveShape, d->geometry );
QskBoxRenderer::renderFillGeometry( rect, effectiveShape, d->geometry );
markDirty( QSGNode::DirtyGeometry );
}

View File

@ -1157,7 +1157,7 @@ QskRoundedRectRenderer::Metrics::Metrics( const QRectF& rect,
( borderRight == borderBottom );
}
void QskRoundedRectRenderer::renderBorder(
void QskRoundedRectRenderer::renderBorderGeometry(
const QRectF& rect, const QskBoxShapeMetrics& shape,
const QskBoxBorderMetrics& border, QSGGeometry& geometry )
{
@ -1176,7 +1176,7 @@ void QskRoundedRectRenderer::renderBorder(
qskRenderBorderLines( metrics, Qt::Vertical, line, BorderMapNone() );
}
void QskRoundedRectRenderer::renderFill(
void QskRoundedRectRenderer::renderFillGeometry(
const QRectF& rect, const QskBoxShapeMetrics& shape,
const QskBoxBorderMetrics& border, QSGGeometry& geometry )
{
@ -1205,10 +1205,27 @@ void QskRoundedRectRenderer::renderFill(
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
Qt6 and we have to go with DrawTriangleStrip, duplicating the center with
each each vertex.
each vertex.
*/
const auto numPoints =
@ -1289,22 +1306,6 @@ void QskRoundedRectRenderer::renderFill(
*idx++ = 0;
*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,

View File

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