spacer for grid layouts: qreal -> QSizeF

This commit is contained in:
Uwe Rathmann 2019-09-16 12:36:29 +02:00
parent 2a122d4e05
commit 8ee2377c76
6 changed files with 32 additions and 21 deletions

View File

@ -157,7 +157,7 @@ int QskGridBox::addItem( QQuickItem* item,
return index; return index;
} }
int QskGridBox::addSpacer( qreal spacing, int QskGridBox::addSpacer( const QSizeF& spacing,
int row, int column, int rowSpan, int columnSpan ) int row, int column, int rowSpan, int columnSpan )
{ {
const int index = m_data->engine.insertSpacer( const int index = m_data->engine.insertSpacer(

View File

@ -34,7 +34,7 @@ class QSK_EXPORT QskGridBox : public QskBox
int addItem( QQuickItem*, int row, int column, int addItem( QQuickItem*, int row, int column,
int rowSpan, int columnSpan, Qt::Alignment ); int rowSpan, int columnSpan, Qt::Alignment );
Q_INVOKABLE int addSpacer( qreal spacing, Q_INVOKABLE int addSpacer( const QSizeF&,
int row, int column, int columnSpan = 1, int rowSpan = 1 ); int row, int column, int columnSpan = 1, int rowSpan = 1 );
void removeItem( const QQuickItem* ); void removeItem( const QQuickItem* );

View File

@ -158,11 +158,11 @@ namespace
{ {
public: public:
Element( QQuickItem*, const QRect& ); Element( QQuickItem*, const QRect& );
Element( qreal spacing, const QRect& ); Element( const QSizeF& spacing, const QRect& );
Element& operator=( const Element& ); Element& operator=( const Element& );
qreal spacing() const; QSizeF spacing() const;
QQuickItem* item() const; QQuickItem* item() const;
QRect grid() const; QRect grid() const;
@ -180,7 +180,7 @@ namespace
union union
{ {
QQuickItem* m_item; QQuickItem* m_item;
qreal m_spacing; QSizeF m_spacing;
}; };
QRect m_grid; QRect m_grid;
@ -195,7 +195,7 @@ Element::Element( QQuickItem* item, const QRect& grid )
{ {
} }
Element::Element( qreal spacing, const QRect& grid ) Element::Element( const QSizeF& spacing, const QRect& grid )
: m_spacing( spacing ) : m_spacing( spacing )
, m_grid( grid ) , m_grid( grid )
, m_isSpacer( true ) , m_isSpacer( true )
@ -216,9 +216,9 @@ Element& Element::operator=( const Element& other )
return *this; return *this;
} }
inline qreal Element::spacing() const inline QSizeF Element::spacing() const
{ {
return m_isSpacer ? m_spacing : -1.0; return m_isSpacer ? m_spacing : QSizeF();
} }
inline QQuickItem* Element::item() const inline QQuickItem* Element::item() const
@ -254,9 +254,12 @@ QskLayoutChain::CellData Element::cell( Qt::Orientation orientation ) const
if ( m_isSpacer ) if ( m_isSpacer )
{ {
cell.hint.setMinimum( m_spacing ); const qreal value = ( orientation == Qt::Horizontal )
cell.hint.setPreferred( m_spacing ); ? m_spacing.width() : m_spacing.height();
cell.hint.setMaximum( m_spacing );
cell.hint.setMinimum( value );
cell.hint.setPreferred( value );
cell.hint.setMaximum( value );
} }
else else
{ {
@ -289,7 +292,7 @@ class QskGridLayoutEngine::PrivateData
return const_cast< Element* >( &this->elements[index] ); return const_cast< Element* >( &this->elements[index] );
} }
int insertElement( QQuickItem* item, qreal spacing, QRect grid ) int insertElement( QQuickItem* item, QSizeF spacing, QRect grid )
{ {
// -1 means unlimited, while 0 does not make any sense // -1 means unlimited, while 0 does not make any sense
if ( grid.width() == 0 ) if ( grid.width() == 0 )
@ -299,9 +302,19 @@ class QskGridLayoutEngine::PrivateData
grid.setHeight( 1 ); grid.setHeight( 1 );
if ( item ) if ( item )
{
elements.push_back( Element( item, grid ) ); elements.push_back( Element( item, grid ) );
}
else else
{
if ( spacing.width() < 0.0 )
spacing.setWidth( 0.0 );
if ( spacing.height() < 0.0 )
spacing.setHeight( 0.0 );
elements.push_back( Element( spacing, grid ) ); elements.push_back( Element( spacing, grid ) );
}
grid = effectiveGrid( elements.back() ); grid = effectiveGrid( elements.back() );
@ -418,12 +431,11 @@ qreal QskGridLayoutEngine::columnSizeHint( int column, Qt::SizeHint which ) cons
int QskGridLayoutEngine::insertItem( QQuickItem* item, const QRect& grid ) int QskGridLayoutEngine::insertItem( QQuickItem* item, const QRect& grid )
{ {
invalidate(); invalidate();
return m_data->insertElement( item, -1, grid ); return m_data->insertElement( item, QSizeF(), grid );
} }
int QskGridLayoutEngine::insertSpacer( qreal spacing, const QRect& grid ) int QskGridLayoutEngine::insertSpacer( const QSizeF& spacing, const QRect& grid )
{ {
spacing = qMax( spacing, 0.0 );
return m_data->insertElement( nullptr, spacing, grid ); return m_data->insertElement( nullptr, spacing, grid );
} }
@ -495,12 +507,12 @@ QQuickItem* QskGridLayoutEngine::itemAt( int index ) const
return nullptr; return nullptr;
} }
qreal QskGridLayoutEngine::spacerAt( int index ) const QSizeF QskGridLayoutEngine::spacerAt( int index ) const
{ {
if ( const auto element = m_data->elementAt( index ) ) if ( const auto element = m_data->elementAt( index ) )
return element->spacing(); return element->spacing();
return -1.0; return QSizeF();
} }
QQuickItem* QskGridLayoutEngine::itemAt( int row, int column ) const QQuickItem* QskGridLayoutEngine::itemAt( int row, int column ) const

View File

@ -34,13 +34,13 @@ class QskGridLayoutEngine : public QskLayoutEngine2D
qreal columnSizeHint( int column, Qt::SizeHint ) const; qreal columnSizeHint( int column, Qt::SizeHint ) const;
int insertItem( QQuickItem*, const QRect& grid ); int insertItem( QQuickItem*, const QRect& grid );
int insertSpacer( qreal spacing, const QRect& grid ); int insertSpacer( const QSizeF&, const QRect& grid );
bool removeAt( int index ); bool removeAt( int index );
bool clear(); bool clear();
QQuickItem* itemAt( int index ) const override final; QQuickItem* itemAt( int index ) const override final;
qreal spacerAt( int index ) const override final; QSizeF spacerAt( int index ) const;
QQuickItem* itemAt( int row, int column ) const; QQuickItem* itemAt( int row, int column ) const;
int indexAt( int row, int column ) const; int indexAt( int row, int column ) const;

View File

@ -25,7 +25,6 @@ class QskLayoutEngine2D
virtual int count() const = 0; virtual int count() const = 0;
virtual QQuickItem* itemAt( int index ) const = 0; virtual QQuickItem* itemAt( int index ) const = 0;
virtual qreal spacerAt( int index ) const = 0;
int indexOf( const QQuickItem* ) const; int indexOf( const QQuickItem* ) const;

View File

@ -40,7 +40,7 @@ class QskLinearLayoutEngine : public QskLayoutEngine2D
bool clear(); bool clear();
QQuickItem* itemAt( int index ) const override final; QQuickItem* itemAt( int index ) const override final;
qreal spacerAt( int index ) const override final; qreal spacerAt( int index ) const;
bool setStretchFactorAt( int index, int stretchFactor ); bool setStretchFactorAt( int index, int stretchFactor );
int stretchFactorAt( int index ) const; int stretchFactorAt( int index ) const;