QskPopup::fading renamed to QskPopup::transitioning

This commit is contained in:
Uwe Rathmann 2023-10-19 09:47:42 +02:00
parent 4cbd0d62a5
commit b3c7eb7412
6 changed files with 51 additions and 69 deletions

View File

@ -204,7 +204,7 @@ namespace
bool isAcceptedPos( const QPointF& pos ) const override bool isAcceptedPos( const QPointF& pos ) const override
{ {
auto drawer = qobject_cast< const QskDrawer* >( targetItem() ); auto drawer = qobject_cast< const QskDrawer* >( targetItem() );
if ( drawer->isFading() ) if ( drawer->isTransitioning() )
return false; return false;
auto rect = qskItemRect( watchedItem() ); auto rect = qskItemRect( watchedItem() );
@ -271,7 +271,7 @@ QskDrawer::QskDrawer( QQuickItem* parentItem )
setInteractive( true ); setInteractive( true );
setPopupFlag( PopupFlag::CloseOnPressOutside, true ); setPopupFlag( PopupFlag::CloseOnPressOutside, true );
setFaderAspect( Panel | QskAspect::Position | QskAspect::Metric ); setTransitionAspect( Panel | QskAspect::Position | QskAspect::Metric );
/* /*
The drawer wants to be on top of the parent - not being The drawer wants to be on top of the parent - not being
@ -281,8 +281,8 @@ QskDrawer::QskDrawer( QQuickItem* parentItem )
setPlacementPolicy( QskPlacementPolicy::Ignore ); setPlacementPolicy( QskPlacementPolicy::Ignore );
m_data->resetListener( this ); m_data->resetListener( this );
connect( this, &QskPopup::openChanged, this, &QskDrawer::setFading ); connect( this, &QskPopup::openChanged, this, &QskDrawer::setSliding );
connect( this, &QskPopup::fadingChanged, this, &QskDrawer::setIntermediate ); connect( this, &QskPopup::transitioningChanged, this, &QskDrawer::setIntermediate );
} }
QskDrawer::~QskDrawer() QskDrawer::~QskDrawer()
@ -436,8 +436,8 @@ QRectF QskDrawer::layoutRectForSize( const QSizeF& size ) const
{ {
qreal ratio; qreal ratio;
if ( isFading() ) if ( isTransitioning() )
ratio = metric( faderAspect() ); ratio = metric( transitionAspect() );
else else
ratio = isOpen() ? 1.0 : 0.0; ratio = isOpen() ? 1.0 : 0.0;
@ -467,15 +467,12 @@ void QskDrawer::itemChange( QQuickItem::ItemChange change,
} }
} }
void QskDrawer::setFading( bool on ) void QskDrawer::setSliding( bool on )
{ {
if ( !hasFaderEffect() )
return;
const qreal from = on ? 0.0 : 1.0; const qreal from = on ? 0.0 : 1.0;
const qreal to = on ? 1.0 : 0.0; const qreal to = on ? 1.0 : 0.0;
const auto aspect = faderAspect(); const auto aspect = transitionAspect();
auto hint = animationHint( aspect ); auto hint = animationHint( aspect );
hint.updateFlags = QskAnimationHint::UpdatePolish; hint.updateFlags = QskAnimationHint::UpdatePolish;
@ -485,7 +482,7 @@ void QskDrawer::setFading( bool on )
QRectF QskDrawer::clipRect() const QRectF QskDrawer::clipRect() const
{ {
if ( !isFading() ) if ( !isTransitioning() )
return Inherited::clipRect(); return Inherited::clipRect();
/* /*
@ -534,7 +531,7 @@ void QskDrawer::setIntermediate( bool on )
QRectF QskDrawer::focusIndicatorRect() const QRectF QskDrawer::focusIndicatorRect() const
{ {
if ( isFading() ) if ( isTransitioning() )
return QRectF(); return QRectF();
return Inherited::focusIndicatorRect(); return Inherited::focusIndicatorRect();

View File

@ -55,8 +55,7 @@ class QSK_EXPORT QskDrawer : public QskPopup
void keyPressEvent( QKeyEvent* ) override; void keyPressEvent( QKeyEvent* ) override;
private: private:
void setFading( bool ); void setSliding( bool );
void setFadingClip( bool );
void setIntermediate( bool ); void setIntermediate( bool );

View File

@ -58,7 +58,7 @@ QskMenu::QskMenu( QQuickItem* parent )
, m_data( new PrivateData ) , m_data( new PrivateData )
{ {
setModal( true ); setModal( true );
setFaderAspect( QskMenu::Panel | QskAspect::Position | QskAspect::Metric ); setTransitionAspect( QskMenu::Panel | QskAspect::Position | QskAspect::Metric );
setPopupFlag( QskPopup::CloseOnPressOutside, true ); setPopupFlag( QskPopup::CloseOnPressOutside, true );
setPopupFlag( QskPopup::DeleteOnClose, true ); setPopupFlag( QskPopup::DeleteOnClose, true );
@ -67,8 +67,8 @@ QskMenu::QskMenu( QQuickItem* parent )
initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Fixed ); initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Fixed );
// we hide the focus indicator while fading // we hide the focus indicator while sliding
connect( this, &QskMenu::fadingChanged, this, connect( this, &QskMenu::transitioningChanged, this,
&QskControl::focusIndicatorRectChanged ); &QskControl::focusIndicatorRectChanged );
connect( this, &QskMenu::opened, this, connect( this, &QskMenu::opened, this,
@ -452,7 +452,7 @@ void QskMenu::aboutToShow()
QRectF QskMenu::focusIndicatorRect() const QRectF QskMenu::focusIndicatorRect() const
{ {
if ( isFading() ) if ( isTransitioning() )
return QRectF(); return QRectF();
if( currentIndex() >= 0 ) if( currentIndex() >= 0 )

View File

@ -236,7 +236,7 @@ QSGNode* QskMenuSkinlet::updateSubNode(
auto slideInNode = QskSGNode::ensureNode< QskSlideInNode >( node ); auto slideInNode = QskSGNode::ensureNode< QskSlideInNode >( node );
const auto progress = popup->metric( popup->faderAspect() ); const auto progress = popup->metric( popup->transitionAspect() );
slideInNode->updateTranslation( rect, Qt::TopEdge, progress ); slideInNode->updateTranslation( rect, Qt::TopEdge, progress );
auto contentsNode = updateContentsNode( popup, slideInNode->contentsNode() ); auto contentsNode = updateContentsNode( popup, slideInNode->contentsNode() );

View File

@ -130,7 +130,6 @@ class QskPopup::PrivateData
PrivateData() PrivateData()
: flags( 0 ) : flags( 0 )
, isModal( false ) , isModal( false )
, hasFaderEffect( true )
, autoGrabFocus( true ) , autoGrabFocus( true )
, handoverFocus( true ) , handoverFocus( true )
{ {
@ -139,11 +138,10 @@ class QskPopup::PrivateData
InputGrabber* inputGrabber = nullptr; InputGrabber* inputGrabber = nullptr;
uint priority = 0; uint priority = 0;
QskAspect faderAspect; QskAspect transitionAspect;
int flags : 4; int flags : 4;
bool isModal : 1; bool isModal : 1;
bool hasFaderEffect : 1;
const bool autoGrabFocus : 1; const bool autoGrabFocus : 1;
const bool handoverFocus : 1; const bool handoverFocus : 1;
@ -218,9 +216,9 @@ void QskPopup::setOpen( bool on )
else else
Q_EMIT closed(); Q_EMIT closed();
if ( isFading() ) if ( isTransitioning() )
{ {
Q_EMIT fadingChanged( true ); Q_EMIT transitioningChanged( true );
} }
else else
{ {
@ -239,13 +237,13 @@ bool QskPopup::isOpen() const
return !hasSkinState( QskPopup::Closed ); return !hasSkinState( QskPopup::Closed );
} }
bool QskPopup::isFading() const bool QskPopup::isTransitioning() const
{ {
if ( m_data->faderAspect.value() == 0 ) if ( m_data->transitionAspect.value() == 0 )
return false; return false;
QskSkinHintStatus status; QskSkinHintStatus status;
(void) effectiveSkinHint( m_data->faderAspect, &status ); (void) effectiveSkinHint( m_data->transitionAspect, &status );
return status.source == QskSkinHintStatus::Animator; return status.source == QskSkinHintStatus::Animator;
} }
@ -298,37 +296,37 @@ void QskPopup::updateInputGrabber()
} }
} }
QskAspect QskPopup::faderAspect() const QskAspect QskPopup::transitionAspect() const
{ {
return m_data->faderAspect; return m_data->transitionAspect;
} }
void QskPopup::setFaderAspect( QskAspect aspect ) void QskPopup::setTransitionAspect( QskAspect aspect )
{ {
auto faderAspect = aspect; auto transitionAspect = aspect;
faderAspect.clearStates(); // animated values are always stateless transitionAspect.clearStates(); // animated values are always stateless
if ( faderAspect == m_data->faderAspect ) if ( transitionAspect == m_data->transitionAspect )
return; return;
if ( isFading() ) if ( isTransitioning() )
{ {
// stop the running animation TODO ... // stop the running animation TODO ...
} }
m_data->faderAspect = faderAspect; m_data->transitionAspect = transitionAspect;
} }
bool QskPopup::isTransitionAccepted( QskAspect aspect ) const bool QskPopup::isTransitionAccepted( QskAspect aspect ) const
{ {
if ( isVisible() && m_data->hasFaderEffect ) if ( isVisible() )
{ {
if ( ( aspect.value() == 0 ) ) if ( ( aspect.value() == 0 ) )
{ {
return true; return true;
} }
if ( aspect == m_data->faderAspect ) if ( aspect == m_data->transitionAspect )
return true; return true;
if ( aspect.isColor() ) if ( aspect.isColor() )
@ -371,20 +369,6 @@ bool QskPopup::isModal() const
return m_data->isModal; return m_data->isModal;
} }
void QskPopup::setFaderEffect( bool on )
{
if ( on != m_data->hasFaderEffect )
{
m_data->hasFaderEffect = on;
Q_EMIT faderEffectChanged( on );
}
}
bool QskPopup::hasFaderEffect() const
{
return m_data->hasFaderEffect;
}
void QskPopup::setPopupFlags( PopupFlags flags ) void QskPopup::setPopupFlags( PopupFlags flags )
{ {
const auto newFlags = static_cast< int >( flags ); const auto newFlags = static_cast< int >( flags );
@ -496,7 +480,7 @@ bool QskPopup::event( QEvent* event )
const auto animtorEvent = static_cast< QskAnimatorEvent* >( event ); const auto animtorEvent = static_cast< QskAnimatorEvent* >( event );
if ( ( animtorEvent->state() == QskAnimatorEvent::Terminated ) if ( ( animtorEvent->state() == QskAnimatorEvent::Terminated )
&& ( animtorEvent->aspect() == m_data->faderAspect ) ) && ( animtorEvent->aspect() == m_data->transitionAspect ) )
{ {
if ( !isOpen() ) if ( !isOpen() )
{ {
@ -506,7 +490,7 @@ bool QskPopup::event( QEvent* event )
deleteLater(); deleteLater();
} }
Q_EMIT fadingChanged( false ); Q_EMIT transitioningChanged( false );
} }
break; break;
@ -643,7 +627,7 @@ int QskPopup::execPopup()
*/ */
connect( popup, &QObject::destroyed, this, &EventLoop::reject ); connect( popup, &QObject::destroyed, this, &EventLoop::reject );
connect( popup, &QskPopup::fadingChanged, this, &EventLoop::maybeQuit ); connect( popup, &QskPopup::transitioningChanged, this, &EventLoop::maybeQuit );
connect( popup, &QskPopup::openChanged, this, &EventLoop::maybeQuit ); connect( popup, &QskPopup::openChanged, this, &EventLoop::maybeQuit );
} }
@ -658,7 +642,7 @@ int QskPopup::execPopup()
{ {
if ( auto popup = qobject_cast< const QskPopup* >( parent() ) ) if ( auto popup = qobject_cast< const QskPopup* >( parent() ) )
{ {
if ( popup->isOpen() || popup->isFading() ) if ( popup->isOpen() || popup->isTransitioning() )
return; return;
} }
@ -666,7 +650,7 @@ int QskPopup::execPopup()
} }
}; };
if ( isOpen() || isFading() ) if ( isOpen() || isTransitioning() )
{ {
qWarning() << "QskPopup::exec: popup is already opened"; qWarning() << "QskPopup::exec: popup is already opened";
return -1; return -1;

View File

@ -14,13 +14,11 @@ class QSK_EXPORT QskPopup : public QskControl
Q_PROPERTY( bool open READ isOpen WRITE setOpen NOTIFY openChanged ) Q_PROPERTY( bool open READ isOpen WRITE setOpen NOTIFY openChanged )
Q_PROPERTY( bool modal READ isModal WRITE setModal NOTIFY modalChanged ) Q_PROPERTY( bool modal READ isModal WRITE setModal NOTIFY modalChanged )
Q_PROPERTY( bool transitioning READ isTransitioning NOTIFY transitioningChanged )
Q_PROPERTY( bool overlay READ hasOverlay Q_PROPERTY( bool overlay READ hasOverlay
WRITE setOverlay RESET resetOverlay NOTIFY overlayChanged ) WRITE setOverlay RESET resetOverlay NOTIFY overlayChanged )
Q_PROPERTY( bool faderEffect READ hasFaderEffect
WRITE setFaderEffect NOTIFY faderEffectChanged )
Q_PROPERTY( uint priority READ priority WRITE setPriority NOTIFY priorityChanged ) Q_PROPERTY( uint priority READ priority WRITE setPriority NOTIFY priorityChanged )
using Inherited = QskControl; using Inherited = QskControl;
@ -58,16 +56,16 @@ class QSK_EXPORT QskPopup : public QskControl
void setPriority( uint ); void setPriority( uint );
uint priority() const; uint priority() const;
void setFaderEffect( bool ); // transitions between open/closed states
bool hasFaderEffect() const; QskAspect transitionAspect() const;
void setTransitionAspect( QskAspect );
QskAspect faderAspect() const; bool isTransitioning() const;
void setFaderAspect( QskAspect );
virtual QRectF overlayRect() const;
bool isOpen() const; bool isOpen() const;
bool isFading() const; bool isClosed() const;
virtual QRectF overlayRect() const;
public Q_SLOTS: public Q_SLOTS:
void open(); void open();
@ -80,12 +78,11 @@ class QSK_EXPORT QskPopup : public QskControl
void opened(); void opened();
void closed(); void closed();
void openChanged( bool ); void openChanged( bool );
void fadingChanged( bool ); void transitioningChanged( bool );
void modalChanged( bool ); void modalChanged( bool );
void overlayChanged( bool ); void overlayChanged( bool );
void priorityChanged( uint ); void priorityChanged( uint );
void faderEffectChanged( bool );
protected: protected:
void aboutToShow() override; void aboutToShow() override;
@ -115,6 +112,11 @@ class QSK_EXPORT QskPopup : public QskControl
std::unique_ptr< PrivateData > m_data; std::unique_ptr< PrivateData > m_data;
}; };
inline bool QskPopup::isClosed() const
{
return !isOpen();
}
Q_DECLARE_OPERATORS_FOR_FLAGS( QskPopup::PopupFlags ) Q_DECLARE_OPERATORS_FOR_FLAGS( QskPopup::PopupFlags )
#endif #endif