Krita Source Code Documentation
Loading...
Searching...
No Matches
KisCustomBrushWidget Class Reference

#include <kis_custom_brush_widget.h>

+ Inheritance diagram for KisCustomBrushWidget:

Signals

void sigNewPredefinedBrush (KoResourceSP)
 

Public Member Functions

 KisCustomBrushWidget (QWidget *parent, const QString &caption)
 
virtual ~KisCustomBrushWidget ()
 

Private Slots

void slotAddPredefined ()
 
void slotReload ()
 
void slotSourceChanged (int source)
 
void slotUpdateBrush ()
 
void slotUpdateSaveButton ()
 

Private Member Functions

int currentBrushStyle ()
 
KisConfigWidget * currentBrushWidget ()
 
KisImageWSP currentImage ()
 
QString fileName ()
 
void loadImage ()
 
KisConfigWidget * otherBrushWidget ()
 
void swapBrushWidget ()
 
void updatePreviewImage (bool updateDev)
 

Private Attributes

KisConfigWidget * m_animBrushWidget {nullptr}
 
KisConfigWidget * m_brushWidget {nullptr}
 
QDialogButtonBox * m_buttonBox {nullptr}
 
KisPaintDeviceSP m_dev {nullptr}
 
QVector< QVector< KisPaintDevice * > > m_devices
 
QRect m_devRect
 
const KoColorSpace * m_imageColorSpace
 
QSize m_imageSize
 
KisPropertiesConfigurationSP m_oldConfig {nullptr}
 
QLabel * m_preview {nullptr}
 
KoResourceServer< KisBrush > * m_rServer {0}
 
bool m_useClipboard {false}
 

Detailed Description

Definition at line 22 of file kis_custom_brush_widget.h.

Constructor & Destructor Documentation

◆ KisCustomBrushWidget()

KisCustomBrushWidget::KisCustomBrushWidget ( QWidget * parent,
const QString & caption )

Definition at line 63 of file kis_custom_brush_widget.cpp.

