File indexing completed on 2024-09-22 04:08:31
0001 /* 0002 * SPDX-FileCopyrightText: 2006-2007, 2010 Cyrille Berger <cberger@cberger.net> 0003 * SPDX-FileCopyrightText: 2011 Lukáš Tvrdý <lukast.dev@gmail.com> 0004 * SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com> 0005 * 0006 * SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 #ifndef KISDYNAMICSENSORS_H 0009 #define KISDYNAMICSENSORS_H 0010 0011 #include "KisDynamicSensor.h" 0012 #include <brushengine/kis_paint_information.h> 0013 0014 class KisDynamicSensorSpeed : public KisDynamicSensor 0015 { 0016 public: 0017 KisDynamicSensorSpeed(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride); 0018 0019 qreal value(const KisPaintInformation& info) const override { 0020 return info.drawingSpeed(); 0021 } 0022 }; 0023 0024 class KisDynamicSensorRotation : public KisDynamicSensor 0025 { 0026 public: 0027 KisDynamicSensorRotation(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride); 0028 0029 bool isAdditive() const override { 0030 return true; 0031 } 0032 0033 qreal value(const KisPaintInformation& info) const override { 0034 return info.rotation() / 180.0; 0035 } 0036 }; 0037 0038 class KisDynamicSensorPressure : public KisDynamicSensor 0039 { 0040 public: 0041 KisDynamicSensorPressure(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride); 0042 qreal value(const KisPaintInformation& info) const override { 0043 return info.pressure(); 0044 } 0045 }; 0046 0047 class KisDynamicSensorPressureIn : public KisDynamicSensor 0048 { 0049 public: 0050 KisDynamicSensorPressureIn(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride); 0051 0052 qreal value(const KisPaintInformation& info) const override { 0053 return !info.isHoveringMode() ? info.maxPressure() : 0.0; 0054 } 0055 }; 0056 0057 class KisDynamicSensorXTilt : public KisDynamicSensor 0058 { 0059 public: 0060 KisDynamicSensorXTilt(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride); 0061 0062 qreal value(const KisPaintInformation& info) const override { 0063 return 1.0 - fabs(info.xTilt()) / 60.0; 0064 } 0065 }; 0066 0067 class KisDynamicSensorYTilt : public KisDynamicSensor 0068 { 0069 public: 0070 KisDynamicSensorYTilt(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride); 0071 qreal value(const KisPaintInformation& info) const override { 0072 return 1.0 - fabs(info.yTilt()) / 60.0; 0073 } 0074 }; 0075 0076 class KisDynamicSensorTiltDirection : public KisDynamicSensor 0077 { 0078 public: 0079 KisDynamicSensorTiltDirection(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride); 0080 0081 bool isAdditive() const override { 0082 return true; 0083 } 0084 0085 qreal value(const KisPaintInformation& info) const override { 0086 return scalingToAdditive(KisPaintInformation::tiltDirection(info, true)); 0087 } 0088 }; 0089 0090 class KisDynamicSensorTiltElevation : public KisDynamicSensor 0091 { 0092 public: 0093 KisDynamicSensorTiltElevation(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride); 0094 0095 qreal value(const KisPaintInformation& info) const override { 0096 return KisPaintInformation::tiltElevation(info, 60.0, 60.0, true); 0097 } 0098 }; 0099 0100 class KisDynamicSensorPerspective : public KisDynamicSensor 0101 { 0102 public: 0103 KisDynamicSensorPerspective(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride); 0104 0105 qreal value(const KisPaintInformation& info) const override { 0106 return info.perspective(); 0107 } 0108 }; 0109 0110 class KisDynamicSensorTangentialPressure : public KisDynamicSensor 0111 { 0112 public: 0113 KisDynamicSensorTangentialPressure(const KisSensorData &data, std::optional<KisCubicCurve> curveOverride); 0114 0115 qreal value(const KisPaintInformation& info) const override { 0116 return info.tangentialPressure(); 0117 } 0118 }; 0119 0120 #endif // KISDYNAMICSENSORS_H