[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/libs/resources
From: Sven Langkamp <sven.langkamp () gmail ! com>
Date: 2007-12-29 15:42:13
Message-ID: 1198942933.617938.25345.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 754325 by langkamp:
added colorAt to KoAbstractGradient so that Krita can paint all gradients
M +5 -0 KoAbstractGradient.cpp
M +2 -0 KoAbstractGradient.h
M +39 -0 KoStopGradient.cpp
M +2 -0 KoStopGradient.h
--- trunk/koffice/libs/resources/KoAbstractGradient.cpp #754324:754325
@@ -37,6 +37,11 @@
delete d;
}
+void KoAbstractGradient::colorAt(KoColor&, double t) const
+{
+ Q_UNUSED(t);
+}
+
void KoAbstractGradient::setColorSpace(KoColorSpace* colorSpace)
{
d->colorSpace = colorSpace;
--- trunk/koffice/libs/resources/KoAbstractGradient.h #754324:754325
@@ -37,6 +37,8 @@
virtual QGradient* toQGradient() const { return new QGradient(); }
+ virtual void colorAt(KoColor&, double t) const;
+
void setColorSpace(KoColorSpace* colorSpace);
const KoColorSpace * colorSpace() const;
--- trunk/koffice/libs/resources/KoStopGradient.cpp #754324:754325
@@ -20,6 +20,8 @@
#include "KoStopGradient.h"
+#include <cfloat>
+
#include <QColor>
#include <QFile>
#include <QDomDocument>
@@ -147,6 +149,43 @@
return gradient;
}
+void KoStopGradient::colorAt(KoColor& dst, double t) const
+{
+ QList<KoGradientStop>::const_iterator iter = m_stops.begin();
+ while( (iter != m_stops.end() || (iter+1) != m_stops.end()) && ( t > (iter+1)->first + DBL_EPSILON))
+ iter++;
+
+ if(iter == m_stops.end() || (iter+1) == m_stops.end()) {
+ dst.fromKoColor(m_stops.last().second);
+ }
+ else {
+ KoColor buffer(colorSpace());
+
+ KoGradientStop leftStop = *iter;
+ KoGradientStop rightStop = *(iter+1);
+
+ const quint8 *colors[2];
+ colors[0] = leftStop.second.data();
+ colors[1] = rightStop.second.data();
+
+ double localT;
+ double stopDistance = rightStop.first - leftStop.first;
+ if (stopDistance < DBL_EPSILON) {
+ localT = 0.5;
+ }
+ else {
+ localT = (t - leftStop.first)/stopDistance;
+ }
+ quint8 colorWeights[2];
+ colorWeights[0] = static_cast<quint8>((1.0 - localT) * 255 + 0.5);
+ colorWeights[1] = 255 - colorWeights[0];
+
+ colorSpace()->mixColorsOp()->mixColors(colors, colorWeights, 2, buffer.data());
+
+ dst.fromKoColor(buffer);
+ }
+}
+
KoStopGradient * KoStopGradient::fromQGradient( QGradient * gradient )
{
if( ! gradient )
--- trunk/koffice/libs/resources/KoStopGradient.h #754324:754325
@@ -46,6 +46,8 @@
virtual QGradient* toQGradient() const;
+ void colorAt(KoColor&, double t) const;
+
/// Creates KoStopGradient from a QGradient
static KoStopGradient * fromQGradient( QGradient * gradient );
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic