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 <qvariant.h>
#include <algorithm>
static void qskRegisterBoxShapeMetrics()
{
qRegisterMetaType< QskBoxShapeMetrics >();
@ -28,99 +30,31 @@ static inline qreal qskAbsoluted( qreal length, qreal percentage )
return percentage / 100.0 * 0.5 * length;
}
QskBoxShapeMetrics::QskBoxShapeMetrics(
qreal radiusX, qreal radiusY, Qt::SizeMode sizeMode )
: m_sizeMode( sizeMode )
, m_aspectRatioMode( Qt::KeepAspectRatio )
static inline void qskSetRadius( qreal rx, qreal ry, QSizeF& radius )
{
setRadius( radiusX, radiusY );
}
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;
radius.rwidth() = ( rx > 0.0 ) ? rx : 0.0;
radius.rheight() = ( ry > 0.0 ) ? ry : 0.0;
}
void QskBoxShapeMetrics::setRadius(
qreal topLeftX, qreal topLeftY,
qreal topRightX, qreal topRightY,
qreal bottomLeftX, qreal bottomLeftY,
qreal bottomRightX, qreal bottomRightY )
qreal bottomRightX, qreal bottomRightY ) noexcept
{
m_radii[ Qt::TopLeftCorner ].setWidth( qMax( topLeftX, 0.0 ) );
m_radii[ Qt::TopLeftCorner ].setHeight( qMax( topLeftY, 0.0 ) );
m_radii[ Qt::TopRightCorner ].setWidth( qMax( topRightX, 0.0 ) );
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 ) );
qskSetRadius( topLeftX, topLeftY, m_radii[ Qt::TopLeftCorner ] );
qskSetRadius( topRightX, topRightY, m_radii[ Qt::TopRightCorner ] );
qskSetRadius( bottomLeftX, bottomLeftY, m_radii[ Qt::BottomLeftCorner ] );
qskSetRadius( bottomRightX, bottomRightY, m_radii[ Qt::BottomRightCorner ] );
}
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 ) )
{
m_radii[ corner ].setWidth( qMax( radiusX, 0.0 ) );
m_radii[ corner ].setHeight( qMax( radiusY, 0.0 ) );
}
qskSetRadius( radiusX, radiusY, m_radii[ corner ] );
}
bool QskBoxShapeMetrics::isRectellipse() const
{
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 QskBoxShapeMetrics::transposed() const noexcept
{
QskBoxShapeMetrics other;
@ -132,7 +66,7 @@ QskBoxShapeMetrics QskBoxShapeMetrics::rotated() const
return other;
}
QskBoxShapeMetrics QskBoxShapeMetrics::toAbsolute( const QSizeF& size ) const
QskBoxShapeMetrics QskBoxShapeMetrics::toAbsolute( const QSizeF& size ) const noexcept
{
if ( m_sizeMode != Qt::RelativeSize )
return *this;
@ -163,14 +97,14 @@ QskBoxShapeMetrics QskBoxShapeMetrics::toAbsolute( const QSizeF& size ) const
}
case Qt::KeepAspectRatio:
{
radii.setWidth( qMin( rx, ry ) );
radii.setHeight( qMin( rx, ry ) );
radii.setWidth( std::min( rx, ry ) );
radii.setHeight( std::min( rx, ry ) );
break;
}
case Qt::KeepAspectRatioByExpanding:
{
radii.setWidth( qMax( rx, ry ) );
radii.setHeight( qMax( rx, ry ) );
radii.setWidth( std::max( rx, ry ) );
radii.setHeight( std::max( rx, ry ) );
break;
}
}
@ -182,7 +116,7 @@ QskBoxShapeMetrics QskBoxShapeMetrics::toAbsolute( const QSizeF& size ) const
}
QskBoxShapeMetrics QskBoxShapeMetrics::interpolated(
const QskBoxShapeMetrics& to, qreal ratio ) const
const QskBoxShapeMetrics& to, qreal ratio ) const noexcept
{
if ( ( *this == to ) || ( m_sizeMode != to.m_sizeMode ) )
return to;
@ -197,12 +131,12 @@ QskBoxShapeMetrics QskBoxShapeMetrics::interpolated(
}
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 ) );
}
uint QskBoxShapeMetrics::hash( uint seed ) const
uint QskBoxShapeMetrics::hash( uint seed ) const noexcept
{
uint hash = qHashBits( m_radii, sizeof( m_radii ), seed );

View File

@ -18,67 +18,69 @@ class QMarginsF;
class QSK_EXPORT QskBoxShapeMetrics
{
public:
constexpr QskBoxShapeMetrics();
constexpr QskBoxShapeMetrics() noexcept;
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 );
QskBoxShapeMetrics( qreal radiusX, qreal radiusY, Qt::SizeMode = Qt::AbsoluteSize );
constexpr QskBoxShapeMetrics(
qreal radius, Qt::SizeMode = Qt::AbsoluteSize ) noexcept;
~QskBoxShapeMetrics();
constexpr QskBoxShapeMetrics( qreal radiusX, qreal radiusY,
Qt::SizeMode = Qt::AbsoluteSize ) noexcept;
bool operator==( const QskBoxShapeMetrics& ) const;
bool operator!=( const QskBoxShapeMetrics& ) const;
constexpr bool operator==( const QskBoxShapeMetrics& ) const noexcept;
constexpr bool operator!=( const QskBoxShapeMetrics& ) const noexcept;
void setRadius( qreal radius );
void setRadius( qreal radius, Qt::SizeMode );
void setRadius( Qt::Corner, qreal radius );
void setRadius( qreal radius ) noexcept;
void setRadius( qreal radius, Qt::SizeMode ) noexcept;
void setRadius( Qt::Corner, qreal radius ) noexcept;
void setRadius( qreal radiusX, qreal radiusY );
void setRadius( const QSizeF& );
void setRadius( Qt::Corner, qreal radiusX, qreal radiusY );
void setRadius( Qt::Corner, const QSizeF& radius );
void setRadius( qreal radiusX, qreal radiusY ) noexcept;
void setRadius( const QSizeF& ) noexcept;
void setRadius( Qt::Corner, qreal radiusX, qreal radiusY ) noexcept;
void setRadius( Qt::Corner, const QSizeF& radius ) noexcept;
void setRadius( qreal topLeft, qreal topRight,
qreal bottomLeft, qreal bottomRight );
qreal bottomLeft, qreal bottomRight ) noexcept;
void setRadius( const QSizeF& topLeft, const QSizeF& topRight,
const QSizeF& bottomLeft, const QSizeF& bottomRight );
const QSizeF& bottomLeft, const QSizeF& bottomRight ) noexcept;
void setRadius(
qreal topLeftX, qreal topLeftY,
qreal topRightX, qreal topRightY,
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;
bool isRectellipse() const;
constexpr bool isRectangle() const noexcept;
constexpr bool isRectellipse() const noexcept;
void setSizeMode( Qt::SizeMode );
Qt::SizeMode sizeMode() const;
void setSizeMode( Qt::SizeMode ) noexcept;
constexpr Qt::SizeMode sizeMode() const noexcept;
void setAspectRatioMode( Qt::AspectRatioMode );
Qt::AspectRatioMode aspectRatioMode() const;
void setAspectRatioMode( Qt::AspectRatioMode ) noexcept;
constexpr Qt::AspectRatioMode aspectRatioMode() const noexcept;
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&,
const QskBoxShapeMetrics&, qreal progress );
const QskBoxShapeMetrics&, qreal progress ) noexcept;
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_sizeMode( sizeMode )
, m_aspectRatioMode( Qt::KeepAspectRatio )
@ -90,20 +92,30 @@ class QSK_EXPORT QskBoxShapeMetrics
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_sizeMode( Qt::AbsoluteSize )
, 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 )
{
}
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,
qreal bottomLeft, qreal bottomRight, Qt::SizeMode sizeMode )
qreal bottomLeft, qreal bottomRight, Qt::SizeMode sizeMode ) noexcept
: m_radii{ { topLeft, topLeft }, { topRight, topRight },
{ bottomLeft, bottomLeft }, { bottomRight, bottomRight } }
, 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 );
}
inline void QskBoxShapeMetrics::setRadius( qreal radius )
inline void QskBoxShapeMetrics::setRadius( qreal radius ) noexcept
{
setRadius( radius, radius );
}
inline void QskBoxShapeMetrics::setRadius( qreal radius, Qt::SizeMode sizeMode )
inline void QskBoxShapeMetrics::setRadius( qreal radius, Qt::SizeMode sizeMode ) noexcept
{
setRadius( radius );
setSizeMode( sizeMode );
}
inline void QskBoxShapeMetrics::setRadius( qreal radiusX, qreal radiusY )
inline void QskBoxShapeMetrics::setRadius( qreal radiusX, qreal radiusY ) noexcept
{
setRadius( 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() );
}
inline void QskBoxShapeMetrics::setRadius( Qt::Corner corner, qreal radius )
inline void QskBoxShapeMetrics::setRadius( Qt::Corner corner, qreal radius ) noexcept
{
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() );
}
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,
bottomLeft, bottomLeft, bottomRight, bottomRight );
@ -157,7 +181,7 @@ inline void QskBoxShapeMetrics::setRadius(
inline void QskBoxShapeMetrics::setRadius(
const QSizeF& topLeft, const QSizeF& topRight,
const QSizeF& bottomLeft, const QSizeF& bottomRight )
const QSizeF& bottomLeft, const QSizeF& bottomRight ) noexcept
{
setRadius( topLeft.width(), topLeft.height(),
topRight.width(), topRight.height(),
@ -165,24 +189,47 @@ inline void QskBoxShapeMetrics::setRadius(
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 m_radii[ corner ];
return QSizeF();
return ( ( corner >= 0 ) && ( corner < 4 ) ) ? m_radii[ corner ] : 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;
}
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;
}
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
QSK_EXPORT QDebug operator<<( QDebug, const QskBoxShapeMetrics& );