Krita Source Code Documentation
Loading...
Searching...
No Matches
KisLayerStyleKnockoutBlower.cpp
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2019 Dmitry Kazakov <dimula73@gmail.com>
3
*
4
* SPDX-License-Identifier: GPL-2.0-or-later
5
*/
6
#include "
KisLayerStyleKnockoutBlower.h
"
7
8
#include "
kis_painter.h
"
9
#include "
KoCompositeOpRegistry.h
"
10
#include "
kis_default_bounds.h
"
11
#include "
KisImageResolutionProxy.h
"
12
13
14
KisLayerStyleKnockoutBlower::KisLayerStyleKnockoutBlower
()
15
{
16
}
17
18
KisLayerStyleKnockoutBlower::KisLayerStyleKnockoutBlower
(
const
KisLayerStyleKnockoutBlower
&rhs)
19
: m_knockoutSelection(rhs.m_knockoutSelection ? new
KisSelection
(*rhs.m_knockoutSelection) : nullptr)
20
{
21
}
22
23
KisSelectionSP
KisLayerStyleKnockoutBlower::knockoutSelectionLazy
()
24
{
25
{
26
QReadLocker l(&
m_lock
);
27
if
(
m_knockoutSelection
) {
28
return
m_knockoutSelection
;
29
}
30
}
31
32
{
33
QWriteLocker l(&
m_lock
);
34
if
(
m_knockoutSelection
) {
35
return
m_knockoutSelection
;
36
}
else
{
37
m_knockoutSelection
=
new
KisSelection
(
new
KisSelectionEmptyBounds
(),
38
KisImageResolutionProxy::identity
());
39
return
m_knockoutSelection
;
40
}
41
}
42
}
43
44
void
KisLayerStyleKnockoutBlower::setKnockoutSelection
(
KisSelectionSP
selection)
45
{
46
QWriteLocker l(&
m_lock
);
47
m_knockoutSelection
= selection;
48
}
49
50
void
KisLayerStyleKnockoutBlower::resetKnockoutSelection
()
51
{
52
QWriteLocker l(&
m_lock
);
53
m_knockoutSelection
= 0;
54
}
55
56
void
KisLayerStyleKnockoutBlower::apply
(
KisPainter
*painter,
KisPaintDeviceSP
mergedStyle,
const
QRect &
rect
)
const
57
{
58
QReadLocker l(&
m_lock
);
59
60
KIS_SAFE_ASSERT_RECOVER_NOOP
(
m_knockoutSelection
);
61
62
painter->
setOpacityToUnit
();
63
painter->
setChannelFlags
(QBitArray());
64
painter->
setCompositeOpId
(
COMPOSITE_COPY
);
65
painter->
setSelection
(
m_knockoutSelection
);
66
painter->
bitBlt
(
rect
.topLeft(), mergedStyle,
rect
);
67
painter->
setSelection
(0);
68
}
69
70
bool
KisLayerStyleKnockoutBlower::isEmpty
()
const
71
{
72
QReadLocker l(&
m_lock
);
73
return
!
m_knockoutSelection
;
74
}
KisImageResolutionProxy.h
KisLayerStyleKnockoutBlower.h
KoCompositeOpRegistry.h
COMPOSITE_COPY
const QString COMPOSITE_COPY
Definition
KoCompositeOpRegistry.h:155
KisImageResolutionProxy::identity
static KisImageResolutionProxySP identity()
Definition
KisImageResolutionProxy.cpp:112
KisLayerStyleKnockoutBlower
Definition
KisLayerStyleKnockoutBlower.h:16
KisLayerStyleKnockoutBlower::setKnockoutSelection
void setKnockoutSelection(KisSelectionSP selection)
Definition
KisLayerStyleKnockoutBlower.cpp:44
KisLayerStyleKnockoutBlower::m_lock
QReadWriteLock m_lock
Definition
KisLayerStyleKnockoutBlower.h:31
KisLayerStyleKnockoutBlower::isEmpty
bool isEmpty() const
Definition
KisLayerStyleKnockoutBlower.cpp:70
KisLayerStyleKnockoutBlower::KisLayerStyleKnockoutBlower
KisLayerStyleKnockoutBlower()
Definition
KisLayerStyleKnockoutBlower.cpp:14
KisLayerStyleKnockoutBlower::m_knockoutSelection
KisSelectionSP m_knockoutSelection
Definition
KisLayerStyleKnockoutBlower.h:32
KisLayerStyleKnockoutBlower::knockoutSelectionLazy
KisSelectionSP knockoutSelectionLazy()
Definition
KisLayerStyleKnockoutBlower.cpp:23
KisLayerStyleKnockoutBlower::resetKnockoutSelection
void resetKnockoutSelection()
Definition
KisLayerStyleKnockoutBlower.cpp:50
KisLayerStyleKnockoutBlower::apply
void apply(KisPainter *painter, KisPaintDeviceSP mergedStyle, const QRect &rect) const
Definition
KisLayerStyleKnockoutBlower.cpp:56
KisPainter
Definition
kis_painter.h:66
KisPainter::setSelection
void setSelection(KisSelectionSP selection)
Definition
kis_painter.cc:2753
KisPainter::bitBlt
void bitBlt(qint32 dstX, qint32 dstY, const KisPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
Definition
kis_painter.cc:822
KisPainter::setOpacityToUnit
void setOpacityToUnit()
Definition
kis_painter.cc:2729
KisPainter::setChannelFlags
void setChannelFlags(QBitArray channelFlags)
Definition
kis_painter.cc:2575
KisPainter::setCompositeOpId
void setCompositeOpId(const KoCompositeOp *op)
Definition
kis_painter.cc:2735
KisSelectionEmptyBounds
Definition
kis_default_bounds.h:72
KisSharedPtr< KisSelection >
KIS_SAFE_ASSERT_RECOVER_NOOP
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition
kis_assert.h:130
kis_default_bounds.h
kis_painter.h
KisSelection
Definition
kis_selection.cc:33
rect
Definition
xcftools.h:129
libs
image
layerstyles
KisLayerStyleKnockoutBlower.cpp
Generated at
2025-11-04 02:30:02+01:00
from
Krita
branch
master
, commit
c9dde2e79561a8aea4a7e8d9ac99c98a7bac9e52