summaryrefslogtreecommitdiffstats
path: root/src/barchart
diff options
context:
space:
mode:
authorTitta Heikkala <titta.heikkala@digia.com>2013-08-15 09:13:10 +0300
committerTitta Heikkala <titta.heikkala@digia.com>2013-08-15 10:26:32 +0300
commit764a09c2b2a5285fe3f68bdec9af31e1ac489b42 (patch)
tree4e5bf1d7ebca8df96ea1087dc6315699fa40f683 /src/barchart
parent949e3e70938f3e186b3865ae1c15fe17b93e7362 (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.cpp40
-rw-r--r--src/barchart/qabstractbarseries.cpp12
-rw-r--r--src/barchart/qabstractbarseries_p.h3
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)