diff options
-rw-r--r-- | src/libs/utils/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/libs/utils/mathutils.cpp | 30 | ||||
-rw-r--r-- | src/libs/utils/mathutils.h | 12 | ||||
-rw-r--r-- | src/libs/utils/utils.qbs | 2 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffutils.cpp | 13 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffutils.h | 2 | ||||
-rw-r--r-- | src/plugins/diffeditor/sidebysidediffeditorwidget.cpp | 6 | ||||
-rw-r--r-- | src/plugins/diffeditor/unifieddiffeditorwidget.cpp | 6 |
8 files changed, 51 insertions, 21 deletions
diff --git a/src/libs/utils/CMakeLists.txt b/src/libs/utils/CMakeLists.txt index 3a891a3d59..b98d18bf93 100644 --- a/src/libs/utils/CMakeLists.txt +++ b/src/libs/utils/CMakeLists.txt @@ -89,6 +89,7 @@ add_qtc_library(Utils listutils.h macroexpander.cpp macroexpander.h mapreduce.h + mathutils.cpp mathutils.h mimeutils.h minimizableinfobars.cpp minimizableinfobars.h diff --git a/src/libs/utils/mathutils.cpp b/src/libs/utils/mathutils.cpp new file mode 100644 index 0000000000..465d4d5f99 --- /dev/null +++ b/src/libs/utils/mathutils.cpp @@ -0,0 +1,30 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#include "mathutils.h" + +#include <QtMath> + +namespace Utils::MathUtils { + +/*! + Linear interpolation: + For x = x1 it returns y1. + For x = x2 it returns y2. +*/ +int interpolate(int x, int x1, int x2, int y1, int y2) +{ + if (x1 == x2) + return y1; // or the middle point between y1 and y2? + if (y1 == y2) + return y1; + if (x == x1) + return y1; + if (x == x2) + return y2; + const int numerator = (y2 - y1) * x + x2 * y1 - x1 * y2; + const int denominator = x2 - x1; + return qRound((double)numerator / denominator); +} + +} // namespace Utils::Math diff --git a/src/libs/utils/mathutils.h b/src/libs/utils/mathutils.h new file mode 100644 index 0000000000..20ae6cd342 --- /dev/null +++ b/src/libs/utils/mathutils.h @@ -0,0 +1,12 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#pragma once + +#include "utils_global.h" + +namespace Utils::MathUtils { + +QTCREATOR_UTILS_EXPORT int interpolate(int x, int x1, int x2, int y1, int y2); + +} // namespace Utils::Math diff --git a/src/libs/utils/utils.qbs b/src/libs/utils/utils.qbs index cf2ad7e79f..5f9cf2f922 100644 --- a/src/libs/utils/utils.qbs +++ b/src/libs/utils/utils.qbs @@ -187,6 +187,8 @@ Project { "macroexpander.cpp", "macroexpander.h", "mapreduce.h", + "mathutils.cpp", + "mathutils.h", "mimeutils.h", "minimizableinfobars.cpp", "minimizableinfobars.h", diff --git a/src/plugins/diffeditor/diffutils.cpp b/src/plugins/diffeditor/diffutils.cpp index 8beb3027f0..0844cd91ae 100644 --- a/src/plugins/diffeditor/diffutils.cpp +++ b/src/plugins/diffeditor/diffutils.cpp @@ -1342,17 +1342,4 @@ QList<FileData> DiffUtils::readPatch(const QString &patch, bool *ok, return fileDataList; } -int DiffUtils::interpolate(int x, int x1, int x2, int y1, int y2) -{ - if (x1 == x2) - return x1; - if (x == x1) - return y1; - if (x == x2) - return y2; - const int numerator = (y2 - y1) * x + x2 * y1 - x1 * y2; - const int denominator = x2 - x1; - return qRound((double)numerator / denominator); -} - } // namespace DiffEditor diff --git a/src/plugins/diffeditor/diffutils.h b/src/plugins/diffeditor/diffutils.h index 6e7e2143f5..bca43913ad 100644 --- a/src/plugins/diffeditor/diffutils.h +++ b/src/plugins/diffeditor/diffutils.h @@ -151,8 +151,6 @@ public: static QList<FileData> readPatch(const QString &patch, bool *ok = nullptr, QFutureInterfaceBase *jobController = nullptr); - // For progress reporting - static int interpolate(int x, int x1, int x2, int y1, int y2); }; } // namespace DiffEditor diff --git a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp index 27d1483019..70d9e2ee55 100644 --- a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp +++ b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp @@ -6,7 +6,6 @@ #include "diffeditorconstants.h" #include "diffeditordocument.h" #include "diffeditorplugin.h" -#include "diffutils.h" #include <QMenu> #include <QPainter> @@ -26,6 +25,7 @@ #include <texteditor/texteditorsettings.h> #include <utils/asynctask.h> +#include <utils/mathutils.h> #include <utils/tooltip/tooltip.h> using namespace Core; @@ -365,7 +365,7 @@ SideBySideDiffOutput SideDiffData::diffOutput(QFutureInterface<void> &fi, int pr diffText[RightSide].replace('\r', ' '); output.side[LeftSide].diffText += diffText[LeftSide]; output.side[RightSide].diffText += diffText[RightSide]; - fi.setProgressValue(DiffUtils::interpolate(++i, 0, count, progressMin, progressMax)); + fi.setProgressValue(MathUtils::interpolate(++i, 0, count, progressMin, progressMax)); if (fi.isCanceled()) return {}; } @@ -952,7 +952,7 @@ void SideBySideDiffEditorWidget::showDiff() const QString package = output.side[side].diffText.mid(currentPos, packageSize); cursor.insertText(package); currentPos += package.size(); - fi.setProgressValue(DiffUtils::interpolate(currentPos, 0, diffSize, progressMin, progressMax)); + fi.setProgressValue(MathUtils::interpolate(currentPos, 0, diffSize, progressMin, progressMax)); if (fi.isCanceled()) return; } diff --git a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp index 3f902f2518..c082db78ec 100644 --- a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp +++ b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp @@ -6,7 +6,6 @@ #include "diffeditorconstants.h" #include "diffeditordocument.h" #include "diffeditorplugin.h" -#include "diffutils.h" #include <QMenu> #include <QPainter> @@ -22,6 +21,7 @@ #include <texteditor/texteditorsettings.h> #include <utils/asynctask.h> +#include <utils/mathutils.h> #include <utils/qtcassert.h> #include <utils/tooltip/tooltip.h> @@ -436,7 +436,7 @@ UnifiedDiffOutput UnifiedDiffData::diffOutput(QFutureInterface<void> &fi, int pr output.diffData.m_chunkInfo.setChunkIndex(oldBlock, blockNumber - oldBlock, j); } } - fi.setProgressValue(DiffUtils::interpolate(++i, 0, count, progressMin, progressMax)); + fi.setProgressValue(MathUtils::interpolate(++i, 0, count, progressMin, progressMax)); if (fi.isCanceled()) return {}; } @@ -511,7 +511,7 @@ void UnifiedDiffEditorWidget::showDiff() const QString package = output.diffText.mid(currentPos, packageSize); cursor.insertText(package); currentPos += package.size(); - fi.setProgressValue(DiffUtils::interpolate(currentPos, 0, diffSize, firstPartMax, progressMax)); + fi.setProgressValue(MathUtils::interpolate(currentPos, 0, diffSize, firstPartMax, progressMax)); if (futureInterface.isCanceled()) return; } |