File indexing completed on 2024-05-26 04:33:50

0001 /*
0002  *  SPDX-FileCopyrightText: 2021 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "KisColorSmudgeStrategyStamp.h"
0008 
0009 #include "kis_fixed_paint_device.h"
0010 #include "kis_image.h"
0011 #include "KisOverlayPaintDeviceWrapper.h"
0012 
0013 
0014 KisColorSmudgeStrategyStamp::KisColorSmudgeStrategyStamp(KisPainter *painter, KisImageSP image, bool smearAlpha,
0015                                                          bool useDullingMode, bool useOverlayMode)
0016         : KisColorSmudgeStrategyWithOverlay(painter, image, smearAlpha, useDullingMode, useOverlayMode)
0017         , m_origDab(new KisFixedPaintDevice(m_layerOverlayDevice->overlayColorSpace())) // TODO: check compositionSourceColorSpace!
0018 {
0019 }
0020 
0021 KisColorSmudgeStrategyBase::DabColoringStrategy &KisColorSmudgeStrategyStamp::coloringStrategy()
0022 {
0023     return m_coloringStrategy;
0024 }
0025 
0026 void KisColorSmudgeStrategyStamp::updateMask(KisDabCache *dabCache, const KisPaintInformation &info,
0027                                              const KisDabShape &shape, const QPointF &cursorPoint, QRect *dstDabRect, qreal lightnessStrength)
0028 {
0029 
0030     static KoColor color(Qt::black, m_origDab->colorSpace());
0031 
0032     m_origDab = dabCache->fetchDab(m_origDab->colorSpace(),
0033                                    color,
0034                                    cursorPoint,
0035                                    shape,
0036                                    info,
0037                                    1.0,
0038                                    dstDabRect,
0039                                    lightnessStrength);
0040 
0041     m_coloringStrategy.setStampDab(m_origDab);
0042 
0043     const int numPixels = m_origDab->bounds().width() * m_origDab->bounds().height();
0044 
0045     m_maskDab->setRect(m_origDab->bounds());
0046     m_maskDab->lazyGrowBufferWithoutInitialization();
0047     m_origDab->colorSpace()->copyOpacityU8(m_origDab->data(), m_maskDab->data(), numPixels);
0048 
0049     m_shouldPreserveMaskDab = false;
0050 }