File indexing completed on 2024-06-16 04:17:31

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisSharpnessOptionWidget.h"
0007 
0008 
0009 #include <KisLager.h>
0010 
0011 #include <QWidget>
0012 #include <QCheckBox>
0013 #include <QLabel>
0014 #include <QHBoxLayout>
0015 #include <QVBoxLayout>
0016 #include <kis_slider_spin_box.h>
0017 
0018 #include <KisSharpnessOptionModel.h>
0019 #include <KisWidgetConnectionUtils.h>
0020 
0021 struct KisSharpnessOptionWidget::Private
0022 {
0023     Private(lager::cursor<KisSharpnessOptionData> optionData)
0024         : model(optionData.zoom(
0025                     kislager::lenses::to_base<KisSharpnessOptionMixIn>)
0026                 )
0027     {
0028     }
0029 
0030     KisSharpnessOptionModel model;
0031 };
0032 
0033 KisSharpnessOptionWidget::KisSharpnessOptionWidget(lager::cursor<KisSharpnessOptionData> optionData)
0034     : KisCurveOptionWidget(optionData.zoom(kislager::lenses::to_base<KisCurveOptionDataCommon>), KisPaintOpOption::GENERAL)
0035     , m_d(new Private(optionData))
0036 {
0037     using namespace KisWidgetConnectionUtils;
0038 
0039     QWidget *page = new QWidget;
0040 
0041     QCheckBox *alignOutline = new QCheckBox(("Align the brush preview outline to the pixel grid"), page);
0042 
0043     QLabel* thresholdLbl = new QLabel(i18n("Soften edge:"), page);
0044     KisSliderSpinBox *softenEdge = new KisSliderSpinBox(page);
0045     softenEdge->setRange(0, 100);
0046     softenEdge->setSingleStep(1);
0047 
0048     QHBoxLayout* alignHL = new QHBoxLayout;
0049     alignHL->setMargin(2);
0050     alignHL->addWidget(alignOutline);
0051 
0052     QHBoxLayout* softnessHL = new QHBoxLayout;
0053     softnessHL->setMargin(9);
0054     softnessHL->addWidget(thresholdLbl);
0055     softnessHL->addWidget(softenEdge, 1);
0056 
0057     QVBoxLayout* pageLayout = new QVBoxLayout(page);
0058     pageLayout->setMargin(0);
0059     pageLayout->addLayout(alignHL);
0060     pageLayout->addLayout(softnessHL);
0061     pageLayout->addWidget(configurationPage());
0062 
0063     setConfigurationPage(page);
0064 
0065     connectControl(alignOutline, &m_d->model, "alignOutlinePixels");
0066     connectControl(softenEdge, &m_d->model, "softness");
0067 
0068     m_d->model.sharpnessOptionData.bind(std::bind(&KisSharpnessOptionWidget::emitSettingChanged, this));
0069 }
0070 
0071 KisSharpnessOptionWidget::~KisSharpnessOptionWidget()
0072 {
0073 }
0074 
0075 void KisSharpnessOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0076 {
0077     KisCurveOptionWidget::writeOptionSetting(setting);
0078     m_d->model.sharpnessOptionData->write(setting.data());
0079 }
0080 
0081 void KisSharpnessOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0082 {
0083     KisSharpnessOptionMixIn data = *m_d->model.sharpnessOptionData;
0084     data.read(setting.data());
0085     m_d->model.sharpnessOptionData.set(data);
0086 
0087     KisCurveOptionWidget::readOptionSetting(setting);
0088 }