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