qskinny/src/nodes/QskBoxBasicStroker.h

88 lines
2.3 KiB
C
Raw Normal View History

/******************************************************************************
2024-01-17 14:31:45 +01:00
* QSkinny - Copyright (C) The authors
2023-04-06 09:23:37 +02:00
* SPDX-License-Identifier: BSD-3-Clause
*****************************************************************************/
#ifndef QSK_BOX_BASIC_STROKER_H
#define QSK_BOX_BASIC_STROKER_H
#include "QskBoxMetrics.h"
#include "QskBoxBorderColors.h"
#include "QskBoxColorMap.h"
class QskBoxShapeMetrics;
class QskBoxBorderMetrics;
namespace QskVertex
{
class Line;
class ColoredLine;
}
class QskBoxBasicStroker
{
public:
QskBoxBasicStroker( const QskBoxMetrics& );
QskBoxBasicStroker( const QskBoxMetrics&, const QskBoxBorderColors& );
QskBoxBasicStroker( const QskBoxMetrics&,
const QskBoxBorderColors&, const QskBoxRenderer::ColorMap& );
int fillCount() const;
int borderCount() const;
/*
QskVertex::Line ( = QSGGeometry::Point2D )
Needed for:
- monochrome coloring ( QSGSimpleMaterial )
- clipping ( QSGClipNode )
- shaders getting the color information from a color ramp
( = QskGradientMatrial )
*/
void setBorderLines( QskVertex::Line* ) const;
void setFillLines( QskVertex::Line* ) const;
/*
QskVertex::ColoredLine ( = QSGGeometry::ColoredPoint2D )
The color information is added to the geometry what allows
using the same shader regardless of the colors, what ends
up in better scene graph batching
*/
void setBorderLines( QskVertex::ColoredLine* ) const;
void setFillLines( QskVertex::ColoredLine* ) const;
void setBoxLines( QskVertex::ColoredLine*, QskVertex::ColoredLine* ) const;
private:
class GeometryLayout
{
public:
GeometryLayout( const QskBoxMetrics&, const QskBoxBorderColors& );
int cornerOffsets[ 4 ];
int edgeOffsets[ 4 ];
int closingOffsets[2];
int lineCount;
};
void setBorderGradientLines( QskVertex::ColoredLine* ) const;
void setBorderGradientLines( Qt::Edge, QskVertex::ColoredLine* ) const;
void setBorderAndFillLines( QskVertex::ColoredLine*, QskVertex::ColoredLine* ) const;
const QskBoxMetrics& m_metrics;
const QskBoxBorderColors m_borderColors;
const QskBoxRenderer::ColorMap m_colorMap;
const GeometryLayout m_geometryLayout;
const bool m_isColored;
};
#endif