2023-02-08 17:58:09 +01:00
|
|
|
/******************************************************************************
|
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
|
2023-02-08 17:58:09 +01:00
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
#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&,
|
2023-12-17 17:18:35 +01:00
|
|
|
const QskBoxBorderColors&, const QskBoxRenderer::ColorMap& );
|
2023-02-08 17:58:09 +01:00
|
|
|
|
|
|
|
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;
|
2023-12-17 17:18:35 +01:00
|
|
|
const QskBoxRenderer::ColorMap m_colorMap;
|
2023-02-08 17:58:09 +01:00
|
|
|
const GeometryLayout m_geometryLayout;
|
|
|
|
|
|
|
|
const bool m_isColored;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|