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