code moved to QskVertex + hiding classes in QskVertex from public use
This commit is contained in:
parent
778ed1de9e
commit
a2e29e0d16
|
@ -7,6 +7,7 @@
|
||||||
#define QSK_BOX_RENDERER_H
|
#define QSK_BOX_RENDERER_H
|
||||||
|
|
||||||
#include "QskBoxShapeMetrics.h"
|
#include "QskBoxShapeMetrics.h"
|
||||||
|
#include "QskVertex.h"
|
||||||
#include <qrect.h>
|
#include <qrect.h>
|
||||||
|
|
||||||
class QskBoxBorderMetrics;
|
class QskBoxBorderMetrics;
|
||||||
|
@ -15,11 +16,6 @@ class QskGradient;
|
||||||
|
|
||||||
class QSGGeometry;
|
class QSGGeometry;
|
||||||
|
|
||||||
namespace QskVertex
|
|
||||||
{
|
|
||||||
class ColoredLine;
|
|
||||||
}
|
|
||||||
|
|
||||||
class QSK_EXPORT QskBoxRenderer
|
class QSK_EXPORT QskBoxRenderer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -35,60 +31,15 @@ class QSK_EXPORT QskBoxRenderer
|
||||||
|
|
||||||
static bool isGradientSupported( const QskGradient& );
|
static bool isGradientSupported( const QskGradient& );
|
||||||
|
|
||||||
class Quad
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
inline constexpr Quad() noexcept
|
|
||||||
: left( 0.0 )
|
|
||||||
, top( 0.0 )
|
|
||||||
, right( 0.0 )
|
|
||||||
, bottom( 0.0 )
|
|
||||||
, width( 0.0 )
|
|
||||||
, height( 0.0 )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
inline constexpr Quad( const QRectF& rect ) noexcept
|
|
||||||
: left( rect.left() )
|
|
||||||
, top( rect.top() )
|
|
||||||
, right( rect.right() )
|
|
||||||
, bottom( rect.bottom() )
|
|
||||||
, width( rect.width() )
|
|
||||||
, height( rect.height() )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
inline constexpr bool operator==( const Quad& other ) const noexcept
|
|
||||||
{
|
|
||||||
return
|
|
||||||
( left == other.left ) &&
|
|
||||||
( right == other.right ) &&
|
|
||||||
( top == other.top ) &&
|
|
||||||
( bottom == other.bottom );
|
|
||||||
}
|
|
||||||
|
|
||||||
inline constexpr bool operator!=( const Quad& other ) const noexcept
|
|
||||||
{
|
|
||||||
return !( *this == other );
|
|
||||||
}
|
|
||||||
|
|
||||||
inline constexpr bool isEmpty() const noexcept
|
|
||||||
{
|
|
||||||
return ( width <= 0 ) || ( height <= 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
qreal left, top, right, bottom, width, height;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Metrics
|
class Metrics
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Metrics( const QRectF&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics& );
|
Metrics( const QRectF&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics& );
|
||||||
|
|
||||||
Quad outerQuad;
|
QskVertex::Quad outerQuad;
|
||||||
Quad innerQuad;
|
QskVertex::Quad innerQuad;
|
||||||
#if 1
|
#if 1
|
||||||
Quad centerQuad; // to be removed
|
QskVertex::Quad centerQuad; // to be removed
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct Corner
|
struct Corner
|
||||||
|
@ -130,7 +81,8 @@ class QSK_EXPORT QskBoxRenderer
|
||||||
static void renderDiagonalFill( const Metrics&, const QskGradient&,
|
static void renderDiagonalFill( const Metrics&, const QskGradient&,
|
||||||
int lineCount, QskVertex::ColoredLine* );
|
int lineCount, QskVertex::ColoredLine* );
|
||||||
|
|
||||||
static void renderRectFill( const Quad&, const QskGradient&, QskVertex::ColoredLine* );
|
static void renderRectFill( const QskVertex::Quad&,
|
||||||
|
const QskGradient&, QskVertex::ColoredLine* );
|
||||||
};
|
};
|
||||||
|
|
||||||
inline void QskBoxRenderer::renderBorder(
|
inline void QskBoxRenderer::renderBorder(
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace
|
||||||
class VRectIterator
|
class VRectIterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline VRectIterator( const QskBoxRenderer::Quad& rect )
|
inline VRectIterator( const Quad& rect )
|
||||||
: m_rect( rect )
|
: m_rect( rect )
|
||||||
, m_value( rect.top )
|
, m_value( rect.top )
|
||||||
{
|
{
|
||||||
|
@ -53,14 +53,14 @@ namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const QskBoxRenderer::Quad& m_rect;
|
const Quad& m_rect;
|
||||||
qreal m_value;
|
qreal m_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
class HRectIterator
|
class HRectIterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline HRectIterator( const QskBoxRenderer::Quad& rect )
|
inline HRectIterator( const Quad& rect )
|
||||||
: m_rect( rect )
|
: m_rect( rect )
|
||||||
, m_value( rect.left )
|
, m_value( rect.left )
|
||||||
{
|
{
|
||||||
|
@ -95,14 +95,14 @@ namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const QskBoxRenderer::Quad& m_rect;
|
const Quad& m_rect;
|
||||||
qreal m_value;
|
qreal m_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DSquareIterator
|
class DSquareIterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline DSquareIterator( const QskBoxRenderer::Quad& rect )
|
inline DSquareIterator( const Quad& rect )
|
||||||
: m_rect( rect )
|
: m_rect( rect )
|
||||||
, m_step( 0 )
|
, m_step( 0 )
|
||||||
{
|
{
|
||||||
|
@ -171,14 +171,14 @@ namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const QskBoxRenderer::Quad& m_rect;
|
const Quad& m_rect;
|
||||||
int m_step;
|
int m_step;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DRectIterator
|
class DRectIterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline DRectIterator( const QskBoxRenderer::Quad& rect )
|
inline DRectIterator( const Quad& rect )
|
||||||
: m_rect( rect )
|
: m_rect( rect )
|
||||||
, m_step( 0 )
|
, m_step( 0 )
|
||||||
{
|
{
|
||||||
|
@ -332,7 +332,7 @@ namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const QskBoxRenderer::Quad& m_rect;
|
const Quad& m_rect;
|
||||||
|
|
||||||
qreal m_fx, m_fy;
|
qreal m_fx, m_fy;
|
||||||
qreal m_lx, m_ly;
|
qreal m_lx, m_ly;
|
||||||
|
@ -342,7 +342,7 @@ namespace
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void qskCreateFillOrdered( const QskBoxRenderer::Quad& rect,
|
static inline void qskCreateFillOrdered( const Quad& rect,
|
||||||
const QskGradient& gradient, ColoredLine* line )
|
const QskGradient& gradient, ColoredLine* line )
|
||||||
{
|
{
|
||||||
const auto dir = gradient.linearDirection();
|
const auto dir = gradient.linearDirection();
|
||||||
|
@ -374,7 +374,7 @@ static inline void qskCreateFillOrdered( const QskBoxRenderer::Quad& rect,
|
||||||
|
|
||||||
template< class ColorMap, class Line >
|
template< class ColorMap, class Line >
|
||||||
static inline void qskCreateFillRandom( Qt::Orientation orientation,
|
static inline void qskCreateFillRandom( Qt::Orientation orientation,
|
||||||
const QskBoxRenderer::Quad& r, const ColorMap& map, Line* line )
|
const Quad& r, const ColorMap& map, Line* line )
|
||||||
{
|
{
|
||||||
if ( orientation == Qt::Vertical )
|
if ( orientation == Qt::Vertical )
|
||||||
{
|
{
|
||||||
|
@ -390,14 +390,7 @@ static inline void qskCreateFillRandom( Qt::Orientation orientation,
|
||||||
|
|
||||||
template< class Line >
|
template< class Line >
|
||||||
static inline void qskCreateBorderMonochrome(
|
static inline void qskCreateBorderMonochrome(
|
||||||
const QskBoxRenderer::Quad& out, const QskBoxRenderer::Quad& in, QRgb rgb, Line* line )
|
const Quad& out, const Quad& in, Color color, Line* line )
|
||||||
{
|
|
||||||
qskCreateBorderMonochrome( out, in, Color( rgb ), line );
|
|
||||||
}
|
|
||||||
|
|
||||||
template< class Line >
|
|
||||||
static inline void qskCreateBorderMonochrome(
|
|
||||||
const QskBoxRenderer::Quad& out, const QskBoxRenderer::Quad& in, Color color, Line* line )
|
|
||||||
{
|
{
|
||||||
auto l = line;
|
auto l = line;
|
||||||
|
|
||||||
|
@ -411,7 +404,7 @@ static inline void qskCreateBorderMonochrome(
|
||||||
|
|
||||||
template< class Line >
|
template< class Line >
|
||||||
static inline void qskCreateBorder(
|
static inline void qskCreateBorder(
|
||||||
const QskBoxRenderer::Quad& out, const QskBoxRenderer::Quad& in,
|
const Quad& out, const Quad& in,
|
||||||
const QskBoxBorderColors& colors, Line* line )
|
const QskBoxBorderColors& colors, Line* line )
|
||||||
{
|
{
|
||||||
const qreal dx1 = in.right - in.left;
|
const qreal dx1 = in.right - in.left;
|
||||||
|
@ -655,7 +648,7 @@ void QskBoxRenderer::renderRect( const QRectF& rect,
|
||||||
if ( bc.isMonochrome() )
|
if ( bc.isMonochrome() )
|
||||||
{
|
{
|
||||||
const auto rgb = bc.left().rgbStart();
|
const auto rgb = bc.left().rgbStart();
|
||||||
qskCreateBorderMonochrome( rect, in, rgb, fillLines );
|
qskCreateBorderMonochrome( rect, in, Color( rgb ), fillLines );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -664,7 +657,7 @@ void QskBoxRenderer::renderRect( const QRectF& rect,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskBoxRenderer::renderRectFill( const QskBoxRenderer::Quad& rect,
|
void QskBoxRenderer::renderRectFill( const QskVertex::Quad& rect,
|
||||||
const QskGradient& gradient, QskVertex::ColoredLine* line )
|
const QskGradient& gradient, QskVertex::ColoredLine* line )
|
||||||
{
|
{
|
||||||
qskCreateFillOrdered( rect, gradient, line );
|
qskCreateFillOrdered( rect, gradient, line );
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
namespace QskVertex
|
namespace QskVertex
|
||||||
{
|
{
|
||||||
class QSK_EXPORT Color
|
class Color
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
constexpr Color() noexcept;
|
constexpr Color() noexcept;
|
||||||
|
@ -32,75 +32,6 @@ namespace QskVertex
|
||||||
unsigned char r, g, b, a;
|
unsigned char r, g, b, a;
|
||||||
};
|
};
|
||||||
|
|
||||||
class QSK_EXPORT Line
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
inline void setLine( float x1, float y1, float x2, float y2 ) noexcept
|
|
||||||
{
|
|
||||||
p1.set( x1, y1 );
|
|
||||||
p2.set( x2, y2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void setHLine( float x1, float x2, float y ) noexcept
|
|
||||||
{
|
|
||||||
setLine( x1, y, x2, y );
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void setVLine( float x, float y1, float y2 ) noexcept
|
|
||||||
{
|
|
||||||
setLine( x, y1, x, y2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void setLine( float x1, float y1, float x2, float y2, Color ) noexcept
|
|
||||||
{
|
|
||||||
/* The color parameter makes no sense, but is useful
|
|
||||||
when being using from templated code
|
|
||||||
*/
|
|
||||||
setLine( x1, y1, x2, y2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
QSGGeometry::Point2D p1;
|
|
||||||
QSGGeometry::Point2D p2;
|
|
||||||
};
|
|
||||||
|
|
||||||
class QSK_EXPORT ColoredLine
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
inline void setLine( float x1, float y1, Color c1,
|
|
||||||
float x2, float y2, Color c2 ) noexcept
|
|
||||||
{
|
|
||||||
p1.set( x1, y1, c1.r, c1.g, c1.b, c1.a );
|
|
||||||
p2.set( x2, y2, c2.r, c2.g, c2.b, c2.a );
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void setLine( float x1, float y1, float x2, float y2, Color color ) noexcept
|
|
||||||
{
|
|
||||||
setLine( x1, y1, color, x2, y2, color );
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void setHLine( qreal x1, qreal x2, qreal y, Color color ) noexcept
|
|
||||||
{
|
|
||||||
setLine( x1, y, color, x2, y, color );
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void setVLine( qreal x, qreal y1, qreal y2, Color color ) noexcept
|
|
||||||
{
|
|
||||||
setLine( x, y1, color, x, y2, color );
|
|
||||||
}
|
|
||||||
|
|
||||||
QSGGeometry::ColoredPoint2D p1;
|
|
||||||
QSGGeometry::ColoredPoint2D p2;
|
|
||||||
};
|
|
||||||
|
|
||||||
template< class Line >
|
|
||||||
static inline Line* allocateLines( QSGGeometry& geometry, int lineCount )
|
|
||||||
{
|
|
||||||
geometry.allocate( 2 * lineCount ); // 2 points per line
|
|
||||||
return reinterpret_cast< Line* >( geometry.vertexData() );
|
|
||||||
}
|
|
||||||
|
|
||||||
void QSK_EXPORT debugGeometry( const QSGGeometry& );
|
|
||||||
|
|
||||||
inline constexpr Color::Color() noexcept
|
inline constexpr Color::Color() noexcept
|
||||||
: r( 0 )
|
: r( 0 )
|
||||||
, g( 0 )
|
, g( 0 )
|
||||||
|
@ -167,11 +98,134 @@ namespace QskVertex
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace QskVertex
|
||||||
|
{
|
||||||
|
class Line
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline void setLine( float x1, float y1, float x2, float y2 ) noexcept
|
||||||
|
{
|
||||||
|
p1.set( x1, y1 );
|
||||||
|
p2.set( x2, y2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void setHLine( float x1, float x2, float y ) noexcept
|
||||||
|
{
|
||||||
|
setLine( x1, y, x2, y );
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void setVLine( float x, float y1, float y2 ) noexcept
|
||||||
|
{
|
||||||
|
setLine( x, y1, x, y2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void setLine( float x1, float y1, float x2, float y2, Color ) noexcept
|
||||||
|
{
|
||||||
|
/* The color parameter makes no sense, but is useful
|
||||||
|
when being using from templated code
|
||||||
|
*/
|
||||||
|
setLine( x1, y1, x2, y2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
QSGGeometry::Point2D p1;
|
||||||
|
QSGGeometry::Point2D p2;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ColoredLine
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline void setLine( float x1, float y1, Color c1,
|
||||||
|
float x2, float y2, Color c2 ) noexcept
|
||||||
|
{
|
||||||
|
p1.set( x1, y1, c1.r, c1.g, c1.b, c1.a );
|
||||||
|
p2.set( x2, y2, c2.r, c2.g, c2.b, c2.a );
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void setLine( float x1, float y1, float x2, float y2, Color color ) noexcept
|
||||||
|
{
|
||||||
|
setLine( x1, y1, color, x2, y2, color );
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void setHLine( qreal x1, qreal x2, qreal y, Color color ) noexcept
|
||||||
|
{
|
||||||
|
setLine( x1, y, color, x2, y, color );
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void setVLine( qreal x, qreal y1, qreal y2, Color color ) noexcept
|
||||||
|
{
|
||||||
|
setLine( x, y1, color, x, y2, color );
|
||||||
|
}
|
||||||
|
|
||||||
|
QSGGeometry::ColoredPoint2D p1;
|
||||||
|
QSGGeometry::ColoredPoint2D p2;
|
||||||
|
};
|
||||||
|
|
||||||
|
template< class Line >
|
||||||
|
static inline Line* allocateLines( QSGGeometry& geometry, int lineCount )
|
||||||
|
{
|
||||||
|
geometry.allocate( 2 * lineCount ); // 2 points per line
|
||||||
|
return reinterpret_cast< Line* >( geometry.vertexData() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace QskVertex
|
||||||
|
{
|
||||||
|
class Quad
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
constexpr Quad() noexcept = default;
|
||||||
|
|
||||||
|
inline constexpr Quad( const QRectF& rect ) noexcept
|
||||||
|
: left( rect.left() )
|
||||||
|
, top( rect.top() )
|
||||||
|
, right( rect.right() )
|
||||||
|
, bottom( rect.bottom() )
|
||||||
|
, width( rect.width() )
|
||||||
|
, height( rect.height() )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
inline constexpr bool operator==( const Quad& other ) const noexcept
|
||||||
|
{
|
||||||
|
return
|
||||||
|
( left == other.left ) &&
|
||||||
|
( right == other.right ) &&
|
||||||
|
( top == other.top ) &&
|
||||||
|
( bottom == other.bottom );
|
||||||
|
}
|
||||||
|
|
||||||
|
inline constexpr bool operator!=( const Quad& other ) const noexcept
|
||||||
|
{
|
||||||
|
return !( *this == other );
|
||||||
|
}
|
||||||
|
|
||||||
|
inline constexpr bool isEmpty() const noexcept
|
||||||
|
{
|
||||||
|
return ( width <= 0 ) || ( height <= 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
qreal left = 0.0;
|
||||||
|
qreal top = 0.0;
|
||||||
|
qreal right = 0.0;
|
||||||
|
qreal bottom = 0.0;
|
||||||
|
qreal width = 0.0;
|
||||||
|
qreal height = 0.0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace QskVertex
|
||||||
|
{
|
||||||
|
void debugGeometry( const QSGGeometry& );
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef QT_NO_DEBUG_STREAM
|
#ifndef QT_NO_DEBUG_STREAM
|
||||||
class QDebug;
|
|
||||||
QDebug operator<<( QDebug debug, QskVertex::Color );
|
class QDebug;
|
||||||
QDebug operator<<( QDebug debug, const QskVertex::ColoredLine& );
|
|
||||||
QDebug operator<<( QDebug debug, const QskVertex::Line& );
|
QDebug operator<<( QDebug debug, QskVertex::Color );
|
||||||
|
QDebug operator<<( QDebug debug, const QskVertex::ColoredLine& );
|
||||||
|
QDebug operator<<( QDebug debug, const QskVertex::Line& );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue