diff --git a/src/nodes/QskBoxNode.cpp b/src/nodes/QskBoxNode.cpp index e9632821..fddafe68 100644 --- a/src/nodes/QskBoxNode.cpp +++ b/src/nodes/QskBoxNode.cpp @@ -7,6 +7,7 @@ #include "QskBoxFillNode.h" #include "QskBoxShadowNode.h" #include "QskBoxRectangleNode.h" +#include "QskBoxRenderer.h" #include "QskSGNode.h" #include "QskGradient.h" @@ -49,37 +50,6 @@ inline Node* qskNode( QSGNode* parentNode, quint8 role ) return node; } -static inline bool qskIsBoxGradient( const QskGradient& gradient ) -{ - if ( !gradient.isVisible() || gradient.isMonochrome() ) - return true; - - switch( gradient.type() ) - { - case QskGradient::Linear: - { - auto dir = gradient.linearDirection(); - - if ( dir.isTilted() ) - { - // only diagonal from topLeft to bottomRight - return ( dir.x1() == dir.x2() ) && ( dir.y1() == dir.y2() ); - } - - return true; - } - case QskGradient::Radial: - case QskGradient::Conic: - { - return false; - } - default: - { - return true; - } - } -} - QskBoxNode::QskBoxNode() { } @@ -113,7 +83,7 @@ void QskBoxNode::updateNode( const QRectF& rect, However the border is always done with a QskBoxRectangleNode */ - if ( qskIsBoxGradient( gradient ) ) + if ( QskBoxRenderer::isGradientSupported( gradient ) ) { rectNode = qskNode< QskBoxRectangleNode >( this, BoxRole ); rectNode->updateNode( rect, shape, borderMetrics, borderColors, gradient ); diff --git a/src/nodes/QskBoxRenderer.h b/src/nodes/QskBoxRenderer.h index 37c26325..e2b1347a 100644 --- a/src/nodes/QskBoxRenderer.h +++ b/src/nodes/QskBoxRenderer.h @@ -36,6 +36,8 @@ class QSK_EXPORT QskBoxRenderer static void renderRect( const QRectF&, const QskGradient&, QSGGeometry& ); static void renderRect( const QRectF&, QSGGeometry& ); + static bool isGradientSupported( const QskGradient& ); + class Quad { public: diff --git a/src/nodes/QskBoxRendererRect.cpp b/src/nodes/QskBoxRendererRect.cpp index 6c210eb9..5e05767f 100644 --- a/src/nodes/QskBoxRendererRect.cpp +++ b/src/nodes/QskBoxRendererRect.cpp @@ -681,3 +681,35 @@ void QskBoxRenderer::renderRectFill( const QskBoxRenderer::Quad& rect, { qskCreateFillOrdered( rect, gradient, line ); } + +bool QskBoxRenderer::isGradientSupported( const QskGradient& gradient ) +{ + if ( !gradient.isVisible() || gradient.isMonochrome() ) + return true; + + switch( gradient.type() ) + { + case QskGradient::Linear: + { + auto dir = gradient.linearDirection(); + + if ( dir.isTilted() ) + { + // only diagonal from topLeft to bottomRight + return ( dir.x1() == dir.x2() ) && ( dir.y1() == dir.y2() ); + } + + return true; + } + case QskGradient::Radial: + case QskGradient::Conic: + { + return false; + } + default: + { + return true; + } + } +} +