qreal ToPoint( qreal unit , const QString unita ) { qreal ri = 0; if (unita == "cm") { ri = CM_TO_POINT( unit ); } else if (unita == "pt" || unita == "px" ) { ri = unit; return ri; } else if (unita == "mm") { ri = MM_TO_POINT( unit ); } else if (unita == "dm") { ri = DM_TO_POINT( unit ); } else if (unita == "inch") { ri = INCH_TO_POINT( unit ); } else if (unita == "pi") { ri = PI_TO_POINT( unit ); } else if (unita == "dd") { ri = DD_TO_POINT( unit ); } else if (unita == "cc") { ri = CC_TO_POINT( unit ); } else { ri = 10; } return ri; }
qreal FopInt( const QString datain ) { QString ctmp = datain; const QString data = ctmp.replace(" ","").trimmed(); //////////qDebug() << "### request unit data->" << datain << " size->" << datain.size(); qreal points = 0; if (data.size() < 1) { return points; } if ( data.endsWith( "%" )) { return 12.5; } if (datain == "0") { return points; } if ( data.endsWith( "pt" ) || data.endsWith( "px" ) ) { points = data.left( data.length() - 2 ).toDouble(); return points; } else if ( data.endsWith( "cm" ) ) { double value = data.left( data.length() - 2 ).toDouble(); points = CM_TO_POINT( value ); } else if ( data.endsWith( "em" ) ) { points = data.left( data.length() - 2 ).toDouble(); } else if ( data.endsWith( "mm" ) ) { double value = data.left( data.length() - 2 ).toDouble(); points = MM_TO_POINT( value ); } else if ( data.endsWith( "dm" ) ) { double value = data.left( data.length() - 2 ).toDouble(); points = DM_TO_POINT( value ); } else if ( data.endsWith( "in" ) ) { double value = data.left( data.length() - 2 ).toDouble(); points = INCH_TO_POINT( value ); } else if ( data.endsWith( "inch" ) ) { double value = data.left( data.length() - 4 ).toDouble(); points = INCH_TO_POINT( value ); } else if ( data.endsWith( "pi" ) ) { double value = data.left( data.length() - 4 ).toDouble(); points = PI_TO_POINT( value ); } else if ( data.endsWith( "dd" ) ) { double value = data.left( data.length() - 4 ).toDouble(); points = DD_TO_POINT( value ); } else if ( data.endsWith( "cc" ) ) { double value = data.left( data.length() - 4 ).toDouble(); points = CC_TO_POINT( value ); } else { points = 0; } return points; }
qreal KoUnit::parseValue(const QString& _value, qreal defaultVal) { if (_value.isEmpty()) return defaultVal; QString value(_value.simplified()); value.remove(QLatin1Char(' ')); int firstLetter = -1; for (int i = 0; i < value.length(); ++i) { if (value.at(i).isLetter()) { if (value.at(i) == QLatin1Char('e')) continue; firstLetter = i; break; } } if (firstLetter == -1) return value.toDouble(); const QString symbol = value.mid(firstLetter); value.truncate(firstLetter); const qreal val = value.toDouble(); if (symbol == QLatin1String("pt")) return val; bool ok; KoUnit u = KoUnit::fromSymbol(symbol, &ok); if (ok) return u.fromUserValue(val); if (symbol == QLatin1String("m")) return DM_TO_POINT(val * 10.0); else if (symbol == QLatin1String("km")) return DM_TO_POINT(val * 10000.0); warnOdf << "KoUnit::parseValue: Unit " << symbol << " is not supported, please report."; // TODO : add support for mi/ft ? return defaultVal; }
qreal KoUnit::convertFromUnitToUnit(const qreal value, const KoUnit &fromUnit, const KoUnit &toUnit, qreal factor) { qreal pt; switch (fromUnit.type()) { case Millimeter: pt = MM_TO_POINT(value); break; case Centimeter: pt = CM_TO_POINT(value); break; case Decimeter: pt = DM_TO_POINT(value); break; case Inch: pt = INCH_TO_POINT(value); break; case Pica: pt = PI_TO_POINT(value); break; case Cicero: pt = CC_TO_POINT(value); break; case Pixel: pt = value / factor; break; case Point: default: pt = value; } switch (toUnit.type()) { case Millimeter: return POINT_TO_MM(pt); case Centimeter: return POINT_TO_CM(pt); case Decimeter: return POINT_TO_DM(pt); case Inch: return POINT_TO_INCH(pt); case Pica: return POINT_TO_PI(pt); case Cicero: return POINT_TO_CC(pt); case Pixel: return pt * factor; case Point: default: return pt; } }
qreal KoUnit::fromUserValue(qreal value) const { switch (m_type) { case Millimeter: return MM_TO_POINT(value); case Centimeter: return CM_TO_POINT(value); case Decimeter: return DM_TO_POINT(value); case Inch: return INCH_TO_POINT(value); case Pica: return PI_TO_POINT(value); case Cicero: return CC_TO_POINT(value); case Pixel: return value / m_pixelConversion; case Point: default: return value; } }