64 : QDialog(parent)
65{
66 setWindowTitle(caption);
67
68 QVBoxLayout* layout = new QVBoxLayout();
69 QHBoxLayout* hLayout = new QHBoxLayout();
70
71 m_preview = new QLabel();
72 m_preview->setFixedSize(110, 110);
73 m_preview->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
74 m_preview->setScaledContents(false);
75 m_preview->setFrameStyle(QFrame::StyledPanel | QFrame::Plain);
76 m_preview->setAlignment(Qt::AlignCenter);
77 m_preview->setWordWrap(true);
78 hLayout->addWidget(m_preview);
79
80 QLabel* sourceLabel = new QLabel(i18nc("@label:listbox image source", "Source:"));
81 hLayout->addWidget(sourceLabel);
82
83 QComboBox* sourceBox = new QComboBox();
84 sourceBox->addItem(i18nc("@item:inlistbox", "Image"), Source::Image);
85 sourceBox->addItem(i18nc("@item:inlistbox", "Clipboard"), Source::Clipboard);
86 hLayout->addWidget(sourceBox);
87
88 QPushButton* reloadButton = new QPushButton(i18nc("@action:button reload image", "Reload"));
89 hLayout->addWidget(reloadButton);
90
91 layout->addLayout(hLayout);
92
93 const QString mimetype = "image/x-gimp-brush";
96 m_brushWidget = filter->createConfigurationWidget(0, 0, mimetype.toLatin1());
97 connect(m_brushWidget, SIGNAL(sigConfigurationUpdated()), this, SLOT(slotUpdateBrush()));
98
99 const QString animMimetype = "image/x-gimp-brush-animated";
102 m_animBrushWidget = animFilter->createConfigurationWidget(0, 0, animMimetype.toLatin1());
103 connect(m_animBrushWidget, SIGNAL(sigConfigurationUpdated()), this, SLOT(slotUpdateBrush()));
104 layout->addWidget(m_animBrushWidget);
105
107
109
110 m_buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel|QDialogButtonBox::Save);
111 KGuiItem::assign(m_buttonBox->button(QDialogButtonBox::Save), KStandardGuiItem::save());
112 KGuiItem::assign(m_buttonBox->button(QDialogButtonBox::Cancel), KStandardGuiItem::cancel());
113 layout->addWidget(m_buttonBox);
114 connect(m_buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
115 connect(m_buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
116
117 setLayout(layout);
118
119 connect(this, SIGNAL(accepted()), SLOT(slotAddPredefined()));
120 connect(reloadButton, SIGNAL(clicked()), this, SLOT(slotReload()));
121 connect(sourceBox, SIGNAL(activated(int)), this, SLOT(slotSourceChanged(int)));
122
123 loadImage();
124}
static KisBrushServerProvider * instance()
KoResourceServer< KisBrush > * brushServer()
virtual KisPropertiesConfigurationSP configuration() const =0
KisPropertiesConfigurationSP m_oldConfig
KisConfigWidget * m_animBrushWidget
QDialogButtonBox * m_buttonBox
KisConfigWidget * currentBrushWidget()
KisConfigWidget * m_brushWidget
KoResourceServer< KisBrush > * m_rServer
static KisImportExportFilter * filterForMimeType(const QString &mimetype, Direction direction)
filterForMimeType loads the relevant import/export plugin and returns it. The caller is responsible f...
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128

References KisBrushServerProvider::brushServer(), Clipboard, KisConfigWidget::configuration(), currentBrushWidget(), KisImportExportManager::Export, KisImportExportManager::filterForMimeType(), Image, KisBrushServerProvider::instance(), KIS_SAFE_ASSERT_RECOVER_RETURN, loadImage(), m_animBrushWidget, m_brushWidget, m_buttonBox, m_oldConfig, m_preview, m_rServer, slotAddPredefined(), slotReload(), slotSourceChanged(), and slotUpdateBrush().

◆ ~KisCustomBrushWidget()

KisCustomBrushWidget::~KisCustomBrushWidget ( )
virtual

Definition at line 126 of file kis_custom_brush_widget.cpp.

127{
128}

Member Function Documentation

◆ currentBrushStyle()

int KisCustomBrushWidget::currentBrushStyle ( )
private

Definition at line 156 of file kis_custom_brush_widget.cpp.

157{
159}
const QString KEY_BRUSH_STYLE

References KisConfigWidget::configuration(), currentBrushWidget(), and KEY_BRUSH_STYLE.

◆ currentBrushWidget()

KisConfigWidget * KisCustomBrushWidget::currentBrushWidget ( )
private

Definition at line 130 of file kis_custom_brush_widget.cpp.

131{
132 if (m_useClipboard) { // Can't be animated
133 return m_brushWidget;
134 } else {
135 return m_animBrushWidget;
136 }
137}

References m_animBrushWidget, m_brushWidget, and m_useClipboard.

◆ currentImage()

KisImageWSP KisCustomBrushWidget::currentImage ( )
private

Definition at line 169 of file kis_custom_brush_widget.cpp.

170{
172 if (!mainWin) { return nullptr; }
173 KisViewManager *viewManager = mainWin->viewManager();
174 if (!viewManager) { return nullptr; }
175
176 // Animated uses the view for the layer (frames) count.
177 m_animBrushWidget->setView(viewManager);
178 return viewManager->image();
179}
virtual void setView(KisViewManager *view)
Main window for Krita.
KisViewManager * viewManager
static KisPart * instance()
Definition KisPart.cpp:130
KisMainWindow * currentMainwindow() const
Definition KisPart.cpp:457
KisImageWSP image() const
Return the image this view is displaying.

References KisPart::currentMainwindow(), KisViewManager::image(), KisPart::instance(), m_animBrushWidget, KisConfigWidget::setView(), and KisMainWindow::viewManager.

◆ fileName()

QString KisCustomBrushWidget::fileName ( )
private

Definition at line 161 of file kis_custom_brush_widget.cpp.

162{
163 const QString name = currentBrushWidget()->configuration()->getString(KEY_NAME);
164 const QString suffix = currentBrushStyle() == BrushStyle::Regular ? ".gbr" : ".gih";
165 // Export to a temp location, the resource system doesn't like importing from the resource folder
166 return QStandardPaths::writableLocation(QStandardPaths::TempLocation) + "/" + name.split(" ").join("_") + suffix;
167}
const QString KEY_NAME
const char * name(StandardAction id)

References KisConfigWidget::configuration(), currentBrushStyle(), currentBrushWidget(), KEY_NAME, and Regular.

◆ loadImage()

void KisCustomBrushWidget::loadImage ( )
private

Definition at line 327 of file kis_custom_brush_widget.cpp.

328{
330 KisImageWSP image;
331 if (!m_dev) {
332 if (m_useClipboard) {
333 KisImageSP clipImage = KisClipboard::instance()->clipImage(false);
334 if (clipImage) {
335 m_dev = new KisPaintDevice(*clipImage->projection());
336 m_devRect = clipImage->projection()->exactBounds();
337
338 // if the device has non-transparent default pixel, we
339 // should bake that, otherwise calls to exactBounds() will
340 // have negative effects
342 }
343 } else if ((image = currentImage())) {
344 // create copy of the data
345 image->barrierLock();
346 m_dev = new KisPaintDevice(*image->projection());
347 m_devRect = QRect(QPoint(0,0), image->size());
348 image->unlock();
349
350 KisSelectionSP selection = image->globalSelection();
351 if (selection) {
352 // apply selection mask
353 QRect r = selection->selectedExactRect();
354
355 KisHLineIteratorSP pixelIt = m_dev->createHLineIteratorNG(r.x(), r.top(), r.width());
356 KisHLineConstIteratorSP maskIt = selection->projection()->createHLineIteratorNG(r.x(), r.top(), r.width());
357
358 for (qint32 y = r.top(); y <= r.bottom(); ++y) {
359 do {
360 m_dev->colorSpace()->applyAlphaU8Mask(pixelIt->rawData(), maskIt->oldRawData(), 1);
361 } while (pixelIt->nextPixel() && maskIt->nextPixel());
362
363 pixelIt->nextRow();
364 maskIt->nextRow();
365 }
366
367 m_dev->crop(r);
368 m_devRect = r;
369 }
370 }
371 updatePreviewImage(true);
372 }
373 } else /*if (currentBrushStyle() == BrushStyle::Animated)*/ {
374 KisImageWSP image;
375 if (m_devices.isEmpty() && (image = currentImage())) {
376 // For each layer in the current image, create a new image, and add it to the list
377 m_devices.clear();
379
380 KisImageReadOnlyBarrierLock lock(image);
381
382 m_imageSize = image->size();
383 m_imageColorSpace = image->colorSpace();
384
385 // We only loop over the rootLayer. Since we actually should have a layer selection
386 // list, no need to elaborate on that here and now
387 KoProperties properties;
388 properties.setProperty("visible", true);
389 QList<KisNodeSP> layers = image->root()->childNodes(QStringList("KisLayer"), properties);
390 Q_FOREACH (KisNodeSP node, layers) {
391 m_devices[0].append(node->projection().data());
392 }
393 }
394 updatePreviewImage(true);
395 }
396
397 m_buttonBox->button(QDialogButtonBox::Save)->setEnabled(m_dev || !m_devices.isEmpty());
398}
QList< QString > QStringList
virtual const quint8 * oldRawData() const =0
virtual bool nextPixel()=0
static KisClipboard * instance()
KisImageSP clipImage(bool showPopup, int overridePasteBehaviour=-1) const
const KoColorSpace * m_imageColorSpace
void updatePreviewImage(bool updateDev)
QVector< QVector< KisPaintDevice * > > m_devices
virtual void nextRow()=0
const KoColorSpace * colorSpace() const
void unlock()
Definition kis_image.cc:831
void barrierLock(bool readOnly=false)
Wait until all the queued background jobs are completed and lock the image.
Definition kis_image.cc:782
KisPaintDeviceSP projection() const
QSize size() const
Definition kis_image.h:550
KisSelectionSP globalSelection() const
Definition kis_image.cc:721
void crop(qint32 x, qint32 y, qint32 w, qint32 h)
QRect exactBounds() const
KisHLineIteratorSP createHLineIteratorNG(qint32 x, qint32 y, qint32 w)
const KoColorSpace * colorSpace() const
virtual void applyAlphaU8Mask(quint8 *pixels, const quint8 *alpha, qint32 nPixels) const =0
void setProperty(const QString &name, const QVariant &value)
void bakeDefaultPixel(KisPaintDeviceSP clip, const QRect &rc)
virtual KisPaintDeviceSP projection() const =0
QList< KisNodeSP > childNodes(const QStringList &nodeTypes, const KoProperties &properties) const
Definition kis_node.cpp:439
KisPixelSelectionSP projection() const
QRect selectedExactRect() const
Slow, but exact way of determining the rectangle that encloses the selection.

