Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_layer_style_filter_projection_plane.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
8
9#include "filter/kis_filter.h"
14#include "kis_psd_layer_style.h"
15
16
17#include "kis_painter.h"
20
21
23{
24 Private(KisLayer *_sourceLayer)
25 : sourceLayer(_sourceLayer),
27 {
28 KIS_SAFE_ASSERT_RECOVER_NOOP(_sourceLayer);
29 }
30
31 Private(const Private &rhs, KisLayer *_sourceLayer, KisPSDLayerStyleSP clonedStyle)
32 : sourceLayer(_sourceLayer),
33 filter(rhs.filter ? rhs.filter->clone() : 0),
34 style(clonedStyle),
38 {
39 KIS_SAFE_ASSERT_RECOVER_NOOP(_sourceLayer);
40 }
41
42
44
45 QScopedPointer<KisLayerStyleFilter> filter;
47 QScopedPointer<KisLayerStyleFilterEnvironment> environment;
49
51};
52
58
60 : m_d(new Private(*rhs.m_d, sourceLayer, clonedStyle))
61{
62}
63
67
69{
70 m_d->filter.reset(filter);
71 m_d->style = style;
72}
73
74QRect KisLayerStyleFilterProjectionPlane::recalculate(const QRect& rect, KisNodeSP filthyNode, KisRenderPassFlags flags)
75{
76 Q_UNUSED(filthyNode);
77 Q_UNUSED(flags);
78
79 if (!m_d->sourceLayer || !m_d->filter) {
80 warnKrita << "KisLayerStyleFilterProjectionPlane::recalculate(): [BUG] is not initialized";
81 return QRect();
82 }
83
84 m_d->projection.clear(rect);
85 m_d->filter->processDirectly(m_d->sourceLayer->projection(),
86 &m_d->projection,
87 &m_d->knockoutBlower,
88 rect,
89 m_d->style,
90 m_d->environment.data());
91 return rect;
92}
93
95{
96 m_d->projection.apply(painter->device(), rect, m_d->environment.data());
97}
98
100{
101 return m_d->projection.getLodCapableDevices();
102}
103
105{
106 return m_d->projection.isEmpty();
107}
108
113
115{
116 return m_d->filter.data();
117}
118
123
125{
126 if (!m_d->sourceLayer || !m_d->filter) {
127 warnKrita << "KisLayerStyleFilterProjectionPlane::needRect(): [BUG] is not initialized";
128 return rect;
129 }
130
132 return m_d->filter->neededRect(rect, m_d->style, m_d->environment.data());
133}
134
136{
137 if (!m_d->sourceLayer || !m_d->filter) {
138 warnKrita << "KisLayerStyleFilterProjectionPlane::changeRect(): [BUG] is not initialized";
139 return rect;
140 }
141
143 return m_d->filter->changedRect(rect, m_d->style, m_d->environment.data());
144}
145
147{
148 return needRect(rect, pos);
149}
150
155
157{
159 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(m_d->sourceLayer, QRect());
160
161 return m_d->filter->changedRect(m_d->sourceLayer->exactBounds(),
162 m_d->style,
163 m_d->environment.data());
164}
165
167{
169 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(m_d->sourceLayer, QRect());
170
171 return m_d->filter->changedRect(m_d->sourceLayer->extent(),
172 m_d->style,
173 m_d->environment.data());
174}
QRect changeRect(const QRect &rect, KisLayer::PositionToFilthy pos) const override
void apply(KisPainter *painter, const QRect &rect) override
void setStyle(KisLayerStyleFilter *filter, KisPSDLayerStyleSP style)
QRect needRect(const QRect &rect, KisLayer::PositionToFilthy pos) const override
QRect recalculate(const QRect &rect, KisNodeSP filthyNode, KisRenderPassFlags flags) override
QRect needRectForOriginal(const QRect &rect) const override
QRect accessRect(const QRect &rect, KisLayer::PositionToFilthy pos) const override
KisPaintDeviceSP device
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129
#define KIS_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:97
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130
#define warnKrita
Definition kis_debug.h:87
Private(const Private &rhs, KisLayer *_sourceLayer, KisPSDLayerStyleSP clonedStyle)
QScopedPointer< KisLayerStyleFilterEnvironment > environment
PositionToFilthy
Definition kis_node.h:58
@ N_ABOVE_FILTHY
Definition kis_node.h:59