Krita Source Code Documentation
Loading...
Searching...
No Matches
KisPaintThicknessOptionWidget.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 <QLabel>
9#include <QComboBox>
10#include <QFormLayout>
11#include <QVBoxLayout>
12#include <KisLager.h>
15
17{
18 Private(lager::cursor<KisPaintThicknessOptionData> optionData,
19 lager::reader<bool> lightnessModeEnabled)
20 : model{optionData.zoom(kislager::lenses::to_base<KisPaintThicknessOptionMixIn>)},
21 warningLabelVisible{lightnessModeEnabled.map(std::logical_not{})}
22 {
23 }
24
26 lager::reader<bool> warningLabelVisible;
27};
28
29KisPaintThicknessOptionWidget::KisPaintThicknessOptionWidget(lager::cursor<KisPaintThicknessOptionData> optionData,
30 lager::reader<bool> lightnessModeEnabled)
31 : KisCurveOptionWidget(optionData.zoom(kislager::lenses::to_base<KisCurveOptionDataCommon>), KisPaintOpOption::GENERAL, lightnessModeEnabled)
32 , m_d(new Private(optionData, lightnessModeEnabled))
33{
34 using namespace KisWidgetConnectionUtils;
35
36 QWidget* page = new QWidget;
37
38 QLabel *enabledLabel = new QLabel(i18n("Disabled: brush must be in Lightness mode for this option to apply"), page);
39 enabledLabel->setEnabled(true);
40 enabledLabel->setAlignment(Qt::AlignHCenter);
41
42 QComboBox *cmbThicknessMode = new QComboBox(page);
43 cmbThicknessMode->addItem(i18n("Overwrite (Smooth out when low) existing paint thickness"));
44 cmbThicknessMode->addItem(i18n("Paint over existing paint thickness (controlled by Smudge Length)"));
45
46 QFormLayout* formLayout = new QFormLayout();
47 formLayout->addRow(i18n("Paint Thickness Mode:"), cmbThicknessMode);
48 formLayout->addRow(new QLabel(i18n("Describes how the brush's paint thickness interacts with existing thick paint, especially at low values.")));
49
50 QVBoxLayout* pageLayout = new QVBoxLayout(page);
51 pageLayout->setContentsMargins(0, 0, 0, 0);
52 pageLayout->addWidget(enabledLabel);
53 pageLayout->addLayout(formLayout);
54 pageLayout->addWidget(configurationPage());
55
56 m_d->warningLabelVisible.bind(std::bind(&QWidget::setVisible, enabledLabel, std::placeholders::_1));
57
59
60 connectControl(cmbThicknessMode, &m_d->model, "mode");
61
62 m_d->model.optionData.bind(std::bind(&KisPaintThicknessOptionWidget::emitSettingChanged, this));
63}
64
68
70{
72 m_d->model.optionData->write(setting.data());
73}
74
76{
77 KisPaintThicknessOptionMixIn data = *m_d->model.optionData;
78 data.read(setting.data());
79 m_d->model.optionData.set(data);
80
82}
void readOptionSetting(const KisPropertiesConfigurationSP setting) override
void writeOptionSetting(KisPropertiesConfigurationSP setting) const override
void setConfigurationPage(QWidget *page)
QWidget * configurationPage() const
KisPaintThicknessOptionWidget(lager::cursor< KisPaintThicknessOptionData > optionData, lager::reader< bool > lightnessModeEnabled)
const QScopedPointer< Private > m_d
void writeOptionSetting(KisPropertiesConfigurationSP setting) const override
void readOptionSetting(const KisPropertiesConfigurationSP setting) override
@ GENERAL
Definition nugrid.h:26
Private(lager::cursor< KisPaintThicknessOptionData > optionData, lager::reader< bool > lightnessModeEnabled)
bool read(const KisPropertiesConfiguration *setting)