minor API changes
This commit is contained in:
parent
5ba34eb11c
commit
e66520294c
@ -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 );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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 );
|
||||
}
|
||||
|
||||
|
@ -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() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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() )
|
||||
|
@ -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
|
||||
|
@ -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() );
|
||||
|
@ -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&,
|
||||
|
@ -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 );
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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&,
|
||||
|
Loading…
x
Reference in New Issue
Block a user