using degrees for arcs ( not multiplied by 16, what QPainter wants )

This commit is contained in:
Uwe Rathmann 2021-12-02 17:15:41 +01:00
parent 9c1265fdbe
commit b5bc26eb63
4 changed files with 14 additions and 10 deletions

View File

@ -38,10 +38,10 @@ QSGNode* CircularProgressBarSkinlet::updateSubNode(
} }
case BarRole: case BarRole:
{ {
const qreal startAngle = 90 * 16; const qreal startAngle = 90.0;
const auto bar = static_cast< const CircularProgressBar* >( skinnable ); const auto bar = static_cast< const CircularProgressBar* >( skinnable );
const qreal spanAngle = bar->valueAsRatio() * -5760; const qreal spanAngle = 360.0 * bar->valueAsRatio();
return updateArcNode( skinnable, node, startAngle, spanAngle, return updateArcNode( skinnable, node, startAngle, -spanAngle,
CircularProgressBar::Bar ); CircularProgressBar::Bar );
} }
} }

View File

@ -105,7 +105,7 @@ void LightDisplay::mouseMoveEvent( QMouseEvent* event )
const QskArcMetrics metrics = arcMetricsHint( ColdAndWarmArc ); const QskArcMetrics metrics = arcMetricsHint( ColdAndWarmArc );
const qreal angle = angleFromPoint( rect, mousePos ); 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 ); setValueAsRatio( ratio );
} }

View File

@ -118,10 +118,10 @@ void Skin::initHints( const Palette& palette )
ed.setGradient( TopBarItem::Item4, { QskGradient::Horizontal, "#6100FF", "#6776FF" } ); ed.setGradient( TopBarItem::Item4, { QskGradient::Horizontal, "#6100FF", "#6776FF" } );
// the bar gradient is defined through the top bar items above // 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 // the span angle will be set in the progress bar, we just give a dummy
// value here: // 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 ); ed.setFontRole( TimeTitleLabel::Text, Skin::TitleFont );
@ -184,7 +184,7 @@ void Skin::initHints( const Palette& palette )
// light intensity: // light intensity:
ed.setBoxShape( LightDisplay::Panel, 100, Qt::RelativeSize ); 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 }, QskGradient coldGradient( Qt::Horizontal, { { 0.0, 0xffff3122 },
{ 0.2, 0xfffeeeb7 }, { 0.2, 0xfffeeeb7 },
{ 0.3, 0xffa7b0ff }, { 0.3, 0xffa7b0ff },
@ -193,7 +193,7 @@ void Skin::initHints( const Palette& palette )
ed.setGradient( LightDisplay::ColdAndWarmArc, coldGradient ); ed.setGradient( LightDisplay::ColdAndWarmArc, coldGradient );
ed.setMetric( LightDisplay::Tickmarks, 1 ); 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.setColor( LightDisplay::Tickmarks, 0x55929CB2 );
ed.setFontRole( LightDisplay::ValueText, QskSkin::LargeFont ); ed.setFontRole( LightDisplay::ValueText, QskSkin::LargeFont );

View File

@ -40,12 +40,16 @@ void QskArcRenderer::renderArc(const QRectF& rect,
} }
else else
{ {
QConicalGradient gradient( rect.center(), metrics.startAngle() / 16.0 ); QConicalGradient gradient( rect.center(), metrics.startAngle() );
gradient.setStops( stops ); gradient.setStops( stops );
brush = gradient; brush = gradient;
} }
painter->setPen( QPen( brush, metrics.width(), Qt::SolidLine, Qt::FlatCap ) ); 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 );
} }