References KoColorSpace::applyAlphaU8Mask(), KisToolUtils::bakeDefaultPixel(), KisImage::barrierLock(), KisNode::childNodes(), KisClipboard::clipImage(), KisImage::colorSpace(), KisPaintDevice::colorSpace(), KisPaintDevice::createHLineIteratorNG(), KisPaintDevice::crop(), currentBrushStyle(), currentImage(), KisSharedPtr< T >::data(), KisPaintDevice::exactBounds(), KisImage::globalSelection(), KisClipboard::instance(), m_buttonBox, m_dev, m_devices, m_devRect, m_imageColorSpace, m_imageSize, m_useClipboard, KisBaseConstIteratorNG::nextPixel(), KisHLineConstIteratorNG::nextRow(), KisBaseConstAccessor::oldRawData(), KisImage::projection(), KisSelection::projection(), KisBaseNode::projection(), Regular, KisNodeFacade::root, KisSelection::selectedExactRect(), KoProperties::setProperty(), KisImage::size(), KisImage::unlock(), and updatePreviewImage().

◆ otherBrushWidget()

KisConfigWidget * KisCustomBrushWidget::otherBrushWidget ( )
private

Definition at line 139 of file kis_custom_brush_widget.cpp.

140{
141 if (m_useClipboard) { // Can't be animated
142 return m_animBrushWidget;
143 } else {
144 return m_brushWidget;
145 }
146}

