Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_recalculate_transform_mask_job.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
10#include "kis_debug.h"
11#include "kis_layer.h"
12#include "kis_image.h"
16
18 : m_mask(mask)
19 , m_extraUpdateRect(extraUpdateRect)
20{
21 setExclusive(true);
22}
23
24
26{
27 const KisRecalculateTransformMaskJob *otherJob =
28 dynamic_cast<const KisRecalculateTransformMaskJob*>(_otherJob);
29
30 return otherJob && otherJob->m_mask == m_mask;
31}
32
34{
39 if (!m_mask->parent()) return;
40 if (!m_mask->visible()) return;
41 if (m_mask->staticImageCacheIsValid()) return;
42
43 const QRect oldMaskExtent = m_mask->extent();
45
46 KisLayerSP layer = qobject_cast<KisLayer*>(m_mask->parent().data());
47
48 if (!layer) {
49 warnKrita << "WARNING: KisRecalculateTransformMaskJob::run() Mask has no parent layer! Skipping projection update!";
50 return;
51 }
52
53 KisImageSP image = layer->image();
54 Q_ASSERT(image);
55
63 if (m_mask->transformParams()->isHidden()) {
64 QRect updateRect = m_mask->extent() | oldMaskExtent;
65
66 updateRect |= m_extraUpdateRect;
67
68 if (layer->original()) {
69 updateRect |= layer->original()->defaultBounds()->bounds();
70 }
71
72 if (layer->isAnimated()) {
73 m_mask->setDirty(updateRect);
74 } else {
76 }
77 } else {
84 QRect updateRect = oldMaskExtent |
85 layer->projectionPlane()->changeRect(layer->extent(), KisLayer::N_FILTHY);
86
87 updateRect |= m_extraUpdateRect;
88
89 // Should there be a case where this is flushed?
90 image->requestProjectionUpdate(layer.data(), {updateRect},
93 }
94}
95
97{
98 return 0;
99}
100
102{
103 QString result;
104 QDebug dbg(&result);
105 dbg << "KisRecalculateTransformMaskJob" << m_mask;
106 return result;
107}
virtual QRect bounds() const =0
void requestProjectionUpdate(KisNode *node, const QVector< QRect > &rects, KisProjectionUpdateFlags flags) override
KisDefaultBoundsBaseSP defaultBounds() const
bool overrides(const KisSpontaneousJob *otherJob) override
KisRecalculateTransformMaskJob(KisTransformMaskSP mask, const QRect &extraUpdateRect)
void setExclusive(bool value)
#define warnKrita
Definition kis_debug.h:87
KisImageWSP image
bool isAnimated() const
virtual bool visible(bool recursive=false) const
QRect extent() const override
KisPaintDeviceSP original() const override=0
KisLayerProjectionPlaneSP projectionPlane
Definition kis_layer.cc:174
void setDirtyDontResetAnimationCache()
Definition kis_node.cpp:599
@ N_FILTHY
Definition kis_node.h:61
KisNodeWSP parent
Definition kis_node.cpp:86
virtual void setDirty()
Definition kis_node.cpp:577
QRect extent() const override
KisTransformMaskParamsInterfaceSP transformParams() const
bool staticImageCacheIsValid() const