File indexing completed on 2024-05-19 04:26:08
0001 /* 0002 * SPDX-FileCopyrightText: 2012 Dmitry Kazakov <dimula73@gmail.com> 0003 * SPDX-FileCopyrightText: 2022 L. E. Segovia <amy@amyspark.me> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef __KIS_BRUSH_MASK_APPLICATOR_BASE_H 0009 #define __KIS_BRUSH_MASK_APPLICATOR_BASE_H 0010 0011 #include <cmath> 0012 0013 #include "kis_fixed_paint_device.h" 0014 #include "kis_types.h" 0015 0016 struct MaskProcessingData { 0017 MaskProcessingData(KisFixedPaintDeviceSP _device, 0018 const KoColorSpace *_colorSpace, 0019 const quint8 *_color, 0020 qreal _randomness, 0021 qreal _density, 0022 double _centerX, 0023 double _centerY, 0024 double _angle) 0025 : device(_device) 0026 , colorSpace(_colorSpace) 0027 , color(_color) 0028 , randomness(_randomness) 0029 , density(_density) 0030 , centerX(_centerX) 0031 , centerY(_centerY) 0032 , cosa(std::cos(_angle)) 0033 , sina(std::sin(_angle)) 0034 , pixelSize(colorSpace->pixelSize()) 0035 { 0036 } 0037 0038 KisFixedPaintDeviceSP device; 0039 const KoColorSpace* colorSpace; 0040 const quint8* color; 0041 qreal randomness; 0042 qreal density; 0043 double centerX; 0044 double centerY; 0045 0046 double cosa; 0047 double sina; 0048 0049 quint32 pixelSize; 0050 }; 0051 0052 class KisBrushMaskApplicatorBase 0053 { 0054 public: 0055 virtual ~KisBrushMaskApplicatorBase() = default; 0056 virtual void process(const QRect &rect) = 0; 0057 0058 inline void initializeData(const MaskProcessingData *data) { 0059 m_d = data; 0060 } 0061 0062 protected: 0063 const MaskProcessingData *m_d = nullptr; 0064 }; 0065 0066 struct OperatorWrapper { 0067 OperatorWrapper(KisBrushMaskApplicatorBase *applicator) 0068 : m_applicator(applicator) {} 0069 0070 inline void operator()(const QRect &rect) const 0071 { 0072 m_applicator->process(rect); 0073 } 0074 0075 KisBrushMaskApplicatorBase *m_applicator; 0076 }; 0077 0078 #endif /* __KIS_BRUSH_MASK_APPLICATOR_BASE_H */