Krita Source Code Documentation
Loading...
Searching...
No Matches
KisStabilizerDelayedPaintHelper.cpp
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2016 Alvin Wong <alvinhochun-at-gmail-com>
3
*
4
* SPDX-License-Identifier: GPL-2.0-or-later
5
*/
6
7
#include "
KisStabilizerDelayedPaintHelper.h
"
8
9
constexpr
int
fixedPaintTimerInterval
= 20;
10
11
KisStabilizerDelayedPaintHelper::TimedPaintInfo::TimedPaintInfo
(
int
elapsedTime,
KisPaintInformation
paintInfo)
12
: elapsedTime(elapsedTime)
13
, paintInfo(paintInfo)
14
{
15
}
16
17
KisStabilizerDelayedPaintHelper::KisStabilizerDelayedPaintHelper
()
18
{
19
connect
(&
m_paintTimer
, SIGNAL(timeout()), SLOT(
stabilizerDelayedPaintTimer
()));
20
}
21
22
void
KisStabilizerDelayedPaintHelper::start
(
const
KisPaintInformation
&firstPaintInfo) {
23
if
(
running
()) {
24
cancel
();
25
}
26
m_paintTimer
.setInterval(
fixedPaintTimerInterval
);
27
m_paintTimer
.start();
28
m_elapsedTimer
.start();
29
m_lastPendingTime
=
m_elapsedTimer
.elapsed();
30
m_lastPaintTime
=
m_lastPendingTime
;
31
m_paintQueue
.enqueue(
TimedPaintInfo
(
m_lastPendingTime
, firstPaintInfo));
32
}
33
34
void
KisStabilizerDelayedPaintHelper::update
(
const
QVector<KisPaintInformation>
&newPaintInfos) {
35
int
now =
m_elapsedTimer
.elapsed();
36
int
delayedPaintInterval =
m_elapsedTimer
.elapsed() -
m_lastPendingTime
;
37
for
(
int
i = 0; i < newPaintInfos.size(); i++) {
38
// TODO: Risk of overflowing?
39
int
offsetTime = (delayedPaintInterval * i) / newPaintInfos.size();
40
m_paintQueue
.enqueue(
TimedPaintInfo
(now + offsetTime, newPaintInfos[i]));
41
}
42
m_lastPendingTime
= now;
43
}
44
45
void
KisStabilizerDelayedPaintHelper::paintSome
() {
46
// This function is also called from KisToolFreehandHelper::paint
47
m_lastPaintTime
=
m_elapsedTimer
.elapsed();
48
if
(
m_paintQueue
.isEmpty()) {
49
return
;
50
}
51
int
now =
m_lastPaintTime
;
52
// Always keep one in the queue since painting requires two points
53
while
(
m_paintQueue
.size() > 1 &&
m_paintQueue
.head().elapsedTime <= now) {
54
const
TimedPaintInfo
dequeued =
m_paintQueue
.dequeue();
55
m_paintLine
(dequeued.
paintInfo
,
m_paintQueue
.head().paintInfo);
56
}
57
}
58
59
void
KisStabilizerDelayedPaintHelper::end
() {
60
m_paintTimer
.stop();
61
m_elapsedTimer
.invalidate();
62
if
(
m_paintQueue
.isEmpty()) {
63
return
;
64
}
65
TimedPaintInfo
dequeued =
m_paintQueue
.dequeue();
66
while
(!
m_paintQueue
.isEmpty()) {
67
const
TimedPaintInfo
dequeued2 =
m_paintQueue
.dequeue();
68
m_paintLine
(dequeued.
paintInfo
, dequeued2.
paintInfo
);
69
dequeued = dequeued2;
70
}
71
}
72
73
void
KisStabilizerDelayedPaintHelper::cancel
() {
74
m_paintTimer
.stop();
75
m_paintQueue
.clear();
76
}
77
78
void
KisStabilizerDelayedPaintHelper::stabilizerDelayedPaintTimer
() {
79
if
(
m_elapsedTimer
.elapsed() -
m_lastPaintTime
<
fixedPaintTimerInterval
) {
80
return
;
81
}
82
paintSome
();
83
// Explicitly update the outline because this is outside the pointer event
84
m_requestUpdateOutline
();
85
}
fixedPaintTimerInterval
constexpr int fixedPaintTimerInterval
Definition
KisStabilizerDelayedPaintHelper.cpp:9
KisStabilizerDelayedPaintHelper.h
connect
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisPaintInformation
Definition
kis_paint_information.h:51
KisStabilizerDelayedPaintHelper::running
bool running() const
Definition
KisStabilizerDelayedPaintHelper.h:45
KisStabilizerDelayedPaintHelper::m_lastPaintTime
int m_lastPaintTime
Definition
KisStabilizerDelayedPaintHelper.h:34
KisStabilizerDelayedPaintHelper::KisStabilizerDelayedPaintHelper
KisStabilizerDelayedPaintHelper()
Definition
KisStabilizerDelayedPaintHelper.cpp:17
KisStabilizerDelayedPaintHelper::update
void update(const QVector< KisPaintInformation > &newPaintInfos)
Definition
KisStabilizerDelayedPaintHelper.cpp:34
KisStabilizerDelayedPaintHelper::m_lastPendingTime
int m_lastPendingTime
Definition
KisStabilizerDelayedPaintHelper.h:33
KisStabilizerDelayedPaintHelper::m_requestUpdateOutline
std::function< void()> m_requestUpdateOutline
Definition
KisStabilizerDelayedPaintHelper.h:39
KisStabilizerDelayedPaintHelper::m_paintLine
std::function< void(const KisPaintInformation &, const KisPaintInformation &) m_paintLine)
Definition
KisStabilizerDelayedPaintHelper.h:38
KisStabilizerDelayedPaintHelper::m_paintQueue
QQueue< TimedPaintInfo > m_paintQueue
Definition
KisStabilizerDelayedPaintHelper.h:32
KisStabilizerDelayedPaintHelper::cancel
void cancel()
Definition
KisStabilizerDelayedPaintHelper.cpp:73
KisStabilizerDelayedPaintHelper::m_paintTimer
QTimer m_paintTimer
Definition
KisStabilizerDelayedPaintHelper.h:31
KisStabilizerDelayedPaintHelper::stabilizerDelayedPaintTimer
void stabilizerDelayedPaintTimer()
Definition
KisStabilizerDelayedPaintHelper.cpp:78
KisStabilizerDelayedPaintHelper::m_elapsedTimer
QElapsedTimer m_elapsedTimer
Definition
KisStabilizerDelayedPaintHelper.h:35
KisStabilizerDelayedPaintHelper::start
void start(const KisPaintInformation &firstPaintInfo)
Definition
KisStabilizerDelayedPaintHelper.cpp:22
KisStabilizerDelayedPaintHelper::paintSome
void paintSome()
Definition
KisStabilizerDelayedPaintHelper.cpp:45
KisStabilizerDelayedPaintHelper::end
void end()
Definition
KisStabilizerDelayedPaintHelper.cpp:59
QList
Definition
KisQStringListFwd.h:16
KisStabilizerDelayedPaintHelper::TimedPaintInfo
Definition
KisStabilizerDelayedPaintHelper.h:25
KisStabilizerDelayedPaintHelper::TimedPaintInfo::TimedPaintInfo
TimedPaintInfo(int elapsedTime, KisPaintInformation paintInfo)
Definition
KisStabilizerDelayedPaintHelper.cpp:11
KisStabilizerDelayedPaintHelper::TimedPaintInfo::paintInfo
KisPaintInformation paintInfo
Definition
KisStabilizerDelayedPaintHelper.h:27
libs
ui
tool
KisStabilizerDelayedPaintHelper.cpp
Generated at
2025-11-04 02:30:02+01:00
from
Krita
branch
master
, commit
c9dde2e79561a8aea4a7e8d9ac99c98a7bac9e52