add overloads for updateArcNode() when the angles are set dynamically
The angles don't always come from the style, so we need overloads in QskSkinlet to set them dynamically.
This commit is contained in:
parent
a83df8c6f7
commit
8dd429c74f
|
@ -181,13 +181,6 @@ void CircularProgressBar::setValueInternal( qreal value )
|
|||
{
|
||||
m_data->value = value;
|
||||
|
||||
// if we didn't change the metrics here we would have to
|
||||
// add our own drawing code to the skinlet:
|
||||
QskArcMetrics arcMetrics = arcMetricsHint( Bar );
|
||||
const int spanAngle = qRound( valueAsRatio() * -5760 );
|
||||
arcMetrics.setSpanAngle( spanAngle );
|
||||
setArcMetricsHint( Bar, arcMetrics );
|
||||
|
||||
Q_EMIT valueChanged( value );
|
||||
|
||||
update();
|
||||
|
|
|
@ -38,7 +38,11 @@ QSGNode* CircularProgressBarSkinlet::updateSubNode(
|
|||
}
|
||||
case BarRole:
|
||||
{
|
||||
return updateArcNode( skinnable, node, CircularProgressBar::Bar );
|
||||
const qreal startAngle = 90 * 16;
|
||||
const auto bar = static_cast< const CircularProgressBar* >( skinnable );
|
||||
const qreal spanAngle = bar->valueAsRatio() * -5760;
|
||||
return updateArcNode( skinnable, node, startAngle, spanAngle,
|
||||
CircularProgressBar::Bar );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -337,6 +337,15 @@ QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
|||
QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
||||
QSGNode* node, const QRectF& rect, const QskGradient& fillGradient,
|
||||
QskAspect::Subcontrol subControl )
|
||||
{
|
||||
auto arcMetrics = skinnable->arcMetricsHint( subControl );
|
||||
return updateArcNode( skinnable, node ,rect, fillGradient, arcMetrics,
|
||||
subControl );
|
||||
}
|
||||
|
||||
QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
||||
QSGNode* node, const QRectF& rect, const QskGradient& fillGradient,
|
||||
const QskArcMetrics& arcMetrics, QskAspect::Subcontrol subControl )
|
||||
{
|
||||
const auto control = skinnable->owningControl();
|
||||
if ( control == nullptr )
|
||||
|
@ -349,8 +358,7 @@ QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
|||
if ( arcRect.isEmpty() )
|
||||
return nullptr;
|
||||
|
||||
auto arcMetrics = skinnable->arcMetricsHint( subControl );
|
||||
arcMetrics = arcMetrics.toAbsolute( arcRect.size() );
|
||||
auto absoluteArcMetrics = arcMetrics.toAbsolute( arcRect.size() );
|
||||
|
||||
if ( !qskIsArcVisible( arcMetrics, fillGradient ) )
|
||||
return nullptr;
|
||||
|
@ -360,11 +368,42 @@ QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
|||
if ( arcNode == nullptr )
|
||||
arcNode = new QskArcNode();
|
||||
|
||||
arcNode->setArcData( rect, arcMetrics, fillGradient, control->window() );
|
||||
arcNode->setArcData( rect, absoluteArcMetrics, fillGradient,
|
||||
control->window() );
|
||||
|
||||
return arcNode;
|
||||
}
|
||||
|
||||
QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
||||
QSGNode* node, int startAngle, int spanAngle,
|
||||
QskAspect::Subcontrol subControl ) const
|
||||
{
|
||||
const auto rect = qskSubControlRect( this, skinnable, subControl );
|
||||
return updateArcNode( skinnable, node, rect, startAngle, spanAngle,
|
||||
subControl );
|
||||
}
|
||||
|
||||
QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
||||
QSGNode* node, const QRectF& rect, int startAngle, int spanAngle,
|
||||
QskAspect::Subcontrol subControl )
|
||||
{
|
||||
const auto fillGradient = skinnable->gradientHint( subControl );
|
||||
return updateArcNode( skinnable, node, rect, fillGradient, startAngle,
|
||||
spanAngle, subControl );
|
||||
}
|
||||
|
||||
QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
||||
QSGNode* node, const QRectF& rect, const QskGradient& fillGradient,
|
||||
int startAngle, int spanAngle, QskAspect::Subcontrol subControl )
|
||||
{
|
||||
auto arcMetrics = skinnable->arcMetricsHint( subControl );
|
||||
arcMetrics.setStartAngle( startAngle );
|
||||
arcMetrics.setSpanAngle( spanAngle );
|
||||
|
||||
return updateArcNode( skinnable, node ,rect, fillGradient, arcMetrics,
|
||||
subControl );
|
||||
}
|
||||
|
||||
QSGNode* QskSkinlet::updateBoxClipNode( const QskSkinnable* skinnable,
|
||||
QSGNode* node, QskAspect::Subcontrol subControl ) const
|
||||
{
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
#include <memory>
|
||||
|
||||
class QskArcMetrics;
|
||||
class QskSkin;
|
||||
class QskControl;
|
||||
class QskSkinnable;
|
||||
|
@ -58,6 +59,17 @@ class QSK_EXPORT QskSkinlet
|
|||
static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
|
||||
const QRectF&, const QskGradient&, QskAspect::Subcontrol );
|
||||
|
||||
static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
|
||||
const QRectF&, const QskGradient&, const QskArcMetrics&,
|
||||
QskAspect::Subcontrol );
|
||||
|
||||
static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
|
||||
const QRectF&, int startAngle, int spanAngle, QskAspect::Subcontrol );
|
||||
|
||||
static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
|
||||
const QRectF&, const QskGradient&, int startAngle, int spanAngle,
|
||||
QskAspect::Subcontrol );
|
||||
|
||||
static QSGNode* updateTextNode( const QskSkinnable*, QSGNode*,
|
||||
const QRectF&, Qt::Alignment, const QString&, const QskTextOptions&,
|
||||
QskAspect::Subcontrol );
|
||||
|
@ -94,6 +106,10 @@ class QSK_EXPORT QskSkinlet
|
|||
QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
|
||||
QskAspect::Subcontrol ) const;
|
||||
|
||||
QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
|
||||
int startAngle, int spanAngle,
|
||||
QskAspect::Subcontrol ) const;
|
||||
|
||||
QSGNode* updateBoxClipNode( const QskSkinnable*, QSGNode*,
|
||||
QskAspect::Subcontrol ) const;
|
||||
|
||||
|
|
Loading…
Reference in New Issue