diff --git a/examples/iotdashboard/CircularProgressBarSkinlet.cpp b/examples/iotdashboard/CircularProgressBarSkinlet.cpp index 643a9ad1..737cedd3 100644 --- a/examples/iotdashboard/CircularProgressBarSkinlet.cpp +++ b/examples/iotdashboard/CircularProgressBarSkinlet.cpp @@ -38,10 +38,10 @@ QSGNode* CircularProgressBarSkinlet::updateSubNode( } case BarRole: { - const qreal startAngle = 90 * 16; + const qreal startAngle = 90.0; const auto bar = static_cast< const CircularProgressBar* >( skinnable ); - const qreal spanAngle = bar->valueAsRatio() * -5760; - return updateArcNode( skinnable, node, startAngle, spanAngle, + const qreal spanAngle = 360.0 * bar->valueAsRatio(); + return updateArcNode( skinnable, node, startAngle, -spanAngle, CircularProgressBar::Bar ); } } diff --git a/examples/iotdashboard/LightDisplay.cpp b/examples/iotdashboard/LightDisplay.cpp index 4f7ee68c..fe42fce6 100644 --- a/examples/iotdashboard/LightDisplay.cpp +++ b/examples/iotdashboard/LightDisplay.cpp @@ -105,7 +105,7 @@ void LightDisplay::mouseMoveEvent( QMouseEvent* event ) const QskArcMetrics metrics = arcMetricsHint( ColdAndWarmArc ); const qreal angle = angleFromPoint( rect, mousePos ); - const qreal ratio = ( metrics.spanAngle() - angle * 16 ) / metrics.spanAngle(); + const qreal ratio = ( metrics.spanAngle() - angle ) / metrics.spanAngle(); setValueAsRatio( ratio ); } diff --git a/examples/iotdashboard/Skin.cpp b/examples/iotdashboard/Skin.cpp index 8856a7af..be18ee9b 100644 --- a/examples/iotdashboard/Skin.cpp +++ b/examples/iotdashboard/Skin.cpp @@ -118,10 +118,10 @@ void Skin::initHints( const Palette& palette ) ed.setGradient( TopBarItem::Item4, { QskGradient::Horizontal, "#6100FF", "#6776FF" } ); // the bar gradient is defined through the top bar items above - ed.setArcMetrics( CircularProgressBar::Groove, { 8.53, 90 * 16, -360 * 16 } ); + ed.setArcMetrics( CircularProgressBar::Groove, { 8.53, 90, -360 } ); // the span angle will be set in the progress bar, we just give a dummy // value here: - ed.setArcMetrics( CircularProgressBar::Bar, { 8.53, 90 * 16, -180 * 16 } ); + ed.setArcMetrics( CircularProgressBar::Bar, { 8.53, 90, -180 } ); ed.setFontRole( TimeTitleLabel::Text, Skin::TitleFont ); @@ -184,7 +184,7 @@ void Skin::initHints( const Palette& palette ) // light intensity: ed.setBoxShape( LightDisplay::Panel, 100, Qt::RelativeSize ); - ed.setArcMetrics( LightDisplay::ColdAndWarmArc, 8.785, 0, 180 * 16 ); + ed.setArcMetrics( LightDisplay::ColdAndWarmArc, 8.785, 0, 180 ); QskGradient coldGradient( Qt::Horizontal, { { 0.0, 0xffff3122 }, { 0.2, 0xfffeeeb7 }, { 0.3, 0xffa7b0ff }, @@ -193,7 +193,7 @@ void Skin::initHints( const Palette& palette ) ed.setGradient( LightDisplay::ColdAndWarmArc, coldGradient ); ed.setMetric( LightDisplay::Tickmarks, 1 ); - ed.setArcMetrics( LightDisplay::Tickmarks, { 4.69, 0, 180 * 16 } ); + ed.setArcMetrics( LightDisplay::Tickmarks, { 4.69, 0, 180 } ); ed.setColor( LightDisplay::Tickmarks, 0x55929CB2 ); ed.setFontRole( LightDisplay::ValueText, QskSkin::LargeFont ); diff --git a/src/nodes/QskArcRenderer.cpp b/src/nodes/QskArcRenderer.cpp index 804e3630..28c96580 100644 --- a/src/nodes/QskArcRenderer.cpp +++ b/src/nodes/QskArcRenderer.cpp @@ -40,12 +40,16 @@ void QskArcRenderer::renderArc(const QRectF& rect, } else { - QConicalGradient gradient( rect.center(), metrics.startAngle() / 16.0 ); + QConicalGradient gradient( rect.center(), metrics.startAngle() ); gradient.setStops( stops ); brush = gradient; } painter->setPen( QPen( brush, metrics.width(), Qt::SolidLine, Qt::FlatCap ) ); - painter->drawArc( rect, metrics.startAngle(), metrics.spanAngle() ); + + const int startAngle = qRound( metrics.startAngle() * 16 ); + const int spanAngle = qRound( metrics.spanAngle() * 16 ); + + painter->drawArc( rect, startAngle, spanAngle ); }