F2 slider: Get rid of Halo subcontrol (#456)

We can do with a gradient on the handle.
This commit is contained in:
Peter Hartmann 2024-10-28 15:40:09 +01:00 committed by GitHub
parent e15f167978
commit 7402a145ec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1445,11 +1445,11 @@ void Editor::setupSliderMetrics()
setBoxShape( Q::Handle, 100, Qt::RelativeSize ); setBoxShape( Q::Handle, 100, Qt::RelativeSize );
setBoxBorderMetrics( Q::Handle, 1_px ); setBoxBorderMetrics( Q::Handle, 1_px );
setStrutSize( Q::Halo, { 12_px, 12_px } ); // set size of the outer ring to be used in setupSliderColors():
setBoxShape( Q::Halo, 100, Qt::RelativeSize ); setPadding( Q::Handle, 5_px );
setPadding( Q::Handle | Q::Hovered, 4_px );
setStrutSize( Q::Halo | Q::Hovered, { 14_px, 14_px } ); setPadding( Q::Handle | Q::Pressed, 6_px );
setStrutSize( Q::Halo | Q::Pressed, { 10_px, 10_px } ); setPadding( Q::Handle | Q::Disabled, 6_px );
} }
void Editor::setupSliderColors( void Editor::setupSliderColors(
@ -1460,41 +1460,47 @@ void Editor::setupSliderColors(
const auto& pal = theme.palette; const auto& pal = theme.palette;
const auto outerHandleColor = pal.fillColor.controlSolid.defaultColor;
setBoxBorderGradient( Q::Handle, pal.elevation.circle.border, outerHandleColor );
for ( auto state : { A::NoState, Q::Hovered, Q::Pressed, Q::Disabled } )
{ {
const auto handleColor = pal.fillColor.controlSolid.defaultColor; QRgb grooveColor, fillColor, innerHandleColor;
setGradient( Q::Handle, handleColor ); if ( state == A::NoState || state == Q::Hovered )
setBoxBorderGradient( Q::Handle, pal.elevation.circle.border, handleColor );
}
for ( auto state : { A::NoState, Q::Pressed, Q::Disabled } )
{
QRgb grooveColor, fillColor, haloColor;
if ( state == A::NoState )
{ {
grooveColor = pal.fillColor.controlStrong.defaultColor; grooveColor = pal.fillColor.controlStrong.defaultColor;
fillColor = pal.fillColor.accent.defaultColor; fillColor = pal.fillColor.accent.defaultColor;
haloColor = fillColor; innerHandleColor = fillColor;
} }
else if ( state == Q::Pressed ) else if ( state == Q::Pressed )
{ {
grooveColor = pal.fillColor.controlStrong.defaultColor; grooveColor = pal.fillColor.controlStrong.defaultColor;
fillColor = pal.fillColor.accent.defaultColor; fillColor = pal.fillColor.accent.defaultColor;
haloColor = pal.fillColor.accent.tertiary; innerHandleColor = pal.fillColor.accent.tertiary;
} }
else if ( state == Q::Disabled ) else if ( state == Q::Disabled )
{ {
grooveColor = pal.fillColor.controlStrong.disabled; grooveColor = pal.fillColor.controlStrong.disabled;
fillColor = pal.fillColor.accent.disabled; fillColor = pal.fillColor.accent.disabled;
haloColor = grooveColor; innerHandleColor = grooveColor;
} }
grooveColor = rgbSolid( grooveColor, pal.background.solid.base ); grooveColor = rgbSolid( grooveColor, pal.background.solid.base );
setGradient( Q::Groove | section | state, grooveColor ); setGradient( Q::Groove | section | state, grooveColor );
setGradient( Q::Fill | section | state, fillColor );
setGradient( Q::Halo | section | state, haloColor ); {
const auto handleWidth = strutSize( Q::Handle ).width();
const auto outerRingWidth = padding( Q::Handle | state ).left();
const auto stop = ( handleWidth - 2 * outerRingWidth ) / handleWidth;
QskGradient handleGradient( { { 0.0, innerHandleColor }, { stop, innerHandleColor },
{ stop, outerHandleColor }, { 1.0, outerHandleColor } } );
handleGradient.setDirection( QskGradient::Radial );
setGradient( Q::Handle | section | state, handleGradient );
}
} }
} }