References m_animBrushWidget, m_brushWidget, and m_useClipboard.

◆ sigNewPredefinedBrush

void KisCustomBrushWidget::sigNewPredefinedBrush ( KoResourceSP )
signal

◆ slotAddPredefined

void KisCustomBrushWidget::slotAddPredefined ( )
privateslot

Definition at line 284 of file kis_custom_brush_widget.cpp.

285{
286 if (!m_rServer || !(m_dev || !m_devices.isEmpty())) {
287 close();
288 return;
289 }
290
292 // Don't show a second export dialog when calling export later.
293 doc->setFileBatchMode(true);
294 KisImageSP image;
295
297 image = new KisImage(0, m_devRect.width(), m_devRect.height(), m_dev->colorSpace(), TEMPORARY_BRUSH_NAME);
299 image->addNode(node);
300 } else /*if (currentBrushStyle() == BrushStyle::Animated)*/ {
301 image = new KisImage(0, m_imageSize.width(), m_imageSize.height(), m_imageColorSpace, TEMPORARY_BRUSH_NAME);
302 Q_FOREACH(KisPaintDeviceSP dev, m_devices[0]) {
304 image->addNode(node);
305 }
306 }
307
308 doc->setCurrentImage(image);
309
310 const QByteArray mimetype = currentBrushStyle() == BrushStyle::Regular ? "image/x-gimp-brush" : "image/x-gimp-brush-animated";
311 QString path = fileName();
312 bool success = doc->exportDocumentSync(path, mimetype, currentBrushWidget()->configuration());
313 doc->deleteLater();
314
315 // Add it to the brush server, so that it automatically gets to the mediators, and
316 // so to the other brush choosers can pick it up, if they want to
317 if (success) {
319 if (resource) {
320 Q_EMIT sigNewPredefinedBrush(resource);
321 }
322 }
323
324 close();
325}
const quint8 OPACITY_OPAQUE_U8
void sigNewPredefinedBrush(KoResourceSP)
void setFileBatchMode(const bool batchMode)
bool exportDocumentSync(const QString &path, const QByteArray &mimeType, KisPropertiesConfigurationSP exportConfiguration=0)
void setCurrentImage(KisImageSP image, bool forceInitialUpdate=true, KisNodeSP preActivatedNode=nullptr)
KisDocument * createTemporaryDocument() const
Definition KisPart.cpp:234
static KoResourceSP importResourceFileWithUserInput(QWidget *widgetParent, QString storageLocation, QString resourceType, QString resourceFilepath)
const QString TEMPORARY_BRUSH_NAME
QAction * close(const QObject *recvr, const char *slot, QObject *parent)
const QString Brushes
bool addNode(KisNodeSP node, KisNodeSP parent=KisNodeSP(), KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)

References KisNodeFacade::addNode(), ResourceType::Brushes, KisPaintDevice::colorSpace(), KisPart::createTemporaryDocument(), currentBrushStyle(), currentBrushWidget(), KisDocument::exportDocumentSync(), fileName(), KisResourceUserOperations::importResourceFileWithUserInput(), KisPart::instance(), m_dev, m_devices, m_devRect, m_imageColorSpace, m_imageSize, m_rServer, OPACITY_OPAQUE_U8, Regular, KisDocument::setCurrentImage(), KisDocument::setFileBatchMode(), sigNewPredefinedBrush(), and TEMPORARY_BRUSH_NAME.

