reducing the memory used for QskGradient

This commit is contained in:
Uwe Rathmann 2022-12-22 17:50:19 +01:00
parent 4670e3b5d3
commit 6ce73136ce
2 changed files with 28 additions and 13 deletions

View File

@ -77,26 +77,31 @@ static inline QTransform qskTransformForRect( int stretch, const QRectF& rect )
} }
QskGradient::QskGradient( const QColor& color ) QskGradient::QskGradient( const QColor& color )
: QskGradient()
{ {
setStops( color ); setStops( color );
} }
QskGradient::QskGradient( const QColor& color1, const QColor& color2 ) QskGradient::QskGradient( const QColor& color1, const QColor& color2 )
: QskGradient()
{ {
setStops( color1, color2 ); setStops( color1, color2 );
} }
QskGradient::QskGradient( QGradient::Preset preset ) QskGradient::QskGradient( QGradient::Preset preset )
: QskGradient()
{ {
setStops( qskBuildGradientStops( QGradient( preset ).stops() ) ); setStops( qskBuildGradientStops( QGradient( preset ).stops() ) );
} }
QskGradient::QskGradient( const QVector< QskGradientStop >& stops ) QskGradient::QskGradient( const QVector< QskGradientStop >& stops )
: QskGradient()
{ {
setStops( stops ); setStops( stops );
} }
QskGradient::QskGradient( const QGradient& qGradient ) QskGradient::QskGradient( const QGradient& qGradient )
: QskGradient()
{ {
switch( qGradient.type() ) switch( qGradient.type() )
{ {
@ -421,8 +426,7 @@ void QskGradient::stretchTo( const QRectF& rect )
transform.map( m_values[0], m_values[1], &m_values[0], &m_values[1] ); transform.map( m_values[0], m_values[1], &m_values[0], &m_values[1] );
#if 1 #if 1
const auto radius = transform.map( QPointF( m_values[2], m_values[2] ) ); m_values[2] *= qMin( rect.width(), rect.height() );
m_values[2] = qMin( radius.x(), radius.y() );
#endif #endif
break; break;

View File

@ -69,7 +69,7 @@ class QSK_EXPORT QskGradient
}; };
Q_ENUM( StretchMode ) Q_ENUM( StretchMode )
QskGradient() noexcept = default; QskGradient() noexcept;
QskGradient( Qt::GlobalColor ); QskGradient( Qt::GlobalColor );
QskGradient( QRgb ); QskGradient( QRgb );
@ -177,18 +177,29 @@ class QSK_EXPORT QskGradient
*/ */
qreal m_values[4] = {}; qreal m_values[4] = {};
Type m_type = Stops; unsigned int m_type : 3;
SpreadMode m_spreadMode = PadSpread; unsigned int m_spreadMode : 3;
StretchMode m_stretchMode = StretchToSize; unsigned int m_stretchMode : 3;
mutable bool m_isDirty = false; mutable bool m_isDirty : 1;
mutable bool m_isValid = false; mutable bool m_isValid : 1;
mutable bool m_isMonchrome = true; mutable bool m_isMonchrome : 1;
mutable bool m_isVisible = false; mutable bool m_isVisible : 1;
}; };
Q_DECLARE_METATYPE( QskGradient ) Q_DECLARE_METATYPE( QskGradient )
inline QskGradient::QskGradient() noexcept
: m_type( Stops )
, m_spreadMode( PadSpread )
, m_stretchMode( StretchToSize )
, m_isDirty( false )
, m_isValid( false )
, m_isMonchrome( true )
, m_isVisible( false )
{
}
inline QskGradient::QskGradient( Qt::GlobalColor color ) inline QskGradient::QskGradient( Qt::GlobalColor color )
: QskGradient( QColor( color ) ) : QskGradient( QColor( color ) )
{ {
@ -206,7 +217,7 @@ inline bool QskGradient::operator!=( const QskGradient& other ) const noexcept
inline QskGradient::Type QskGradient::type() const noexcept inline QskGradient::Type QskGradient::type() const noexcept
{ {
return m_type; return static_cast< Type >( m_type );
} }
inline const QskGradientStops& QskGradient::stops() const noexcept inline const QskGradientStops& QskGradient::stops() const noexcept
@ -255,12 +266,12 @@ inline QRgb QskGradient::rgbEnd() const
inline QskGradient::SpreadMode QskGradient::spreadMode() const noexcept inline QskGradient::SpreadMode QskGradient::spreadMode() const noexcept
{ {
return m_spreadMode; return static_cast< SpreadMode >( m_spreadMode );
} }
inline QskGradient::StretchMode QskGradient::stretchMode() const noexcept inline QskGradient::StretchMode QskGradient::stretchMode() const noexcept
{ {
return m_stretchMode; return static_cast< StretchMode >( m_stretchMode );
} }
#ifndef QT_NO_DEBUG_STREAM #ifndef QT_NO_DEBUG_STREAM