• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • krita API Reference
  • KDE Home
  • Contact Us
 

libs/brush

  • sources
  • kfour-appscomplete
  • krita
  • libs
  • brush
kis_imagepipe_brush.cpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2004 Boudewijn Rempt <[email protected]>
3  * SPDX-FileCopyrightText: 2005 Bart Coppens <[email protected]>
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  */
7 #include "kis_imagepipe_brush.h"
8 #include "kis_pipebrush_parasite.h"
9 #include "kis_brushes_pipe.h"
10 
11 
12 class KisImageBrushesPipe : public KisBrushesPipe<KisGbrBrush>
13 {
14 public:
15  KisImageBrushesPipe()
16  : m_currentBrushIndex(0)
17  , m_isInitialized(false)
18  {
19  }
20 
21 
22  /*
23  pre and post are split because:
24 
25  21:12:20 < dmitryK> boud: i guess it was somehow related to the fact that the maskWidth/maskHeight should
26  correspond to the size of the mask returned by paintDevice()
27  21:13:33 < dmitryK> boud: the random stuff is called once per brush->paintDevice() call, after the device is
28  returned to the paint op, that is "preparing the randomness for the next call"
29  21:14:16 < dmitryK> boud: and brushesPipe->currentBrush() always returning the same brush for any particular
30  paintInfo.
31  */
32 protected:
33  static int selectPre(KisParasite::SelectionMode mode,
34  int index, int rank,
35  const KisPaintInformation& info) {
36 
37  qreal angle;
38  qreal velocity;
39  qreal capSpeed = 3;
40 
41  switch (mode) {
42  case KisParasite::Constant:
43  case KisParasite::Incremental:
44  case KisParasite::Random:
45  break;
46  case KisParasite::Pressure:
47  index = static_cast<int>(info.pressure() * (rank - 1) + 0.5);
48  break;
49  case KisParasite::Angular:
50  // + M_PI_2 + M_PI_4 to be compatible with the gimp
51  angle = info.drawingAngle() + M_PI_2 + M_PI_4;
52  angle = normalizeAngle(angle);
53 
54  index = static_cast<int>(angle / (2.0 * M_PI) * rank);
55  break;
56  case KisParasite::TiltX:
57  index = qRound(info.xTilt() / 2.0 * rank) + rank / 2;
58  break;
59  case KisParasite::TiltY:
60  index = qRound(info.yTilt() / 2.0 * rank) + rank / 2;
61  break;
62  case KisParasite::Velocity:
63  // log is slow, but allows for nicer dab transition
64  velocity = log(info.drawingSpeed() + 1);
65  if (velocity > capSpeed) {
66  velocity = capSpeed;
67  }
68  velocity /= capSpeed;
69  velocity *= (rank - 1) + 0.5;
70  index = qRound(velocity);
71  break;
72  default:
73  warnImage << "Parasite" << mode << "is not implemented";
74  index = 0;
75  }
76 
77  return index;
78  }
79 
80  static int selectPost(KisParasite::SelectionMode mode,
81  int index, int rank,
82  const KisPaintInformation& info,
83  int seqNo) {
84 
85  switch (mode) {
86  case KisParasite::Constant: break;
87  case KisParasite::Incremental:
88  index = (seqNo >= 0 ? seqNo : (index + 1)) % rank;
89  break;
90  case KisParasite::Random:
91  index = info.randomSource()->generate(0, rank-1);
92  break;
93  case KisParasite::Pressure:
94  case KisParasite::Angular:
95  break;
96  case KisParasite::TiltX:
97  case KisParasite::TiltY:
98  case KisParasite::Velocity:
99  break;
100  default:
101  warnImage << "Parasite" << mode << "is not implemented";
102  index = 0;
103  }
104 
105  return index;
106  }
107 
108  int chooseNextBrush(const KisPaintInformation& info) override {
109  quint32 brushIndex = 0;
110 
111  if (!m_isInitialized) {
116  for (int i = 0; i < m_parasite.dim; i++) {
117  m_parasite.index[i] = 0;
118  }
119  updateBrushIndexes(info, 0);
120  m_isInitialized = true;
121  }
122 
123  for (int i = 0; i < m_parasite.dim; i++) {
124  int index = selectPre(m_parasite.selection[i],
125  m_parasite.index[i],
126  m_parasite.rank[i], info);
127 
128  brushIndex += m_parasite.brushesCount[i] * index;
129  }
130  brushIndex %= (quint32)m_brushes.size();
131  m_currentBrushIndex = brushIndex;
132  return brushIndex;
133  }
134 
135  void updateBrushIndexes(const KisPaintInformation& info, int seqNo) override {
136  for (int i = 0; i < m_parasite.dim; i++) {
137  m_parasite.index[i] = selectPost(m_parasite.selection[i],
138  m_parasite.index[i],
139  m_parasite.rank[i],
140  info,
141  seqNo);
142  }
143  }
144 
145 public:
146  using KisBrushesPipe<KisGbrBrush>::addBrush;
147  using KisBrushesPipe<KisGbrBrush>::sizeBrush;
148 
149  int currentBrushIndex() override {
150  return m_currentBrushIndex;
151  }
152 
153  void setParasite(const KisPipeBrushParasite& parasite) {
154  m_parasite = parasite;
155  }
156 
157  const KisPipeBrushParasite& parasite() const {
158  return m_parasite;
159  }
160 
161  void setAdjustmentMidPoint(quint8 value) {
162  Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
163  brush->setAdjustmentMidPoint(value);
164  }
165  }
166 
167  void setBrightnessAdjustment(qreal value) {
168  Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
169  brush->setBrightnessAdjustment(value);
170  }
171  }
172 
173  void setContrastAdjustment(qreal value) {
174  Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
175  brush->setContrastAdjustment(value);
176  }
177  }
178 
179  void makeMaskImage(bool preserveAlpha) {
180  Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
181  brush->makeMaskImage(preserveAlpha);
182  }
183  }
184 
185  bool saveToDevice(QIODevice* dev) const {
186  Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
187  if (!brush->saveToDevice(dev)) {
188  return false;
189  }
190  }
191  return true;
192  }
193 
194  void notifyStrokeStarted() override {
195  m_isInitialized = false;
196  }
197 
198 private:
199  KisPipeBrushParasite m_parasite;
200  int m_currentBrushIndex;
201  bool m_isInitialized;
202 };
203 
204 
205 struct KisImagePipeBrush::Private {
206 public:
207  KisImageBrushesPipe brushesPipe;
208 };
209 
210 KisImagePipeBrush::KisImagePipeBrush(const QString& filename)
211  : KisGbrBrush(filename)
212  , d(new Private())
213 {
214 }
215 
216 KisImagePipeBrush::KisImagePipeBrush(const QString& name, int w, int h,
217  QVector< QVector<KisPaintDevice*> > devices,
218  QVector<KisParasite::SelectionMode > modes)
219  : KisGbrBrush(QString())
220  , d(new Private())
221 {
222  Q_ASSERT(devices.count() == modes.count());
223  Q_ASSERT(devices.count() > 0);
224  Q_ASSERT(devices.count() < 2); // XXX Multidimensionals not supported yet, change to MaxDim!
225 
226  setName(name);
227 
228  KisPipeBrushParasite parasite;
229 
230  parasite.dim = devices.count();
231  // XXX Change for multidim! :
232  parasite.ncells = devices.at(0).count();
233  parasite.rank[0] = parasite.ncells; // ### This can masquerade some bugs, be careful here in the future
234  parasite.selection[0] = modes.at(0);
235 
236 
237  // XXX needsmovement!
238 
239  parasite.setBrushesCount();
240 
241  setParasite(parasite);
242  setDevices(devices, w, h);
243  setBrushTipImage(d->brushesPipe.firstBrush()->brushTipImage());
244 }
245 
246 KisImagePipeBrush::KisImagePipeBrush(const KisImagePipeBrush& rhs)
247  : KisGbrBrush(rhs),
248  d(new Private(*rhs.d))
249 {
250 }
251 
252 KoResourceSP KisImagePipeBrush::clone() const
253 {
254  return KoResourceSP(new KisImagePipeBrush(*this));
255 }
256 
257 KisImagePipeBrush::~KisImagePipeBrush()
258 {
259  delete d;
260 }
261 
262 bool KisImagePipeBrush::loadFromDevice(QIODevice *dev, KisResourcesInterfaceSP resourcesInterface)
263 {
264  Q_UNUSED(resourcesInterface);
265 
266  QByteArray data = dev->readAll();
267  return initFromData(data);
268 }
269 
270 bool KisImagePipeBrush::initFromData(const QByteArray &data)
271 {
272  if (data.size() == 0) return false;
273  // XXX: this doesn't correctly load the image pipe brushes yet.
274 
275  // XXX: This stuff is in utf-8, too.
276  // The first line contains the name -- this means we look until we arrive at the first newline
277  QByteArray line1;
278 
279  qint32 i = 0;
280 
281  while (i < data.size() && data[i] != '\n') {
282  line1.append(data[i]);
283  i++;
284  }
285  setName(QString::fromUtf8(line1, line1.size()));
286 
287  i++; // Skip past the first newline
288 
289  // The second line contains the number of brushes, separated by a space from the parasite
290 
291  // XXX: This stuff is in utf-8, too.
292  QByteArray line2;
293  while (i < data.size() && data[i] != '\n') {
294  line2.append(data[i]);
295  i++;
296  }
297 
298  QString paramline = QString::fromUtf8(line2, line2.size());
299  qint32 numOfBrushes = paramline.left(paramline.indexOf(' ')).toUInt();
300  QString parasiteString = paramline.mid(paramline.indexOf(' ') + 1);
301 
302  KisPipeBrushParasite parasite = KisPipeBrushParasite(parasiteString);
303  parasite.sanitize();
304 
305  parasiteSelectionString = parasite.selectionMode; // selection mode to return to UI
306 
307  d->brushesPipe.setParasite(parasite);
308  i++; // Skip past the second newline
309 
310  for (int brushIndex = d->brushesPipe.sizeBrush();
311  brushIndex < numOfBrushes && i < data.size(); brushIndex++) {
312 
313  KisGbrBrushSP brush = KisGbrBrushSP(new KisGbrBrush(name() + '_' + QString().setNum(brushIndex),
314  data,
315  i));
316 
317  d->brushesPipe.addBrush(brush);
318  }
319 
320  if (numOfBrushes > 0) {
321  setValid(true);
322  setSpacing(d->brushesPipe.lastBrush()->spacing());
323  setWidth(d->brushesPipe.firstBrush()->width());
324  setHeight(d->brushesPipe.firstBrush()->height());
325  setBrushTipImage(d->brushesPipe.firstBrush()->brushTipImage());
326  setBrushApplication(d->brushesPipe.firstBrush()->brushApplication());
327  setBrushType(d->brushesPipe.hasColor() ? PIPE_IMAGE : PIPE_MASK);
328  }
329 
330  return true;
331 }
332 
333 bool KisImagePipeBrush::saveToDevice(QIODevice* dev) const
334 {
335  QByteArray utf8Name = name().toUtf8(); // Names in v2 brushes are in UTF-8
336  char const* name = utf8Name.data();
337  int len = qstrlen(name);
338 
339  if (d->brushesPipe.parasite().dim >= KisPipeBrushParasite::MaxDim) {
340  warnImage << "Save to file for pipe brushes with dim != not yet supported!";
341  return false;
342  }
343 
344  // Save this pipe brush: first the header, and then all individual brushes consecutively
345  // XXX: this needs some care for when we have > 1 dimension)
346 
347  // Gimp Pipe Brush header format: Name\n<number of brushes> <parasite>\n
348 
349  // The name\n
350  if (dev->write(name, len) == -1)
351  return false;
352 
353  if (!dev->putChar('\n'))
354  return false;
355 
356  // Write the parasite (also writes number of brushes)
357  if (!d->brushesPipe.parasite().saveToDevice(dev))
358  return false;
359 
360  if (!dev->putChar('\n'))
361  return false;
362 
363  KoResource::saveToDevice(dev);
364 
365  // <gbr brushes>
366  return d->brushesPipe.saveToDevice(dev);
367 }
368 
369 void KisImagePipeBrush::notifyStrokeStarted()
370 {
371  d->brushesPipe.notifyStrokeStarted();
372 }
373 
374 void KisImagePipeBrush::prepareForSeqNo(const KisPaintInformation &info, int seqNo)
375 {
376  d->brushesPipe.prepareForSeqNo(info, seqNo);
377 }
378 
379 void KisImagePipeBrush::generateMaskAndApplyMaskOrCreateDab(KisFixedPaintDeviceSP dst, KisBrush::ColoringInformation* coloringInformation,
380  KisDabShape const& shape,
381  const KisPaintInformation& info,
382  double subPixelX , double subPixelY,
383  qreal softnessFactor, qreal lightnessStrength) const
384 {
385  d->brushesPipe.generateMaskAndApplyMaskOrCreateDab(dst, coloringInformation, shape, info, subPixelX, subPixelY, softnessFactor, lightnessStrength);
386 }
387 
388 QVector<KisGbrBrushSP> KisImagePipeBrush::brushes() const
389 {
390  return d->brushesPipe.brushes();
391 }
392 
393 KisFixedPaintDeviceSP KisImagePipeBrush::paintDevice(
394  const KoColorSpace * colorSpace,
395  KisDabShape const& shape,
396  const KisPaintInformation& info, double subPixelX, double subPixelY) const
397 {
398  return d->brushesPipe.paintDevice(colorSpace, shape, info, subPixelX, subPixelY);
399 }
400 
401 QString KisImagePipeBrush::parasiteSelection()
402 {
403  return parasiteSelectionString;
404 }
405 
406 void KisImagePipeBrush::makeMaskImage(bool preserveAlpha)
407 {
408  KisGbrBrush::makeMaskImage(preserveAlpha);
409  d->brushesPipe.makeMaskImage(preserveAlpha);
410  setBrushType(PIPE_MASK);
411 }
412 
413 void KisImagePipeBrush::setAdjustmentMidPoint(quint8 value)
414 {
415  KisGbrBrush::setAdjustmentMidPoint(value);
416  d->brushesPipe.setAdjustmentMidPoint(value);
417 }
418 
419 void KisImagePipeBrush::setBrightnessAdjustment(qreal value)
420 {
421  KisGbrBrush::setBrightnessAdjustment(value);
422  d->brushesPipe.setBrightnessAdjustment(value);
423 }
424 
425 void KisImagePipeBrush::setContrastAdjustment(qreal value)
426 {
427  KisGbrBrush::setContrastAdjustment(value);
428  d->brushesPipe.setContrastAdjustment(value);
429 }
430 
431 const KisBoundary* KisImagePipeBrush::boundary() const
432 {
433  KisGbrBrushSP brush = d->brushesPipe.firstBrush();
434  Q_ASSERT(brush);
435 
436  return brush->boundary();
437 }
438 
439 bool KisImagePipeBrush::canPaintFor(const KisPaintInformation& info)
440 {
441  return (!d->brushesPipe.parasite().needsMovement || info.drawingDistance() >= 0.5);
442 }
443 
444 QString KisImagePipeBrush::defaultFileExtension() const
445 {
446  return QString(".gih");
447 }
448 
449 quint32 KisImagePipeBrush::brushIndex() const
450 {
451  return d->brushesPipe.currentBrushIndex();
452 }
453 
454 qint32 KisImagePipeBrush::maskWidth(KisDabShape const& shape, double subPixelX, double subPixelY, const KisPaintInformation& info) const
455 {
456  return d->brushesPipe.maskWidth(shape, subPixelX, subPixelY, info);
457 }
458 
459 qint32 KisImagePipeBrush::maskHeight(KisDabShape const& shape, double subPixelX, double subPixelY, const KisPaintInformation& info) const
460 {
461  return d->brushesPipe.maskHeight(shape, subPixelX, subPixelY, info);
462 }
463 
464 void KisImagePipeBrush::setAngle(qreal _angle)
465 {
466  KisGbrBrush::setAngle(_angle);
467  d->brushesPipe.setAngle(_angle);
468 }
469 
470 void KisImagePipeBrush::setScale(qreal _scale)
471 {
472  KisGbrBrush::setScale(_scale);
473  d->brushesPipe.setScale(_scale);
474 }
475 
476 void KisImagePipeBrush::setSpacing(double _spacing)
477 {
478  KisGbrBrush::setSpacing(_spacing);
479  d->brushesPipe.setSpacing(_spacing);
480 }
481 
482 void KisImagePipeBrush::setBrushApplication(enumBrushApplication brushApplication)
483 {
484  //Set all underlying brushes to use the same brush Application
485  KisGbrBrush::setBrushApplication(brushApplication);
486  d->brushesPipe.setBrushApplication(brushApplication);
487 }
488 
489 void KisImagePipeBrush::setGradient(KoAbstractGradientSP gradient) {
490  //Set all underlying brushes to use the same gradient
491  KisGbrBrush::setGradient(gradient);
492  d->brushesPipe.setGradient(gradient);
493 }
494 
495 KisGbrBrushSP KisImagePipeBrush::testingGetCurrentBrush(const KisPaintInformation& info) const
496 {
497  return d->brushesPipe.currentBrush(info);
498 }
499 
500 
501 void KisImagePipeBrush::testingSelectNextBrush(const KisPaintInformation& info) const
502 {
503  return d->brushesPipe.testingSelectNextBrush(info);
504 }
505 
506 const KisPipeBrushParasite& KisImagePipeBrush::parasite() const {
507  return d->brushesPipe.parasite();
508 }
509 
510 void KisImagePipeBrush::setParasite(const KisPipeBrushParasite &parasite)
511 {
512  d->brushesPipe.setParasite(parasite);
513 }
514 
515 void KisImagePipeBrush::setDevices(QVector<QVector<KisPaintDevice *> > devices, int w, int h)
516 {
517 
518  for (int i = 0; i < devices.at(0).count(); i++) {
519  d->brushesPipe.addBrush(KisGbrBrushSP(new KisGbrBrush(devices.at(0).at(i), 0, 0, w, h)));
520  }
521 }
KisPipeBrushParasite::MaxDim
static const int MaxDim
Definition: kis_pipebrush_parasite.h:82
KisBrush::setBrushType
virtual void setBrushType(enumBrushType type)
XXX.
Definition: kis_brush.cpp:354
KisImagePipeBrush::makeMaskImage
void makeMaskImage(bool preserveAlpha) override
Convert the mask to inverted gray scale, so it is alpha mask.
Definition: kis_imagepipe_brush.cpp:406
KisColorfulBrush::setContrastAdjustment
virtual void setContrastAdjustment(qreal value)
Definition: KisColorfulBrush.cpp:94
KisParasite::SelectionMode
SelectionMode
Definition: kis_imagepipe_brush.h:26
KisImagePipeBrush::brushes
QVector< KisGbrBrushSP > brushes() const
Definition: kis_imagepipe_brush.cpp:388
KisPipeBrushParasite
The parasite info that gets loaded from the terribly documented gimp pipe brush parasite.
Definition: kis_pipebrush_parasite.h:54
KisImagePipeBrush::saveToDevice
bool saveToDevice(QIODevice *dev) const override
Definition: kis_imagepipe_brush.cpp:333
KisPipeBrushParasite::selection
KisParasite::SelectionMode selection[MaxDim]
Definition: kis_pipebrush_parasite.h:96
KisImagePipeBrush::notifyStrokeStarted
void notifyStrokeStarted() override
Is called by the paint op when a paintop starts a stroke.
Definition: kis_imagepipe_brush.cpp:369
KisImagePipeBrush::setGradient
virtual void setGradient(KoAbstractGradientSP gradient) override
Definition: kis_imagepipe_brush.cpp:489
KisParasite::Pressure
Definition: kis_imagepipe_brush.h:32
QString::fromUtf8
QString fromUtf8(const char *str, int size)
KisImagePipeBrush::clone
KoResourceSP clone() const override
Definition: kis_imagepipe_brush.cpp:252
KisBrush::setGradient
virtual void setGradient(KoAbstractGradientSP gradient)
Definition: kis_brush.cpp:285
QByteArray::append
QByteArray & append(char ch)
QIODevice
KisImagePipeBrush::parasite
const KisPipeBrushParasite & parasite() const
Definition: kis_imagepipe_brush.cpp:506
KisImagePipeBrush::brushIndex
quint32 brushIndex() const override
Definition: kis_imagepipe_brush.cpp:449
KisBrushesPipe::notifyStrokeStarted
virtual void notifyStrokeStarted()=0
Is called by the paint op when a paintop starts a stroke.
KisParasite::TiltX
Definition: kis_imagepipe_brush.h:33
KisBoundary
Generates an 'outline' for a paint device.
Definition: kis_boundary.h:31
kis_brushes_pipe.h
KisGbrBrush::makeMaskImage
virtual void makeMaskImage(bool preserveAlpha)
Convert the mask to inverted gray scale, so it is alpha mask.
Definition: kis_gbr_brush.cpp:371
KisImagePipeBrush::~KisImagePipeBrush
~KisImagePipeBrush() override
Definition: kis_imagepipe_brush.cpp:257
KisImagePipeBrush::generateMaskAndApplyMaskOrCreateDab
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
Create a mask and either mask dst (that is, change all alpha values of the existing pixels to those o...
Definition: kis_imagepipe_brush.cpp:379
KisGbrBrush::KisGbrBrush
KisGbrBrush(const QString &filename)
Construct brush to load filename later as brush.
Definition: kis_gbr_brush.cpp:69
KisBrushesPipe::currentBrushIndex
virtual int currentBrushIndex()=0
Returns the current index of the brush This method is called before the dab is actually painted.
KisPipeBrushParasite::dim
qint32 dim
Definition: kis_pipebrush_parasite.h:86
QIODevice::putChar
bool putChar(char c)
QSharedPointer
KisDabShape
Definition: kis_dab_shape.h:10
KisBrush::setBrushApplication
virtual void setBrushApplication(enumBrushApplication brushApplication)
Definition: kis_brush.cpp:264
KisBrushesPipe::updateBrushIndexes
virtual void updateBrushIndexes(const KisPaintInformation &info, int seqNo)=0
Updates internal counters of the brush after a dab has been painted on the canvas.
PIPE_MASK
Definition: kis_brush.h:36
KisColorfulBrush::setBrightnessAdjustment
virtual void setBrightnessAdjustment(qreal value)
Definition: KisColorfulBrush.cpp:86
KisParasite::Angular
Definition: kis_imagepipe_brush.h:29
KisParasite::Velocity
Definition: kis_imagepipe_brush.h:30
KisImagePipeBrush::KisImagePipeBrush
KisImagePipeBrush(const QString &filename)
Definition: kis_imagepipe_brush.cpp:210
KisImagePipeBrush::parasiteSelection
QString parasiteSelection()
Definition: kis_imagepipe_brush.cpp:401
KisImagePipeBrush::setBrightnessAdjustment
void setBrightnessAdjustment(qreal value) override
Definition: kis_imagepipe_brush.cpp:419
KisBrushesPipe< KisGbrBrush >::m_brushes
QVector< QSharedPointer< KisGbrBrush > > m_brushes
Definition: kis_brushes_pipe.h:182
KisBrush::setSpacing
virtual void setSpacing(double spacing)
Change the spacing of the brush.
Definition: kis_brush.cpp:434
KisImagePipeBrush::maskWidth
qint32 maskWidth(KisDabShape const &, double subPixelX, double subPixelY, const KisPaintInformation &info) const override
Definition: kis_imagepipe_brush.cpp:454
kis_pipebrush_parasite.h
KisGbrBrush::setBrushTipImage
void setBrushTipImage(const QImage &image) override
The image is used to represent the brush in the gui, and may also, depending on the brush type be use...
Definition: kis_gbr_brush.cpp:365
QString
KisParasite::TiltY
Definition: kis_imagepipe_brush.h:34
KisPipeBrushParasite::sanitize
void sanitize()
Definition: kis_pipebrush_parasite.cpp:96
QVector::at
const T & at(int i) const
KisImagePipeBrush::setScale
void setScale(qreal _scale) override
Definition: kis_imagepipe_brush.cpp:470
KisPipeBrushParasite::rank
qint32 rank[MaxDim]
Definition: kis_pipebrush_parasite.h:94
KisBrush::setWidth
void setWidth(qint32 width)
Definition: kis_brush.cpp:206
KisBrushesPipe
Definition: kis_brushes_pipe.h:14
enumBrushApplication
enumBrushApplication
Definition: kis_brush.h:40
KisBrush::brushApplication
virtual enumBrushApplication brushApplication() const
Definition: kis_brush.cpp:270
KisImagePipeBrush::defaultFileExtension
QString defaultFileExtension() const override
Definition: kis_imagepipe_brush.cpp:444
KisGbrBrush
Definition: kis_gbr_brush.h:27
QString::indexOf
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
KisPipeBrushParasite::ncells
qint32 ncells
Definition: kis_pipebrush_parasite.h:85
KisBrush::ColoringInformation
Definition: kis_brush.h:71
KisPipeBrushParasite::setBrushesCount
void setBrushesCount()
Initializes the brushesCount helper.
Definition: kis_pipebrush_parasite.cpp:110
KisImagePipeBrush::setAdjustmentMidPoint
void setAdjustmentMidPoint(quint8 value) override
Definition: kis_imagepipe_brush.cpp:413
KisPipeBrushParasite::selectionMode
QString selectionMode
Definition: kis_pipebrush_parasite.h:97
KisImagePipeBrush::prepareForSeqNo
void prepareForSeqNo(const KisPaintInformation &info, int seqNo) override
Is called by the multithreaded queue to prepare a specific brush tip for the particular seqNo.
Definition: kis_imagepipe_brush.cpp:374
KisParasite::Constant
Definition: kis_imagepipe_brush.h:27
KisBrushesPipe::chooseNextBrush
virtual int chooseNextBrush(const KisPaintInformation &info)=0
Returns the index of the next brush that corresponds to the current values of info.
KisBrush::setAngle
virtual void setAngle(qreal _angle)
Definition: kis_brush.cpp:681
KisImagePipeBrush::setDevices
void setDevices(QVector< QVector< KisPaintDevice * > > devices, int w, int h)
Definition: kis_imagepipe_brush.cpp:515
QString::left
QString left(int n) const
KisImagePipeBrush::boundary
const KisBoundary * boundary() const override
Definition: kis_imagepipe_brush.cpp:431
KisBrush::setScale
virtual void setScale(qreal _scale)
Definition: kis_brush.cpp:671
PIPE_IMAGE
Definition: kis_brush.h:37
KisImagePipeBrush::setBrushApplication
virtual void setBrushApplication(enumBrushApplication brushApplication) override
Definition: kis_imagepipe_brush.cpp:482
KisImagePipeBrush::setSpacing
void setSpacing(double _spacing) override
Change the spacing of the brush.
Definition: kis_imagepipe_brush.cpp:476
QVector::count
int count(const T &value) const
KisBrush::setHeight
void setHeight(qint32 height)
Definition: kis_brush.cpp:216
QVector::size
int size() const
QByteArray::size
int size() const
QIODevice::readAll
QByteArray readAll()
QVector
KisImagePipeBrush
Definition: kis_imagepipe_brush.h:38
KisParasite::Random
Definition: kis_imagepipe_brush.h:31
KisImagePipeBrush::setParasite
void setParasite(const KisPipeBrushParasite &parasite)
Definition: kis_imagepipe_brush.cpp:510
QString::mid
QString mid(int position, int n) const
KisParasite::Incremental
Definition: kis_imagepipe_brush.h:28
KisImagePipeBrush::maskHeight
qint32 maskHeight(KisDabShape const &, double subPixelX, double subPixelY, const KisPaintInformation &info) const override
Definition: kis_imagepipe_brush.cpp:459
KisImagePipeBrush::canPaintFor
bool canPaintFor(const KisPaintInformation &info) override
Returns true if this brush can return something useful for the info.
Definition: kis_imagepipe_brush.cpp:439
kis_imagepipe_brush.h
KisImagePipeBrush::setContrastAdjustment
void setContrastAdjustment(qreal value) override
Definition: kis_imagepipe_brush.cpp:425
KisImagePipeBrush::loadFromDevice
bool loadFromDevice(QIODevice *dev, KisResourcesInterfaceSP resourcesInterface) override
Definition: kis_imagepipe_brush.cpp:262
QByteArray::data
char * data()
QByteArray
QIODevice::write
qint64 write(const char *data, qint64 maxSize)
KisColorfulBrush::setAdjustmentMidPoint
virtual void setAdjustmentMidPoint(quint8 value)
Definition: KisColorfulBrush.cpp:78
KisImagePipeBrush::paintDevice
KisFixedPaintDeviceSP paintDevice(const KoColorSpace *colorSpace, KisDabShape const &, const KisPaintInformation &info, double subPixelX=0, double subPixelY=0) const override
Definition: kis_imagepipe_brush.cpp:393
KisGbrBrush::KisImageBrushesPipe
friend class KisImageBrushesPipe
save the content of this brush to an IO device
Definition: kis_gbr_brush.h:82
KisGbrBrushSP
QSharedPointer< KisGbrBrush > KisGbrBrushSP
Definition: kis_gbr_brush.h:98
KisImagePipeBrush::setAngle
void setAngle(qreal _angle) override
Definition: kis_imagepipe_brush.cpp:464
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Sat Jan 16 2021 23:39:18 by doxygen 1.8.16 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libs/brush

Skip menu "libs/brush"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

krita API Reference

Skip menu "krita API Reference"
  • libs
  •   KritaBasicFlakes
  •   brush
  •   KritaUndo2
  •   KritaFlake
  •   image
  •   KritaPlugin
  •   Krita
  •   KritaPigment
  •   KritaResources
  •   KritaStore
  •   ui
  •   KritaWidgets
  •   KritaWidgetUtils
  • plugins
  •   Assitants
  •   Extensions
  •   Filters
  •   Generators
  •   Formats
  •           src
  •   PaintOps
  •     libpaintop

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal