File indexing completed on 2024-05-12 15:56:09
0001 /* 0002 * SPDX-FileCopyrightText: 2004 Cyrille Berger <cberger@cberger.net> 0003 * SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 #ifndef _KIS_AUTOBRUSH_RESOURCE_H_ 0008 #define _KIS_AUTOBRUSH_RESOURCE_H_ 0009 0010 #include "kritabrush_export.h" 0011 0012 #include <KoResource.h> 0013 0014 #include "kis_brush.h" 0015 0016 #include <QScopedPointer> 0017 0018 class KisMaskGenerator; 0019 0020 /** 0021 * XXX: docs! 0022 */ 0023 class BRUSH_EXPORT KisAutoBrush : public KisBrush 0024 { 0025 0026 public: 0027 0028 KisAutoBrush(KisMaskGenerator *as, qreal angle, qreal randomness, qreal density = 1.0); 0029 KisAutoBrush(const KisAutoBrush &rhs); 0030 KisAutoBrush &operator=(const KisAutoBrush &rhs) = delete; 0031 KoResourceSP clone() const override; 0032 0033 ~KisAutoBrush() override; 0034 0035 bool isEphemeral() const override; 0036 bool loadFromDevice(QIODevice *dev, KisResourcesInterfaceSP resourcesInterface) override; 0037 bool saveToDevice(QIODevice *dev) const override; 0038 0039 bool isPiercedApprox() const override; 0040 0041 public: 0042 0043 qreal userEffectiveSize() const override; 0044 void setUserEffectiveSize(qreal value) override; 0045 0046 qint32 maskWidth(KisDabShape const& shape, qreal subPixelX, qreal subPixelY, 0047 const KisPaintInformation& info) const override; 0048 qint32 maskHeight(KisDabShape const& shape, qreal subPixelX, qreal subPixelY, 0049 const KisPaintInformation& info) const override; 0050 QSizeF characteristicSize(KisDabShape const&) const override; 0051 0052 KisFixedPaintDeviceSP paintDevice(const KoColorSpace*, 0053 KisDabShape const&, 0054 const KisPaintInformation&, 0055 double = 0, double = 0) const override { 0056 return 0; // The autobrush does NOT support images! 0057 } 0058 0059 void generateMaskAndApplyMaskOrCreateDab(KisFixedPaintDeviceSP dst, 0060 KisBrush::ColoringInformation* src, 0061 KisDabShape const&, 0062 const KisPaintInformation& info, 0063 double subPixelX = 0, double subPixelY = 0, 0064 qreal softnessFactor = DEFAULT_SOFTNESS_FACTOR, 0065 qreal lightnessStrength = DEFAULT_LIGHTNESS_STRENGTH) const override; 0066 0067 KisOptimizedBrushOutline outline(bool forcePreciseOutline = false) const override; 0068 0069 void notifyBrushIsGoingToBeClonedForStroke() override; 0070 0071 void coldInitBrush() override; 0072 KisFixedPaintDeviceSP outlineSourceImage() const override; 0073 0074 public: 0075 0076 void toXML(QDomDocument& , QDomElement&) const override; 0077 const KisMaskGenerator* maskGenerator() const; 0078 qreal randomness() const; 0079 qreal density() const; 0080 0081 void lodLimitations(KisPaintopLodLimitations *l) const override; 0082 0083 bool supportsCaching() const override; 0084 private: 0085 0086 QImage createBrushPreview(int maxSize = -1); 0087 0088 private: 0089 struct Private; 0090 const QScopedPointer<Private> d; 0091 }; 0092 #endif // _KIS_AUTOBRUSH_RESOURCE_H_