39 m_d->timeSmoothWindow = timeSmoothWindow;
58 if (lastSample.
time >= time) {
59 lastSample.
distance = newStrokeDistance;
68 m_d->addSampleImpl(pt, time);
69 m_d->purgeOldSamples();
75 const int lastSampleTime = !
m_d->samples.isEmpty() ?
m_d->samples.last().time : 0;
77 const int timeSmoothBase = qMin(lastSampleTime, time);
78 const qreal timeSmoothStep = qreal(time - timeSmoothBase) / points.size();
80 for (
int i = 0; i < points.size(); i++) {
81 const int sampleTime = timeSmoothBase + timeSmoothStep * (i + 1);
82 m_d->addSampleImpl(points[i], sampleTime);
85 m_d->purgeOldSamples();
91 if (
m_d->samples.isEmpty())
return 0;
95 const int timeDiff = lastSample.
time -
m_d->startTime;
96 if (!timeDiff)
return 0;
100 return lastSample.
distance / timeDiff;
105 if (samples.size() <= 1)
return;
109 auto lastValueToKeep = samples.end();
111 for (
auto it = samples.begin(); it != samples.end(); ++it) {
114 if (lastSample.
time - it->time < timeSmoothWindow)
break;
115 lastValueToKeep = it;
118 if (lastValueToKeep != samples.begin() &&
119 lastValueToKeep != samples.end()) {
121 samples.erase(samples.begin(), lastValueToKeep - 1);
127 if (
m_d->samples.size() <= 1)
return 0;
132 const int timeDiff = lastSample.
time - firstSample.
time;
133 if (!timeDiff)
return 0;
142 return m_d->maxSpeed;
147 m_d->samples.clear();
148 m_d->lastSamplePos = QPointF();
155 if (
m_d->samples.size() <= 1)
return;
160 const int timeDiff = lastSample.
time - firstSample.
time;
161 if (timeDiff < m_d->timeSmoothWindow)
return;
164 if (speed >
m_d->maxSpeed) {
165 m_d->maxSpeed = speed;
KisStrokeSpeedMeasurer(int timeSmoothWindow)
void addSample(const QPointF &pt, int time)
~KisStrokeSpeedMeasurer()
void addSamples(const QVector< QPointF > &points, int time)
qreal currentSpeed() const
const QScopedPointer< Private > m_d
qreal averageSpeed() const
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
qreal kisDistance(const QPointF &pt1, const QPointF &pt2)
StrokeSample(int _time, qreal _distance)
QList< StrokeSample > samples
void addSampleImpl(const QPointF &pt, int time)