aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickwidgets/qquickwidget.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@digia.com>2014-03-31 15:59:18 +0200
committerLaszlo Agocs <laszlo.agocs@digia.com>2014-06-24 14:22:19 +0200
commit745a71196c8893a35a80a679674bee396606f79b (patch)
treef9bc32b7cfe88e65b54372987baf95fcd1db2ada /src/quickwidgets/qquickwidget.cpp
parent8eafef976f2a53b5c05967de8b4fb8f01b8e9e7b (diff)
Make QQuickRenderControl public
QQuickRenderControl allows rendering Qt Quick 2 scenes into framebuffer objects which can then be used in arbitrary ways in Qt-based or 3rd party OpenGL renderers. [ChangeLog][QtQuick] Introduced QQuickRenderControl as a public API. Task-number: QTBUG-37944 Change-Id: I84262243b261b35cefdf67ec6bba8127a0f29275 Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
Diffstat (limited to 'src/quickwidgets/qquickwidget.cpp')
-rw-r--r--src/quickwidgets/qquickwidget.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp
index f91d512ab0..dc6b872fb2 100644
--- a/src/quickwidgets/qquickwidget.cpp
+++ b/src/quickwidgets/qquickwidget.cpp
@@ -72,7 +72,7 @@ class QQuickWidgetRenderControl : public QQuickRenderControl
{
public:
QQuickWidgetRenderControl(QQuickWidget *quickwidget) : m_quickWidget(quickwidget) {}
- QWindow *renderWindow(QPoint *offset) {
+ QWindow *renderWindow(QPoint *offset) Q_DECL_OVERRIDE {
if (offset)
*offset = m_quickWidget->mapTo(m_quickWidget->window(), QPoint());
return m_quickWidget->window()->windowHandle();
@@ -86,7 +86,7 @@ void QQuickWidgetPrivate::init(QQmlEngine* e)
Q_Q(QQuickWidget);
renderControl = new QQuickWidgetRenderControl(q);
- offscreenWindow = renderControl->createOffscreenWindow();
+ offscreenWindow = new QQuickWindow(renderControl);
offscreenWindow->setTitle(QString::fromLatin1("Offscreen"));
// Do not call create() on offscreenWindow.
@@ -162,8 +162,8 @@ QQuickWidgetPrivate::~QQuickWidgetPrivate()
// context and offscreenSurface are current at this stage, if the context was created.
Q_ASSERT(!context || (QOpenGLContext::currentContext() == context && context->surface() == offscreenSurface));
+ delete renderControl; // always delete the rendercontrol first
delete offscreenWindow;
- delete renderControl;
delete resolvedFbo;
delete fbo;
@@ -877,7 +877,7 @@ void QQuickWidget::resizeEvent(QResizeEvent *e)
d->createContext();
createFramebufferObject();
- d->offscreenWindow->resizeEvent(e);
+ QCoreApplication::sendEvent(d->offscreenWindow, e);
d->offscreenWindow->setGeometry(0, 0, e->size().width(), e->size().height());
QOpenGLContext *context = d->offscreenWindow->openglContext();
@@ -898,7 +898,7 @@ void QQuickWidget::keyPressEvent(QKeyEvent *e)
Q_D(QQuickWidget);
Q_QUICK_PROFILE(addEvent<QQuickProfiler::Key>());
- d->offscreenWindow->keyPressEvent(e);
+ QCoreApplication::sendEvent(d->offscreenWindow, e);
}
/*! \reimp */
@@ -907,7 +907,7 @@ void QQuickWidget::keyReleaseEvent(QKeyEvent *e)
Q_D(QQuickWidget);
Q_QUICK_PROFILE(addEvent<QQuickProfiler::Key>());
- d->offscreenWindow->keyReleaseEvent(e);
+ QCoreApplication::sendEvent(d->offscreenWindow, e);
}
/*! \reimp */
@@ -921,7 +921,7 @@ void QQuickWidget::mouseMoveEvent(QMouseEvent *e)
// the windowPos in e is ignored and is replaced by localPos. This is necessary
// because QQuickWindow thinks of itself as a top-level window always.
QMouseEvent mappedEvent(e->type(), e->localPos(), e->screenPos(), e->button(), e->buttons(), e->modifiers());
- d->offscreenWindow->mouseMoveEvent(&mappedEvent);
+ QCoreApplication::sendEvent(d->offscreenWindow, &mappedEvent);
}
/*! \reimp */
@@ -934,10 +934,10 @@ void QQuickWidget::mouseDoubleClickEvent(QMouseEvent *e)
// See QTBUG-25831
QMouseEvent pressEvent(QEvent::MouseButtonPress, e->localPos(), e->screenPos(), e->button(),
e->buttons(), e->modifiers());
- d->offscreenWindow->mousePressEvent(&pressEvent);
+ QCoreApplication::sendEvent(d->offscreenWindow, &pressEvent);
QMouseEvent mappedEvent(e->type(), e->localPos(), e->screenPos(), e->button(), e->buttons(),
e->modifiers());
- d->offscreenWindow->mouseDoubleClickEvent(&mappedEvent);
+ QCoreApplication::sendEvent(d->offscreenWindow, &mappedEvent);
}
/*! \reimp */
@@ -963,7 +963,7 @@ void QQuickWidget::mousePressEvent(QMouseEvent *e)
Q_QUICK_PROFILE(addEvent<QQuickProfiler::Mouse>());
QMouseEvent mappedEvent(e->type(), e->localPos(), e->screenPos(), e->button(), e->buttons(), e->modifiers());
- d->offscreenWindow->mousePressEvent(&mappedEvent);
+ QCoreApplication::sendEvent(d->offscreenWindow, &mappedEvent);
}
/*! \reimp */
@@ -973,7 +973,7 @@ void QQuickWidget::mouseReleaseEvent(QMouseEvent *e)
Q_QUICK_PROFILE(addEvent<QQuickProfiler::Mouse>());
QMouseEvent mappedEvent(e->type(), e->localPos(), e->screenPos(), e->button(), e->buttons(), e->modifiers());
- d->offscreenWindow->mouseReleaseEvent(&mappedEvent);
+ QCoreApplication::sendEvent(d->offscreenWindow, &mappedEvent);
}
#ifndef QT_NO_WHEELEVENT
@@ -984,7 +984,7 @@ void QQuickWidget::wheelEvent(QWheelEvent *e)
Q_QUICK_PROFILE(addEvent<QQuickProfiler::Mouse>());
// Wheel events only have local and global positions, no need to map.
- d->offscreenWindow->wheelEvent(e);
+ QCoreApplication::sendEvent(d->offscreenWindow, e);
}
#endif
@@ -1027,7 +1027,8 @@ bool QQuickWidget::event(QEvent *e)
case QEvent::TouchUpdate:
case QEvent::TouchCancel:
// Touch events only have local and global positions, no need to map.
- return d->offscreenWindow->event(e);
+ return QCoreApplication::sendEvent(d->offscreenWindow, e);
+
case QEvent::WindowChangeInternal:
d->handleWindowChange();
break;