diff --git a/src/app/dialogs/app/dialoglayoutsettings.cpp b/src/app/dialogs/app/dialoglayoutsettings.cpp index 82fa04256..39f141384 100644 --- a/src/app/dialogs/app/dialoglayoutsettings.cpp +++ b/src/app/dialogs/app/dialoglayoutsettings.cpp @@ -33,7 +33,12 @@ #include "../../core/vsettings.h" #include "../../xml/vabstractmeasurements.h" -#include +#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0) +# include "../../../utils/vmath.h" +#else +# include +#endif + enum class PaperSizeTemplate : char { A0, A1, A2, A3, A4 }; diff --git a/src/app/geometry/vsplinepath.cpp b/src/app/geometry/vsplinepath.cpp index 76d80f3b8..b25047197 100644 --- a/src/app/geometry/vsplinepath.cpp +++ b/src/app/geometry/vsplinepath.cpp @@ -30,7 +30,11 @@ #include "vsplinepath_p.h" #include "../libs/ifc/exception/vexception.h" -#include +#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0) +# include "../../utils/vmath.h" +#else +# include +#endif //--------------------------------------------------------------------------------------------------------------------- VSplinePath::VSplinePath(qreal kCurve, quint32 idObject, Draw mode) diff --git a/src/app/tools/drawTools/vtoolspline.cpp b/src/app/tools/drawTools/vtoolspline.cpp index 310c2e567..068e99db1 100644 --- a/src/app/tools/drawTools/vtoolspline.cpp +++ b/src/app/tools/drawTools/vtoolspline.cpp @@ -32,7 +32,12 @@ #include "../../undocommands/movespline.h" #include "../../visualization/vistoolspline.h" #include "../../options.h" -#include + +#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0) +# include "../../../utils/vmath.h" +#else +# include +#endif const QString VToolSpline::ToolType = QStringLiteral("simple"); diff --git a/src/app/tools/drawTools/vtoolsplinepath.cpp b/src/app/tools/drawTools/vtoolsplinepath.cpp index bf9d82f72..a449670ce 100644 --- a/src/app/tools/drawTools/vtoolsplinepath.cpp +++ b/src/app/tools/drawTools/vtoolsplinepath.cpp @@ -31,7 +31,11 @@ #include "../../undocommands/movesplinepath.h" #include "../../visualization/vistoolsplinepath.h" -#include +#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0) +# include "../../../utils/vmath.h" +#else +# include +#endif const QString VToolSplinePath::ToolType = QStringLiteral("path"); diff --git a/src/libs/vlayout/vcontour.cpp b/src/libs/vlayout/vcontour.cpp index 8f08a3c73..a93f4ea75 100644 --- a/src/libs/vlayout/vcontour.cpp +++ b/src/libs/vlayout/vcontour.cpp @@ -32,7 +32,11 @@ #include #include -#include +#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0) +# include "../../utils/vmath.h" +#else +# include +#endif //--------------------------------------------------------------------------------------------------------------------- VContour::VContour() diff --git a/src/libs/vlayout/vlayout.pro b/src/libs/vlayout/vlayout.pro index 5b7192ab0..97fb5fe86 100644 --- a/src/libs/vlayout/vlayout.pro +++ b/src/libs/vlayout/vlayout.pro @@ -27,6 +27,7 @@ CONFIG -= debug_and_release debug_and_release_target DEFINES += QT_MESSAGELOGCONTEXT include(vlayout.pri) +include(../../utils/utils.pri) # This is static library so no need in "make install" diff --git a/src/libs/vlayout/vlayoutdetail.cpp b/src/libs/vlayout/vlayoutdetail.cpp index a94d48d5f..c29719dd0 100644 --- a/src/libs/vlayout/vlayoutdetail.cpp +++ b/src/libs/vlayout/vlayoutdetail.cpp @@ -31,7 +31,11 @@ #include #include -#include +#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0) +# include "../../utils/vmath.h" +#else +# include +#endif #include //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vlayout/vposition.cpp b/src/libs/vlayout/vposition.cpp index df3de516c..51cc9ffb4 100644 --- a/src/libs/vlayout/vposition.cpp +++ b/src/libs/vlayout/vposition.cpp @@ -37,7 +37,11 @@ #include #include #include -#include +#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0) +# include "../../utils/vmath.h" +#else +# include +#endif //--------------------------------------------------------------------------------------------------------------------- VPosition::VPosition(const VContour &gContour, int j, const VLayoutDetail &detail, int i, bool *stop, bool rotate, diff --git a/src/libs/vobj/vobj.pro b/src/libs/vobj/vobj.pro index db7ed3ff9..9625923fb 100644 --- a/src/libs/vobj/vobj.pro +++ b/src/libs/vobj/vobj.pro @@ -25,6 +25,7 @@ CONFIG -= debug_and_release debug_and_release_target DEFINES += QT_MESSAGELOGCONTEXT include(vobj.pri) +include(../../utils/utils.pri) # This is static library so no need in "make install" diff --git a/src/libs/vobj/vobjengine.cpp b/src/libs/vobj/vobjengine.cpp index 05229910f..46220474e 100644 --- a/src/libs/vobj/vobjengine.cpp +++ b/src/libs/vobj/vobjengine.cpp @@ -30,7 +30,11 @@ #include #include -#include +#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0) +# include "../../utils/vmath.h" +#else +# include +#endif //--------------------------------------------------------------------------------------------------------------------- static inline QPaintEngine::PaintEngineFeatures svgEngineFeatures() diff --git a/src/utils/utils.pri b/src/utils/utils.pri index 6a0c9a70c..851661377 100644 --- a/src/utils/utils.pri +++ b/src/utils/utils.pri @@ -1,2 +1,3 @@ HEADERS += \ - $$PWD/logging.h + $$PWD/logging.h \ + $$PWD/vmath.h diff --git a/src/utils/vmath.h b/src/utils/vmath.h new file mode 100644 index 000000000..77f02a9a7 --- /dev/null +++ b/src/utils/vmath.h @@ -0,0 +1,271 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc. +** Contact: http://www.qt-project.org/legal +** +** $QT_BEGIN_LICENSE:GPL$ +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QMATH_H +#define QMATH_H + +#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0) + +#if 0 +#pragma qt_class(QtMath) +#endif + +#include + +#include + + +#define QT_SINE_TABLE_SIZE 256 + +extern const qreal qt_sine_table[QT_SINE_TABLE_SIZE]; + +inline int qCeil(qreal v) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return int(ceilf(float(v))); + else +#endif + return int(ceil(v)); +} + +inline int qFloor(qreal v) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return int(floorf(float(v))); + else +#endif + return int(floor(v)); +} + +inline qreal qFabs(qreal v) +{ +#ifdef QT_USE_MATH_H_FLOATS + if(sizeof(qreal) == sizeof(float)) + return fabsf(float(v)); + else +#endif + return fabs(v); +} + +inline qreal qSin(qreal v) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return sinf(float(v)); + else +#endif + return sin(v); +} + +inline qreal qCos(qreal v) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return cosf(float(v)); + else +#endif + return cos(v); +} + +inline qreal qTan(qreal v) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return tanf(float(v)); + else +#endif + return tan(v); +} + +inline qreal qAcos(qreal v) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return acosf(float(v)); + else +#endif + return acos(v); +} + +inline qreal qAsin(qreal v) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return asinf(float(v)); + else +#endif + return asin(v); +} + +inline qreal qAtan(qreal v) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return atanf(float(v)); + else +#endif + return atan(v); +} + +inline qreal qAtan2(qreal y, qreal x) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return atan2f(float(y), float(x)); + else +#endif + return atan2(y, x); +} + +inline qreal qSqrt(qreal v) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return sqrtf(float(v)); + else +#endif + return sqrt(v); +} + +inline qreal qLn(qreal v) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return logf(float(v)); + else +#endif + return log(v); +} + +inline qreal qExp(qreal v) +{ + // only one signature + // exists, exp(double) + return exp(v); +} + +inline qreal qPow(qreal x, qreal y) +{ +#ifdef QT_USE_MATH_H_FLOATS + if (sizeof(qreal) == sizeof(float)) + return powf(float(x), float(y)); + else +#endif + return pow(x, y); +} + +#ifndef M_E +#define M_E (2.7182818284590452354) +#endif + +#ifndef M_LOG2E +#define M_LOG2E (1.4426950408889634074) +#endif + +#ifndef M_LOG10E +#define M_LOG10E (0.43429448190325182765) +#endif + +#ifndef M_LN2 +#define M_LN2 (0.69314718055994530942) +#endif + +#ifndef M_LN10 +#define M_LN10 (2.30258509299404568402) +#endif + +#ifndef M_PI +#define M_PI (3.14159265358979323846) +#endif + +#ifndef M_PI_2 +#define M_PI_2 (1.57079632679489661923) +#endif + +#ifndef M_PI_4 +#define M_PI_4 (0.78539816339744830962) +#endif + +#ifndef M_1_PI +#define M_1_PI (0.31830988618379067154) +#endif + +#ifndef M_2_PI +#define M_2_PI (0.63661977236758134308) +#endif + +#ifndef M_2_SQRTPI +#define M_2_SQRTPI (1.12837916709551257390) +#endif + +#ifndef M_SQRT2 +#define M_SQRT2 (1.41421356237309504880) +#endif + +#ifndef M_SQRT1_2 +#define M_SQRT1_2 (0.70710678118654752440) +#endif + +inline qreal qFastSin(qreal x) +{ + int si = int(x * (0.5 * QT_SINE_TABLE_SIZE / M_PI)); // Would be more accurate with qRound, but slower. + qreal d = x - si * (2.0 * M_PI / QT_SINE_TABLE_SIZE); + int ci = si + QT_SINE_TABLE_SIZE / 4; + si &= QT_SINE_TABLE_SIZE - 1; + ci &= QT_SINE_TABLE_SIZE - 1; + return qt_sine_table[si] + (qt_sine_table[ci] - 0.5 * qt_sine_table[si] * d) * d; +} + +inline qreal qFastCos(qreal x) +{ + int ci = int(x * (0.5 * QT_SINE_TABLE_SIZE / M_PI)); // Would be more accurate with qRound, but slower. + qreal d = x - ci * (2.0 * M_PI / QT_SINE_TABLE_SIZE); + int si = ci + QT_SINE_TABLE_SIZE / 4; + si &= QT_SINE_TABLE_SIZE - 1; + ci &= QT_SINE_TABLE_SIZE - 1; + return qt_sine_table[si] - (qt_sine_table[ci] + 0.5 * qt_sine_table[si] * d) * d; +} + +Q_DECL_CONSTEXPR inline float qDegreesToRadians(float degrees) +{ + return degrees * float(M_PI/180); +} + +Q_DECL_CONSTEXPR inline double qDegreesToRadians(double degrees) +{ + return degrees * (M_PI / 180); +} + +Q_DECL_CONSTEXPR inline float qRadiansToDegrees(float radians) +{ + return radians * float(180/M_PI); +} + +Q_DECL_CONSTEXPR inline double qRadiansToDegrees(double radians) +{ + return radians * (180 / M_PI); +} + +#endif // QT_VERSION < QT_VERSION_CHECK(5, 1, 0) + +#endif // VMATH_H +