Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_adjustment_layer.cc
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org>
3 * SPDX-FileCopyrightText: 2005 C. Boemann <cbo@boemann.dk>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
9
10#include <klocalizedstring.h>
11#include "kis_debug.h"
12
13#include <KoIcon.h>
14#include <kis_icon.h>
16
17#include "kis_image.h"
18#include "kis_selection.h"
21#include "filter/kis_filter.h"
22#include "kis_node_visitor.h"
24
25
27 const QString &name,
29 KisSelectionSP selection)
30 : KisSelectionBasedLayer(image.data(), name, selection, kfc)
31{
32 // by default Adjustment Layers have a copy composition,
33 // which is more natural for users
34 // https://bugs.kde.org/show_bug.cgi?id=324505
35 // https://bugs.kde.org/show_bug.cgi?id=294122
36 // demand the opposite from each other...
37 //
38 // also see a comment in KisLayerUtils::mergeMultipleLayersImpl()
39
42}
43
48
49
53
54void KisAdjustmentLayer::setFilter(KisFilterConfigurationSP filterConfig, bool checkCompareConfig)
55{
56 filterConfig->setChannelFlags(channelFlags());
57 KisSelectionBasedLayer::setFilter(filterConfig, checkCompareConfig);
58}
59
61{
62 KisFilterConfigurationSP filterConfig = filter();
63
64 QRect filteredRect = rect;
65
66 if (filterConfig) {
67 KisFilterSP filter = KisFilterRegistry::instance()->value(filterConfig->name());
68 filteredRect = filter->changedRect(rect, filterConfig.data(), projection()->defaultBounds()->currentLevelOfDetail());
69 }
70
79 return filteredRect;
80}
81
83{
84 Q_UNUSED(pos);
85
86 KisFilterConfigurationSP filterConfig = filter();
87 if (!filterConfig) return rect;
88 KisFilterSP filter = KisFilterRegistry::instance()->value(filterConfig->name());
89
98 QRect needRect = rect;
100 needRect = filter->neededRect(needRect, filterConfig.data(), projection()->defaultBounds()->currentLevelOfDetail());
101 return needRect;
102}
103
105{
106 return v.visit(this);
107}
108
110{
111 return visitor.visit(this, undoAdapter);
112}
113
115{
116 return KisIconUtils::loadIcon("filterLayer");
117}
118
120{
121 KisFilterConfigurationSP filterConfig = filter();
123 if (filterConfig)
124 l << KisBaseNode::Property(KoID("filter", i18nc("property of a filter layer, noun", "Filter")), KisFilterRegistry::instance()->value(filterConfig->name())->name());
125
126 return l;
127}
128
129void KisAdjustmentLayer::setChannelFlags(const QBitArray & channelFlags)
130{
131 KisFilterConfigurationSP filterConfig = filter();
132
133 if (filterConfig) {
134 filterConfig->setChannelFlags(channelFlags);
135 }
137}
138
float value(const T *src, size_t ch)
qreal v
const QString COMPOSITE_COPY
KisAdjustmentLayer(KisImageWSP image, const QString &name, KisFilterConfigurationSP kfc, KisSelectionSP selection)
bool accept(KisNodeVisitor &) override
void setChannelFlags(const QBitArray &channelFlags) override
KisBaseNode::PropertyList sectionModelProperties() const override
void setFilter(KisFilterConfigurationSP filterConfig, bool checkCompareConfig=true) override
QRect incomingChangeRect(const QRect &rect) const override
QRect needRect(const QRect &rect, PositionToFilthy pos=N_FILTHY) const override
QIcon icon() const override
static KisFilterRegistry * instance()
virtual KisFilterConfigurationSP filter() const
virtual void setFilter(KisFilterConfigurationSP filterConfig, bool checkCompareConfig=true)
virtual void visit(KisNode *node, KisUndoAdapter *undoAdapter)=0
const T value(const QString &id) const
Definition KoID.h:30
QIcon loadIcon(const QString &name)
void setCompositeOpId(const QString &compositeOpId)
KisPaintDeviceSP projection() const override
Definition kis_layer.cc:820
QRect needRectForOriginal(const QRect &rect) const
Definition kis_layer.cc:913
virtual void setChannelFlags(const QBitArray &channelFlags)
Definition kis_layer.cc:342
KisBaseNode::PropertyList sectionModelProperties() const override
Definition kis_layer.cc:272
PositionToFilthy
Definition kis_node.h:58
Describes base behaviour for selection base classes like KisAdjustmentLayer and KisGeneratorLayer....
void setUseSelectionInProjection(bool value) const