segmented bar: Improve splash

This commit is contained in:
Peter Hartmann 2023-04-12 16:31:35 +02:00 committed by uwerat
parent 824802a1dc
commit bfa8df85d5
2 changed files with 37 additions and 18 deletions

View File

@ -525,7 +525,7 @@ void Editor::setupSegmentedBar()
} }
{ {
// Segment // Segment / Splash
setStrutSize( Q::Segment | A::Horizontal, segmentStrutSize ); setStrutSize( Q::Segment | A::Horizontal, segmentStrutSize );
setStrutSize( Q::Segment | A::Vertical, segmentStrutSize.transposed() ); setStrutSize( Q::Segment | A::Vertical, segmentStrutSize.transposed() );
@ -561,21 +561,22 @@ void Editor::setupSegmentedBar()
setPadding( Q::Segment | A::Horizontal, 12_dp, 0, 12_dp, 0 ); setPadding( Q::Segment | A::Horizontal, 12_dp, 0, 12_dp, 0 );
setPadding( Q::Segment | A::Vertical, 0, 12_dp, 0, 12_dp ); setPadding( Q::Segment | A::Vertical, 0, 12_dp, 0, 12_dp );
setBoxShape( Q::Segment, 0 ); for( const auto subcontrol : { Q::Segment, Q::Splash } )
{
setBoxShape( subcontrol | Q::Minimum | A::Horizontal,
{ 100, 0, 100, 0, Qt::RelativeSize },
{ QskStateCombination::CombinationNoState, Q::Disabled } );
setBoxShape( subcontrol | Q::Maximum | A::Horizontal,
{ 0, 100, 0, 100, Qt::RelativeSize },
{ QskStateCombination::CombinationNoState, Q::Disabled } );
setBoxShape( Q::Segment | Q::Minimum | A::Horizontal, setBoxShape( subcontrol | Q::Minimum | A::Vertical,
{ 100, 0, 100, 0, Qt::RelativeSize }, { 100, 100, 0, 0, Qt::RelativeSize },
{ QskStateCombination::CombinationNoState, Q::Disabled } ); { QskStateCombination::CombinationNoState, Q::Disabled } );
setBoxShape( Q::Segment | Q::Maximum | A::Horizontal, setBoxShape( subcontrol | Q::Maximum | A::Vertical,
{ 0, 100, 0, 100, Qt::RelativeSize }, { 0, 0, 100, 100, Qt::RelativeSize },
{ QskStateCombination::CombinationNoState, Q::Disabled } ); { QskStateCombination::CombinationNoState, Q::Disabled } );
}
setBoxShape( Q::Segment | Q::Minimum | A::Vertical,
{ 100, 100, 0, 0, Qt::RelativeSize },
{ QskStateCombination::CombinationNoState, Q::Disabled } );
setBoxShape( Q::Segment | Q::Maximum | A::Vertical,
{ 0, 0, 100, 100, Qt::RelativeSize },
{ QskStateCombination::CombinationNoState, Q::Disabled } );
} }
{ {
@ -590,7 +591,7 @@ void Editor::setupSegmentedBar()
{ {
// Splash // Splash
setBoxShape( Q::Splash, 20_dp );
setGradient( Q::Splash, stateLayerColor( m_pal.onSecondaryContainer, m_pal.pressedOpacity ) ); setGradient( Q::Splash, stateLayerColor( m_pal.onSecondaryContainer, m_pal.pressedOpacity ) );
setAnimation( Q::Splash | A::Color, qskDuration ); setAnimation( Q::Splash | A::Color, qskDuration );
} }

View File

@ -12,7 +12,7 @@
#include "QskFunctions.h" #include "QskFunctions.h"
#include "QskSGNode.h" #include "QskSGNode.h"
#include "QskSkin.h" #include "QskSkin.h"
#include "QskStandardSymbol.h" #include "QskSkinStateChanger.h"
#include "QskSubcontrolLayoutEngine.h" #include "QskSubcontrolLayoutEngine.h"
#include <qfontmetrics.h> #include <qfontmetrics.h>
@ -144,7 +144,20 @@ QRectF QskSegmentedBarSkinlet::splashRect(
{ {
const auto sr = segmentRect( bar, contentsRect, index ); const auto sr = segmentRect( bar, contentsRect, index );
rect = sr; rect = sr;
rect.setSize( { 2.0 * rect.width() * ratio, rect.height() * 2.0 } ); qreal w, h;
if( bar->orientation() == Qt::Horizontal )
{
w = 2.0 * rect.width() * ratio;
h = 2.0 * rect.height();
}
else
{
w = 2.0 * rect.width();
h = 2.0 * rect.height() * ratio;
}
rect.setSize( { w, h } );
rect.moveCenter( pos ); rect.moveCenter( pos );
rect = rect.intersected( sr ); rect = rect.intersected( sr );
} }
@ -487,6 +500,11 @@ QSGNode* QskSegmentedBarSkinlet::updateSplashNode(
{ {
using Q = QskSegmentedBar; using Q = QskSegmentedBar;
// get Minimum / Maximum right:
QskSkinStateChanger stateChanger( bar );
const auto states = sampleStates( bar, Q::Segment, bar->selectedIndex() );
stateChanger.setStates( states );
const auto splashRect = bar->subControlRect( Q::Splash ); const auto splashRect = bar->subControlRect( Q::Splash );
if ( splashRect.isEmpty() ) if ( splashRect.isEmpty() )
return nullptr; return nullptr;