From c752ee547f9d487bc5324d92015876261bf9d92e Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Tue, 26 Jun 2018 11:10:44 +0200 Subject: [PATCH] QskControl::isVisibleTo added --- src/controls/QskControl.cpp | 12 ++++++++++++ src/controls/QskControl.h | 3 +++ src/controls/QskQuick.cpp | 21 +++++++++++++++++++++ src/controls/QskQuick.h | 1 + 4 files changed, 37 insertions(+) diff --git a/src/controls/QskControl.cpp b/src/controls/QskControl.cpp index 4efb9a0f..7251065f 100644 --- a/src/controls/QskControl.cpp +++ b/src/controls/QskControl.cpp @@ -431,6 +431,11 @@ void QskControl::hide() Inherited::setVisible( false ); } +bool QskControl::isVisibleTo( const QQuickItem* ancestor ) const +{ + return qskIsVisibleTo( this, ancestor ); +} + void QskControl::setGeometry( qreal x, qreal y, qreal width, qreal height ) { // QQuickItem does not even offer changing the geometry @@ -1633,6 +1638,9 @@ void QskControl::updatePolish() } } + if ( !d->isInitiallyPainted ) + aboutToShow(); + updateLayout(); } @@ -1727,6 +1735,10 @@ QRectF QskControl::focusIndicatorRect() const return contentsRect(); } +void QskControl::aboutToShow() +{ +} + void QskControl::updateLayout() { } diff --git a/src/controls/QskControl.h b/src/controls/QskControl.h index 6a3dd124..2d689d5c 100644 --- a/src/controls/QskControl.h +++ b/src/controls/QskControl.h @@ -187,6 +187,8 @@ public: virtual QSizeF contentsSizeHint() const; + bool isVisibleTo( const QQuickItem* ) const; + QLocale locale() const; void resetLocale(); @@ -247,6 +249,7 @@ protected: void cleanupNodes(); + virtual void aboutToShow(); // called in updatePolish virtual void updateLayout(); // called in updatePolish private: diff --git a/src/controls/QskQuick.cpp b/src/controls/QskQuick.cpp index 562da6ad..e3a9caa0 100644 --- a/src/controls/QskQuick.cpp +++ b/src/controls/QskQuick.cpp @@ -64,6 +64,27 @@ bool qskIsAncestorOf( const QQuickItem* item, const QQuickItem* child ) #endif } +bool qskIsVisibleTo( const QQuickItem* item, const QQuickItem* ancestor ) +{ + if ( item == nullptr ) + return false; + + if ( ancestor == nullptr ) + return item->isVisible(); // like QWidget::isVisibleTo + + for ( item = item->parentItem(); + item = item->parentItem(); item != ancestor ) + { + if ( item == nullptr ) + return false; // ancestor is no parent + + if ( !QQuickItemPrivate::get( item )->explicitVisible ) + return false; + } + + return true; +} + bool qskIsTabFence( const QQuickItem* item ) { if ( item == nullptr ) diff --git a/src/controls/QskQuick.h b/src/controls/QskQuick.h index ddb4bb97..7aecf63d 100644 --- a/src/controls/QskQuick.h +++ b/src/controls/QskQuick.h @@ -19,6 +19,7 @@ QSK_EXPORT bool qskIsAncestorOf( const QQuickItem* item, const QQuickItem* child QSK_EXPORT bool qskIsTransparentForPositioner( const QQuickItem* ); QSK_EXPORT bool qskIsTabFence( const QQuickItem* ); QSK_EXPORT bool qskIsShortcutScope( const QQuickItem* ); +QSK_EXPORT bool qskIsVisibleTo( const QQuickItem* item, const QQuickItem* ancestor ); QSK_EXPORT QRectF qskItemRect( const QQuickItem* );