diff options
author | Titta Heikkala <titta.heikkala@digia.com> | 2013-08-15 09:13:10 +0300 |
---|---|---|
committer | Titta Heikkala <titta.heikkala@digia.com> | 2013-08-15 10:26:32 +0300 |
commit | 764a09c2b2a5285fe3f68bdec9af31e1ac489b42 (patch) | |
tree | 4e5bf1d7ebca8df96ea1087dc6315699fa40f683 /src/barchart | |
parent | 949e3e70938f3e186b3865ae1c15fe17b93e7362 (diff) |
Improve theme initialization performance for bar series
The bar series are not updated while the theme is initialized. The
update will be done after the theme is ready. This reduces the time
spent to initialize the theme from seconds to milliseconds.
Task-number: QTRD-2163
Change-Id: Ie111d8b42e017d0a514ca773bc8a714295d1eaa2
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/barchart')
-rw-r--r-- | src/barchart/abstractbarchartitem.cpp | 40 | ||||
-rw-r--r-- | src/barchart/qabstractbarseries.cpp | 12 | ||||
-rw-r--r-- | src/barchart/qabstractbarseries_p.h | 3 |
3 files changed, 34 insertions, 21 deletions
diff --git a/src/barchart/abstractbarchartitem.cpp b/src/barchart/abstractbarchartitem.cpp index af3c6b19..34d97965 100644 --- a/src/barchart/abstractbarchartitem.cpp +++ b/src/barchart/abstractbarchartitem.cpp @@ -196,25 +196,27 @@ void AbstractBarChartItem::handleOpacityChanged() void AbstractBarChartItem::handleUpdatedBars() { - // Handle changes in pen, brush, labels etc. - int categoryCount = m_series->d_func()->categoryCount(); - int setCount = m_series->count(); - int itemIndex(0); - - for (int category = 0; category < categoryCount; category++) { - for (int set = 0; set < setCount; set++) { - QBarSetPrivate *barSet = m_series->d_func()->barsetAt(set)->d_ptr.data(); - Bar *bar = m_bars.at(itemIndex); - bar->setPen(barSet->m_pen); - bar->setBrush(barSet->m_brush); - bar->update(); - - QGraphicsTextItem *label = m_labels.at(itemIndex); - label->setHtml(QString("%1").arg(barSet->value(category))); - label->setFont(barSet->m_labelFont); - label->setDefaultTextColor(barSet->m_labelBrush.color()); - label->update(); - itemIndex++; + if (!m_series->d_func()->blockBarUpdate()) { + // Handle changes in pen, brush, labels etc. + int categoryCount = m_series->d_func()->categoryCount(); + int setCount = m_series->count(); + int itemIndex(0); + + for (int category = 0; category < categoryCount; category++) { + for (int set = 0; set < setCount; set++) { + QBarSetPrivate *barSet = m_series->d_func()->barsetAt(set)->d_ptr.data(); + Bar *bar = m_bars.at(itemIndex); + bar->setPen(barSet->m_pen); + bar->setBrush(barSet->m_brush); + bar->update(); + + QGraphicsTextItem *label = m_labels.at(itemIndex); + label->setHtml(QString("%1").arg(barSet->value(category))); + label->setFont(barSet->m_labelFont); + label->setDefaultTextColor(barSet->m_labelBrush.color()); + label->update(); + itemIndex++; + } } } } diff --git a/src/barchart/qabstractbarseries.cpp b/src/barchart/qabstractbarseries.cpp index b910f0a5..1fef2603 100644 --- a/src/barchart/qabstractbarseries.cpp +++ b/src/barchart/qabstractbarseries.cpp @@ -413,7 +413,8 @@ QAbstractBarSeriesPrivate::QAbstractBarSeriesPrivate(QAbstractBarSeries *q) : QAbstractSeriesPrivate(q), m_barWidth(0.5), // Default value is 50% of category width m_labelsVisible(false), - m_visible(true) + m_visible(true), + m_blockBarUpdate(false) { } @@ -652,6 +653,10 @@ qreal QAbstractBarSeriesPrivate::bottom() return bottom; } +bool QAbstractBarSeriesPrivate::blockBarUpdate() +{ + return m_blockBarUpdate; +} void QAbstractBarSeriesPrivate::initializeDomain() { @@ -843,6 +848,8 @@ QAbstractAxis* QAbstractBarSeriesPrivate::createDefaultAxis(Qt::Orientation orie void QAbstractBarSeriesPrivate::initializeTheme(int index, ChartTheme* theme, bool forced) { + m_blockBarUpdate = true; // Ensures that the bars are not updated before the theme is ready + const QList<QGradient> gradients = theme->seriesGradients(); qreal takeAtPos = 0.5; @@ -875,12 +882,13 @@ void QAbstractBarSeriesPrivate::initializeTheme(int index, ChartTheme* theme, bo else m_barSets.at(i)->setLabelBrush(ChartThemeManager::colorAt(gradients.at(index % gradients.size()), 0)); } - if (forced || QChartPrivate::defaultPen() == m_barSets.at(i)->d_ptr->m_pen) { QColor c = ChartThemeManager::colorAt(gradients.at(index % gradients.size()), 0.0); m_barSets.at(i)->setPen(c); } } + m_blockBarUpdate = false; + emit updatedBars(); } void QAbstractBarSeriesPrivate::initializeAnimations(QChart::AnimationOptions options) diff --git a/src/barchart/qabstractbarseries_p.h b/src/barchart/qabstractbarseries_p.h index a637746b..4974c72c 100644 --- a/src/barchart/qabstractbarseries_p.h +++ b/src/barchart/qabstractbarseries_p.h @@ -85,6 +85,8 @@ public: qreal top(); qreal bottom(); + bool blockBarUpdate(); + Q_SIGNALS: void clicked(int index, QBarSet *barset); void updatedBars(); @@ -101,6 +103,7 @@ protected: qreal m_barWidth; bool m_labelsVisible; bool m_visible; + bool m_blockBarUpdate; private: Q_DECLARE_PUBLIC(QAbstractBarSeries) |