◆ slotReload

void KisCustomBrushWidget::slotReload ( )
privateslot

Definition at line 259 of file kis_custom_brush_widget.cpp.

260{
261 m_dev = nullptr;
263 loadImage();
264}

References KisSharedPtr< T >::clear(), loadImage(), m_dev, and m_devices.

◆ slotSourceChanged

void KisCustomBrushWidget::slotSourceChanged ( int source)
privateslot

Definition at line 181 of file kis_custom_brush_widget.cpp.

182{
183 bool useClipboard = source == Source::Clipboard;
184 if (m_useClipboard == useClipboard) { return; }
185
186 m_useClipboard = useClipboard;
187
189
190 if (m_useClipboard) {
191 // Clipboard doesn't support animated.
193 cfg->setProperty(KEY_BRUSH_STYLE, BrushStyle::Regular);
195 }
196
197 slotReload();
198}
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
virtual void setConfiguration(const KisPropertiesConfigurationSP config)=0

References Clipboard, KisConfigWidget::configuration(), currentBrushWidget(), KEY_BRUSH_STYLE, m_useClipboard, Regular, KisConfigWidget::setConfiguration(), slotReload(), source(), and swapBrushWidget().

◆ slotUpdateBrush

void KisCustomBrushWidget::slotUpdateBrush ( )
privateslot

◆ slotUpdateSaveButton

void KisCustomBrushWidget::slotUpdateSaveButton ( )
privateslot

Definition at line 266 of file kis_custom_brush_widget.cpp.

267{
268 if (!m_rServer) { return; }
269
270 const QString name = currentBrushWidget()->configuration()->getString(KEY_NAME);
271 int brushStyle = currentBrushStyle();
272 bool needsUpdate = (name != m_oldConfig->getString(KEY_NAME) || brushStyle != m_oldConfig->getInt(KEY_BRUSH_STYLE));
273 if (!needsUpdate) { return; }
274
275 const QString suffix = brushStyle == BrushStyle::Regular ? ".gbr" : ".gih";
276 QString exportFilename = m_rServer->saveLocation() + "/" + name.split(" ").join("_") + suffix;
277 if (QFileInfo(exportFilename).exists()) {
278 m_buttonBox->button(QDialogButtonBox::Save)->setText(i18nc("@action:button", "Overwrite"));
279 } else {
280 m_buttonBox->button(QDialogButtonBox::Save)->setText(i18nc("@action:button", "Save"));
281 }
282}
QString saveLocation()
Returns path where to save user defined and imported resources to.

References KisConfigWidget::configuration(), currentBrushStyle(), currentBrushWidget(), KEY_BRUSH_STYLE, KEY_NAME, m_buttonBox, m_oldConfig, m_rServer, Regular, and KoResourceServer< T >::saveLocation().

◆ swapBrushWidget()

void KisCustomBrushWidget::swapBrushWidget ( )
private

Definition at line 148 of file kis_custom_brush_widget.cpp.

149{
151 layout()->replaceWidget(otherBrushWidget(), currentBrushWidget());
152 otherBrushWidget()->hide();
153 currentBrushWidget()->show();
154}
KisConfigWidget * otherBrushWidget()

References currentBrushWidget(), otherBrushWidget(), and KisConfigWidget::setConfiguration().

◆ updatePreviewImage()

void KisCustomBrushWidget::updatePreviewImage ( bool updateDev)
private

Definition at line 213 of file kis_custom_brush_widget.cpp.

