more method for future use
This commit is contained in:
parent
d1a338d542
commit
4e23dd9428
|
@ -6,6 +6,7 @@
|
||||||
#include "QskLayoutConstraint.h"
|
#include "QskLayoutConstraint.h"
|
||||||
#include "QskControl.h"
|
#include "QskControl.h"
|
||||||
#include "QskSizePolicy.h"
|
#include "QskSizePolicy.h"
|
||||||
|
#include "QskFunctions.h"
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
|
@ -58,6 +59,42 @@ static inline qreal qskAdjustedValue(
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline QSizeF qskExpandedSize( const QQuickItem* item, const QSizeF& constraint )
|
||||||
|
{
|
||||||
|
using namespace QskLayoutConstraint;
|
||||||
|
|
||||||
|
const auto policy = sizePolicy( item );
|
||||||
|
|
||||||
|
QSizeF size = constraint;
|
||||||
|
|
||||||
|
const bool vGrow = ( policy.policy( Qt::Vertical ) & QskSizePolicy::GrowFlag );
|
||||||
|
const bool hGrow = ( policy.policy( Qt::Horizontal ) & QskSizePolicy::GrowFlag );
|
||||||
|
|
||||||
|
if ( !vGrow || !hGrow )
|
||||||
|
{
|
||||||
|
const auto hint = sizeHint( item, Qt::PreferredSize, constraint );
|
||||||
|
|
||||||
|
if ( !vGrow )
|
||||||
|
size.setHeight( hint.height() );
|
||||||
|
|
||||||
|
if ( !hGrow )
|
||||||
|
size.setWidth( hint.width() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !size.isValid() )
|
||||||
|
{
|
||||||
|
const auto hint = sizeHint( item, Qt::MaximumSize, size );
|
||||||
|
|
||||||
|
if ( size.width() == -1 )
|
||||||
|
size.setWidth( hint.width() );
|
||||||
|
|
||||||
|
if ( size.height() == -1 )
|
||||||
|
size.setHeight( hint.height() );
|
||||||
|
}
|
||||||
|
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
QskLayoutConstraint::Type QskLayoutConstraint::constraintType( const QQuickItem* item )
|
QskLayoutConstraint::Type QskLayoutConstraint::constraintType( const QQuickItem* item )
|
||||||
{
|
{
|
||||||
Type constraintType = Unconstrained;
|
Type constraintType = Unconstrained;
|
||||||
|
@ -267,7 +304,8 @@ QSizeF QskLayoutConstraint::boundedSize( const QQuickItem* item, const QSizeF& s
|
||||||
return QSizeF( width, height );
|
return QSizeF( width, height );
|
||||||
}
|
}
|
||||||
|
|
||||||
QSizeF QskLayoutConstraint::adjustedSize( const QQuickItem* item, const QSizeF& targetSize )
|
QSizeF QskLayoutConstraint::adjustedSize(
|
||||||
|
const QQuickItem* item, const QSizeF& targetSize )
|
||||||
{
|
{
|
||||||
const auto policy = sizePolicy( item );
|
const auto policy = sizePolicy( item );
|
||||||
|
|
||||||
|
@ -375,3 +413,34 @@ QSizeF QskLayoutConstraint::sizeHint( const QQuickItem* item,
|
||||||
|
|
||||||
return hint;
|
return hint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QRectF QskLayoutConstraint::itemRect( const QQuickItem* item,
|
||||||
|
const QRectF& rect, Qt::Alignment alignment )
|
||||||
|
{
|
||||||
|
QSizeF size = qskExpandedSize( item, QSizeF( -1, -1 ) );
|
||||||
|
|
||||||
|
switch( constraintType( item ) )
|
||||||
|
{
|
||||||
|
case HeightForWidth:
|
||||||
|
{
|
||||||
|
if ( size.width() > rect.width() )
|
||||||
|
size = qskExpandedSize( item, QSizeF( rect.width(), -1 ) );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WidthForHeight:
|
||||||
|
{
|
||||||
|
if ( size.height() > rect.height() )
|
||||||
|
size = qskExpandedSize( item, QSizeF( -1, rect.height() ) );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
size = size.boundedTo( rect.size() );
|
||||||
|
|
||||||
|
return qskAlignedRectF( rect, size.width(), size.height(), alignment );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ class QskSizePolicy;
|
||||||
class QskControl;
|
class QskControl;
|
||||||
class QQuickItem;
|
class QQuickItem;
|
||||||
class QSizeF;
|
class QSizeF;
|
||||||
|
class QRectF;
|
||||||
|
|
||||||
namespace std { template< typename T > class function; }
|
namespace std { template< typename T > class function; }
|
||||||
|
|
||||||
|
@ -44,12 +45,14 @@ namespace QskLayoutConstraint
|
||||||
|
|
||||||
// bounded by Qt::MinimumSize/Qt::MaximumSize
|
// bounded by Qt::MinimumSize/Qt::MaximumSize
|
||||||
QSK_EXPORT QSizeF boundedSize( const QQuickItem*, const QSizeF& );
|
QSK_EXPORT QSizeF boundedSize( const QQuickItem*, const QSizeF& );
|
||||||
|
|
||||||
QSK_EXPORT QSizeF adjustedSize( const QQuickItem*, const QSizeF& );
|
QSK_EXPORT QSizeF adjustedSize( const QQuickItem*, const QSizeF& );
|
||||||
|
|
||||||
QSK_EXPORT QSizeF sizeHint(
|
QSK_EXPORT QSizeF sizeHint(
|
||||||
const QQuickItem*, Qt::SizeHint, const QSizeF& constraint );
|
const QQuickItem*, Qt::SizeHint, const QSizeF& constraint );
|
||||||
|
|
||||||
|
QSK_EXPORT QRectF itemRect(
|
||||||
|
const QQuickItem*, const QRectF&, Qt::Alignment );
|
||||||
|
|
||||||
// QGridLayoutEngine internally uses FLT_MAX
|
// QGridLayoutEngine internally uses FLT_MAX
|
||||||
const qreal unlimited = std::numeric_limits< float >::max();
|
const qreal unlimited = std::numeric_limits< float >::max();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue