Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_particle_paintop.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
9
10#include <cmath>
11
12#include "kis_vec.h"
13
14#include <KoCompositeOp.h>
15
16#include <kis_image.h>
17#include <kis_debug.h>
18
19#include <kis_global.h>
20#include <kis_paint_device.h>
21#include <kis_painter.h>
22#include <kis_lod_transform.h>
23#include <kis_types.h>
27
29
30#include "particle_brush.h"
31
33 : KisPaintOp(painter)
34 , m_rateOption(settings.data())
35 , m_first(true)
36{
37 Q_UNUSED(image);
38 Q_UNUSED(node);
39
40 m_particleOpData.read(settings.data());
41
44
45 m_airbrushData.read(settings.data());
46}
47
51
57
59{
60 return KisPaintOpPluginUtils::effectiveSpacing(0.0, 0.0, true, 0.0, false, 0.0, false, 0.0,
62 &m_airbrushData, nullptr, info);
63}
64
69
71 KisDistanceInformation *currentDistance)
72{
73 // Use superclass behavior for lines of zero length. Otherwise, airbrushing can happen faster
74 // than it is supposed to.
75 if (pi1.pos() == pi2.pos()) {
76 KisPaintOp::paintLine(pi1, pi2, currentDistance);
77 } else {
78 doPaintLine(pi1, pi2);
79 }
80}
81
83{
84 if (!painter()) return;
85
86 if (!m_dab) {
88 }
89 else {
90 m_dab->clear();
91 }
92
93
94 if (m_first) {
96 m_first = false;
97 }
98
99 m_particleBrush.draw(m_dab, painter()->paintColor(), pi2.pos());
100 QRect rc = m_dab->extent();
101
102 painter()->bitBlt(rc.x(), rc.y(), m_dab, rc.x(), rc.y(), rc.width(), rc.height());
104}
static qreal lodToScale(int levelOfDetail)
virtual void clear()
KisPaintDeviceSP createCompositionSourceDevice() const
QRect extent() const
const QPointF & pos() const
void renderMirrorMask(QRect rc, KisFixedPaintDeviceSP dab)
void bitBlt(qint32 dstX, qint32 dstY, const KisPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
KisAirbrushOptionData m_airbrushData
KisParticlePaintOp(const KisPaintOpSettingsSP settings, KisPainter *painter, KisNodeSP node, KisImageSP image)
ParticleBrush m_particleBrush
void paintLine(const KisPaintInformation &pi1, const KisPaintInformation &pi2, KisDistanceInformation *currentDistance) override
KisTimingInformation updateTimingImpl(const KisPaintInformation &info) const override
KisSpacingInformation paintAt(const KisPaintInformation &info) override
void doPaintLine(const KisPaintInformation &pi1, const KisPaintInformation &pi2)
KisSpacingInformation updateSpacingImpl(const KisPaintInformation &info) const override
KisParticleOpOptionData m_particleOpData
void setProperties(KisParticleOpOptionData *properties)
void draw(KisPaintDeviceSP dab, const KoColor &color, const QPointF &pos)
void setInitialPosition(const QPointF &pos)
KisSpacingInformation effectiveSpacing(qreal dabWidth, qreal dabHeight, bool isotropicSpacing, qreal rotation, bool axesFlipped, qreal spacingVal, bool autoSpacingActive, qreal autoSpacingCoeff, qreal lodScale, const KisAirbrushOptionData *airbrushOption, const KisSpacingOption *spacingOption, const KisPaintInformation &pi)
KisTimingInformation effectiveTiming(const KisAirbrushOptionData *airbrushOption, const KisRateOption *rateOption, const KisPaintInformation &pi)
bool read(const KisPropertiesConfiguration *setting)
KisPainter * painter
KisPaintDeviceSP source() const
virtual void paintLine(const KisPaintInformation &pi1, const KisPaintInformation &pi2, KisDistanceInformation *currentDistance)
bool read(const KisPropertiesConfiguration *setting)