214{
215 int brushStyle = currentBrushStyle();
216 bool useColorMask = currentBrushWidget()->configuration()->getBool(KEY_MASK);
217 bool preserveAlpha = currentBrushWidget()->configuration()->getBool(KEY_PRESERVE_ALPHA);
218 bool needsUpdate = updateDev || (brushStyle != m_oldConfig->getInt(KEY_BRUSH_STYLE)) ||
219 (useColorMask != m_oldConfig->getInt(KEY_MASK)) || (preserveAlpha != m_oldConfig->getInt(KEY_PRESERVE_ALPHA));
220 if (!needsUpdate) {
221 return;
222 }
223
224 // Create a temporary brush to generate a preview image
226 QRect rc;
228 dev = m_dev;
229 rc = m_devRect;
230 } else {
231 if (!m_devices.isEmpty() && !m_devices[0].isEmpty()) {
232 dev = m_devices[0][0];
233 rc = QRect(QPoint(0,0), m_imageSize);
234 }
235 }
236
237 QImage brushImage;
238 if (dev) {
239 KisBrushSP brush = KisBrushSP(new KisGbrBrush(dev, rc.x(), rc.y(), rc.width(), rc.height()));
240
241 if (useColorMask) {
242 static_cast<KisGbrBrush*>(brush.data())->makeMaskImage(preserveAlpha);
243 static_cast<KisGbrBrush*>(brush.data())->setBrushApplication(preserveAlpha ? LIGHTNESSMAP : ALPHAMASK);
244 } else {
245 static_cast<KisGbrBrush*>(brush.data())->setBrushApplication(IMAGESTAMP);
246 }
247 brushImage = brush->brushTipImage();
248 }
249
250 if (brushImage.isNull()) {
251 m_preview->setText(i18nc("@info empty image", "Empty"));
252 } else {
253 int w = m_preview->size().width() - m_preview->frameWidth() * 2;
254 brushImage = brushImage.scaled(w, w, Qt::KeepAspectRatio);
255 m_preview->setPixmap(QPixmap::fromImage(brushImage));
256 }
257}
const QString KEY_MASK
const QString KEY_PRESERVE_ALPHA
QSharedPointer< KisBrush > KisBrushSP
Definition kis_brush.h:49
@ ALPHAMASK
Definition kis_brush.h:39
@ IMAGESTAMP
Definition kis_brush.h:40
@ LIGHTNESSMAP
Definition kis_brush.h:41

References ALPHAMASK, KisConfigWidget::configuration(), currentBrushStyle(), currentBrushWidget(), IMAGESTAMP, KEY_BRUSH_STYLE, KEY_MASK, KEY_PRESERVE_ALPHA, LIGHTNESSMAP, m_dev, m_devices, m_devRect, m_imageSize, m_oldConfig, m_preview, and Regular.

Member Data Documentation

◆ m_animBrushWidget

KisConfigWidget* KisCustomBrushWidget::m_animBrushWidget {nullptr}
private

Definition at line 77 of file kis_custom_brush_widget.h.

77{nullptr};

◆ m_brushWidget

KisConfigWidget* KisCustomBrushWidget::m_brushWidget {nullptr}
private

Definition at line 76 of file kis_custom_brush_widget.h.

76{nullptr};

◆ m_buttonBox

QDialogButtonBox* KisCustomBrushWidget::m_buttonBox {nullptr}
private

Definition at line 78 of file kis_custom_brush_widget.h.

78{nullptr};

◆ m_dev

KisPaintDeviceSP KisCustomBrushWidget::m_dev {nullptr}
private

Definition at line 80 of file kis_custom_brush_widget.h.

80{nullptr};

◆ m_devices

QVector<QVector<KisPaintDevice*> > KisCustomBrushWidget::m_devices
private

Definition at line 82 of file kis_custom_brush_widget.h.

◆ m_devRect

QRect KisCustomBrushWidget::m_devRect
private

Definition at line 81 of file kis_custom_brush_widget.h.

◆ m_imageColorSpace

const KoColorSpace* KisCustomBrushWidget::m_imageColorSpace
private

Definition at line 84 of file kis_custom_brush_widget.h.

◆ m_imageSize

QSize KisCustomBrushWidget::m_imageSize
private

Definition at line 83 of file kis_custom_brush_widget.h.

◆ m_oldConfig

KisPropertiesConfigurationSP KisCustomBrushWidget::m_oldConfig {nullptr}
private

Definition at line 89 of file kis_custom_brush_widget.h.

89{nullptr};

◆ m_preview

QLabel* KisCustomBrushWidget::m_preview {nullptr}
private

Definition at line 75 of file kis_custom_brush_widget.h.

75{nullptr};

◆ m_rServer

KoResourceServer<KisBrush>* KisCustomBrushWidget::m_rServer {0}
private

Definition at line 86 of file kis_custom_brush_widget.h.

86{0};

◆ m_useClipboard

bool KisCustomBrushWidget::m_useClipboard {false}
private

Definition at line 88 of file kis_custom_brush_widget.h.

88{false};

The documentation for this class was generated from the following files: