diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-02-18 14:55:25 +0200 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@digia.com> | 2014-02-19 06:18:02 +0200 |
commit | 0e56c8f873e31bc0a8c7d5c0b954ec8d14f0495a (patch) | |
tree | 3d93033888b3f02049a17e4aac24e10245cd2c53 /src/datavisualizationqml2 | |
parent | 5bd455cbd04a61b251c466dd641e3ef31fcbe93b (diff) |
Fix scene coordinates in qml indirect rendering
+Rename enums
+Remove unnecessary update loop
+Fudge qmlmultigraphs example data so that shadows are not
borked in bar graph
+Remove unnecessary border from around buttons in qmlmultigraphs
Change-Id: I6c24f33912d29b7954c82f17becd342aea66b0e1
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualizationqml2')
-rw-r--r-- | src/datavisualizationqml2/abstractdeclarative.cpp | 43 | ||||
-rw-r--r-- | src/datavisualizationqml2/abstractdeclarative_p.h | 6 | ||||
-rw-r--r-- | src/datavisualizationqml2/declarativerendernode.cpp | 1 |
3 files changed, 30 insertions, 20 deletions
diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp index 04c4e371..580bbcac 100644 --- a/src/datavisualizationqml2/abstractdeclarative.cpp +++ b/src/datavisualizationqml2/abstractdeclarative.cpp @@ -34,7 +34,7 @@ static QHash<QQuickWindow *, bool> windowClearList; AbstractDeclarative::AbstractDeclarative(QQuickItem *parent) : QQuickItem(parent), m_controller(0), - m_renderMode(DirectToBackground), + m_renderMode(RenderDirectToBackground), m_initialisedSize(0, 0) { connect(this, &QQuickItem::windowChanged, this, &AbstractDeclarative::handleWindowChanged); @@ -63,9 +63,9 @@ void AbstractDeclarative::setRenderingMode(AbstractDeclarative::RenderingMode mo QQuickWindow *win = window(); switch (mode) { - case DirectToBackground: + case RenderDirectToBackground: // Intentional flowthrough - case DirectToBackground_NoClear: + case RenderDirectToBackground_NoClear: m_initialisedSize = QSize(0, 0); #if !defined(QT_OPENGL_ES_2) setAntialiasing(true); @@ -74,14 +74,14 @@ void AbstractDeclarative::setRenderingMode(AbstractDeclarative::RenderingMode mo #endif setFlag(QQuickItem::ItemHasContents, false); - if (win && previousMode == Indirect_NoAA) { + if (win && previousMode == RenderIndirect_NoAA) { QObject::connect(win, &QQuickWindow::beforeRendering, this, &AbstractDeclarative::render); checkWindowList(win); } break; - case Indirect_NoAA: + case RenderIndirect_NoAA: // Force recreation of render node by resetting the initialized size setAntialiasing(false); m_initialisedSize = QSize(0, 0); @@ -200,7 +200,7 @@ void AbstractDeclarative::setSharedController(Abstract3DController *controller) void AbstractDeclarative::synchDataToRenderer() { - if (m_renderMode == DirectToBackground && clearList.size()) + if (m_renderMode == RenderDirectToBackground && clearList.size()) clearList.clear(); m_controller->initializeOpenGL(); m_controller->synchDataToRenderer(); @@ -216,7 +216,7 @@ void AbstractDeclarative::handleWindowChanged(QQuickWindow *window) connect(window, &QQuickWindow::beforeSynchronizing, this, &AbstractDeclarative::synchDataToRenderer, Qt::DirectConnection); - if (m_renderMode == DirectToBackground_NoClear || m_renderMode == DirectToBackground) { + if (m_renderMode == RenderDirectToBackground_NoClear || m_renderMode == RenderDirectToBackground) { connect(window, &QQuickWindow::beforeRendering, this, &AbstractDeclarative::render, Qt::DirectConnection); @@ -253,19 +253,30 @@ void AbstractDeclarative::updateWindowParameters() win->update(); } - if (win->size() != scene->d_ptr->windowSize()) { - scene->d_ptr->setWindowSize(QSize(win->width(), win->height())); + bool directRender = m_renderMode == RenderDirectToBackground + || m_renderMode == RenderDirectToBackground_NoClear; + QSize windowSize; + + if (directRender) + windowSize = win->size(); + else + windowSize = m_cachedGeometry.size().toSize(); + + + if (windowSize != scene->d_ptr->windowSize()) { + scene->d_ptr->setWindowSize(windowSize); win->update(); } - if (m_renderMode == DirectToBackground || m_renderMode == DirectToBackground_NoClear) { + if (directRender) { // Origo mapping is needed when rendering directly to background - QPointF point = QQuickItem::mapToScene(QPointF(0.0f, 0.0f)); + QPointF point = QQuickItem::mapToScene(QPointF(0.0, 0.0)); scene->d_ptr->setViewport(QRect(point.x(), point.y(), m_cachedGeometry.width(), m_cachedGeometry.height())); } else { // No translation needed when rendering to FBO - scene->d_ptr->setViewport(m_cachedGeometry.toRect()); + scene->d_ptr->setViewport(QRect(0.0, 0.0, m_cachedGeometry.width(), + m_cachedGeometry.height())); } } } @@ -286,12 +297,12 @@ void AbstractDeclarative::render() updateWindowParameters(); // If we're not rendering directly to the background, return - if (m_renderMode != DirectToBackground && m_renderMode != DirectToBackground_NoClear) + if (m_renderMode != RenderDirectToBackground && m_renderMode != RenderDirectToBackground_NoClear) return; // Clear the background once per window as that is not done by default const QQuickWindow *win = window(); - if (m_renderMode == DirectToBackground && !clearList.contains(win)) { + if (m_renderMode == RenderDirectToBackground && !clearList.contains(win)) { clearList.append(win); QColor clearColor = win->color(); glClearColor(clearColor.redF(), clearColor.greenF(), clearColor.blueF(), 1.0f); @@ -376,7 +387,7 @@ void AbstractDeclarative::checkWindowList(QQuickWindow *window) QList<QQuickWindow *> windowList; foreach (AbstractDeclarative *graph, graphWindowList.keys()) { - if (graph->m_renderMode == DirectToBackground) + if (graph->m_renderMode == RenderDirectToBackground) windowList.append(graphWindowList.value(graph)); } @@ -391,7 +402,7 @@ void AbstractDeclarative::checkWindowList(QQuickWindow *window) return; } - if (m_renderMode == DirectToBackground && windowClearList.values(window).size() == 0) { + if (m_renderMode == RenderDirectToBackground && windowClearList.values(window).size() == 0) { // Save old value clear value windowClearList[window] = window->clearBeforeRendering(); // Disable clearing of the window as we render underneath diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h index 22013787..e5e9909b 100644 --- a/src/datavisualizationqml2/abstractdeclarative_p.h +++ b/src/datavisualizationqml2/abstractdeclarative_p.h @@ -82,9 +82,9 @@ public: }; enum RenderingMode { - DirectToBackground = 0, - DirectToBackground_NoClear, - Indirect_NoAA + RenderDirectToBackground = 0, + RenderDirectToBackground_NoClear, + RenderIndirect_NoAA }; public: diff --git a/src/datavisualizationqml2/declarativerendernode.cpp b/src/datavisualizationqml2/declarativerendernode.cpp index cc65b4f4..30792f24 100644 --- a/src/datavisualizationqml2/declarativerendernode.cpp +++ b/src/datavisualizationqml2/declarativerendernode.cpp @@ -80,7 +80,6 @@ void DeclarativeRenderNode::renderFBO() m_fbo->release(); // New view is in the FBO, request repaint of scene graph - m_window->update(); } QT_END_NAMESPACE_DATAVISUALIZATION |