diff --git a/src/common/QskGradientStop.cpp b/src/common/QskGradientStop.cpp index ab255c67..a2a73d95 100644 --- a/src/common/QskGradientStop.cpp +++ b/src/common/QskGradientStop.cpp @@ -273,6 +273,25 @@ QskGradientStops qskInterpolatedGradientStops( return qskInterpolatedStops( from, to, ratio ); } +QColor qskInterpolatedColorAt( const QskGradientStops& stops, qreal pos ) noexcept +{ + if ( stops.isEmpty() ) + return QColor(); + + pos = qBound( 0.0, pos, 1.0 ); + + if ( pos <= stops.first().position() ) + return stops.first().color(); + + for ( int i = 1; i < stops.count(); i++ ) + { + if ( pos <= stops[i].position() ) + return qskInterpolatedColor( stops, i - 1, i, pos ); + } + + return stops.last().color(); +} + QskGradientStops qskExtractedGradientStops( const QskGradientStops& stops, qreal from, qreal to ) { @@ -421,4 +440,3 @@ QGradientStops qskToQGradientStops( const QskGradientStops& stops ) return qStops; } - diff --git a/src/common/QskGradientStop.h b/src/common/QskGradientStop.h index 2b265d66..d115be62 100644 --- a/src/common/QskGradientStop.h +++ b/src/common/QskGradientStop.h @@ -120,6 +120,8 @@ QSK_EXPORT QDebug operator<<( QDebug, const QskGradientStop& ); typedef QVector< QskGradientStop > QskGradientStops; +QSK_EXPORT QColor qskInterpolatedColorAt( const QskGradientStops&, qreal pos ) noexcept; + QSK_EXPORT bool qskIsMonochrome( const QskGradientStops& ) noexcept; QSK_EXPORT bool qskIsVisible( const QskGradientStops& ) noexcept;