File indexing completed on 2024-05-26 04:34:12

0001 /*
0002  *  SPDX-FileCopyrightText: 2008-2012 Lukáš Tvrdý <lukast.dev@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef KIS_SPRAY_PAINTOP_H_
0008 #define KIS_SPRAY_PAINTOP_H_
0009 
0010 #include <brushengine/kis_paintop.h>
0011 #include <kis_types.h>
0012 
0013 #include "spray_brush.h"
0014 #include "kis_spray_paintop_settings.h"
0015 #include "kis_brush_option.h"
0016 #include <KisAirbrushOptionData.h>
0017 #include <KisOpacityOption.h>
0018 #include <KisRotationOption.h>
0019 #include <KisSprayShapeDynamicsOptionData.h>
0020 #include "KisSprayOpOption.h"
0021 #include "KisSprayShapeOptionData.h"
0022 
0023 
0024 class KisPainter;
0025 
0026 
0027 class KisSprayPaintOp : public KisPaintOp
0028 {
0029 
0030 public:
0031 
0032     KisSprayPaintOp(const KisPaintOpSettingsSP settings, KisPainter * painter, KisNodeSP node, KisImageSP image);
0033     ~KisSprayPaintOp() override;
0034 
0035     static QList<KoResourceLoadResult> prepareLinkedResources(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface);
0036 
0037 protected:
0038 
0039     KisSpacingInformation paintAt(const KisPaintInformation& info) override;
0040 
0041     KisSpacingInformation updateSpacingImpl(const KisPaintInformation &info) const override;
0042 
0043     KisTimingInformation updateTimingImpl(const KisPaintInformation &info) const override;
0044 
0045 private:
0046     KisSpacingInformation computeSpacing(const KisPaintInformation &info, qreal lodScale) const;
0047 
0048 private:
0049     KisSprayShapeOptionData m_shapeProperties;
0050     KisSprayOpOption m_sprayOpOption;
0051     KisSprayShapeDynamicsOptionData m_shapeDynamicsProperties;
0052     KisColorOptionData m_colorProperties;
0053     KisBrushOptionProperties m_brushOption;
0054 
0055     KisPaintDeviceSP m_dab;
0056     SprayBrush m_sprayBrush;
0057     qreal m_xSpacing, m_ySpacing, m_spacing;
0058     bool m_isPresetValid;
0059     KisAirbrushOptionData m_airbrushData;
0060 
0061     KisRotationOption m_rotationOption;
0062     KisSizeOption m_sizeOption;
0063     KisOpacityOption m_opacityOption;
0064     KisRateOption m_rateOption;
0065     KisNodeSP m_node;
0066 };
0067 
0068 #endif // KIS_SPRAY_PAINTOP_H_