File indexing completed on 2024-06-23 04:27:51

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef KISKRITASENSORPACK_H
0008 #define KISKRITASENSORPACK_H
0009 
0010 #include "kritapaintop_export.h"
0011 #include <boost/operators.hpp>
0012 
0013 #include <KisSensorData.h>
0014 #include <KisSensorPackInterface.h>
0015 
0016 
0017 struct PAINTOP_EXPORT KisKritaSensorData : boost::equality_comparable<KisKritaSensorData>
0018 {
0019     KisKritaSensorData();
0020     
0021     inline friend bool operator==(const KisKritaSensorData &lhs, const KisKritaSensorData &rhs) {   
0022         return lhs.sensorPressure == rhs.sensorPressure &&
0023             lhs.sensorPressureIn == rhs.sensorPressureIn &&
0024             lhs.sensorXTilt == rhs.sensorXTilt &&
0025             lhs.sensorYTilt == rhs.sensorYTilt &&
0026             lhs.sensorTiltDirection == rhs.sensorTiltDirection &&
0027             lhs.sensorTiltElevation == rhs.sensorTiltElevation &&
0028             lhs.sensorSpeed == rhs.sensorSpeed &&
0029             lhs.sensorDrawingAngle == rhs.sensorDrawingAngle &&
0030             lhs.sensorRotation == rhs.sensorRotation &&
0031             lhs.sensorDistance == rhs.sensorDistance &&
0032             lhs.sensorTime == rhs.sensorTime &&
0033             lhs.sensorFuzzyPerDab == rhs.sensorFuzzyPerDab &&
0034             lhs.sensorFuzzyPerStroke == rhs.sensorFuzzyPerStroke &&
0035             lhs.sensorFade == rhs.sensorFade &&
0036             lhs.sensorPerspective == rhs.sensorPerspective &&
0037             lhs.sensorTangentialPressure == rhs.sensorTangentialPressure;   
0038     }
0039 
0040     KisSensorData sensorPressure;
0041     KisSensorData sensorPressureIn;
0042     KisSensorData sensorXTilt;
0043     KisSensorData sensorYTilt;
0044     KisSensorData sensorTiltDirection;
0045     KisSensorData sensorTiltElevation;
0046     KisSensorData sensorSpeed;
0047     KisDrawingAngleSensorData sensorDrawingAngle;
0048     KisSensorData sensorRotation;
0049     KisSensorWithLengthData sensorDistance;
0050     KisSensorWithLengthData sensorTime;
0051     KisSensorData sensorFuzzyPerDab;
0052     KisSensorData sensorFuzzyPerStroke;
0053     KisSensorWithLengthData sensorFade;
0054     KisSensorData sensorPerspective;
0055     KisSensorData sensorTangentialPressure;
0056 };
0057 
0058 class PAINTOP_EXPORT KisKritaSensorPack : public KisSensorPackInterface
0059 {
0060 public:
0061     /**
0062      * Some options make be uncheckable in normal situation, and become
0063      * checkable when loaded from a prefix. E.g. Opacity, Flow and Size
0064      * options of the masking brush. Such options will be marked with
0065      * `CheckableIfHasPrefix` and their state will be deduced from the
0066      * prefix.
0067      */
0068     enum class Checkability {
0069         NotCheckable,
0070         Checkable,
0071         CheckableIfHasPrefix,
0072     };
0073 
0074 public:
0075     KisKritaSensorPack(Checkability checkability);
0076     KisKritaSensorPack(const KisKritaSensorPack &rhs) = default;
0077 
0078     KisSensorPackInterface * clone() const override;
0079     
0080     std::vector<const KisSensorData *> constSensors() const override;
0081     std::vector<KisSensorData *> sensors() override;
0082 
0083     const KisKritaSensorData& constSensorsStruct() const;
0084     KisKritaSensorData& sensorsStruct();
0085 
0086     bool compare(const KisSensorPackInterface *rhs) const override;
0087     bool read(KisCurveOptionDataCommon &data, const KisPropertiesConfiguration *setting) const override;
0088     void write(const KisCurveOptionDataCommon &data, KisPropertiesConfiguration *setting) const override;
0089 
0090     int calcActiveSensorLength(const QString &activeSensorId) const override;
0091 
0092 private:
0093     KisKritaSensorData m_data;
0094     Checkability m_checkability;
0095 };
0096 
0097 #endif // KISKRITASENSORPACK_H