summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2023-09-08 13:48:44 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-09-11 09:29:39 +0000
commite7ea91ace64c26ef6a06f5e8d71f5c9b7b6bfe26 (patch)
tree319270117dfbc0f7f74069e3f1e272ea51c17b64
parent1636d8908feb88be7d2ed28aa7f29039d62602f7 (diff)
Remove excessive signaling from sizeBy and colorBy
If sizeBy or colorBy changed more than one point configuration, a signal about the change was triggered for each point. There is only need for one signal after all points have been changed. Fixes: QTBUG-116647 Change-Id: Iec3ca822e9de4d594ef5327adf9f83a3da3906a2 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> (cherry picked from commit ffc79d1da5f8ad6cf3dfbaf6d7eb9298182132d6) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/charts/xychart/qxyseries.cpp55
-rw-r--r--src/charts/xychart/qxyseries_p.h6
2 files changed, 41 insertions, 20 deletions
diff --git a/src/charts/xychart/qxyseries.cpp b/src/charts/xychart/qxyseries.cpp
index cebe08e6..05a92075 100644
--- a/src/charts/xychart/qxyseries.cpp
+++ b/src/charts/xychart/qxyseries.cpp
@@ -850,24 +850,8 @@ void QXYSeries::setPointConfiguration(const int index, const QXYSeries::PointCon
const QVariant &value)
{
Q_D(QXYSeries);
- QHash<QXYSeries::PointConfiguration, QVariant> conf;
- if (d->m_pointsConfiguration.contains(index))
- conf = d->m_pointsConfiguration[index];
-
- bool callSignal = false;
- if (conf.contains(key)) {
- if (conf[key] != value)
- callSignal = true;
- } else {
- callSignal = true;
- }
-
- conf[key] = value;
- d->m_pointsConfiguration[index] = conf;
-
- if (callSignal) {
+ if (d->setPointConfiguration(index, key, value))
emit pointsConfigurationChanged(d->m_pointsConfiguration);
- }
}
/*!
@@ -939,6 +923,7 @@ void QXYSeries::sizeBy(const QList<qreal> &sourceData, const qreal minSize, cons
const qreal range = max - min;
const qreal sizeRange = maxSize - minSize;
+ bool changed = false;
for (int i = 0; i < sourceData.size() && i < d->m_points.size(); ++i) {
qreal pointSize = minSize;
@@ -947,8 +932,12 @@ void QXYSeries::sizeBy(const QList<qreal> &sourceData, const qreal minSize, cons
const qreal percentage = startValue / range;
pointSize = minSize + (percentage * sizeRange);
}
- setPointConfiguration(i, QXYSeries::PointConfiguration::Size, pointSize);
+ if (d->setPointConfiguration(i, QXYSeries::PointConfiguration::Size, pointSize))
+ changed = true;
}
+
+ if (changed)
+ emit pointsConfigurationChanged(d->m_pointsConfiguration);
}
/*!
@@ -1019,12 +1008,18 @@ void QXYSeries::colorBy(const QList<qreal> &sourceData, const QLinearGradient &g
const qreal diff = min < 0 ? qAbs(min) : 0;
min += diff;
+ bool changed = false;
+
for (int i = 0; i < sourceData.size() && i < d->m_points.size(); ++i) {
const qreal startValue = qMax(0.0, sourceData.at(i) + diff - min);
const qreal percentage = startValue / range;
QColor color = image.pixelColor(0, qMin(percentage * imgSize, imgSize - 1));
- setPointConfiguration(i, QXYSeries::PointConfiguration::Color, color);
+ if (d->setPointConfiguration(i, QXYSeries::PointConfiguration::Color, color))
+ changed = true;
}
+
+ if (changed)
+ emit pointsConfigurationChanged(d->m_pointsConfiguration);
}
/*!
@@ -2012,6 +2007,28 @@ QList<qreal> QXYSeriesPrivate::colorByData() const
return m_colorByData;
}
+bool QXYSeriesPrivate::setPointConfiguration(const int index,
+ const QXYSeries::PointConfiguration key,
+ const QVariant &value)
+{
+ QHash<QXYSeries::PointConfiguration, QVariant> conf;
+ if (m_pointsConfiguration.contains(index))
+ conf = m_pointsConfiguration[index];
+
+ bool changed = false;
+ if (conf.contains(key)) {
+ if (conf[key] != value)
+ changed = true;
+ } else {
+ changed = true;
+ }
+
+ conf[key] = value;
+ m_pointsConfiguration[index] = conf;
+
+ return changed;
+}
+
QT_END_NAMESPACE
#include "moc_qxyseries.cpp"
diff --git a/src/charts/xychart/qxyseries_p.h b/src/charts/xychart/qxyseries_p.h
index 21408610..40f438fd 100644
--- a/src/charts/xychart/qxyseries_p.h
+++ b/src/charts/xychart/qxyseries_p.h
@@ -14,6 +14,7 @@
#define QXYSERIES_P_H
#include <private/qabstractseries_p.h>
+#include <private/qxyseries_p.h>
#include <QtCharts/private/qchartglobal_p.h>
#include <QtCore/qvariant.h>
#include <QtCore/qhash.h>
@@ -24,7 +25,6 @@
QT_BEGIN_NAMESPACE
-class QXYSeries;
class QAbstractAxis;
class Q_CHARTS_PRIVATE_EXPORT QXYSeriesPrivate: public QAbstractSeriesPrivate
@@ -61,6 +61,10 @@ public:
QList<qreal> colorByData() const;
+ bool setPointConfiguration(const int index, const QXYSeries::PointConfiguration key,
+ const QVariant &value);
+
+
Q_SIGNALS:
void seriesUpdated();