47 index =
static_cast<int>(info.
pressure() * (rank - 1) + 0.5);
54 index =
static_cast<int>(angle / (2.0 *
M_PI) * rank);
57 index = qRound(info.
xTilt() / 2.0 * rank) + rank / 2;
60 index = qRound(info.
yTilt() / 2.0 * rank) + rank / 2;
65 if (velocity > capSpeed) {
69 velocity *= (rank - 1) + 0.5;
70 index = qRound(velocity);
73 warnImage <<
"Parasite" << mode <<
"is not implemented";
88 index = (seqNo >= 0 ? seqNo : (index + 1)) % rank;
91 index = randomSource->
generate(0, rank-1);
101 warnImage <<
"Parasite" << mode <<
"is not implemented";
109 quint32 brushIndex = 0;
157 brush->setAdjustmentMidPoint(
value);
163 brush->setBrightnessAdjustment(
value);
169 brush->setContrastAdjustment(
value);
175 brush->setAutoAdjustMidPoint(
value);
181 brush->makeMaskImage(preserveAlpha);
187 if (!brush->saveToDevice(dev)) {
196 brush->coldInitBrush();
228 Q_ASSERT(devices.count() == modes.count());
229 Q_ASSERT(devices.count() > 0);
230 Q_ASSERT(devices.count() < 2);
270 Q_UNUSED(resourcesInterface);
272 QByteArray data = dev->readAll();
278 if (data.size() == 0)
return false;
287 while (i < data.size() && data[i] !=
'\n') {
288 line1.append(data[i]);
291 setName(QString::fromUtf8(line1, line1.size()));
299 while (i < data.size() && data[i] !=
'\n') {
300 line2.append(data[i]);
304 QString paramline = QString::fromUtf8(line2, line2.size());
305 qint32 numOfBrushes = paramline.left(paramline.indexOf(
' ')).toUInt();
306 QString parasiteString = paramline.mid(paramline.indexOf(
' ') + 1);
326 if (numOfBrushes > 0) {
342 QByteArray utf8Name =
name().toUtf8();
343 char const*
name = utf8Name.data();
344 int len = qstrlen(
name);
347 warnImage <<
"Save to file for pipe brushes with dim != not yet supported!";
357 if (dev->write(
name, len) == -1)
360 if (!dev->putChar(
'\n'))
367 if (!dev->putChar(
'\n'))
387 double subPixelX ,
double subPixelY,
388 qreal softnessFactor, qreal lightnessStrength)
const
407 double subPixelX,
double subPixelY)
const
450 Q_UNUSED(forcePreciseOutline);
455 return brush->outline();
465 return QString(
".gih");
537 for (
int i = 0; i < devices.at(0).count(); i++) {
float value(const T *src, size_t ch)
virtual void setGradient(KoAbstractGradientSP gradient)
virtual enumBrushApplication brushApplication() const
virtual void setSpacing(double spacing)
virtual void setAngle(qreal _angle)
virtual void setBrushType(enumBrushType type)
virtual void setScale(qreal _scale)
void setWidth(qint32 width)
void setHeight(qint32 height)
virtual void setBrushApplication(enumBrushApplication brushApplication)
QSharedPointer< BrushType > firstBrush() const
QVector< QSharedPointer< KisGbrBrush > > m_brushes
void setSpacing(double spacing)
QSharedPointer< BrushType > currentBrush(const KisPaintInformation &info)
KisFixedPaintDeviceSP paintDevice(const KoColorSpace *colorSpace, KisDabShape const &shape, const KisPaintInformation &info, double subPixelX, double subPixelY)
QSharedPointer< BrushType > lastBrush() const
qint32 maskWidth(KisDabShape const &shape, double subPixelX, double subPixelY, const KisPaintInformation &info)
void notifyBrushIsGoingToBeClonedForStroke()
bool hasColorAndTransparency() const
void setGradient(KoAbstractGradientSP gradient) const
void addBrush(QSharedPointer< KisGbrBrush > brush)
void generateMaskAndApplyMaskOrCreateDab(KisFixedPaintDeviceSP dst, KisBrush::ColoringInformation *coloringInformation, KisDabShape const &shape, const KisPaintInformation &info, double subPixelX, double subPixelY, qreal softnessFactor, qreal lightnessStrength=DEFAULT_LIGHTNESS_STRENGTH)
QVector< QSharedPointer< BrushType > > brushes()
void prepareForSeqNo(const KisPaintInformation &info, int seqNo)
qint32 maskHeight(KisDabShape const &shape, double subPixelX, double subPixelY, const KisPaintInformation &info)
void setBrushApplication(enumBrushApplication brushApplication) const
void setAngle(qreal angle)
void setScale(qreal scale)
void testingSelectNextBrush(const KisPaintInformation &info)
virtual void setAdjustmentMidPoint(quint8 value)
virtual void setContrastAdjustment(qreal value)
virtual void setBrightnessAdjustment(qreal value)
virtual void setAutoAdjustMidPoint(bool autoAdjustMidPoint)
void setHasColorAndTransparency(bool value)
void setBrushTipImage(const QImage &image) override
virtual void makeMaskImage(bool preserveAlpha)
KisGbrBrush(const QString &filename)
Construct brush to load filename later as brush.
void setAdjustmentMidPoint(quint8 value)
void updateBrushIndexes(KisRandomSourceSP randomSource, int seqNo) override
bool saveToDevice(QIODevice *dev) const
void setParasite(const KisPipeBrushParasite ¶site)
void makeMaskImage(bool preserveAlpha)
const KisPipeBrushParasite & parasite() const
void setAutoAdjustMidPoint(bool value)
void setContrastAdjustment(qreal value)
KisPipeBrushParasite m_parasite
int chooseNextBrush(const KisPaintInformation &info) override
int currentBrushIndex() override
static int selectPost(KisParasite::SelectionMode mode, int index, int rank, KisRandomSourceSP randomSource, int seqNo)
static int selectPre(KisParasite::SelectionMode mode, int index, int rank, const KisPaintInformation &info)
void notifyStrokeStarted() override
void setBrightnessAdjustment(qreal value)
void coldInitBrush() override
QString defaultFileExtension() const override
void setDevices(QVector< QVector< KisPaintDevice * > > devices, int w, int h)
void setAngle(qreal _angle) override
QString parasiteSelectionString
void setBrightnessAdjustment(qreal value) override
void setScale(qreal _scale) override
qint32 maskWidth(KisDabShape const &, double subPixelX, double subPixelY, const KisPaintInformation &info) const override
bool saveToDevice(QIODevice *dev) const override
QVector< KisGbrBrushSP > brushes() const
KisGbrBrushSP testingGetCurrentBrush(const KisPaintInformation &info) const
KisOptimizedBrushOutline outline(bool forcePreciseOutline=false) const override
void prepareForSeqNo(const KisPaintInformation &info, int seqNo) override
void notifyStrokeStarted() override
quint32 brushIndex() const override
void makeMaskImage(bool preserveAlpha) override
const KisPipeBrushParasite & parasite() const
KisImagePipeBrush(const QString &filename)
KoResourceSP clone() const override
virtual void setBrushApplication(enumBrushApplication brushApplication) override
void setAdjustmentMidPoint(quint8 value) override
void setContrastAdjustment(qreal value) override
void setSpacing(double _spacing) override
bool initFromData(const QByteArray &data)
void notifyBrushIsGoingToBeClonedForStroke() override
QString parasiteSelection()
virtual void setGradient(KoAbstractGradientSP gradient) override
bool loadFromDevice(QIODevice *dev, KisResourcesInterfaceSP resourcesInterface) override
~KisImagePipeBrush() override
bool canPaintFor(const KisPaintInformation &info) override
qint32 maskHeight(KisDabShape const &, double subPixelX, double subPixelY, const KisPaintInformation &info) const override
void setParasite(const KisPipeBrushParasite ¶site)
KisFixedPaintDeviceSP paintDevice(const KoColorSpace *colorSpace, KisDabShape const &, const KisPaintInformation &info, double subPixelX=0, double subPixelY=0) const override
void setAutoAdjustMidPoint(bool value) override
void generateMaskAndApplyMaskOrCreateDab(KisFixedPaintDeviceSP dst, KisBrush::ColoringInformation *coloringInformation, KisDabShape const &, const KisPaintInformation &info, double subPixelX=0, double subPixelY=0, qreal softnessFactor=DEFAULT_SOFTNESS_FACTOR, qreal lightnessStrength=DEFAULT_LIGHTNESS_STRENGTH) const override
void testingSelectNextBrush(const KisPaintInformation &info) const
KisParasite::SelectionMode selection[MaxDim]
bool saveToDevice(QIODevice *dev) const
void setBrushesCount()
Initializes the brushesCount helper.
bool needsMovement
If true, the brush won't be painted when there is no motion.
qint32 brushesCount[MaxDim]
The total count of brushes in each dimension (helper)
qint32 index[MaxDim]
The current index in each dimension, so that the selection modes know where to start.
#define KIS_SAFE_ASSERT_RECOVER(cond)
QSharedPointer< KisGbrBrush > KisGbrBrushSP
std::enable_if< std::is_floating_point< T >::value, T >::type normalizeAngle(T a)
QSharedPointer< KoResource > KoResourceSP
KisImageBrushesPipe brushesPipe
void setValid(bool valid)
void setName(const QString &name)