From 4f2c87acb01e3209bcf589d1999c5c5c483d790c Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Mon, 25 Oct 2021 09:32:32 +0200 Subject: [PATCH] fix horizontal page indicators --- src/controls/QskPageIndicatorSkinlet.cpp | 32 ++++++++++++++++-------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/controls/QskPageIndicatorSkinlet.cpp b/src/controls/QskPageIndicatorSkinlet.cpp index 51a53b3b..4ffc5d0c 100644 --- a/src/controls/QskPageIndicatorSkinlet.cpp +++ b/src/controls/QskPageIndicatorSkinlet.cpp @@ -62,6 +62,9 @@ QRectF QskPageIndicatorSkinlet::bulletRect( const qreal wNormal = szNormal.width(); const qreal wHighlighted = szHighlighted.width(); + const qreal hNormal = szNormal.height(); + const qreal hHighlighted = szHighlighted.height(); + const auto currentIndex = indicator->currentIndex(); // scale bullet size if we are in between a transition: @@ -69,9 +72,12 @@ QRectF QskPageIndicatorSkinlet::bulletRect( if ( indexDiff > ( indicator->count() - 1 ) ) indexDiff = ( indicator->count() - currentIndex ); // wrapping - const qreal sz0 = ( indexDiff < 1 ) ? + const qreal w0 = ( indexDiff < 1 ) ? ( 1 - indexDiff ) * wHighlighted + indexDiff * wNormal : wNormal; + const qreal h0 = ( indexDiff < 1 ) ? + ( 1 - indexDiff ) * hHighlighted + indexDiff * hNormal : hNormal; + const qreal spacing = indicator->spacingHint( Q::Panel ); const bool horizontal = ( indicator->orientation() == Qt::Horizontal ); @@ -84,20 +90,23 @@ QRectF QskPageIndicatorSkinlet::bulletRect( else { w = rect.width(); - h = ( indicator->count() - 1 ) * ( wNormal + spacing ) + wHighlighted; + h = ( indicator->count() - 1 ) * ( hNormal + spacing ) + hHighlighted; } QRectF r( 0, 0, w, h ); r.moveCenter( rect.center() ); - qreal s2; + qreal x2, y2; { - const qreal s = ( index > currentIndex ) ? wHighlighted : wNormal; + const qreal w = ( index > currentIndex ) ? wHighlighted : wNormal; + const qreal h = ( index > currentIndex ) ? hHighlighted : hNormal; + if ( indexDiff < 1 && index >= currentIndex ) { // scrolling from or to this bullet: - s2 = wNormal + qAbs( wHighlighted - wNormal ) * indexDiff; + x2 = wNormal + qAbs( wHighlighted - wNormal ) * indexDiff; + y2 = hNormal + qAbs( hHighlighted - hNormal ) * indexDiff; } else if ( ( currentIndex > ( indicator->count() - 1 ) && index > ( currentIndex - indicator->count() + 1 ) ) ) @@ -107,15 +116,18 @@ QRectF QskPageIndicatorSkinlet::bulletRect( while ( wrappingDiff > 1 ) wrappingDiff -= 1; - s2 = wNormal + qAbs( wHighlighted - wNormal ) * wrappingDiff; + x2 = wNormal + qAbs( wHighlighted - wNormal ) * wrappingDiff; + y2 = hNormal + qAbs( hHighlighted - hNormal ) * wrappingDiff; } else { - s2 = s; + x2 = w; + y2 = h; } } - const qreal x = r.left() + s2 + spacing + ( index - 1 ) * ( wNormal + spacing ); + const qreal x = r.left() + x2 + spacing + ( index - 1 ) * ( wNormal + spacing ); + const qreal y = r.top() + y2 + spacing + ( index - 1 ) * ( hNormal + spacing ); qreal adjust = ( currentIndex == index ) ? ( wNormal - wHighlighted ) : ( wHighlighted - wNormal ); @@ -124,12 +136,12 @@ QRectF QskPageIndicatorSkinlet::bulletRect( if ( indexDiff < 1 ) adjust *= indexDiff; - QRectF bulletRect( 0.0, 0.0, sz0, szNormal.height() ); + QRectF bulletRect( 0.0, 0.0, w0, h0 ); if ( horizontal ) bulletRect.moveTo( x, r.top() + adjust ); else - bulletRect.moveTo( r.left() + adjust, x ); + bulletRect.moveTo( r.left() + adjust, y ); return bulletRect; }