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

#include <kis_predefined_brush_chooser.h>

+ Inheritance diagram for KisPredefinedBrushChooser:

Classes

struct  Private
 

Public Member Functions

 KisPredefinedBrushChooser (int maxBrushSize, KisPredefinedBrushModel *model, QWidget *parent=0, const char *name=0)
 
lager::reader< bool > lightnessModeEnabled () const
 
void setBrush (KisBrushSP brush)
 
 ~KisPredefinedBrushChooser () override
 

Private Slots

void slotBrushPropertyChanged (KoResourceSignature signature)
 
void slotBrushSelected (KoResourceSP resource)
 
void slotDeleteBrushResource ()
 
void slotImportNewBrushResource ()
 
void slotNewPredefinedBrush (KoResourceSP)
 
void slotOpenCustomBrush ()
 
void slotResetAdjustments ()
 
void slotResetBrush ()
 

Private Attributes

KisBrushSP m_brush
 
const QScopedPointer< Private > m_d
 
KisResourceItemChooser * m_itemChooser
 

Detailed Description

Definition at line 32 of file kis_predefined_brush_chooser.h.

Constructor & Destructor Documentation

◆ KisPredefinedBrushChooser()

KisPredefinedBrushChooser::KisPredefinedBrushChooser ( int maxBrushSize,
KisPredefinedBrushModel * model,
QWidget * parent = 0,
const char * name = 0 )

Definition at line 163 of file kis_predefined_brush_chooser.cpp.

