QskDrawer using autoLayoutChildren
This commit is contained in:
parent
d0cd48f8c2
commit
142995504b
@ -96,6 +96,34 @@ static void qskLayoutDrawer( const QRectF& rect, QskDrawer* drawer )
|
|||||||
drawer->setGeometry( r );
|
drawer->setGeometry( r );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline QRectF qskSlidingRect(
|
||||||
|
const QSizeF& size, Qt::Edge edge, qreal ratio )
|
||||||
|
{
|
||||||
|
auto x = 0.0;
|
||||||
|
auto y = 0.0;
|
||||||
|
|
||||||
|
switch( edge )
|
||||||
|
{
|
||||||
|
case Qt::LeftEdge:
|
||||||
|
x = -ratio * size.width();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Qt::RightEdge:
|
||||||
|
x = ratio * size.width();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Qt::TopEdge:
|
||||||
|
y = -ratio * size.height();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Qt::BottomEdge:
|
||||||
|
y = ratio * size.height();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return QRectF( x, y, size.width(), size.height() );
|
||||||
|
}
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
class GeometryListener final : public QQuickItemChangeListener
|
class GeometryListener final : public QQuickItemChangeListener
|
||||||
@ -218,7 +246,7 @@ QskDrawer::QskDrawer( QQuickItem* parentItem )
|
|||||||
setZ( 1 );
|
setZ( 1 );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
setPolishOnResize( true );
|
setAutoLayoutChildren( true );
|
||||||
|
|
||||||
setPopupFlag( PopupFlag::CloseOnPressOutside, true );
|
setPopupFlag( PopupFlag::CloseOnPressOutside, true );
|
||||||
setFaderAspect( Panel | QskAspect::Position | QskAspect::Metric );
|
setFaderAspect( Panel | QskAspect::Position | QskAspect::Metric );
|
||||||
@ -306,89 +334,16 @@ void QskDrawer::gestureEvent( QskGestureEvent* event )
|
|||||||
Inherited::gestureEvent( event );
|
Inherited::gestureEvent( event );
|
||||||
}
|
}
|
||||||
|
|
||||||
QSizeF QskDrawer::layoutSizeHint(
|
QRectF QskDrawer::layoutRectForSize( const QSizeF& size ) const
|
||||||
Qt::SizeHint which, const QSizeF& constraint ) const
|
|
||||||
{
|
{
|
||||||
if ( which == Qt::MaximumSize )
|
qreal ratio;
|
||||||
return QSizeF();
|
|
||||||
|
|
||||||
qreal w = -1.0;
|
|
||||||
qreal h = -1.0;
|
|
||||||
|
|
||||||
const auto children = childItems();
|
|
||||||
|
|
||||||
for ( const auto child : children )
|
|
||||||
{
|
|
||||||
if ( !qskIsVisibleToLayout( child ) )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
const auto policy = qskSizePolicy( child );
|
|
||||||
|
|
||||||
if ( constraint.width() >= 0.0 && policy.isConstrained( Qt::Vertical ) )
|
|
||||||
{
|
|
||||||
const auto hint = qskSizeConstraint( child, which, constraint );
|
|
||||||
h = qMax( h, hint.height() );
|
|
||||||
}
|
|
||||||
else if ( constraint.height() >= 0.0 && policy.isConstrained( Qt::Horizontal ) )
|
|
||||||
{
|
|
||||||
const auto hint = qskSizeConstraint( child, which, constraint );
|
|
||||||
w = qMax( w, hint.width() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const auto hint = qskSizeConstraint( child, which );
|
|
||||||
|
|
||||||
w = qMax( w, hint.width() );
|
|
||||||
h = qMax( h, hint.height() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return QSizeF( w, h );
|
|
||||||
}
|
|
||||||
|
|
||||||
void QskDrawer::updateLayout()
|
|
||||||
{
|
|
||||||
if ( !( isOpen() || isFading() ) || size().isEmpty() )
|
|
||||||
return;
|
|
||||||
|
|
||||||
auto dx = 0.0;
|
|
||||||
auto dy = 0.0;
|
|
||||||
|
|
||||||
if ( isFading() )
|
if ( isFading() )
|
||||||
{
|
ratio = metric( faderAspect() );
|
||||||
const auto f = metric( faderAspect() );
|
else
|
||||||
|
ratio = isOpen() ? 0.0 : 1.0;
|
||||||
|
|
||||||
switch( m_data->edge )
|
return qskSlidingRect( size, m_data->edge, ratio );
|
||||||
{
|
|
||||||
case Qt::LeftEdge:
|
|
||||||
dx = -f * width();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Qt::RightEdge:
|
|
||||||
dx = f * width();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Qt::TopEdge:
|
|
||||||
dy = -f * height();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Qt::BottomEdge:
|
|
||||||
dy = f * height();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const QRectF layoutRect( dx, dy, width(), height() );
|
|
||||||
|
|
||||||
const auto children = childItems();
|
|
||||||
for ( auto child : children )
|
|
||||||
{
|
|
||||||
if ( qskIsAdjustableByLayout( child ) )
|
|
||||||
{
|
|
||||||
const auto r = qskConstrainedItemRect( child, layoutRect );
|
|
||||||
qskSetItemGeometry( child, r );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskDrawer::itemChange( QQuickItem::ItemChange change,
|
void QskDrawer::itemChange( QQuickItem::ItemChange change,
|
||||||
@ -398,17 +353,6 @@ void QskDrawer::itemChange( QQuickItem::ItemChange change,
|
|||||||
|
|
||||||
switch( static_cast< int >( change ) )
|
switch( static_cast< int >( change ) )
|
||||||
{
|
{
|
||||||
case QQuickItem::ItemChildAddedChange:
|
|
||||||
case QQuickItem::ItemChildRemovedChange:
|
|
||||||
{
|
|
||||||
if ( qskIsVisibleToLayout( value.item ) )
|
|
||||||
resetImplicitSize();
|
|
||||||
|
|
||||||
if ( qskIsAdjustableByLayout( value.item ) )
|
|
||||||
polish();
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case QQuickItem::ItemParentHasChanged:
|
case QQuickItem::ItemParentHasChanged:
|
||||||
{
|
{
|
||||||
if ( parentItem() )
|
if ( parentItem() )
|
||||||
|
@ -32,7 +32,7 @@ class QSK_EXPORT QskDrawer : public QskPopup
|
|||||||
void setDragMargin( qreal );
|
void setDragMargin( qreal );
|
||||||
qreal dragMargin() const;
|
qreal dragMargin() const;
|
||||||
|
|
||||||
void updateLayout() override;
|
QRectF layoutRectForSize( const QSizeF& ) const override;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void edgeChanged( Qt::Edge );
|
void edgeChanged( Qt::Edge );
|
||||||
@ -40,8 +40,6 @@ class QSK_EXPORT QskDrawer : public QskPopup
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void itemChange( ItemChange, const ItemChangeData& ) override;
|
void itemChange( ItemChange, const ItemChangeData& ) override;
|
||||||
|
|
||||||
QSizeF layoutSizeHint( Qt::SizeHint, const QSizeF& ) const override;
|
|
||||||
void gestureEvent( QskGestureEvent* ) override;
|
void gestureEvent( QskGestureEvent* ) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user