aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/utils/CMakeLists.txt1
-rw-r--r--src/libs/utils/mathutils.cpp30
-rw-r--r--src/libs/utils/mathutils.h12
-rw-r--r--src/libs/utils/utils.qbs2
-rw-r--r--src/plugins/diffeditor/diffutils.cpp13
-rw-r--r--src/plugins/diffeditor/diffutils.h2
-rw-r--r--src/plugins/diffeditor/sidebysidediffeditorwidget.cpp6
-rw-r--r--src/plugins/diffeditor/unifieddiffeditorwidget.cpp6
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;
}