166 : QWidget(parent),
167 m_d(new Private(model))
168{
169 setObjectName(name);
170
171 setupUi(this);
172
173 brushSizeSpinBox->setRange(0, maxBrushSize, 2);
174 brushSizeSpinBox->setValue(5);
175 brushSizeSpinBox->setExponentRatio(3.0);
176 brushSizeSpinBox->setSuffix(i18n(" px"));
177 brushSizeSpinBox->setExponentRatio(3.0);
178
179 connect(m_d->model, &KisPredefinedBrushModel::brushNameChanged,
180 brushTipNameLabel, &KSqueezedTextLabel::setText);
181 m_d->model->LAGER_QT(brushName).nudge();
182
183 connect(m_d->model, &KisPredefinedBrushModel::brushDetailsChanged,
184 brushDetailsLabel, &QLabel::setText);
185 m_d->model->LAGER_QT(brushDetails).nudge();
186
187 connectControl(brushSizeSpinBox, m_d->model, "brushSize");
188
189 brushRotationAngleSelector->setDecimals(0);
190
191 connectControl(brushRotationAngleSelector, m_d->model, "angle");
192
193 brushSpacingSelectionWidget->setSpacing(true, 1.0);
194
195 connectControl(brushSpacingSelectionWidget, m_d->model, "aggregatedSpacing");
196
198 m_itemChooser->setObjectName("brush_selector");
199
205 m_itemChooser->setMinimumWidth(100);
206 m_itemChooser->setMinimumHeight(150);
207 m_itemChooser->showImportExportBtns(false); // turn the import and delete buttons since we want control over them
208
209 presetsLayout->addWidget(m_itemChooser);
210
213 connect(m_d->model, &KisPredefinedBrushModel::resourceSignatureChanged,
215
216 slotBrushPropertyChanged(m_d->model->resourceSignature());
217
218
219 addPresetButton->setIcon(KisIconUtils::loadIcon("list-add"));
220 deleteBrushTipButton->setIcon(KisIconUtils::loadIcon("edit-delete"));
221
222 connect(addPresetButton, SIGNAL(clicked(bool)), this, SLOT(slotImportNewBrushResource()));
223 connect(deleteBrushTipButton, SIGNAL(clicked(bool)), this, SLOT(slotDeleteBrushResource()));
224
225 customButton->setIcon(KisIconUtils::loadIcon("list-add"));
226 customButton->setToolTip(i18n("Creates a brush tip from the current image, selection, or clipboard."));
227
228 connect(customButton, SIGNAL(clicked()), this, SLOT(slotOpenCustomBrush()));
229
230 resetBrushButton->setToolTip(i18n("Reloads Spacing from file\nSets Scale to 1.0\nSets Rotation to 0.0"));
231 connect(resetBrushButton, SIGNAL(clicked()), SLOT(slotResetBrush()));
232
233 intAdjustmentMidPoint->setRange(0, 255);
234 intAdjustmentMidPoint->setPageStep(10);
235 intAdjustmentMidPoint->setSingleStep(1);
236 intAdjustmentMidPoint->setPrefix(i18nc("@label:slider", "Neutral point: "));
237 connectControl(intAdjustmentMidPoint, m_d->model, "adjustmentMidPoint");
238 connectControl(chkAutoMidPoint, m_d->model, "autoAdjustMidPoint");
239
240 intBrightnessAdjustment->setRange(-100, 100);
241 intBrightnessAdjustment->setPageStep(10);
242 intBrightnessAdjustment->setSingleStep(1);
243 intBrightnessAdjustment->setSuffix("%");
244 intBrightnessAdjustment->setPrefix(i18nc("@label:slider", "Brightness: "));
245 connectControl(intBrightnessAdjustment, m_d->model, "brightnessAdjustment");
246
247 intContrastAdjustment->setRange(-100, 100);
248 intContrastAdjustment->setPageStep(10);
249 intContrastAdjustment->setSingleStep(1);
250 intContrastAdjustment->setSuffix("%");
251 intContrastAdjustment->setPrefix(i18nc("@label:slider", "Contrast: "));
252 connectControl(intContrastAdjustment, m_d->model, "contrastAdjustment");
253
254 btnResetAdjustments->setToolTip(i18nc("@info:tooltip", "Resets all the adjustments to default values:\n Neutral Point: 127\n Brightness: 0%\n Contrast: 0%"));
255 connect(btnResetAdjustments, SIGNAL(clicked()), SLOT(slotResetAdjustments()));
256
257 connectControlState(cmbBrushMode, m_d->model, "applicationSwitchState", "application");
258
259 connect(m_d->model, &KisPredefinedBrushModel::adjustmentsEnabledChanged,
260 intAdjustmentMidPoint, &KisSliderSpinBox::setEnabled);
261 connect(m_d->model, &KisPredefinedBrushModel::adjustmentsEnabledChanged,
262 intBrightnessAdjustment, &KisSliderSpinBox::setEnabled);
263 connect(m_d->model, &KisPredefinedBrushModel::adjustmentsEnabledChanged,
264 intContrastAdjustment, &KisSliderSpinBox::setEnabled);
265 connect(m_d->model, &KisPredefinedBrushModel::adjustmentsEnabledChanged,
266 chkAutoMidPoint, &KisSliderSpinBox::setEnabled);
267 connect(m_d->model, &KisPredefinedBrushModel::adjustmentsEnabledChanged,
268 btnResetAdjustments, &KisSliderSpinBox::setEnabled);
269
270 m_d->model->LAGER_QT(adjustmentsEnabled).nudge();
271}
The resource item delegate for rendering the resource preview.
KisResourceItemChooser * m_itemChooser
void slotBrushPropertyChanged(KoResourceSignature signature)
void slotBrushSelected(KoResourceSP resource)
const QScopedPointer< Private > m_d
void resourceSelected(KoResourceSP resource)
Emitted when a resource was selected.
void setRowHeight(int rowHeight)
Sets the height of the view rows.
void setItemDelegate(QAbstractItemDelegate *delegate)
Sets a custom delegate for the view.
static KisResourceMetaDataModel * resourceMetadataModel()
QIcon loadIcon(const QString &name)
void connectControl(KisCompositeOpListWidget *widget, QObject *source, const char *property)
void connectControlState(QSpinBox *spinBox, QObject *source, const char *readStateProperty, const char *writeProperty)
const QString Brushes

References ResourceType::Brushes, KisWidgetConnectionUtils::connectControl(), KisWidgetConnectionUtils::connectControlState(), KisIconUtils::loadIcon(), m_d, m_itemChooser, KisResourceModelProvider::resourceMetadataModel(), KisResourceItemChooser::resourceSelected(), KisResourceItemChooser::setCurrentItem(), KisResourceItemChooser::setItemDelegate(), KisResourceItemChooser::setRowHeight(), KisResourceItemChooser::setSynced(), KisResourceItemChooser::showImportExportBtns(), KisResourceItemChooser::showTaggingBar(), slotBrushPropertyChanged(), slotBrushSelected(), slotDeleteBrushResource(), slotImportNewBrushResource(), slotOpenCustomBrush(), slotResetAdjustments(), and slotResetBrush().

◆ ~KisPredefinedBrushChooser()

KisPredefinedBrushChooser::~KisPredefinedBrushChooser ( )
override

Definition at line 273 of file kis_predefined_brush_chooser.cpp.

274{
275}

Member Function Documentation

◆ lightnessModeEnabled()

lager::reader< bool > KisPredefinedBrushChooser::lightnessModeEnabled ( ) const

Definition at line 356 of file kis_predefined_brush_chooser.cpp.

357{
358 return m_d->model->LAGER_QT(lightnessModeEnabled);
359}
lager::reader< bool > lightnessModeEnabled() const

References lightnessModeEnabled(), and m_d.

◆ setBrush()

void KisPredefinedBrushChooser::setBrush ( KisBrushSP brush)

◆ slotBrushPropertyChanged

void KisPredefinedBrushChooser::slotBrushPropertyChanged ( KoResourceSignature signature)
privateslot

Definition at line 330 of file kis_predefined_brush_chooser.cpp.

331{
333 m_itemChooser->setCurrentResource(source.bestMatch(signature.md5sum, signature.filename, signature.name));
334}
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
static KisResourcesInterfaceSP instance()
void setCurrentResource(KoResourceSP resource)
Sets the item representing the resource as selected.

References ResourceType::Brushes, KoResourceSignature::filename, KisGlobalResourcesInterface::instance(), m_itemChooser, KoResourceSignature::md5sum, KoResourceSignature::name, KisResourceItemChooser::setCurrentResource(), and source().

◆ slotBrushSelected

void KisPredefinedBrushChooser::slotBrushSelected ( KoResourceSP resource)
privateslot

Definition at line 304 of file kis_predefined_brush_chooser.cpp.

305{
307
308 KisBrushModel::PredefinedBrushData predefinedBrushData = m_d->model->bakedOptionData();
309 if (resource->signature() == predefinedBrushData.resourceSignature) return;
310
311 KisBrushModel::CommonData commonBrushData;
312 KisPredefinedBrushFactory::loadFromBrushResource(commonBrushData, predefinedBrushData, resource.dynamicCast<KisBrush>());
313
314 predefinedBrushData.scale = 1.0;
315 predefinedBrushData.application = KisPredefinedBrushModel::effectiveBrushApplication(predefinedBrushData, m_d->model->m_supportsHSLBrushTips.get());
316
317 // TODO: check what happens when we add a new brush
318 if (this->preserveBrushPresetSettings->isChecked()) {
319 commonBrushData.spacing = m_d->model->spacing();
320 commonBrushData.useAutoSpacing = m_d->model->useAutoSpacing();
321 commonBrushData.autoSpacingCoeff = m_d->model->autoSpacingCoeff();
322 } else {
323 m_d->model->m_commonBrushSizeData.set(predefinedBrushData.baseSize.width());
324 }
325
326 m_d->model->m_commonData.set(commonBrushData);
327 m_d->model->m_predefinedBrushData.set(predefinedBrushData);
328}
static void loadFromBrushResource(KisBrushModel::CommonData &commonData, KisBrushModel::PredefinedBrushData &predefinedBrushData, KisBrushSP brushResource)
static enumBrushApplication effectiveBrushApplication(PredefinedBrushData predefinedData, bool supportsHSLBrushTips)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
KoResourceSignature resourceSignature

References KisBrushModel::PredefinedBrushData::application, KisBrushModel::CommonData::autoSpacingCoeff, KisBrushModel::PredefinedBrushData::baseSize, KisPredefinedBrushModel::effectiveBrushApplication(), KIS_SAFE_ASSERT_RECOVER_RETURN, KisPredefinedBrushFactory::loadFromBrushResource(), m_d, KisBrushModel::PredefinedBrushData::resourceSignature, KisBrushModel::PredefinedBrushData::scale, KisBrushModel::CommonData::spacing, and KisBrushModel::CommonData::useAutoSpacing.

◆ slotDeleteBrushResource

◆ slotImportNewBrushResource

void KisPredefinedBrushChooser::slotImportNewBrushResource ( )
privateslot

Definition at line 361 of file kis_predefined_brush_chooser.cpp.

361 {
362 // reflects m_itemChooser->slotButtonClicked(KisResourceItemChooser::Button_Import)
363 // but adds the .abr files support, as it was in Krita 4
365 QString abrMimeType = "image/x-adobe-brushlibrary";
366 mimeTypes.append(abrMimeType);
367 KoFileDialog dialog(0, KoFileDialog::OpenFiles, "OpenDocument");
368 dialog.setMimeTypeFilters(mimeTypes);
369 dialog.setCaption(i18nc("@title:window", "Choose File to Add"));
370 Q_FOREACH(const QString &filename, dialog.filenames()) {
371 if (QFileInfo(filename).exists() && QFileInfo(filename).isReadable()) {
372 if (KisMimeDatabase::mimeTypeForFile(filename).contains(abrMimeType)) {
374 } else {
376 }
377 }
378 }
379 m_itemChooser->tagFilterModel()->sort(Qt::DisplayRole);
380}
static QString mimeTypeForFile(const QString &file, bool checkExistingFiles=true)
Find the mimetype for the given filename. The filename must include a suffix.
KisTagFilterResourceProxyModel * tagFilterModel() const
static KisResourceLoaderRegistry * instance()
QStringList mimeTypes(const QString &resourceType) const
static KoResourceSP importResourceFileWithUserInput(QWidget *widgetParent, QString storageLocation, QString resourceType, QString resourceFilepath)
static KisStorageModel * instance()
bool importStorage(const QString &filename, StorageImportOption importOption) const

References ResourceType::Brushes, KisResourceUserOperations::importResourceFileWithUserInput(), KisStorageModel::importStorage(), KisResourceLoaderRegistry::instance(), KisStorageModel::instance(), m_itemChooser, KisMimeDatabase::mimeTypeForFile(), KisResourceLoaderRegistry::mimeTypes(), KisStorageModel::None, KoFileDialog::OpenFiles, and KisResourceItemChooser::tagFilterModel().

◆ slotNewPredefinedBrush

void KisPredefinedBrushChooser::slotNewPredefinedBrush ( KoResourceSP resource)
privateslot

◆ slotOpenCustomBrush

void KisPredefinedBrushChooser::slotOpenCustomBrush ( )
privateslot

Definition at line 296 of file kis_predefined_brush_chooser.cpp.

297{
298 KisCustomBrushWidget* customBrushWidget = new KisCustomBrushWidget(this, i18n("Create New Brushtip"));
299 connect(customBrushWidget, SIGNAL(sigNewPredefinedBrush(KoResourceSP)),
301 customBrushWidget->show();
302}

References slotNewPredefinedBrush().

◆ slotResetAdjustments

◆ slotResetBrush

void KisPredefinedBrushChooser::slotResetBrush ( )
privateslot

Definition at line 277 of file kis_predefined_brush_chooser.cpp.

278{
279 KisBrushSP brush = m_itemChooser->currentResource().dynamicCast<KisBrush>();
280 if (brush) {
281 KisBrushModel::CommonData commonData;
283
284 KisPredefinedBrushFactory::loadFromBrushResource(commonData, predefinedData, brush);
285
286 if (m_d->model->applicationSwitchState().items.size() >= LIGHTNESSMAP) {
287 predefinedData.application = LIGHTNESSMAP;
288 }
289
290 m_d->model->m_commonData.set(commonData);
291 m_d->model->m_predefinedBrushData.set(predefinedData);
292 m_d->model->m_commonBrushSizeData.set(KisPredefinedBrushModel::effectiveBrushSize(predefinedData));
293 }
294}
static qreal effectiveBrushSize(PredefinedBrushData predefinedData)
@ LIGHTNESSMAP
Definition kis_brush.h:41

References KisBrushModel::PredefinedBrushData::application, KisResourceItemChooser::currentResource, KisPredefinedBrushModel::effectiveBrushSize(), LIGHTNESSMAP, KisPredefinedBrushFactory::loadFromBrushResource(), m_d, and m_itemChooser.

Member Data Documentation

◆ m_brush

KisBrushSP KisPredefinedBrushChooser::m_brush
private

Definition at line 62 of file kis_predefined_brush_chooser.h.

◆ m_d

const QScopedPointer<Private> KisPredefinedBrushChooser::m_d
private

Definition at line 60 of file kis_predefined_brush_chooser.h.

◆ m_itemChooser

KisResourceItemChooser* KisPredefinedBrushChooser::m_itemChooser
private

Definition at line 63 of file kis_predefined_brush_chooser.h.


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