File indexing completed on 2024-05-26 04:34:09

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "MyPaintCurveOptionWidget.h"
0008 #include "KisLager.h"
0009 #include "kis_paintop_option.h"
0010 #include "MyPaintCurveRangeModel.h"
0011 #include "MyPaintCurveOptionRangeControlsStrategy.h"
0012 #include "KisCurveOptionInputControlsStrategy.h"
0013 #include "MyPaintSensorPack.h"
0014 #include "kis_paintop_lod_limitations.h"
0015 
0016 namespace {
0017 KisPaintopLodLimitations calcGeneralMyPaintLodLimitations(const MyPaintCurveOptionData &data)
0018 {
0019     KisPaintopLodLimitations l;
0020 
0021     if (data.sensorStruct().sensorRandom.isActive) {
0022         l.limitations << KoID(QString("Random Sensor Active, %1").arg(data.id.id()), i18nc("PaintOp instant preview limitation", "Random Sensor Active in %1 option, consider disabling Instant Preview", data.id.name()));
0023     }
0024 
0025     return l;
0026 }
0027 } // namespace
0028 
0029 struct MyPaintCurveOptionWidget::Private
0030 {
0031     Private(lager::cursor<MyPaintCurveOptionData> optionData)
0032         : lodLimitations(optionData.map(&calcGeneralMyPaintLodLimitations))
0033     {}
0034 
0035     lager::reader<KisPaintopLodLimitations> lodLimitations;
0036 };
0037 
0038 MyPaintCurveOptionWidget::MyPaintCurveOptionWidget(lager::cursor<MyPaintCurveOptionData> optionData,
0039                                                      qreal maxYRange,
0040                                                      const QString &yValueSuffix)
0041     : KisCurveOptionWidget(optionData.zoom(kislager::lenses::to_base<KisCurveOptionDataCommon>),
0042                             KisPaintOpOption::GENERAL,
0043                             i18n("Base Value: "), yValueSuffix, 1.0,
0044                             lager::make_constant(true),
0045                             std::nullopt,
0046                             MyPaintCurveRangeModel::factory(maxYRange, yValueSuffix),
0047                             KisCurveOptionInputControlsStrategyDouble::factory(),
0048                             MyPaintCurveOptionRangeControlsStrategy::factory(),
0049                             UseFloatingPointStrength)
0050     , m_d(new Private(optionData))
0051 {
0052 }
0053 
0054 MyPaintCurveOptionWidget::~MyPaintCurveOptionWidget()
0055 {
0056 }
0057 
0058 KisPaintOpOption::OptionalLodLimitationsReader MyPaintCurveOptionWidget::lodLimitationsReader() const
0059 {
0060     return m_d->lodLimitations;
0061 }