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:
{
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 );
}
}

View File

@ -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 );
}

View File

@ -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 );

View File

@ -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 );
}