dynamic constraints for QskStackBox added

This commit is contained in:
Uwe Rathmann 2017-08-31 08:50:24 +02:00
parent ff9e9ab63c
commit cf58650c05
2 changed files with 38 additions and 3 deletions

View File

@ -7,6 +7,8 @@
#include "QskStackBoxAnimator.h" #include "QskStackBoxAnimator.h"
#include "QskLayoutItem.h" #include "QskLayoutItem.h"
#include "QskLayoutEngine.h" #include "QskLayoutEngine.h"
#include "QskLayoutConstraint.h"
#include <QPointer> #include <QPointer>
class QskStackBox::PrivateData class QskStackBox::PrivateData
@ -163,7 +165,7 @@ QSizeF QskStackBox::contentsSizeHint() const
if ( !isActive() ) if ( !isActive() )
return QSizeF( -1, -1 ); return QSizeF( -1, -1 );
if ( itemCount() == 0 ) if ( itemCount() == 0 )
return QSizeF( 0, 0 ); return QSizeF( 0, 0 );
qreal width = -1; qreal width = -1;
@ -237,16 +239,46 @@ QSizeF QskStackBox::contentsSizeHint() const
return QSizeF( width, height ); return QSizeF( width, height );
} }
qreal QskStackBox::heightForWidth( qreal width ) const
{
qreal height = -1;
const QskLayoutEngine& engine = this->engine();
for ( int i = 0; i < engine.itemCount(); i++ )
{
const QskLayoutItem* layoutItem = engine.layoutItemAt( i );
if ( const auto item = layoutItem->item() )
height = qMax( height, QskLayoutConstraint::heightForWidth( item, width ) );
}
return height;
}
qreal QskStackBox::widthForHeight( qreal height ) const
{
qreal width = -1;
const QskLayoutEngine& engine = this->engine();
for ( int i = 0; i < engine.itemCount(); i++ )
{
const QskLayoutItem* layoutItem = engine.layoutItemAt( i );
if ( const auto item = layoutItem->item() )
width = qMax( width, QskLayoutConstraint::widthForHeight( item, height ) );
}
return width;
}
void QskStackBox::layoutItemInserted( QskLayoutItem* layoutItem, int index ) void QskStackBox::layoutItemInserted( QskLayoutItem* layoutItem, int index )
{ {
Q_UNUSED( index ) Q_UNUSED( index )
QQuickItem *item = layoutItem->item(); QQuickItem* item = layoutItem->item();
if ( item == nullptr ) if ( item == nullptr )
return; return;
#if 1 #if 1
/* /*
In general QGridLayoutEngine supports having multiple entries In general QGridLayoutEngine supports having multiple entries
in one cell, but well ... in one cell, but well ...
So we have to go away from using it and doing the simple use case of So we have to go away from using it and doing the simple use case of

View File

@ -34,6 +34,9 @@ public:
virtual QSizeF contentsSizeHint() const override; virtual QSizeF contentsSizeHint() const override;
virtual qreal heightForWidth( qreal width ) const override;
virtual qreal widthForHeight( qreal height ) const override;
void setAnimator( QskStackBoxAnimator* ); void setAnimator( QskStackBoxAnimator* );
const QskStackBoxAnimator* animator() const; const QskStackBoxAnimator* animator() const;
QskStackBoxAnimator* animator(); QskStackBoxAnimator* animator();