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