more C++11 specifier

This commit is contained in:
Uwe Rathmann 2020-05-03 14:24:17 +02:00
parent 475a5a7dc1
commit 2c9aa6635c
2 changed files with 118 additions and 137 deletions

View File

@ -8,6 +8,8 @@
#include <qhashfunctions.h> #include <qhashfunctions.h>
#include <qvariant.h> #include <qvariant.h>
#include <algorithm>
static void qskRegisterBoxShapeMetrics() static void qskRegisterBoxShapeMetrics()
{ {
qRegisterMetaType< QskBoxShapeMetrics >(); qRegisterMetaType< QskBoxShapeMetrics >();
@ -28,99 +30,31 @@ static inline qreal qskAbsoluted( qreal length, qreal percentage )
return percentage / 100.0 * 0.5 * length; return percentage / 100.0 * 0.5 * length;
} }
QskBoxShapeMetrics::QskBoxShapeMetrics( static inline void qskSetRadius( qreal rx, qreal ry, QSizeF& radius )
qreal radiusX, qreal radiusY, Qt::SizeMode sizeMode )
: m_sizeMode( sizeMode )
, m_aspectRatioMode( Qt::KeepAspectRatio )
{ {
setRadius( radiusX, radiusY ); radius.rwidth() = ( rx > 0.0 ) ? rx : 0.0;
} radius.rheight() = ( ry > 0.0 ) ? ry : 0.0;
QskBoxShapeMetrics::~QskBoxShapeMetrics()
{
}
bool QskBoxShapeMetrics::operator==( const QskBoxShapeMetrics& other ) const
{
if ( m_sizeMode != other.m_sizeMode )
return false;
if ( m_aspectRatioMode != other.m_aspectRatioMode )
return false;
for ( size_t i = 0; i < 4; i++ )
{
if ( m_radii[ i ] != other.m_radii[ i ] )
return false;
}
return true;
}
void QskBoxShapeMetrics::setSizeMode( Qt::SizeMode sizeMode )
{
m_sizeMode = sizeMode;
}
void QskBoxShapeMetrics::setAspectRatioMode( Qt::AspectRatioMode aspectRatioMode )
{
m_aspectRatioMode = aspectRatioMode;
} }
void QskBoxShapeMetrics::setRadius( void QskBoxShapeMetrics::setRadius(
qreal topLeftX, qreal topLeftY, qreal topLeftX, qreal topLeftY,
qreal topRightX, qreal topRightY, qreal topRightX, qreal topRightY,
qreal bottomLeftX, qreal bottomLeftY, qreal bottomLeftX, qreal bottomLeftY,
qreal bottomRightX, qreal bottomRightY ) qreal bottomRightX, qreal bottomRightY ) noexcept
{ {
m_radii[ Qt::TopLeftCorner ].setWidth( qMax( topLeftX, 0.0 ) ); qskSetRadius( topLeftX, topLeftY, m_radii[ Qt::TopLeftCorner ] );
m_radii[ Qt::TopLeftCorner ].setHeight( qMax( topLeftY, 0.0 ) ); qskSetRadius( topRightX, topRightY, m_radii[ Qt::TopRightCorner ] );
qskSetRadius( bottomLeftX, bottomLeftY, m_radii[ Qt::BottomLeftCorner ] );
m_radii[ Qt::TopRightCorner ].setWidth( qMax( topRightX, 0.0 ) ); qskSetRadius( bottomRightX, bottomRightY, m_radii[ Qt::BottomRightCorner ] );
m_radii[ Qt::TopRightCorner ].setHeight( qMax( topRightY, 0.0 ) );
m_radii[ Qt::BottomLeftCorner ].setWidth( qMax( bottomLeftX, 0.0 ) );
m_radii[ Qt::BottomLeftCorner ].setHeight( qMax( bottomLeftY, 0.0 ) );
m_radii[ Qt::BottomRightCorner ].setWidth( qMax( bottomRightX, 0.0 ) );
m_radii[ Qt::BottomRightCorner ].setHeight( qMax( bottomRightY, 0.0 ) );
} }
void QskBoxShapeMetrics::setRadius( Qt::Corner corner, qreal radiusX, qreal radiusY ) void QskBoxShapeMetrics::setRadius( Qt::Corner corner, qreal radiusX, qreal radiusY ) noexcept
{ {
if ( ( corner >= Qt::TopLeftCorner ) && ( corner <= Qt::BottomRightCorner ) ) if ( ( corner >= Qt::TopLeftCorner ) && ( corner <= Qt::BottomRightCorner ) )
{ qskSetRadius( radiusX, radiusY, m_radii[ corner ] );
m_radii[ corner ].setWidth( qMax( radiusX, 0.0 ) );
m_radii[ corner ].setHeight( qMax( radiusY, 0.0 ) );
}
} }
bool QskBoxShapeMetrics::isRectellipse() const QskBoxShapeMetrics QskBoxShapeMetrics::transposed() const noexcept
{
const QSizeF* r = m_radii;
return ( r[ 1 ] == r[ 0 ] ) && ( r[ 2 ] == r[ 1 ] ) && ( r[ 3 ] == r[ 2 ] );
}
bool QskBoxShapeMetrics::isRectangle() const
{
const QSizeF* r = m_radii;
if ( ( r[ 0 ].width() > 0.0 ) || ( r[ 0 ].height() > 0.0 ) )
return false;
if ( ( r[ 1 ].width() > 0.0 ) || ( r[ 1 ].height() > 0.0 ) )
return false;
if ( ( r[ 2 ].width() > 0.0 ) || ( r[ 2 ].height() > 0.0 ) )
return false;
if ( ( r[ 3 ].width() > 0.0 ) || ( r[ 3 ].height() > 0.0 ) )
return false;
return true;
}
QskBoxShapeMetrics QskBoxShapeMetrics::rotated() const
{ {
QskBoxShapeMetrics other; QskBoxShapeMetrics other;
@ -132,7 +66,7 @@ QskBoxShapeMetrics QskBoxShapeMetrics::rotated() const
return other; return other;
} }
QskBoxShapeMetrics QskBoxShapeMetrics::toAbsolute( const QSizeF& size ) const QskBoxShapeMetrics QskBoxShapeMetrics::toAbsolute( const QSizeF& size ) const noexcept
{ {
if ( m_sizeMode != Qt::RelativeSize ) if ( m_sizeMode != Qt::RelativeSize )
return *this; return *this;
@ -163,14 +97,14 @@ QskBoxShapeMetrics QskBoxShapeMetrics::toAbsolute( const QSizeF& size ) const
} }
case Qt::KeepAspectRatio: case Qt::KeepAspectRatio:
{ {
radii.setWidth( qMin( rx, ry ) ); radii.setWidth( std::min( rx, ry ) );
radii.setHeight( qMin( rx, ry ) ); radii.setHeight( std::min( rx, ry ) );
break; break;
} }
case Qt::KeepAspectRatioByExpanding: case Qt::KeepAspectRatioByExpanding:
{ {
radii.setWidth( qMax( rx, ry ) ); radii.setWidth( std::max( rx, ry ) );
radii.setHeight( qMax( rx, ry ) ); radii.setHeight( std::max( rx, ry ) );
break; break;
} }
} }
@ -182,7 +116,7 @@ QskBoxShapeMetrics QskBoxShapeMetrics::toAbsolute( const QSizeF& size ) const
} }
QskBoxShapeMetrics QskBoxShapeMetrics::interpolated( QskBoxShapeMetrics QskBoxShapeMetrics::interpolated(
const QskBoxShapeMetrics& to, qreal ratio ) const const QskBoxShapeMetrics& to, qreal ratio ) const noexcept
{ {
if ( ( *this == to ) || ( m_sizeMode != to.m_sizeMode ) ) if ( ( *this == to ) || ( m_sizeMode != to.m_sizeMode ) )
return to; return to;
@ -197,12 +131,12 @@ QskBoxShapeMetrics QskBoxShapeMetrics::interpolated(
} }
QVariant QskBoxShapeMetrics::interpolate( QVariant QskBoxShapeMetrics::interpolate(
const QskBoxShapeMetrics& from, const QskBoxShapeMetrics& to, qreal progress ) const QskBoxShapeMetrics& from, const QskBoxShapeMetrics& to, qreal progress ) noexcept
{ {
return QVariant::fromValue( from.interpolated( to, progress ) ); return QVariant::fromValue( from.interpolated( to, progress ) );
} }
uint QskBoxShapeMetrics::hash( uint seed ) const uint QskBoxShapeMetrics::hash( uint seed ) const noexcept
{ {
uint hash = qHashBits( m_radii, sizeof( m_radii ), seed ); uint hash = qHashBits( m_radii, sizeof( m_radii ), seed );

View File

@ -18,67 +18,69 @@ class QMarginsF;
class QSK_EXPORT QskBoxShapeMetrics class QSK_EXPORT QskBoxShapeMetrics
{ {
public: public:
constexpr QskBoxShapeMetrics(); constexpr QskBoxShapeMetrics() noexcept;
constexpr QskBoxShapeMetrics( qreal topLeft, qreal topRight, constexpr QskBoxShapeMetrics( qreal topLeft, qreal topRight,
qreal bottomLeft, qreal bottomRight, Qt::SizeMode = Qt::AbsoluteSize ); qreal bottomLeft, qreal bottomRight, Qt::SizeMode = Qt::AbsoluteSize ) noexcept;
QskBoxShapeMetrics( qreal radius, Qt::SizeMode = Qt::AbsoluteSize ); constexpr QskBoxShapeMetrics(
QskBoxShapeMetrics( qreal radiusX, qreal radiusY, Qt::SizeMode = Qt::AbsoluteSize ); qreal radius, Qt::SizeMode = Qt::AbsoluteSize ) noexcept;
~QskBoxShapeMetrics(); constexpr QskBoxShapeMetrics( qreal radiusX, qreal radiusY,
Qt::SizeMode = Qt::AbsoluteSize ) noexcept;
bool operator==( const QskBoxShapeMetrics& ) const; constexpr bool operator==( const QskBoxShapeMetrics& ) const noexcept;
bool operator!=( const QskBoxShapeMetrics& ) const; constexpr bool operator!=( const QskBoxShapeMetrics& ) const noexcept;
void setRadius( qreal radius ); void setRadius( qreal radius ) noexcept;
void setRadius( qreal radius, Qt::SizeMode ); void setRadius( qreal radius, Qt::SizeMode ) noexcept;
void setRadius( Qt::Corner, qreal radius ); void setRadius( Qt::Corner, qreal radius ) noexcept;
void setRadius( qreal radiusX, qreal radiusY ); void setRadius( qreal radiusX, qreal radiusY ) noexcept;
void setRadius( const QSizeF& ); void setRadius( const QSizeF& ) noexcept;
void setRadius( Qt::Corner, qreal radiusX, qreal radiusY ); void setRadius( Qt::Corner, qreal radiusX, qreal radiusY ) noexcept;
void setRadius( Qt::Corner, const QSizeF& radius ); void setRadius( Qt::Corner, const QSizeF& radius ) noexcept;
void setRadius( qreal topLeft, qreal topRight, void setRadius( qreal topLeft, qreal topRight,
qreal bottomLeft, qreal bottomRight ); qreal bottomLeft, qreal bottomRight ) noexcept;
void setRadius( const QSizeF& topLeft, const QSizeF& topRight, void setRadius( const QSizeF& topLeft, const QSizeF& topRight,
const QSizeF& bottomLeft, const QSizeF& bottomRight ); const QSizeF& bottomLeft, const QSizeF& bottomRight ) noexcept;
void setRadius( void setRadius(
qreal topLeftX, qreal topLeftY, qreal topLeftX, qreal topLeftY,
qreal topRightX, qreal topRightY, qreal topRightX, qreal topRightY,
qreal bottomLeftX, qreal bottomLeftY, qreal bottomLeftX, qreal bottomLeftY,
qreal bottomRightX, qreal bottomRightY ); qreal bottomRightX, qreal bottomRightY ) noexcept;
QSizeF radius( Qt::Corner ) const; constexpr QSizeF radius( Qt::Corner ) const noexcept;
bool isRectangle() const; constexpr bool isRectangle() const noexcept;
bool isRectellipse() const; constexpr bool isRectellipse() const noexcept;
void setSizeMode( Qt::SizeMode ); void setSizeMode( Qt::SizeMode ) noexcept;
Qt::SizeMode sizeMode() const; constexpr Qt::SizeMode sizeMode() const noexcept;
void setAspectRatioMode( Qt::AspectRatioMode ); void setAspectRatioMode( Qt::AspectRatioMode ) noexcept;
Qt::AspectRatioMode aspectRatioMode() const; constexpr Qt::AspectRatioMode aspectRatioMode() const noexcept;
QskBoxShapeMetrics interpolated( QskBoxShapeMetrics interpolated(
const QskBoxShapeMetrics&, qreal value ) const; const QskBoxShapeMetrics&, qreal value ) const noexcept;
QskBoxShapeMetrics toAbsolute( const QSizeF& ) const; QskBoxShapeMetrics toAbsolute( const QSizeF& ) const noexcept;
QskBoxShapeMetrics rotated() const; QskBoxShapeMetrics transposed() const noexcept;
QMarginsF padding( const QSizeF& ) const; QMarginsF padding( const QSizeF& ) const noexcept;
uint hash( uint seed = 0 ) const; uint hash( uint seed = 0 ) const noexcept;
static QVariant interpolate( const QskBoxShapeMetrics&, static QVariant interpolate( const QskBoxShapeMetrics&,
const QskBoxShapeMetrics&, qreal progress ); const QskBoxShapeMetrics&, qreal progress ) noexcept;
private: private:
inline constexpr QskBoxShapeMetrics( Qt::SizeMode sizeMode, const QSizeF radii[ 4 ] ) inline constexpr QskBoxShapeMetrics(
Qt::SizeMode sizeMode, const QSizeF radii[ 4 ] ) noexcept
: m_radii{ radii[ 0 ], radii[ 1 ], radii[ 2 ], radii[ 3 ] } : m_radii{ radii[ 0 ], radii[ 1 ], radii[ 2 ], radii[ 3 ] }
, m_sizeMode( sizeMode ) , m_sizeMode( sizeMode )
, m_aspectRatioMode( Qt::KeepAspectRatio ) , m_aspectRatioMode( Qt::KeepAspectRatio )
@ -90,20 +92,30 @@ class QSK_EXPORT QskBoxShapeMetrics
Qt::AspectRatioMode m_aspectRatioMode : 2; Qt::AspectRatioMode m_aspectRatioMode : 2;
}; };
inline constexpr QskBoxShapeMetrics::QskBoxShapeMetrics() inline constexpr QskBoxShapeMetrics::QskBoxShapeMetrics() noexcept
: m_radii{ { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } } : m_radii{ { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } }
, m_sizeMode( Qt::AbsoluteSize ) , m_sizeMode( Qt::AbsoluteSize )
, m_aspectRatioMode( Qt::KeepAspectRatio ) , m_aspectRatioMode( Qt::KeepAspectRatio )
{ {
} }
inline QskBoxShapeMetrics::QskBoxShapeMetrics( qreal radius, Qt::SizeMode sizeMode ) inline constexpr QskBoxShapeMetrics::QskBoxShapeMetrics(
qreal radius, Qt::SizeMode sizeMode ) noexcept
: QskBoxShapeMetrics( radius, radius, sizeMode ) : QskBoxShapeMetrics( radius, radius, sizeMode )
{ {
} }
inline constexpr QskBoxShapeMetrics::QskBoxShapeMetrics(
qreal radiusX, qreal radiusY, Qt::SizeMode sizeMode ) noexcept
: m_radii{ { radiusX, radiusY }, { radiusX, radiusY },
{ radiusX, radiusY }, { radiusX, radiusY } }
, m_sizeMode( sizeMode )
, m_aspectRatioMode( Qt::KeepAspectRatio )
{
}
inline constexpr QskBoxShapeMetrics::QskBoxShapeMetrics( qreal topLeft, qreal topRight, inline constexpr QskBoxShapeMetrics::QskBoxShapeMetrics( qreal topLeft, qreal topRight,
qreal bottomLeft, qreal bottomRight, Qt::SizeMode sizeMode ) qreal bottomLeft, qreal bottomRight, Qt::SizeMode sizeMode ) noexcept
: m_radii{ { topLeft, topLeft }, { topRight, topRight }, : m_radii{ { topLeft, topLeft }, { topRight, topRight },
{ bottomLeft, bottomLeft }, { bottomRight, bottomRight } } { bottomLeft, bottomLeft }, { bottomRight, bottomRight } }
, m_sizeMode( sizeMode ) , m_sizeMode( sizeMode )
@ -111,45 +123,57 @@ inline constexpr QskBoxShapeMetrics::QskBoxShapeMetrics( qreal topLeft, qreal to
{ {
} }
inline bool QskBoxShapeMetrics::operator!=( const QskBoxShapeMetrics& other ) const inline constexpr bool QskBoxShapeMetrics::operator==(
const QskBoxShapeMetrics& other ) const noexcept
{
return ( m_sizeMode == other.m_sizeMode )
&& ( m_aspectRatioMode == other.m_aspectRatioMode )
&& ( m_radii[ 0 ] == other.m_radii[ 0 ] )
&& ( m_radii[ 1 ] == other.m_radii[ 1 ] )
&& ( m_radii[ 2 ] == other.m_radii[ 2 ] )
&& ( m_radii[ 3 ] == other.m_radii[ 3 ] );
}
inline constexpr bool QskBoxShapeMetrics::operator!=(
const QskBoxShapeMetrics& other ) const noexcept
{ {
return !( *this == other ); return !( *this == other );
} }
inline void QskBoxShapeMetrics::setRadius( qreal radius ) inline void QskBoxShapeMetrics::setRadius( qreal radius ) noexcept
{ {
setRadius( radius, radius ); setRadius( radius, radius );
} }
inline void QskBoxShapeMetrics::setRadius( qreal radius, Qt::SizeMode sizeMode ) inline void QskBoxShapeMetrics::setRadius( qreal radius, Qt::SizeMode sizeMode ) noexcept
{ {
setRadius( radius ); setRadius( radius );
setSizeMode( sizeMode ); setSizeMode( sizeMode );
} }
inline void QskBoxShapeMetrics::setRadius( qreal radiusX, qreal radiusY ) inline void QskBoxShapeMetrics::setRadius( qreal radiusX, qreal radiusY ) noexcept
{ {
setRadius( radiusX, radiusY, radiusX, radiusY, setRadius( radiusX, radiusY, radiusX, radiusY,
radiusX, radiusY, radiusX, radiusY ); radiusX, radiusY, radiusX, radiusY );
} }
inline void QskBoxShapeMetrics::setRadius( const QSizeF& radius ) inline void QskBoxShapeMetrics::setRadius( const QSizeF& radius ) noexcept
{ {
setRadius( radius.width(), radius.height() ); setRadius( radius.width(), radius.height() );
} }
inline void QskBoxShapeMetrics::setRadius( Qt::Corner corner, qreal radius ) inline void QskBoxShapeMetrics::setRadius( Qt::Corner corner, qreal radius ) noexcept
{ {
setRadius( corner, radius, radius ); setRadius( corner, radius, radius );
} }
inline void QskBoxShapeMetrics::setRadius( Qt::Corner corner, const QSizeF& radius ) inline void QskBoxShapeMetrics::setRadius( Qt::Corner corner, const QSizeF& radius ) noexcept
{ {
setRadius( corner, radius.width(), radius.height() ); setRadius( corner, radius.width(), radius.height() );
} }
inline void QskBoxShapeMetrics::setRadius( inline void QskBoxShapeMetrics::setRadius(
qreal topLeft, qreal topRight, qreal bottomLeft, qreal bottomRight ) qreal topLeft, qreal topRight, qreal bottomLeft, qreal bottomRight ) noexcept
{ {
setRadius( topLeft, topLeft, topRight, topRight, setRadius( topLeft, topLeft, topRight, topRight,
bottomLeft, bottomLeft, bottomRight, bottomRight ); bottomLeft, bottomLeft, bottomRight, bottomRight );
@ -157,7 +181,7 @@ inline void QskBoxShapeMetrics::setRadius(
inline void QskBoxShapeMetrics::setRadius( inline void QskBoxShapeMetrics::setRadius(
const QSizeF& topLeft, const QSizeF& topRight, const QSizeF& topLeft, const QSizeF& topRight,
const QSizeF& bottomLeft, const QSizeF& bottomRight ) const QSizeF& bottomLeft, const QSizeF& bottomRight ) noexcept
{ {
setRadius( topLeft.width(), topLeft.height(), setRadius( topLeft.width(), topLeft.height(),
topRight.width(), topRight.height(), topRight.width(), topRight.height(),
@ -165,24 +189,47 @@ inline void QskBoxShapeMetrics::setRadius(
bottomRight.width(), bottomRight.height() ); bottomRight.width(), bottomRight.height() );
} }
inline QSizeF QskBoxShapeMetrics::radius( Qt::Corner corner ) const inline constexpr QSizeF QskBoxShapeMetrics::radius( Qt::Corner corner ) const noexcept
{ {
if ( ( corner >= Qt::TopLeftCorner ) && ( corner <= Qt::BottomRightCorner ) ) return ( ( corner >= 0 ) && ( corner < 4 ) ) ? m_radii[ corner ] : QSizeF();
return m_radii[ corner ];
return QSizeF();
} }
inline Qt::SizeMode QskBoxShapeMetrics::sizeMode() const inline void QskBoxShapeMetrics::setSizeMode( Qt::SizeMode sizeMode ) noexcept
{
m_sizeMode = sizeMode;
}
inline constexpr Qt::SizeMode QskBoxShapeMetrics::sizeMode() const noexcept
{ {
return m_sizeMode; return m_sizeMode;
} }
inline Qt::AspectRatioMode QskBoxShapeMetrics::aspectRatioMode() const inline void QskBoxShapeMetrics::setAspectRatioMode(
Qt::AspectRatioMode aspectRatioMode ) noexcept
{
m_aspectRatioMode = aspectRatioMode;
}
inline constexpr Qt::AspectRatioMode QskBoxShapeMetrics::aspectRatioMode() const noexcept
{ {
return m_aspectRatioMode; return m_aspectRatioMode;
} }
inline constexpr bool QskBoxShapeMetrics::isRectellipse() const noexcept
{
return ( m_radii[ 1 ] == m_radii[ 0 ] )
&& ( m_radii[ 2 ] == m_radii[ 1 ] )
&& ( m_radii[ 3 ] == m_radii[ 2 ] );
}
inline constexpr bool QskBoxShapeMetrics::isRectangle() const noexcept
{
return ( ( ( m_radii[ 0 ].width() <= 0.0 ) && ( m_radii[ 0 ].height() <= 0.0 ) )
&& ( ( m_radii[ 1 ].width() <= 0.0 ) && ( m_radii[ 1 ].height() <= 0.0 ) )
&& ( ( m_radii[ 2 ].width() <= 0.0 ) && ( m_radii[ 2 ].height() <= 0.0 ) )
&& ( ( m_radii[ 3 ].width() <= 0.0 ) && ( m_radii[ 3 ].height() <= 0.0 ) ) );
}
#ifndef QT_NO_DEBUG_STREAM #ifndef QT_NO_DEBUG_STREAM
QSK_EXPORT QDebug operator<<( QDebug, const QskBoxShapeMetrics& ); QSK_EXPORT QDebug operator<<( QDebug, const QskBoxShapeMetrics& );