more versatile APIs

This commit is contained in:
Uwe Rathmann 2021-12-02 18:40:54 +01:00
parent c93958a24d
commit 1a5a94838e
2 changed files with 13 additions and 20 deletions

View File

@ -338,29 +338,23 @@ QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
QSGNode* node, const QRectF& rect, const QskGradient& fillGradient, QSGNode* node, const QRectF& rect, const QskGradient& fillGradient,
QskAspect::Subcontrol subControl ) QskAspect::Subcontrol subControl )
{ {
auto arcMetrics = skinnable->arcMetricsHint( subControl ); const auto metrics = skinnable->arcMetricsHint( subControl );
return updateArcNode( skinnable, node ,rect, fillGradient, arcMetrics, const auto r = rect.marginsRemoved( skinnable->marginHint( subControl ) );
subControl );
return updateArcNode( skinnable, node, r, fillGradient, metrics );
} }
QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable, QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
QSGNode* node, const QRectF& rect, const QskGradient& fillGradient, QSGNode* node, const QRectF& rect, const QskGradient& fillGradient,
const QskArcMetrics& arcMetrics, QskAspect::Subcontrol subControl ) const QskArcMetrics& metrics )
{ {
const auto control = skinnable->owningControl(); const auto control = skinnable->owningControl();
if ( control == nullptr ) if ( control == nullptr || rect.isEmpty() )
return nullptr; return nullptr;
const auto margins = skinnable->marginHint( subControl ); auto absoluteMetrics = metrics.toAbsolute( rect.size() );
const auto arcRect = rect.marginsRemoved( margins ); if ( !qskIsArcVisible( metrics, fillGradient ) )
if ( arcRect.isEmpty() )
return nullptr;
auto absoluteArcMetrics = arcMetrics.toAbsolute( arcRect.size() );
if ( !qskIsArcVisible( arcMetrics, fillGradient ) )
return nullptr; return nullptr;
auto arcNode = static_cast< QskArcNode* >( node ); auto arcNode = static_cast< QskArcNode* >( node );
@ -377,12 +371,12 @@ QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
*/ */
const auto ratio = control->window()->effectiveDevicePixelRatio(); const auto ratio = control->window()->effectiveDevicePixelRatio();
absoluteArcMetrics.setWidth( absoluteArcMetrics.width() * ratio ); absoluteMetrics.setWidth( absoluteMetrics.width() * ratio );
r.setSize( r.size() * ratio ); r.setSize( r.size() * ratio );
} }
#endif #endif
arcNode->setArcData( r, absoluteArcMetrics, fillGradient, control->window() ); arcNode->setArcData( r, absoluteMetrics, fillGradient, control->window() );
return arcNode; return arcNode;
} }
@ -413,8 +407,8 @@ QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
arcMetrics.setStartAngle( startAngle ); arcMetrics.setStartAngle( startAngle );
arcMetrics.setSpanAngle( spanAngle ); arcMetrics.setSpanAngle( spanAngle );
return updateArcNode( skinnable, node ,rect, const auto r = rect.marginsRemoved( skinnable->marginHint( subControl ) );
fillGradient, arcMetrics, subControl ); return updateArcNode( skinnable, node, r, fillGradient, arcMetrics );
} }
QSGNode* QskSkinlet::updateBoxClipNode( const QskSkinnable* skinnable, QSGNode* QskSkinlet::updateBoxClipNode( const QskSkinnable* skinnable,

View File

@ -60,8 +60,7 @@ class QSK_EXPORT QskSkinlet
const QRectF&, const QskGradient&, QskAspect::Subcontrol ); const QRectF&, const QskGradient&, QskAspect::Subcontrol );
static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*, static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
const QRectF&, const QskGradient&, const QskArcMetrics&, const QRectF&, const QskGradient&, const QskArcMetrics& );
QskAspect::Subcontrol );
static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*, static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
const QRectF&, qreal startAngle, qreal spanAngle, QskAspect::Subcontrol ); const QRectF&, qreal startAngle, qreal spanAngle, QskAspect::Subcontrol );