Krita Source Code Documentation
Loading...
Searching...
No Matches
KisSelectionUpdateCompressor.cpp
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2018 Dmitry Kazakov <dimula73@gmail.com>
3
*
4
* SPDX-License-Identifier: GPL-2.0-or-later
5
*/
6
7
8
#include "
KisSelectionUpdateCompressor.h
"
9
#include "
kis_image.h
"
10
#include "
kis_selection.h
"
11
#include "
kis_layer_utils.h
"
12
#include "
kis_update_selection_job.h
"
13
14
15
KisSelectionUpdateCompressor::KisSelectionUpdateCompressor
(
KisSelection
*selection)
16
: m_parentSelection(selection)
17
, m_updateSignalCompressor(new
KisThreadSafeSignalCompressor
(100,
KisSignalCompressor
::POSTPONE))
18
{
19
connect
(
m_updateSignalCompressor
, SIGNAL(timeout()),
this
, SLOT(
startUpdateJob
()));
20
21
this->moveToThread(
m_updateSignalCompressor
->thread());
22
}
23
24
KisSelectionUpdateCompressor::~KisSelectionUpdateCompressor
()
25
{
26
m_updateSignalCompressor
->deleteLater();
27
}
28
29
void
KisSelectionUpdateCompressor::requestUpdate
(
const
QRect &updateRect)
30
{
31
m_fullUpdateRequested
|= updateRect.isEmpty();
32
m_updateRect
= !
m_fullUpdateRequested
?
m_updateRect
| updateRect : QRect();
33
m_updateSignalCompressor
->
start
();
34
}
35
36
void
KisSelectionUpdateCompressor::tryProcessStalledUpdate
()
37
{
38
if
(
m_hasStalledUpdate
) {
39
m_updateSignalCompressor
->
start
();
40
}
41
}
42
43
void
KisSelectionUpdateCompressor::startUpdateJob
()
44
{
45
KisNodeSP
parentNode =
m_parentSelection
->
parentNode
();
46
if
(!parentNode) {
47
m_hasStalledUpdate
=
true
;
48
return
;
49
}
50
51
// FIXME: we cannot use parentNode->image() here because masks don't
52
// have the pointer initialized for some reason.
53
KisImageSP
image =
KisLayerUtils::findImageByHierarchy
(parentNode);
54
if
(!image) {
55
m_hasStalledUpdate
=
true
;
56
return
;
57
}
58
59
if
(image) {
60
image->
addSpontaneousJob
(
new
KisUpdateSelectionJob
(
m_parentSelection
,
m_updateRect
));
61
}
62
m_updateRect
= QRect();
63
m_fullUpdateRequested
=
false
;
64
m_hasStalledUpdate
=
false
;
65
}
KisSelectionUpdateCompressor.h
connect
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisImage::addSpontaneousJob
void addSpontaneousJob(KisSpontaneousJob *spontaneousJob)
Definition
kis_image.cc:2224
KisSelectionUpdateCompressor::m_updateSignalCompressor
KisThreadSafeSignalCompressor * m_updateSignalCompressor
Definition
KisSelectionUpdateCompressor.h:33
KisSelectionUpdateCompressor::tryProcessStalledUpdate
void tryProcessStalledUpdate()
Definition
KisSelectionUpdateCompressor.cpp:36
KisSelectionUpdateCompressor::~KisSelectionUpdateCompressor
~KisSelectionUpdateCompressor()
Definition
KisSelectionUpdateCompressor.cpp:24
KisSelectionUpdateCompressor::requestUpdate
void requestUpdate(const QRect &updateRect)
Definition
KisSelectionUpdateCompressor.cpp:29
KisSelectionUpdateCompressor::m_updateRect
QRect m_updateRect
Definition
KisSelectionUpdateCompressor.h:34
KisSelectionUpdateCompressor::m_parentSelection
KisSelection * m_parentSelection
Definition
KisSelectionUpdateCompressor.h:32
KisSelectionUpdateCompressor::m_hasStalledUpdate
bool m_hasStalledUpdate
Definition
KisSelectionUpdateCompressor.h:37
KisSelectionUpdateCompressor::startUpdateJob
void startUpdateJob()
Definition
KisSelectionUpdateCompressor.cpp:43
KisSelectionUpdateCompressor::KisSelectionUpdateCompressor
KisSelectionUpdateCompressor(KisSelection *selection)
Definition
KisSelectionUpdateCompressor.cpp:15
KisSelectionUpdateCompressor::m_fullUpdateRequested
bool m_fullUpdateRequested
Definition
KisSelectionUpdateCompressor.h:35
KisSharedPtr< KisNode >
KisSignalCompressor
Definition
kis_signal_compressor.h:49
KisThreadSafeSignalCompressor
Definition
kis_thread_safe_signal_compressor.h:28
KisThreadSafeSignalCompressor::start
void start()
Definition
kis_thread_safe_signal_compressor.cpp:35
KisUpdateSelectionJob
Definition
kis_update_selection_job.h:14
kis_image.h
kis_layer_utils.h
kis_selection.h
kis_update_selection_job.h
KisLayerUtils::findImageByHierarchy
KisImageSP findImageByHierarchy(KisNodeSP node)
Definition
kis_layer_utils.cpp:2263
KisSelection
Definition
kis_selection.cc:33
KisSelection::parentNode
KisNodeWSP parentNode
Definition
kis_selection.cc:46
libs
image
KisSelectionUpdateCompressor.cpp
Generated at
2025-11-04 02:30:02+01:00
from
Krita
branch
master
, commit
c9dde2e79561a8aea4a7e8d9ac99c98a7bac9e52