File indexing completed on 2024-05-12 15:58:46
0001 /* 0002 * SPDX-FileCopyrightText: 2006 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_transparency_mask.h" 0008 0009 #include "kis_debug.h" 0010 0011 #include <KoIcon.h> 0012 #include <kis_icon.h> 0013 #include <KoColor.h> 0014 #include <KoColorSpace.h> 0015 #include <KoCompositeOpRegistry.h> 0016 #include "kis_paint_device.h" 0017 #include "kis_painter.h" 0018 #include "kis_node_visitor.h" 0019 #include "kis_processing_visitor.h" 0020 #include "kis_image.h" 0021 0022 KisTransparencyMask::KisTransparencyMask(KisImageWSP image, const QString &name) 0023 : KisEffectMask(image, name) 0024 { 0025 } 0026 0027 KisTransparencyMask::KisTransparencyMask(const KisTransparencyMask& rhs) 0028 : KisEffectMask(rhs) 0029 { 0030 } 0031 0032 KisTransparencyMask::~KisTransparencyMask() 0033 { 0034 } 0035 0036 QRect KisTransparencyMask::decorateRect(KisPaintDeviceSP &src, 0037 KisPaintDeviceSP &dst, 0038 const QRect & rc, 0039 PositionToFilthy maskPos) const 0040 { 0041 Q_UNUSED(maskPos); 0042 0043 if (src != dst) { 0044 KisPainter::copyAreaOptimized(rc.topLeft(), src, dst, rc); 0045 src->fill(rc, KoColor(Qt::transparent, src->colorSpace())); 0046 } 0047 0048 return rc; 0049 } 0050 0051 QRect KisTransparencyMask::extent() const 0052 { 0053 return parent() ? parent()->extent() : QRect(); 0054 } 0055 0056 QRect KisTransparencyMask::exactBounds() const 0057 { 0058 return parent() ? parent()->exactBounds() : QRect(); 0059 } 0060 0061 QRect KisTransparencyMask::changeRect(const QRect &rect, PositionToFilthy pos) const 0062 { 0063 /** 0064 * Selection on transparency masks have no special meaning: 0065 * They do crop both: change and need area 0066 */ 0067 return KisMask::changeRect(rect, pos); 0068 } 0069 0070 QRect KisTransparencyMask::needRect(const QRect &rect, PositionToFilthy pos) const 0071 { 0072 /** 0073 * Selection on transparency masks have no special meaning: 0074 * They do crop both: change and need area 0075 */ 0076 return KisMask::needRect(rect, pos); 0077 } 0078 0079 bool KisTransparencyMask::paintsOutsideSelection() const 0080 { 0081 return true; 0082 } 0083 0084 QIcon KisTransparencyMask::icon() const 0085 { 0086 return KisIconUtils::loadIcon("transparencyMask"); 0087 } 0088 0089 bool KisTransparencyMask::accept(KisNodeVisitor &v) 0090 { 0091 return v.visit(this); 0092 } 0093 0094 void KisTransparencyMask::accept(KisProcessingVisitor &visitor, KisUndoAdapter *undoAdapter) 0095 { 0096 return visitor.visit(this, undoAdapter); 0097 } 0098