File indexing completed on 2024-05-12 15:58:43
0001 /* 0002 * SPDX-License-Identifier: GPL-3.0-or-later 0003 */ 0004 0005 #ifndef KIS_SPACING_INFORMATION_H 0006 #define KIS_SPACING_INFORMATION_H 0007 0008 #include "kritaimage_export.h" 0009 0010 /** 0011 * Contains information about distance-based spacing settings in a stroke. The spacing settings may 0012 * be different at different parts of a stroke, e.g. if spacing is linked to pressure; a 0013 * KisSpacingInformation represents the effective spacing at a single specific part of the stroke. 0014 */ 0015 class KRITAIMAGE_EXPORT KisSpacingInformation { 0016 public: 0017 explicit KisSpacingInformation() 0018 : m_distanceSpacingEnabled(true) 0019 , m_distanceSpacing(0.0, 0.0) 0020 , m_rotation(0.0) 0021 , m_coordinateSystemFlipped(false) 0022 { 0023 } 0024 0025 explicit KisSpacingInformation(qreal isotropicSpacing) 0026 : m_distanceSpacingEnabled(true) 0027 , m_distanceSpacing(isotropicSpacing, isotropicSpacing) 0028 , m_rotation(0.0) 0029 , m_coordinateSystemFlipped(false) 0030 { 0031 } 0032 0033 explicit KisSpacingInformation(const QPointF &anisotropicSpacing, qreal rotation, 0034 bool coordinateSystemFlipped) 0035 : m_distanceSpacingEnabled(true) 0036 , m_distanceSpacing(anisotropicSpacing) 0037 , m_rotation(rotation) 0038 , m_coordinateSystemFlipped(coordinateSystemFlipped) 0039 { 0040 } 0041 0042 explicit KisSpacingInformation(bool distanceSpacingEnabled, qreal isotropicSpacing) 0043 : m_distanceSpacingEnabled(distanceSpacingEnabled) 0044 , m_distanceSpacing(isotropicSpacing, isotropicSpacing) 0045 , m_rotation(0.0) 0046 , m_coordinateSystemFlipped(false) 0047 { 0048 } 0049 0050 explicit KisSpacingInformation(bool distanceSpacingEnabled, 0051 const QPointF &anisotropicSpacing, 0052 qreal rotation, 0053 bool coordinateSystemFlipped) 0054 : m_distanceSpacingEnabled(distanceSpacingEnabled) 0055 , m_distanceSpacing(anisotropicSpacing) 0056 , m_rotation(rotation) 0057 , m_coordinateSystemFlipped(coordinateSystemFlipped) 0058 { 0059 } 0060 0061 /** 0062 * @return True if and only if distance-based spacing is enabled. 0063 */ 0064 inline bool isDistanceSpacingEnabled() const { 0065 return m_distanceSpacingEnabled; 0066 } 0067 0068 inline QPointF distanceSpacing() const { 0069 return m_distanceSpacing; 0070 } 0071 0072 inline bool isIsotropic() const { 0073 return m_distanceSpacing.x() == m_distanceSpacing.y(); 0074 } 0075 0076 inline qreal scalarApprox() const { 0077 return isIsotropic() ? m_distanceSpacing.x() : QVector2D(m_distanceSpacing).length(); 0078 } 0079 0080 inline qreal rotation() const { 0081 return m_rotation; 0082 } 0083 0084 bool coordinateSystemFlipped() const { 0085 return m_coordinateSystemFlipped; 0086 } 0087 0088 private: 0089 0090 // Distance-based spacing 0091 bool m_distanceSpacingEnabled; 0092 QPointF m_distanceSpacing; 0093 0094 qreal m_rotation; 0095 bool m_coordinateSystemFlipped; 0096 }; 0097 0098 #endif // KIS_SPACING_INFORMATION_H