diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2023-09-08 13:48:44 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2023-09-11 11:47:10 +0300 |
commit | ffc79d1da5f8ad6cf3dfbaf6d7eb9298182132d6 (patch) | |
tree | 5970af32cea496d72033773b7c9fd93e5759456b | |
parent | ccd25796f13ed205d67cf7c52e35dafbe5c2bb4a (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.cpp | 55 | ||||
-rw-r--r-- | src/charts/xychart/qxyseries_p.h | 6 |
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(); |