From a946394e9d551f8b1795af4f7aa3308459cc4556 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Tue, 24 Sep 2024 10:17:10 +0200 Subject: [PATCH] code of QskBoxNode/QskArcNode aligned --- src/nodes/QskArcNode.cpp | 5 ++++- src/nodes/QskBoxNode.cpp | 33 ++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/nodes/QskArcNode.cpp b/src/nodes/QskArcNode.cpp index 39946983..1a6ef00b 100644 --- a/src/nodes/QskArcNode.cpp +++ b/src/nodes/QskArcNode.cpp @@ -120,7 +120,10 @@ void QskArcNode::setArcData( const QRectF& rect, const QskArcMetrics& arcMetrics if ( hasBorder && hasFilling ) { - if ( !QskArcRenderer::isGradientSupported( rect, metricsArc, gradient ) ) + const bool doCombine = arcNode->hasHint( QskFillNode::PreferColoredGeometry ) + && QskArcRenderer::isGradientSupported( rect, metricsArc, gradient ); + + if ( !doCombine ) fillNode = qskNode< QskArcRenderNode >( this, FillRole ); } diff --git a/src/nodes/QskBoxNode.cpp b/src/nodes/QskBoxNode.cpp index 4eebfeb1..1e7363fd 100644 --- a/src/nodes/QskBoxNode.cpp +++ b/src/nodes/QskBoxNode.cpp @@ -70,7 +70,10 @@ void QskBoxNode::updateNode( const QRectF& rect, if ( !rect.isEmpty() ) { - const auto hasShadow = !shadowMetrics.isNull() + const auto hasFilling = gradient.isVisible(); + const auto hasBorder = !borderMetrics.isNull() && borderColors.isVisible(); + + const auto hasShadow = hasFilling && !shadowMetrics.isNull() && QskRgb::isVisible( shadowColor ); if ( hasShadow ) @@ -80,24 +83,28 @@ void QskBoxNode::updateNode( const QRectF& rect, shape, shadowMetrics.blurRadius(), shadowColor ); } - if ( QskBoxRectangleNode::isCombinedGeometrySupported( gradient ) ) + if ( hasBorder || hasFilling ) { rectNode = qskNode< QskBoxRectangleNode >( this, BoxRole ); - rectNode->updateBox( rect, shape, borderMetrics, borderColors, gradient ); - } - else - { - if ( !borderMetrics.isNull() && borderColors.isVisible() ) - { - rectNode = qskNode< QskBoxRectangleNode >( this, BoxRole ); - rectNode->updateBorder( rect, shape, borderMetrics, borderColors ); - } - if ( gradient.isVisible() ) + if ( hasBorder && hasFilling ) { - fillNode = qskNode< QskBoxRectangleNode >( this, FillRole ); + const bool doCombine = rectNode->hasHint( QskFillNode::PreferColoredGeometry ) + && QskBoxRectangleNode::isCombinedGeometrySupported( gradient ); + + if ( !doCombine ) + fillNode = qskNode< QskBoxRectangleNode >( this, FillRole ); + } + + if ( fillNode ) + { + rectNode->updateBorder( rect, shape, borderMetrics, borderColors ); fillNode->updateFilling( rect, shape, borderMetrics, gradient ); } + else + { + rectNode->updateBox( rect, shape, borderMetrics, borderColors, gradient ); + } } }