From 631b1913f4115fc163a21fc8aba85b87b10a666a Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 17 Jan 2014 10:24:02 +0200 Subject: Optimize theme update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Do not reinitialize shaders in theme update and only update drawer if label related items change. Also fix the bug automerge slipped in in recent rebase. Task-number: QTRD-2778 Change-Id: I4c4317dd36a8e8b60dcaec224f45df81c2ae7f54 Reviewed-by: Tomi Korpipää --- .../engine/abstract3drenderer.cpp | 8 ++----- src/datavisualization/engine/bars3dcontroller.cpp | 20 ++++++++-------- src/datavisualization/engine/drawer.cpp | 28 ++++------------------ src/datavisualization/engine/drawer_p.h | 4 ---- 4 files changed, 16 insertions(+), 44 deletions(-) (limited to 'src/datavisualization/engine') diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index 95840b0a..350da1fc 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -162,14 +162,10 @@ void Abstract3DRenderer::initGradientShaders(const QString &vertexShader, const void Abstract3DRenderer::updateTheme(Q3DTheme *theme) { // Synchronize the controller theme with renderer - bool changed = theme->d_ptr->sync(*m_cachedTheme->d_ptr); + bool updateDrawer = theme->d_ptr->sync(*m_cachedTheme->d_ptr); - if (changed) { - // Update drawer if sync changed something + if (updateDrawer) m_drawer->setTheme(m_cachedTheme); - // Re-initialize shaders - reInitShaders(); - } } void Abstract3DRenderer::updateScene(Q3DScene *scene) diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp index 5542b69b..d85e474c 100644 --- a/src/datavisualization/engine/bars3dcontroller.cpp +++ b/src/datavisualization/engine/bars3dcontroller.cpp @@ -166,6 +166,16 @@ void Bars3DController::handleRowsInserted(int startIndex, int count) adjustAxisRanges(); m_isDataDirty = true; } + + if (series == m_selectedBarSeries) { + // If rows inserted to selected series before the selection, adjust the selection + int selectedRow = m_selectedBar.x(); + if (startIndex <= selectedRow) { + selectedRow += count; + setSelectedBar(QPoint(selectedRow, m_selectedBar.y()), m_selectedBarSeries); + } + } + emitNeedRender(); } @@ -178,16 +188,6 @@ void Bars3DController::handleItemChanged(int rowIndex, int columnIndex) adjustAxisRanges(); m_isDataDirty = true; } - - if (series == m_selectedBarSeries) { - // If rows inserted to selected series before the selection, adjust the selection - int selectedRow = m_selectedBar.x(); - if (startIndex <= selectedRow) { - selectedRow += count; - setSelectedBar(QPoint(selectedRow, m_selectedBar.y()), m_selectedBarSeries); - } - } - emitNeedRender(); } diff --git a/src/datavisualization/engine/drawer.cpp b/src/datavisualization/engine/drawer.cpp index 72b64212..dde0def2 100644 --- a/src/datavisualization/engine/drawer.cpp +++ b/src/datavisualization/engine/drawer.cpp @@ -45,8 +45,6 @@ const GLfloat point_data[] = {0.0f, 0.0f, 0.0f}; Drawer::Drawer(Q3DTheme *theme) : m_theme(theme), - m_font(theme->font()), - m_labelBackground(theme->isLabelBackgroundEnabled()), m_textureHelper(0), m_pointbuffer(0) { @@ -70,8 +68,6 @@ void Drawer::initializeOpenGL() void Drawer::setTheme(Q3DTheme *theme) { m_theme = theme; - m_font = m_theme->font(); - m_labelBackground = m_theme->isLabelBackgroundEnabled(); emit drawerChanged(); } @@ -80,25 +76,9 @@ Q3DTheme *Drawer::theme() const return m_theme; } -void Drawer::setFont(const QFont &font) -{ - // We need to be able to override theme's font for drawer - // TODO: (or do we?) - m_font = font; - emit drawerChanged(); -} - QFont Drawer::font() const { - return m_font; -} - -void Drawer::setLabelBackground(bool enabled) -{ - // We need to be able to override theme's label background for drawer - // TODO: (or do we?) - m_labelBackground = enabled; - emit drawerChanged(); + return m_theme->font(); } void Drawer::drawObject(ShaderHelper *shader, AbstractObjectHelper *object, GLuint textureId, @@ -266,7 +246,7 @@ void Drawer::drawLabel(const AbstractRenderItem &item, const LabelItem &labelIte } // Calculate scale factor to get uniform font size - GLfloat scaledFontSize = 0.05f + m_font.pointSizeF() / 500.0f; + GLfloat scaledFontSize = 0.05f + m_theme->font().pointSizeF() / 500.0f; GLfloat scaleFactor = scaledFontSize / (GLfloat)textureSize.height(); // Apply alignment @@ -385,11 +365,11 @@ void Drawer::generateLabelItem(LabelItem &item, const QString &text, int widestL if (!text.isEmpty()) { // Create labels // Print label into a QImage using QPainter - QImage label = Utils::printTextToImage(m_font, + QImage label = Utils::printTextToImage(m_theme->font(), text, m_theme->labelBackgroundColor(), m_theme->labelTextColor(), - m_labelBackground, + m_theme->isLabelBackgroundEnabled(), m_theme->isLabelBorderEnabled(), widestLabel); diff --git a/src/datavisualization/engine/drawer_p.h b/src/datavisualization/engine/drawer_p.h index ba9aadf7..d91c48fa 100644 --- a/src/datavisualization/engine/drawer_p.h +++ b/src/datavisualization/engine/drawer_p.h @@ -70,9 +70,7 @@ public: void setTheme(Q3DTheme *theme); Q3DTheme *theme() const; - void setFont(const QFont &font); QFont font() const; - void setLabelBackground(bool enabled); void drawObject(ShaderHelper *shader, AbstractObjectHelper *object, GLuint textureId = 0, GLuint depthTextureId = 0); @@ -94,8 +92,6 @@ Q_SIGNALS: private: Q3DTheme *m_theme; - QFont m_font; - bool m_labelBackground; TextureHelper *m_textureHelper; GLuint m_pointbuffer; }; -- cgit v1.2.3