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

0001 /*
0002  *  SPDX-FileCopyrightText: 2011 Silvio Heinrich <plassy@web.de>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef _KIS_COLORSMUDGEOP_H_
0008 #define _KIS_COLORSMUDGEOP_H_
0009 
0010 #include <QRect>
0011 
0012 #include "KoColorTransformation.h"
0013 #include <KoAbstractGradient.h>
0014 
0015 #include <kis_brush_based_paintop.h>
0016 #include <kis_types.h>
0017 
0018 #include "KisOverlayPaintDeviceWrapper.h"
0019 #include <KisOpacityOption.h>
0020 #include <KisSpacingOption.h>
0021 #include <KisScatterOption.h>
0022 #include <KisRotationOption.h>
0023 #include <KisHSVOption.h>
0024 #include <KisAirbrushOptionData.h>
0025 #include <KisPaintThicknessOption.h>
0026 #include <KisGradientOption.h>
0027 #include <KisSmudgeLengthOption.h>
0028 #include <KisColorRateOption.h>
0029 #include <KisSmudgeRadiusOption.h>
0030 #include <KisSmudgeOverlayModeOptionData.h>
0031 
0032 class QPointF;
0033 
0034 class KisBrushBasedPaintOpSettings;
0035 class KisPainter;
0036 class KoColorSpace;
0037 class KisInterstrokeDataFactory;
0038 
0039 class KisColorSmudgeStrategy;
0040 
0041 class KisColorSmudgeOp: public KisBrushBasedPaintOp
0042 {
0043 public:
0044     KisColorSmudgeOp(const KisPaintOpSettingsSP settings, KisPainter* painter, KisNodeSP node, KisImageSP image);
0045     ~KisColorSmudgeOp() override;
0046 
0047     static KisInterstrokeDataFactory* createInterstrokeDataFactory(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface);
0048 
0049 protected:
0050     KisSpacingInformation paintAt(const KisPaintInformation& info) override;
0051 
0052     KisSpacingInformation updateSpacingImpl(const KisPaintInformation &info) const override;
0053     KisTimingInformation updateTimingImpl(const KisPaintInformation &info) const override;
0054 
0055 private:
0056     bool                      m_firstRun;
0057 
0058     KoColor                   m_paintColor;
0059     KoAbstractGradientSP      m_gradient;
0060     KisSizeOption m_sizeOption;
0061     KisRatioOption m_ratioOption;
0062     KisOpacityOption m_opacityOption;
0063     KisSpacingOption m_spacingOption;
0064     KisRateOption m_rateOption;
0065     KisRotationOption m_rotationOption;
0066     KisScatterOption m_scatterOption;
0067     KisPaintThicknessOption m_paintThicknessOption;
0068     KisGradientOption m_gradientOption;
0069     KisSmudgeLengthOption m_smudgeRateOption;
0070     KisColorRateOption2 m_colorRateOption;
0071     KisSmudgeRadiusOption2 m_smudgeRadiusOption;
0072 
0073     QList<KisHSVOption*> m_hsvOptions;
0074     KisAirbrushOptionData m_airbrushData;
0075     KisSmudgeOverlayModeOptionData m_overlayModeData;
0076 
0077     QRect                     m_dstDabRect;
0078     QPointF                   m_lastPaintPos;
0079 
0080     KoColorTransformation *m_hsvTransform {0};
0081     QScopedPointer<KisColorSmudgeStrategy> m_strategy;
0082 };
0083 
0084 #endif // _KIS_COLORSMUDGEOP_H_