Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_idle_watcher.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include "kis_idle_watcher.h"
8
9#include <QTimer>
10#include "kis_image.h"
13
14
43
44KisIdleWatcher::KisIdleWatcher(int delay, QObject *parent)
45 : QObject(parent), m_d(new Private(delay, this))
46{
47 connect(&m_d->imageModifiedCompressor, SIGNAL(timeout()), SLOT(startIdleCheck()));
48 connect(&m_d->idleCheckTimer, SIGNAL(timeout()), SLOT(slotIdleCheckTick()));
49}
50
54
56{
57 bool idle = true;
58
59 Q_FOREACH (KisImageSP image, m_d->trackedImages) {
60 if (!image) continue;
61
62 if (!image->isIdle()) {
63 idle = false;
64 break;
65 }
66 }
67
68 return idle;
69}
70
72{
73 return m_d->idleCheckTimer.isActive();
74}
75
77{
78 m_d->connectionsStore.clear();
79 m_d->trackedImages.clear();
80
81 Q_FOREACH (KisImageSP image, images) {
82 if (image) {
83 m_d->trackedImages << image;
84 m_d->connectionsStore.addConnection(image, SIGNAL(sigImageModified()),
85 this, SLOT(slotImageModified()));
86
87 m_d->connectionsStore.addConnection(image, SIGNAL(sigIsolatedModeChanged()),
88 this, SLOT(slotImageModified()));
89 }
90 }
91}
92
94{
96 images << image;
97 setTrackedImages(images);
98}
99
101{
103 m_d->imageModifiedCompressor.start();
104}
105
107{
109 m_d->idleCheckCounter = -1;
110 m_d->idleCheckTimer.start();
111}
112
114{
115 if (m_d->idleCheckCounter >= 0) {
117 }
118 Q_EMIT imageModified();
119}
120
122{
123 m_d->idleCheckCounter = 0;
124 m_d->idleCheckTimer.start();
125}
126
128{
129 m_d->idleCheckTimer.stop();
130 m_d->idleCheckCounter = 0;
131}
132
134{
135 if (isIdle()) {
136 if (m_d->idleCheckCounter < 0 ||
137 m_d->idleCheckCounter >= Private::IDLE_CHECK_COUNT) {
138
140 if (!m_d->trackedImages.isEmpty()) {
141 Q_EMIT startedIdleMode();
142 }
143 } else {
144 m_d->idleCheckCounter++;
145 m_d->idleCheckTimer.start();
146 }
147 } else {
148 if (m_d->idleCheckCounter >= 0) {
150 } else {
151 m_d->idleCheckTimer.start();
152 }
153 }
154}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisIdleWatcher(int delay=200, QObject *parent=0)
void imageModified()
const QScopedPointer< Private > m_d
void startedIdleMode()
~KisIdleWatcher() override
bool isCounting() const
void setTrackedImages(const QVector< KisImageSP > &images)
void setTrackedImage(KisImageSP image)
bool isIdle() const
bool isIdle(bool allowLocked=false)
Definition kis_image.cc:788
static const int IDLE_CHECK_COUNT
KisSignalAutoConnectionsStore connectionsStore
QVector< KisImageWSP > trackedImages
Private(int delay, KisIdleWatcher *q)
KisSignalCompressor imageModifiedCompressor