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

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef MYPAINTSENSORPACK_H
0008 #define MYPAINTSENSORPACK_H
0009 
0010 #include <boost/operators.hpp>
0011 
0012 #include <KisSensorData.h>
0013 #include <KisSensorPackInterface.h>
0014 
0015 const QString MYPAINT_JSON = "MyPaint/json";
0016 
0017 const KoID MyPaintPressureId("mypaint_pressure", ki18n("Pressure"));
0018 const KoID MyPaintFineSpeedId("mypaint_speed1", ki18n("Fine Speed"));
0019 const KoID MyPaintGrossSpeedId("mypaint_speed2", ki18n("Gross Speed"));
0020 const KoID MyPaintRandomId("mypaint_random", ki18n("Random"));
0021 const KoID MyPaintStrokeId("mypaint_stroke", ki18nc("The duration of a brush stroke", "Stroke"));
0022 const KoID MyPaintDirectionId("mypaint_direction", ki18nc("Drawing Angle", "Direction"));
0023 const KoID MyPaintDeclinationId("mypaint_tilt_declination", ki18nc("Pen tilt declination", "Declination"));
0024 const KoID MyPaintAscensionId("mypaint_tilt_ascension", ki18nc("Pen tilt ascension", "Ascension"));
0025 const KoID MyPaintCustomId("mypaint_custom", ki18n("Custom"));
0026 
0027 struct MyPaintSensorDataWithRange : KisSensorData, boost::equality_comparable<MyPaintSensorDataWithRange>
0028 {
0029     MyPaintSensorDataWithRange(const KoID &id);
0030 
0031     inline friend bool operator==(const MyPaintSensorDataWithRange &lhs, const MyPaintSensorDataWithRange &rhs) {
0032         return lhs.curveRange == rhs.curveRange &&
0033             static_cast<const KisSensorData&>(lhs) == static_cast<const KisSensorData&>(rhs);
0034     }
0035 
0036     QRectF baseCurveRange() const override;
0037     void setBaseCurveRange(const QRectF &rect) override;
0038     void reset() override;
0039 
0040     void reshapeCurve();
0041 
0042     QRectF curveRange {0,-1,1,2};
0043 };
0044 
0045 struct MyPaintSensorData : boost::equality_comparable<MyPaintSensorData>
0046 {
0047     MyPaintSensorData();
0048 
0049     inline friend bool operator==(const MyPaintSensorData &lhs, const MyPaintSensorData &rhs) {   
0050         return lhs.sensorPressure == rhs.sensorPressure &&
0051             lhs.sensorFineSpeed == rhs.sensorFineSpeed &&
0052             lhs.sensorGrossSpeed == rhs.sensorGrossSpeed &&
0053             lhs.sensorRandom == rhs.sensorRandom &&
0054             lhs.sensorStroke == rhs.sensorStroke &&
0055             lhs.sensorDirection == rhs.sensorDirection &&
0056             lhs.sensorDeclination == rhs.sensorDeclination &&
0057             lhs.sensorAscension == rhs.sensorAscension &&
0058             lhs.sensorCustom == rhs.sensorCustom;
0059     }
0060 
0061     MyPaintSensorDataWithRange sensorPressure;
0062     MyPaintSensorDataWithRange sensorFineSpeed;
0063     MyPaintSensorDataWithRange sensorGrossSpeed;
0064     MyPaintSensorDataWithRange sensorRandom;
0065     MyPaintSensorDataWithRange sensorStroke;
0066     MyPaintSensorDataWithRange sensorDirection;
0067     MyPaintSensorDataWithRange sensorDeclination;
0068     MyPaintSensorDataWithRange sensorAscension;
0069     MyPaintSensorDataWithRange sensorCustom;
0070 };
0071 
0072 class MyPaintSensorPack : public KisSensorPackInterface
0073 {
0074 public:
0075     MyPaintSensorPack() = default;
0076     MyPaintSensorPack(const MyPaintSensorPack &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 MyPaintSensorData& constSensorsStruct() const;
0084     MyPaintSensorData& 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 
0091 private:
0092     MyPaintSensorData m_data;
0093 };
0094 
0095 #endif // MYPAINTSENSORPACK_H