File indexing completed on 2024-09-22 04:08:31

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisDynamicSensorFuzzy.h"
0007 
0008 #include <KisDynamicSensorIds.h>
0009 
0010 #include <kis_paint_information.h>
0011 #include <KisCurveOptionData.h>
0012 
0013 KisDynamicSensorFuzzyBase::KisDynamicSensorFuzzyBase(const KoID &id, bool fuzzyPerStroke, const QString &perStrokeRandomSourceKey, const KisSensorData &data, std::optional<KisCubicCurve> curveOverride)
0014     : KisDynamicSensor(id, data, curveOverride)
0015     , m_fuzzyPerStroke(fuzzyPerStroke)
0016     , m_perStrokeRandomSourceKey(perStrokeRandomSourceKey)
0017 {
0018 }
0019 
0020 bool KisDynamicSensorFuzzyBase::isAdditive() const
0021 {
0022     return true;
0023 }
0024 
0025 qreal KisDynamicSensorFuzzyBase::value(const KisPaintInformation &info) const
0026 {
0027     qreal result = 0.0;
0028 
0029     if (!info.isHoveringMode()) {
0030         result = m_fuzzyPerStroke ?
0031             info.perStrokeRandomSource()->generateNormalized(m_perStrokeRandomSourceKey) :
0032             info.randomSource()->generateNormalized();
0033         result = 2.0 * result - 1.0;
0034     }
0035 
0036     return result;
0037 }
0038 
0039 KisDynamicSensorFuzzyPerDab::KisDynamicSensorFuzzyPerDab(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride)
0040     : KisDynamicSensorFuzzyBase(FuzzyPerDabId, false, "", data, curveOverride)
0041 {
0042 
0043 }
0044 
0045 KisDynamicSensorFuzzyPerStroke::KisDynamicSensorFuzzyPerStroke(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride, const QString &parentOptionName)
0046    : KisDynamicSensorFuzzyBase(FuzzyPerStrokeId, true, parentOptionName + "FuzzyStroke", data, curveOverride)
0047 {
0048 }