summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2023-09-08 13:48:44 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2023-09-11 11:47:10 +0300
commitffc79d1da5f8ad6cf3dfbaf6d7eb9298182132d6 (patch)
tree5970af32cea496d72033773b7c9fd93e5759456b
parentccd25796f13ed205d67cf7c52e35dafbe5c2bb4a (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 Pick-to: 6.6 6.5 Change-Id: Iec3ca822e9de4d594ef5327adf9f83a3da3906a2 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-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 7e0101df..fa935108 100644
--- a/src/charts/xychart/qxyseries.cpp
+++ b/src/charts/xychart/qxyseries.cpp
@@ -852,24 +852,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);
- }
}
/*!
@@ -941,6 +925,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;
@@ -949,8 +934,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);
}
/*!
@@ -1021,12 +1010,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);
}
/*!
@@ -2014,6 +2009,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();