Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_stabilized_events_sampler.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2016 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include <QList>
10#include <QElapsedTimer>
11#include <QtMath>
12
14
15
27
29 : m_d(new Private(sampleTime))
30{
31}
32
36
38{
39 if (!m_d->realEvents.isEmpty()) {
40 m_d->lastPaintInformation = m_d->realEvents.last();
41 }
42
43 m_d->realEvents.clear();
44 m_d->lastPaintTime.start();
45}
46
48{
49 if (!m_d->lastPaintTime.isValid()) {
50 m_d->lastPaintTime.start();
51 }
52
53 m_d->realEvents.append(pi);
54}
55
57{
58 if (m_d->realEvents.size() > 0) {
59 dbgKrita << "DEBUG: KisStabilizedEventsSampler::addFinishingEvent called "
60 "before `realEvents` is cleared";
61 clear();
62 }
63
64 m_d->elapsedTimeOverride = numSamples;
65 m_d->realEvents.append(m_d->lastPaintInformation);
66}
67
69{
70 const int k = qFloor(m_alpha * m_index);
71 return k < m_sampler->m_d->realEvents.size() ?
72 m_sampler->m_d->realEvents[k] : m_sampler->m_d->lastPaintInformation;
73}
74
75std::pair<KisStabilizedEventsSampler::iterator, KisStabilizedEventsSampler::iterator>
77{
78 const int elapsed = (m_d->lastPaintTime.restart() + m_d->elapsedTimeOverride) / m_d->sampleTime;
79 const qreal alpha = qreal(m_d->realEvents.size()) / elapsed;
80
81 m_d->elapsedTimeOverride = 0;
82
83 return std::make_pair(iterator(this, 0, alpha),
84 iterator(this, elapsed, alpha));
85}
86
87
const KisPaintInformation & dereference() const
const KisStabilizedEventsSampler * m_sampler
void addEvent(const KisPaintInformation &pi)
std::pair< iterator, iterator > range() const
const QScopedPointer< Private > m_d
#define dbgKrita
Definition kis_debug.h:45