Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_ls_overlay_filter.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
9#include <cstdlib>
10
11#include <QBitArray>
12
13#include <resources/KoPattern.h>
14
16
17#include "psd.h"
18
21#include "kis_gaussian_kernel.h"
22
23#include "kis_pixel_selection.h"
24#include "kis_fill_painter.h"
26#include "kis_iterator_ng.h"
28
29#include "kis_psd_layer_style.h"
31
32#include "kis_ls_utils.h"
34
35
36
38 : KisLayerStyleFilter(KoID("lsoverlay", i18n("Overlay (style)"))),
39 m_mode(mode)
40{
41}
42
45 m_mode(rhs.m_mode)
46{
47}
48
53
56 const QRect &applyRect,
58 KisResourcesInterfaceSP resourcesInterface,
60{
61 if (applyRect.isEmpty()) return;
62
63 const QString compositeOp = config->blendMode();
64 const quint8 opacityU8 = quint8(qRound(255.0 / 100.0 * config->opacity()));
65
67 compositeOp,
68 opacityU8,
69 QBitArray(),
70 srcDevice);
71
72 KisLsUtils::fillOverlayDevice(dstDevice, applyRect, config, resourcesInterface, env);
73}
74
77{
78 const psd_layer_effects_overlay_base *config = 0;
79
80 if (m_mode == Color) {
81 config = style->colorOverlay();
82 } else if (m_mode == Gradient) {
83 config = style->gradientOverlay();
84 } else if (m_mode == Pattern) {
85 config = style->patternOverlay();
86 }
87
88 return config;
89}
90
94 const QRect &applyRect,
97{
98 Q_UNUSED(env);
99 Q_UNUSED(blower);
101
103 if (!KisLsUtils::checkEffectEnabled(config, dst)) return;
104
105 applyOverlay(src, dst, applyRect, config, style->resourcesInterface(), env);
106}
107
109{
110 Q_UNUSED(style);
111 Q_UNUSED(env);
112 return rect;
113}
114
116{
117 Q_UNUSED(style);
118 Q_UNUSED(env);
119 return rect;
120}
KisLayerStyleFilter * clone() const override
QRect neededRect(const QRect &rect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const override
void processDirectly(KisPaintDeviceSP src, KisMultipleProjection *dst, KisLayerStyleKnockoutBlower *blower, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const override
const psd_layer_effects_overlay_base * getOverlayStruct(KisPSDLayerStyleSP style) const
void applyOverlay(KisPaintDeviceSP srcDevice, KisMultipleProjection *dst, const QRect &applyRect, const psd_layer_effects_overlay_base *config, KisResourcesInterfaceSP resourcesInterface, KisLayerStyleFilterEnvironment *env) const
QRect changedRect(const QRect &rect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const override
KisPaintDeviceSP getProjection(const QString &id, const QString &compositeOpId, quint8 opacity, const QBitArray &channelFlags, KisPaintDeviceSP prototype)
Definition KoID.h:30
qint32 opacity() const
Definition psd.h:281
QString blendMode() const
Definition psd.h:266
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75
void fillOverlayDevice(KisPaintDeviceSP fillDevice, const QRect &applyRect, const psd_layer_effects_overlay_base *config, KisResourcesInterfaceSP resourcesInterface, KisLayerStyleFilterEnvironment *env)
bool checkEffectEnabled(const psd_layer_effects_shadow_base *config, KisMultipleProjection *dst)