File indexing completed on 2024-06-23 04:27:03
0001 /* This file is part of the KDE project 0002 * SPDX-FileCopyrightText: 2007 Jan Hambrecht <jaham@gmx.net> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "EnhancedPathParameter.h" 0008 #include "EnhancedPathFormula.h" 0009 #include "EnhancedPathShape.h" 0010 #include <KoShapeBackground.h> 0011 #include <KoUnit.h> 0012 #include <math.h> 0013 0014 QString identifierData[] = { 0015 "", // IdentifierUnknown 0016 "pi", // IdentifierPi 0017 "left", // IdentifierLeft 0018 "top", // IdentifierTop 0019 "right", // IdentifierRight 0020 "bottom", // IdentifierBottom 0021 "xstretch", // IdentifierXstretch 0022 "ystretch", // IdentifierYstretch 0023 "hasstroke", // IdentifierHasStroke 0024 "hasfill", // IdentifierHasFill 0025 "width", // IdentifierWidth 0026 "height", // IdentifierHeight 0027 "logwidth", // IdentifierLogwidth 0028 "logheight" // IdentifierLogheight 0029 }; 0030 0031 EnhancedPathParameter::EnhancedPathParameter(EnhancedPathShape *parent) 0032 : m_parent(parent) 0033 { 0034 Q_ASSERT(m_parent); 0035 } 0036 0037 EnhancedPathParameter::~EnhancedPathParameter() 0038 { 0039 } 0040 0041 EnhancedPathShape *EnhancedPathParameter::parent() 0042 { 0043 return m_parent; 0044 } 0045 0046 qreal EnhancedPathParameter::evaluate() 0047 { 0048 return 0.0; 0049 } 0050 0051 void EnhancedPathParameter::modify(qreal value) 0052 { 0053 Q_UNUSED(value); 0054 } 0055 0056 EnhancedPathConstantParameter::EnhancedPathConstantParameter(qreal value, EnhancedPathShape *parent) 0057 : EnhancedPathParameter(parent) 0058 , m_value(value) 0059 { 0060 } 0061 0062 qreal EnhancedPathConstantParameter::evaluate() 0063 { 0064 return m_value; 0065 } 0066 0067 QString EnhancedPathConstantParameter::toString() const 0068 { 0069 return QString::number(m_value); 0070 } 0071 0072 EnhancedPathNamedParameter::EnhancedPathNamedParameter(Identifier identifier, EnhancedPathShape *parent) 0073 : EnhancedPathParameter(parent) 0074 , m_identifier(identifier) 0075 { 0076 } 0077 0078 EnhancedPathNamedParameter::EnhancedPathNamedParameter(const QString &identifier, EnhancedPathShape *parent) 0079 : EnhancedPathParameter(parent) 0080 { 0081 m_identifier = identifierFromString(identifier); 0082 } 0083 0084 qreal EnhancedPathNamedParameter::evaluate() 0085 { 0086 const QRect &viewBox = parent()->viewBox(); 0087 0088 switch (m_identifier) { 0089 case IdentifierPi: 0090 return M_PI; 0091 break; 0092 case IdentifierLeft: 0093 return viewBox.left(); 0094 break; 0095 case IdentifierTop: 0096 return viewBox.top(); 0097 break; 0098 case IdentifierRight: 0099 return viewBox.right(); 0100 break; 0101 case IdentifierBottom: 0102 return viewBox.bottom(); 0103 break; 0104 case IdentifierXstretch: 0105 break; 0106 case IdentifierYstretch: 0107 break; 0108 case IdentifierHasStroke: 0109 return parent()->stroke() ? 1.0 : 0.0; 0110 break; 0111 case IdentifierHasFill: 0112 return parent()->background() ? 0.0 : 1.0; 0113 break; 0114 case IdentifierWidth: 0115 return viewBox.width(); 0116 break; 0117 case IdentifierHeight: 0118 return viewBox.height(); 0119 break; 0120 case IdentifierLogwidth: 0121 // TODO: ? viewBox does not have any unit or const relation to mm 0122 return KoUnit(KoUnit::Millimeter).toUserValue(viewBox.width()) * 100; 0123 break; 0124 case IdentifierLogheight: 0125 // TODO: ? viewBox does not have any unit or const relation to mm 0126 return KoUnit(KoUnit::Millimeter).toUserValue(viewBox.height()) * 100; 0127 break; 0128 default: 0129 break; 0130 } 0131 return 0.0; 0132 } 0133 0134 Identifier EnhancedPathNamedParameter::identifierFromString(const QString &text) 0135 { 0136 if (text.isEmpty()) { 0137 return IdentifierUnknown; 0138 } else if (text == "pi") { 0139 return IdentifierPi; 0140 } else if (text == "left") { 0141 return IdentifierLeft; 0142 } else if (text == "top") { 0143 return IdentifierTop; 0144 } else if (text == "right") { 0145 return IdentifierRight; 0146 } else if (text == "bottom") { 0147 return IdentifierBottom; 0148 } else if (text == "xstretch") { 0149 return IdentifierXstretch; 0150 } else if (text == "ystretch") { 0151 return IdentifierYstretch; 0152 } else if (text == "hasstroke") { 0153 return IdentifierHasStroke; 0154 } else if (text == "hasfill") { 0155 return IdentifierHasFill; 0156 } else if (text == "width") { 0157 return IdentifierWidth; 0158 } else if (text == "height") { 0159 return IdentifierHeight; 0160 } else if (text == "logwidth") { 0161 return IdentifierLogwidth; 0162 } else if (text == "logheight") { 0163 return IdentifierLogheight; 0164 } else { 0165 return IdentifierUnknown; 0166 } 0167 } 0168 0169 QString EnhancedPathNamedParameter::toString() const 0170 { 0171 return identifierData[m_identifier]; 0172 } 0173 0174 EnhancedPathReferenceParameter::EnhancedPathReferenceParameter(const QString &reference, EnhancedPathShape *parent) 0175 : EnhancedPathParameter(parent) 0176 , m_reference(reference) 0177 { 0178 } 0179 0180 qreal EnhancedPathReferenceParameter::evaluate() 0181 { 0182 return parent()->evaluateReference(m_reference); 0183 } 0184 0185 void EnhancedPathReferenceParameter::modify(qreal value) 0186 { 0187 parent()->modifyReference(m_reference, value); 0188 } 0189 0190 QString EnhancedPathReferenceParameter::toString() const 0191 { 0192 return m_reference; 0193 } 0194