Krita Source Code Documentation
Loading...
Searching...
No Matches
KisSmudgeLengthOptionWidget.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
7
8#include <KisLager.h>
9
10#include <QWidget>
11#include <QComboBox>
12#include <QCheckBox>
13#include <QFormLayout>
14#include <QLabel>
15#include <QVBoxLayout>
16
19
20
22{
23 Private(lager::cursor<KisSmudgeLengthOptionData> optionData,
24 lager::reader<bool> _isBrushPierced,
25 lager::reader<bool> forceNewEngine)
26 : model(optionData.zoom(
27 kislager::lenses::to_base<KisSmudgeLengthOptionMixIn>),
28 forceNewEngine
29 )
30 , isBrushPierced(_isBrushPierced)
31 {
32 }
33
35 lager::reader<bool> isBrushPierced;
36 QComboBox *cmbSmudgeMode {nullptr};
37};
38
39KisSmudgeLengthOptionWidget::KisSmudgeLengthOptionWidget(lager::cursor<KisSmudgeLengthOptionData> optionData,
40 lager::reader<bool> isBrushPierced,
41 lager::reader<bool> forceNewEngine)
43 , m_d(new Private(optionData, isBrushPierced, forceNewEngine))
44{
45 using namespace KisWidgetConnectionUtils;
46
47 setObjectName("KisSmudgeOptionWidget");
48
49 QWidget *page = new QWidget();
50
51 m_d->cmbSmudgeMode = new QComboBox(page);
52 m_d->cmbSmudgeMode->addItem(i18n("Smearing"), KisSmudgeLengthOptionData::SMEARING_MODE);
53 m_d->cmbSmudgeMode->addItem("dulling-placeholder" , KisSmudgeLengthOptionData::DULLING_MODE);
54
55 QCheckBox *chkSmearAlpha = new QCheckBox(page);
56 QCheckBox *chkUseNewEngine = new QCheckBox(page);
57
58 QFormLayout *formLayout = new QFormLayout();
59 formLayout->addRow(i18n("Smudge mode:"), m_d->cmbSmudgeMode);
60 formLayout->addRow(i18n("Smear alpha:"), chkSmearAlpha);
61 formLayout->addRow(i18n("Use new smudge algorithm:"), chkUseNewEngine);
62 formLayout->addRow(new QLabel(i18n("(required for Color Image, Lightness Map, and Gradient Map brushes)")));
63
64 QVBoxLayout *pageLayout = new QVBoxLayout(page);
65 pageLayout->setContentsMargins(0, 0, 0, 0);
66
67 pageLayout->addLayout(formLayout);
68 pageLayout->addWidget(configurationPage());
69
71
72 connectControl(m_d->cmbSmudgeMode, &m_d->model, "mode");
73 connectControl(chkSmearAlpha, &m_d->model, "smearAlpha");
74 connectControlState(chkUseNewEngine, &m_d->model, "useNewEngineState", "useNewEngine");
75
76 m_d->isBrushPierced.bind(std::bind(&KisSmudgeLengthOptionWidget::updateBrushPierced, this, std::placeholders::_1));
77 m_d->model.optionData.bind(std::bind(&KisSmudgeLengthOptionWidget::emitSettingChanged, this));
78}
79
84
86{
88 m_d->model.backedOptionData().write(setting.data());
89}
90
92{
93 KisSmudgeLengthOptionMixIn data = *m_d->model.optionData;
94 data.read(setting.data());
95 m_d->model.optionData.set(data);
96
98}
99
101{
102 return m_d->model.LAGER_QT(useNewEngineState)[&CheckBoxState::value];
103}
104
106{
107 QString dullingText = i18n("Dulling");
108 QString toolTip;
109
110 if (pierced) {
111 dullingText += i18n(" (caution, pierced brush!)");
112 toolTip = i18nc("@info:tooltip", "This brush has transparent pixels in its center. \"Dulling\" mode may give unstable results. Consider using \"Smearing\" mode instead.");
113 }
114
115 m_d->cmbSmudgeMode->setItemText(1, dullingText);
116 m_d->cmbSmudgeMode->setToolTip(toolTip);
117}
void readOptionSetting(const KisPropertiesConfigurationSP setting) override
void writeOptionSetting(KisPropertiesConfigurationSP setting) const override
void setConfigurationPage(QWidget *page)
QWidget * configurationPage() const
const QScopedPointer< Private > m_d
void writeOptionSetting(KisPropertiesConfigurationSP setting) const override
lager::reader< bool > useNewEngine() const
KisSmudgeLengthOptionWidget(lager::cursor< KisSmudgeLengthOptionData > optionData, lager::reader< bool > isBrushPierced, lager::reader< bool > forceNewEngine)
void readOptionSetting(const KisPropertiesConfigurationSP setting) override
@ GENERAL
Definition nugrid.h:26
bool read(const KisPropertiesConfiguration *setting)
Private(lager::cursor< KisSmudgeLengthOptionData > optionData, lager::reader< bool > _isBrushPierced, lager::reader< bool > forceNewEngine)