diff options
Diffstat (limited to 'src/datavisualizationqml2/abstractdeclarative.cpp')
-rw-r--r-- | src/datavisualizationqml2/abstractdeclarative.cpp | 832 |
1 files changed, 0 insertions, 832 deletions
diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp deleted file mode 100644 index dbbd803d..00000000 --- a/src/datavisualizationqml2/abstractdeclarative.cpp +++ /dev/null @@ -1,832 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Data Visualization module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 or (at your option) any later version -** approved by the KDE Free Qt Foundation. The licenses are as published by -** the Free Software Foundation and appearing in the file LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "abstractdeclarative_p.h" -#include "declarativetheme_p.h" -#include "declarativerendernode_p.h" -#include <QtGui/QGuiApplication> -#if defined(Q_OS_IOS) -#include <QtCore/QTimer> -#endif -#if defined(Q_OS_OSX) -#include <qpa/qplatformnativeinterface.h> -#endif - -#if !defined(Q_OS_MAC) && !defined(Q_OS_ANDROID) && !defined(Q_OS_WINRT) -#define USE_SHARED_CONTEXT -#else -#include "glstatestore_p.h" -#endif - -QT_BEGIN_NAMESPACE - -static QHash<AbstractDeclarative *, QQuickWindow *> graphWindowList; - -AbstractDeclarative::AbstractDeclarative(QQuickItem *parent) : - QQuickItem(parent), - m_controller(0), - m_contextWindow(0), - m_renderMode(RenderIndirect), - m_samples(0), - m_windowSamples(0), - m_initialisedSize(0, 0), - m_contextOrStateStore(0), - m_qtContext(0), - m_mainThread(QThread::currentThread()), - m_contextThread(0) -{ - m_nodeMutex = QSharedPointer<QMutex>::create(); - - connect(this, &QQuickItem::windowChanged, this, &AbstractDeclarative::handleWindowChanged); - - // Set contents to false in case we are in qml designer to make component look nice - m_runningInDesigner = QGuiApplication::applicationDisplayName() == "Qml2Puppet"; - setFlag(ItemHasContents, !m_runningInDesigner); -} - -AbstractDeclarative::~AbstractDeclarative() -{ - destroyContext(); - - disconnect(this, 0, this, 0); - checkWindowList(0); - - // Make sure not deleting locked mutex - QMutexLocker locker(&m_mutex); - locker.unlock(); - - m_nodeMutex.clear(); -} - -void AbstractDeclarative::setRenderingMode(AbstractDeclarative::RenderingMode mode) -{ - if (mode == m_renderMode) - return; - - RenderingMode previousMode = m_renderMode; - - m_renderMode = mode; - - QQuickWindow *win = window(); - - switch (mode) { - case RenderDirectToBackground: - // Intentional flowthrough - case RenderDirectToBackground_NoClear: - m_initialisedSize = QSize(0, 0); - if (previousMode == RenderIndirect) { - update(); - setFlag(ItemHasContents, false); - if (win) { - QObject::connect(win, &QQuickWindow::beforeRenderPassRecording, this, - &AbstractDeclarative::render, Qt::DirectConnection); - checkWindowList(win); - setAntialiasing(m_windowSamples > 0); - if (m_windowSamples != m_samples) - emit msaaSamplesChanged(m_windowSamples); - } - } - break; - case RenderIndirect: - m_initialisedSize = QSize(0, 0); - setFlag(ItemHasContents, !m_runningInDesigner); - update(); - if (win) { - QObject::disconnect(win, &QQuickWindow::beforeRenderPassRecording, this, - &AbstractDeclarative::render); - checkWindowList(win); - } - setAntialiasing(m_samples > 0); - if (m_windowSamples != m_samples) - emit msaaSamplesChanged(m_samples); - break; - } - - updateWindowParameters(); - - emit renderingModeChanged(mode); -} - -AbstractDeclarative::RenderingMode AbstractDeclarative::renderingMode() const -{ - return m_renderMode; -} - -QSGNode *AbstractDeclarative::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) -{ - QSize boundingSize = boundingRect().size().toSize() * m_controller->scene()->devicePixelRatio(); - if (m_runningInDesigner || boundingSize.width() <= 0 || boundingSize.height() <= 0 - || m_controller.isNull() || !window()) { - delete oldNode; - return 0; - } - DeclarativeRenderNode *node = static_cast<DeclarativeRenderNode *>(oldNode); - - if (!node) { - node = new DeclarativeRenderNode(this, m_nodeMutex); - node->setController(m_controller.data()); - node->setQuickWindow(window()); - } - - node->setSize(boundingSize); - node->setSamples(m_samples); - node->update(); - node->markDirty(QSGNode::DirtyMaterial); - - return node; -} - -Declarative3DScene* AbstractDeclarative::scene() const -{ - return static_cast<Declarative3DScene *>(m_controller->scene()); -} - -void AbstractDeclarative::setTheme(Q3DTheme *theme) -{ - m_controller->setActiveTheme(theme, isComponentComplete()); -} - -Q3DTheme *AbstractDeclarative::theme() const -{ - return m_controller->activeTheme(); -} - -void AbstractDeclarative::clearSelection() -{ - m_controller->clearSelection(); -} - -void AbstractDeclarative::setSelectionMode(SelectionFlags mode) -{ - int intmode = int(mode); - m_controller->setSelectionMode(QAbstract3DGraph::SelectionFlags(intmode)); -} - -AbstractDeclarative::SelectionFlags AbstractDeclarative::selectionMode() const -{ - int intmode = int(m_controller->selectionMode()); - return SelectionFlags(intmode); -} - -void AbstractDeclarative::setShadowQuality(ShadowQuality quality) -{ - m_controller->setShadowQuality(QAbstract3DGraph::ShadowQuality(quality)); -} - -AbstractDeclarative::ShadowQuality AbstractDeclarative::shadowQuality() const -{ - return ShadowQuality(m_controller->shadowQuality()); -} - -bool AbstractDeclarative::shadowsSupported() const -{ - return m_controller->shadowsSupported(); -} - -int AbstractDeclarative::addCustomItem(QCustom3DItem *item) -{ - return m_controller->addCustomItem(item); -} - -void AbstractDeclarative::removeCustomItems() -{ - m_controller->deleteCustomItems(); -} - -void AbstractDeclarative::removeCustomItem(QCustom3DItem *item) -{ - m_controller->deleteCustomItem(item); -} - -void AbstractDeclarative::removeCustomItemAt(const QVector3D &position) -{ - m_controller->deleteCustomItem(position); -} - -void AbstractDeclarative::releaseCustomItem(QCustom3DItem *item) -{ - m_controller->releaseCustomItem(item); -} - -int AbstractDeclarative::selectedLabelIndex() const -{ - return m_controller->selectedLabelIndex(); -} - -QAbstract3DAxis *AbstractDeclarative::selectedAxis() const -{ - return m_controller->selectedAxis(); -} - -int AbstractDeclarative::selectedCustomItemIndex() const -{ - return m_controller->selectedCustomItemIndex(); -} - -QCustom3DItem *AbstractDeclarative::selectedCustomItem() const -{ - return m_controller->selectedCustomItem(); -} - -QQmlListProperty<QCustom3DItem> AbstractDeclarative::customItemList() -{ - return QQmlListProperty<QCustom3DItem>(this, this, - &AbstractDeclarative::appendCustomItemFunc, - &AbstractDeclarative::countCustomItemFunc, - &AbstractDeclarative::atCustomItemFunc, - &AbstractDeclarative::clearCustomItemFunc); -} - -void AbstractDeclarative::appendCustomItemFunc(QQmlListProperty<QCustom3DItem> *list, - QCustom3DItem *item) -{ - AbstractDeclarative *decl = reinterpret_cast<AbstractDeclarative *>(list->data); - decl->addCustomItem(item); -} - -qsizetype AbstractDeclarative::countCustomItemFunc(QQmlListProperty<QCustom3DItem> *list) -{ - return reinterpret_cast<AbstractDeclarative *>(list->data)->m_controller->m_customItems.size(); -} - -QCustom3DItem *AbstractDeclarative::atCustomItemFunc(QQmlListProperty<QCustom3DItem> *list, - qsizetype index) -{ - return reinterpret_cast<AbstractDeclarative *>(list->data)->m_controller->m_customItems.at(index); -} - -void AbstractDeclarative::clearCustomItemFunc(QQmlListProperty<QCustom3DItem> *list) -{ - AbstractDeclarative *decl = reinterpret_cast<AbstractDeclarative *>(list->data); - decl->removeCustomItems(); -} - -void AbstractDeclarative::setSharedController(Abstract3DController *controller) -{ - Q_ASSERT(controller); - m_controller = controller; - m_controller->m_qml = this; - - if (!m_controller->isOpenGLES()) - m_samples = 4; - setAntialiasing(m_samples > 0); - - // Reset default theme, as the default C++ theme is Q3DTheme, not DeclarativeTheme3D. - DeclarativeTheme3D *defaultTheme = new DeclarativeTheme3D; - defaultTheme->d_ptr->setDefaultTheme(true); - defaultTheme->setType(Q3DTheme::ThemeQt); - m_controller->setActiveTheme(defaultTheme); - - QObject::connect(m_controller.data(), &Abstract3DController::shadowQualityChanged, this, - &AbstractDeclarative::handleShadowQualityChange); - QObject::connect(m_controller.data(), &Abstract3DController::activeInputHandlerChanged, this, - &AbstractDeclarative::inputHandlerChanged); - QObject::connect(m_controller.data(), &Abstract3DController::activeThemeChanged, this, - &AbstractDeclarative::themeChanged); - QObject::connect(m_controller.data(), &Abstract3DController::selectionModeChanged, this, - &AbstractDeclarative::handleSelectionModeChange); - QObject::connect(m_controller.data(), &Abstract3DController::elementSelected, this, - &AbstractDeclarative::handleSelectedElementChange); - - QObject::connect(m_controller.data(), &Abstract3DController::axisXChanged, this, - &AbstractDeclarative::handleAxisXChanged); - QObject::connect(m_controller.data(), &Abstract3DController::axisYChanged, this, - &AbstractDeclarative::handleAxisYChanged); - QObject::connect(m_controller.data(), &Abstract3DController::axisZChanged, this, - &AbstractDeclarative::handleAxisZChanged); - - QObject::connect(m_controller.data(), &Abstract3DController::measureFpsChanged, this, - &AbstractDeclarative::measureFpsChanged); - QObject::connect(m_controller.data(), &Abstract3DController::currentFpsChanged, this, - &AbstractDeclarative::currentFpsChanged); - - QObject::connect(m_controller.data(), &Abstract3DController::orthoProjectionChanged, this, - &AbstractDeclarative::orthoProjectionChanged); - - QObject::connect(m_controller.data(), &Abstract3DController::aspectRatioChanged, this, - &AbstractDeclarative::aspectRatioChanged); - QObject::connect(m_controller.data(), &Abstract3DController::optimizationHintsChanged, this, - &AbstractDeclarative::handleOptimizationHintChange); - QObject::connect(m_controller.data(), &Abstract3DController::polarChanged, this, - &AbstractDeclarative::polarChanged); - QObject::connect(m_controller.data(), &Abstract3DController::radialLabelOffsetChanged, this, - &AbstractDeclarative::radialLabelOffsetChanged); - QObject::connect(m_controller.data(), &Abstract3DController::horizontalAspectRatioChanged, this, - &AbstractDeclarative::horizontalAspectRatioChanged); - QObject::connect(m_controller.data(), &Abstract3DController::reflectionChanged, this, - &AbstractDeclarative::reflectionChanged); - QObject::connect(m_controller.data(), &Abstract3DController::reflectivityChanged, this, - &AbstractDeclarative::reflectivityChanged); - QObject::connect(m_controller.data(), &Abstract3DController::localeChanged, this, - &AbstractDeclarative::localeChanged); - QObject::connect(m_controller.data(), &Abstract3DController::queriedGraphPositionChanged, this, - &AbstractDeclarative::queriedGraphPositionChanged); - QObject::connect(m_controller.data(), &Abstract3DController::marginChanged, this, - &AbstractDeclarative::marginChanged); -} - -void AbstractDeclarative::activateOpenGLContext(QQuickWindow *window) -{ - // We can assume we are not in middle of AbstractDeclarative destructor when we are here, - // since m_context creation is always done when this function is called from - // synchDataToRenderer(), which blocks main thread -> no need to mutex. - if (!m_contextOrStateStore || !m_qtContext || m_contextWindow != window) { - QOpenGLContext *currentContext = QOpenGLContext::currentContext(); - - // Note: Changing graph to different window when using multithreaded renderer will break! - - delete m_contextOrStateStore; - - m_contextThread = QThread::currentThread(); - m_contextWindow = window; - m_qtContext = currentContext; - -#ifdef USE_SHARED_CONTEXT - m_context = new QOpenGLContext(); - m_context->setFormat(m_qtContext->format()); - m_context->setShareContext(m_qtContext); - m_context->create(); - m_context->makeCurrent(window); -#else - // Shared contexts don't work properly in some platforms, so just store the - // context state on those - m_stateStore = new GLStateStore(QOpenGLContext::currentContext()); - m_stateStore->storeGLState(); -#endif - m_controller->initializeOpenGL(); - - // Make sure context / state store gets deleted. - QObject::connect(m_contextThread, &QThread::finished, this, - &AbstractDeclarative::destroyContext, Qt::DirectConnection); - } else { -#ifdef USE_SHARED_CONTEXT - m_context->makeCurrent(window); -#else - m_stateStore->storeGLState(); -#endif - } -} - -void AbstractDeclarative::doneOpenGLContext(QQuickWindow *window) -{ -#ifdef USE_SHARED_CONTEXT - m_qtContext->makeCurrent(window); -#else - Q_UNUSED(window); - m_stateStore->restoreGLState(); -#endif -} - -void AbstractDeclarative::synchDataToRenderer() -{ - QQuickWindow *win = window(); - activateOpenGLContext(win); - m_controller->synchDataToRenderer(); - doneOpenGLContext(win); -} - -int AbstractDeclarative::msaaSamples() const -{ - if (m_renderMode == RenderIndirect) - return m_samples; - else - return m_windowSamples; -} - -void AbstractDeclarative::setMsaaSamples(int samples) -{ - if (m_renderMode != RenderIndirect) { - qWarning("Multisampling cannot be adjusted in this render mode"); - } else { - if (m_controller->isOpenGLES()) { - if (samples > 0) - qWarning("Multisampling is not supported in OpenGL ES2"); - } else if (m_samples != samples) { - m_samples = samples; - setAntialiasing(m_samples > 0); - emit msaaSamplesChanged(samples); - update(); - } - } -} - -void AbstractDeclarative::handleWindowChanged(QQuickWindow *window) -{ - checkWindowList(window); - if (!window) - return; - -#if defined(Q_OS_OSX) - bool previousVisibility = window->isVisible(); - // Enable touch events for Mac touchpads - window->setVisible(true); - typedef void * (*EnableTouch)(QWindow*, bool); - EnableTouch enableTouch = - (EnableTouch)QGuiApplication::platformNativeInterface()->nativeResourceFunctionForIntegration("registertouchwindow"); - if (enableTouch) - enableTouch(window, true); - window->setVisible(previousVisibility); -#endif - - connect(window, &QObject::destroyed, this, &AbstractDeclarative::windowDestroyed); - - int oldWindowSamples = m_windowSamples; - m_windowSamples = window->format().samples(); - if (m_windowSamples < 0) - m_windowSamples = 0; - - connect(window, &QQuickWindow::beforeSynchronizing, - this, &AbstractDeclarative::synchDataToRenderer, - Qt::DirectConnection); - - if (m_renderMode == RenderDirectToBackground_NoClear - || m_renderMode == RenderDirectToBackground) { - connect(window, &QQuickWindow::beforeRenderPassRecording, this, &AbstractDeclarative::render, - Qt::DirectConnection); - setAntialiasing(m_windowSamples > 0); - if (m_windowSamples != oldWindowSamples) - emit msaaSamplesChanged(m_windowSamples); - } - - connect(m_controller.data(), &Abstract3DController::needRender, window, &QQuickWindow::update); - - updateWindowParameters(); - -#if defined(Q_OS_IOS) - // Scenegraph render cycle in iOS sometimes misses update after beforeSynchronizing signal. - // This ensures we don't end up displaying the graph without any data, in case update is - // skipped after synchDataToRenderer. - QTimer::singleShot(0, window, SLOT(update())); -#endif -} - -void AbstractDeclarative::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) -{ - QQuickItem::geometryChange(newGeometry, oldGeometry); - - m_cachedGeometry = newGeometry; - - updateWindowParameters(); -} - -void AbstractDeclarative::itemChange(ItemChange change, const ItemChangeData & value) -{ - QQuickItem::itemChange(change, value); - updateWindowParameters(); -} - -void AbstractDeclarative::updateWindowParameters() -{ - const QMutexLocker locker(&m_mutex); - - // Update the device pixel ratio, window size and bounding box - QQuickWindow *win = window(); - if (win && !m_controller.isNull()) { - Q3DScene *scene = m_controller->scene(); - if (win->devicePixelRatio() != scene->devicePixelRatio()) { - scene->setDevicePixelRatio(win->devicePixelRatio()); - win->update(); - } - - 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 (directRender) { - // Origin mapping is needed when rendering directly to background - QPointF point = QQuickItem::mapToScene(QPointF(0.0, 0.0)); - scene->d_ptr->setViewport(QRect(point.x() + 0.5f, point.y() + 0.5f, - m_cachedGeometry.width() + 0.5f, - m_cachedGeometry.height() + 0.5f)); - } else { - // No translation needed when rendering to FBO - scene->d_ptr->setViewport(QRect(0.0, 0.0, m_cachedGeometry.width() + 0.5f, - m_cachedGeometry.height() + 0.5f)); - } - } -} - -void AbstractDeclarative::handleSelectionModeChange(QAbstract3DGraph::SelectionFlags mode) -{ - int intmode = int(mode); - emit selectionModeChanged(SelectionFlags(intmode)); -} - -void AbstractDeclarative::handleShadowQualityChange(QAbstract3DGraph::ShadowQuality quality) -{ - emit shadowQualityChanged(ShadowQuality(quality)); -} - -void AbstractDeclarative::handleSelectedElementChange(QAbstract3DGraph::ElementType type) -{ - emit selectedElementChanged(ElementType(type)); -} - -void AbstractDeclarative::handleOptimizationHintChange(QAbstract3DGraph::OptimizationHints hints) -{ - int intHints = int(hints); - emit optimizationHintsChanged(OptimizationHints(intHints)); -} - -void AbstractDeclarative::render() -{ - updateWindowParameters(); - - // If we're not rendering directly to the background, return - if (m_renderMode != RenderDirectToBackground && m_renderMode != RenderDirectToBackground_NoClear) - return; - - // Clear the background once per window as that is not done by default - QQuickWindow *win = window(); - win->beginExternalCommands(); - activateOpenGLContext(win); - - QOpenGLFunctions *funcs = QOpenGLContext::currentContext()->functions(); - - if (isVisible()) { - funcs->glDepthMask(GL_TRUE); - funcs->glEnable(GL_DEPTH_TEST); - funcs->glDepthFunc(GL_LESS); - funcs->glEnable(GL_CULL_FACE); - funcs->glCullFace(GL_BACK); - funcs->glDisable(GL_BLEND); - - m_controller->render(); - - funcs->glEnable(GL_BLEND); - } - - doneOpenGLContext(win); - win->endExternalCommands(); -} - -QAbstract3DInputHandler* AbstractDeclarative::inputHandler() const -{ - return m_controller->activeInputHandler(); -} - -void AbstractDeclarative::setInputHandler(QAbstract3DInputHandler *inputHandler) -{ - m_controller->setActiveInputHandler(inputHandler); -} - -void AbstractDeclarative::mouseDoubleClickEvent(QMouseEvent *event) -{ - m_controller->mouseDoubleClickEvent(event); -} - -void AbstractDeclarative::touchEvent(QTouchEvent *event) -{ - m_controller->touchEvent(event); - window()->update(); -} - -void AbstractDeclarative::mousePressEvent(QMouseEvent *event) -{ - QPoint mousePos = event->pos(); - m_controller->mousePressEvent(event, mousePos); -} - -void AbstractDeclarative::mouseReleaseEvent(QMouseEvent *event) -{ - QPoint mousePos = event->pos(); - m_controller->mouseReleaseEvent(event, mousePos); -} - -void AbstractDeclarative::mouseMoveEvent(QMouseEvent *event) -{ - QPoint mousePos = event->pos(); - m_controller->mouseMoveEvent(event, mousePos); -} - -#if QT_CONFIG(wheelevent) -void AbstractDeclarative::wheelEvent(QWheelEvent *event) -{ - m_controller->wheelEvent(event); -} -#endif - -void AbstractDeclarative::checkWindowList(QQuickWindow *window) -{ - QQuickWindow *oldWindow = graphWindowList.value(this); - graphWindowList[this] = window; - - if (oldWindow != window && oldWindow) { - QObject::disconnect(oldWindow, &QObject::destroyed, this, - &AbstractDeclarative::windowDestroyed); - QObject::disconnect(oldWindow, &QQuickWindow::beforeSynchronizing, this, - &AbstractDeclarative::synchDataToRenderer); - QObject::disconnect(oldWindow, &QQuickWindow::beforeRenderPassRecording, this, - &AbstractDeclarative::render); - if (!m_controller.isNull()) { - QObject::disconnect(m_controller.data(), &Abstract3DController::needRender, - oldWindow, &QQuickWindow::update); - } - } - - QList<QQuickWindow *> windowList; - - foreach (AbstractDeclarative *graph, graphWindowList.keys()) { - if (graph->m_renderMode == RenderDirectToBackground - || graph->m_renderMode == RenderDirectToBackground_NoClear) { - windowList.append(graphWindowList.value(graph)); - } - } - - if (!window) { - graphWindowList.remove(this); - return; - } -} - -void AbstractDeclarative::setMeasureFps(bool enable) -{ - m_controller->setMeasureFps(enable); -} - -bool AbstractDeclarative::measureFps() const -{ - return m_controller->measureFps(); -} - -qreal AbstractDeclarative::currentFps() const -{ - return m_controller->currentFps(); -} - -void AbstractDeclarative::setOrthoProjection(bool enable) -{ - m_controller->setOrthoProjection(enable); -} - -bool AbstractDeclarative::isOrthoProjection() const -{ - return m_controller->isOrthoProjection(); -} - -AbstractDeclarative::ElementType AbstractDeclarative::selectedElement() const -{ - return ElementType(m_controller->selectedElement()); -} - -void AbstractDeclarative::setAspectRatio(qreal ratio) -{ - m_controller->setAspectRatio(ratio); -} - -qreal AbstractDeclarative::aspectRatio() const -{ - return m_controller->aspectRatio(); -} - -void AbstractDeclarative::setOptimizationHints(OptimizationHints hints) -{ - int intmode = int(hints); - m_controller->setOptimizationHints(QAbstract3DGraph::OptimizationHints(intmode)); -} - -AbstractDeclarative::OptimizationHints AbstractDeclarative::optimizationHints() const -{ - int intmode = int(m_controller->optimizationHints()); - return OptimizationHints(intmode); -} - -void AbstractDeclarative::setPolar(bool enable) -{ - m_controller->setPolar(enable); -} - -bool AbstractDeclarative::isPolar() const -{ - return m_controller->isPolar(); -} - -void AbstractDeclarative::setRadialLabelOffset(float offset) -{ - m_controller->setRadialLabelOffset(offset); -} - -float AbstractDeclarative::radialLabelOffset() const -{ - return m_controller->radialLabelOffset(); -} - -void AbstractDeclarative::setHorizontalAspectRatio(qreal ratio) -{ - m_controller->setHorizontalAspectRatio(ratio); -} - -qreal AbstractDeclarative::horizontalAspectRatio() const -{ - return m_controller->horizontalAspectRatio(); -} - -void AbstractDeclarative::setReflection(bool enable) -{ - m_controller->setReflection(enable); -} - -bool AbstractDeclarative::isReflection() const -{ - return m_controller->reflection(); -} - -void AbstractDeclarative::setReflectivity(qreal reflectivity) -{ - m_controller->setReflectivity(reflectivity); -} - -qreal AbstractDeclarative::reflectivity() const -{ - return m_controller->reflectivity(); -} - -void AbstractDeclarative::setLocale(const QLocale &locale) -{ - m_controller->setLocale(locale); -} - -QLocale AbstractDeclarative::locale() const -{ - return m_controller->locale(); -} - -QVector3D AbstractDeclarative::queriedGraphPosition() const -{ - return m_controller->queriedGraphPosition(); -} - -void AbstractDeclarative::setMargin(qreal margin) -{ - m_controller->setMargin(margin); -} - -qreal AbstractDeclarative::margin() const -{ - return m_controller->margin(); -} - -void AbstractDeclarative::windowDestroyed(QObject *obj) -{ - // Remove destroyed window from window lists - QQuickWindow *win = static_cast<QQuickWindow *>(obj); - QQuickWindow *oldWindow = graphWindowList.value(this); - - if (win == oldWindow) - graphWindowList.remove(this); -} - -void AbstractDeclarative::destroyContext() -{ - if (m_contextThread && m_contextThread != m_mainThread) { - if (m_contextOrStateStore) - m_contextOrStateStore->deleteLater(); - } else { - delete m_contextOrStateStore; - } - m_contextOrStateStore = 0; - - if (m_contextThread) { - QObject::disconnect(m_contextThread, &QThread::finished, this, - &AbstractDeclarative::destroyContext); - m_contextThread = 0; - } -} - -QT_END_NAMESPACE |