diff options
author | Paul Olav Tvete <paul.tvete@theqtcompany.com> | 2015-09-16 10:28:48 +0200 |
---|---|---|
committer | Paul Olav Tvete <paul.tvete@theqtcompany.com> | 2015-09-16 10:49:43 +0000 |
commit | bb46fc4cd6ad89346597bb03882f2c6f3525faa3 (patch) | |
tree | 859136d26db24dca28b72db15abf1a423c88d8b9 /examples | |
parent | dae5d55dea859bb3a5722bf665d077f1f9b3d360 (diff) | |
download | qtwayland-bb46fc4cd6ad89346597bb03882f2c6f3525faa3.tar.gz |
Also draw surfaces without a shell surface
...and minor cleanups
Change-Id: I278eb549af49480939973dafbe1c0628fabf16fc
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
Diffstat (limited to 'examples')
5 files changed, 28 insertions, 9 deletions
diff --git a/examples/wayland/qwindow-compositor/compositorwindow.cpp b/examples/wayland/qwindow-compositor/compositorwindow.cpp index 94bb10e2..b08a5b2a 100644 --- a/examples/wayland/qwindow-compositor/compositorwindow.cpp +++ b/examples/wayland/qwindow-compositor/compositorwindow.cpp @@ -98,6 +98,8 @@ void CompositorWindow::paintGL() functions->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Q_FOREACH (WindowCompositorView *view, m_compositor->views()) { + if (view->isCursor()) + continue; GLuint textureId = view->getTexture(); QWaylandSurface *surface = view->surface(); if (surface && surface->isMapped()) { diff --git a/examples/wayland/qwindow-compositor/compositorwindow.h b/examples/wayland/qwindow-compositor/compositorwindow.h index 8ca9eccc..4e6a25f7 100644 --- a/examples/wayland/qwindow-compositor/compositorwindow.h +++ b/examples/wayland/qwindow-compositor/compositorwindow.h @@ -69,8 +69,6 @@ protected: void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE; void keyReleaseEvent(QKeyEvent *e) Q_DECL_OVERRIDE; - QSize sizeHint() const Q_DECL_OVERRIDE; - private slots: void startMove(); void startResize(int edge); diff --git a/examples/wayland/qwindow-compositor/main.cpp b/examples/wayland/qwindow-compositor/main.cpp index 101367cf..c4fa4325 100644 --- a/examples/wayland/qwindow-compositor/main.cpp +++ b/examples/wayland/qwindow-compositor/main.cpp @@ -50,6 +50,7 @@ int main(int argc, char *argv[]) WindowCompositor compositor(&window); window.setCompositor(&compositor); compositor.create(); + window.resize(800,600); window.show(); return app.exec(); diff --git a/examples/wayland/qwindow-compositor/windowcompositor.cpp b/examples/wayland/qwindow-compositor/windowcompositor.cpp index b9e675f3..761c6387 100644 --- a/examples/wayland/qwindow-compositor/windowcompositor.cpp +++ b/examples/wayland/qwindow-compositor/windowcompositor.cpp @@ -63,6 +63,11 @@ GLuint WindowCompositorView::getTexture() { return m_texture; } +bool WindowCompositorView::isCursor() const +{ + return surface()->isCursorSurface(); +} + WindowCompositor::WindowCompositor(QWindow *window) : QWaylandCompositor() , m_window(window) @@ -90,6 +95,11 @@ void WindowCompositor::onSurfaceCreated(QWaylandSurface *surface) connect(surface, &QWaylandSurface::mappedChanged, this, &WindowCompositor::surfaceMappedChanged); connect(surface, &QWaylandSurface::redraw, this, &WindowCompositor::triggerRender); connect(surface, &QWaylandSurface::offsetForNextFrame, this, &WindowCompositor::frameOffset); + WindowCompositorView *view = new WindowCompositorView; + view->setSurface(surface); + view->setOutput(output(m_window)); + m_views << view; + connect(view, &QWaylandView::surfaceDestroyed, this, &WindowCompositor::viewSurfaceDestroyed); } void WindowCompositor::surfaceMappedChanged() @@ -97,7 +107,7 @@ void WindowCompositor::surfaceMappedChanged() QWaylandSurface *surface = qobject_cast<QWaylandSurface *>(sender()); if (surface->isMapped()) { if (!surface->isCursorSurface()) - defaultInputDevice()->setKeyboardFocus(surface); + defaultInputDevice()->setKeyboardFocus(surface); } triggerRender(); } @@ -119,19 +129,24 @@ void WindowCompositor::surfaceCommittedSlot() triggerRender(); } +WindowCompositorView * WindowCompositor::findView(const QWaylandSurface *s) const +{ + Q_FOREACH (WindowCompositorView* view, m_views) { + if (view->surface() == s) + return view; + } + return Q_NULLPTR; +} + void WindowCompositor::onCreateShellSurface(QWaylandSurface *s, QWaylandClient *client, uint id) { QWaylandSurface *surface = s; - WindowCompositorView *view = new WindowCompositorView; - view->setSurface(surface); - view->setOutput(output(m_window)); - m_views << view; - connect(view, &QWaylandView::surfaceDestroyed, this, &WindowCompositor::viewSurfaceDestroyed); - QWaylandShellSurface *shellSurface = new QWaylandShellSurface(m_shell, surface, client, id); connect(shellSurface, &QWaylandShellSurface::startMove, this, &WindowCompositor::startMove); connect(shellSurface, &QWaylandShellSurface::startResize, this, &WindowCompositor::onStartResize); + WindowCompositorView *view = findView(s); + Q_ASSERT(view); view->m_shellSurface = shellSurface; } diff --git a/examples/wayland/qwindow-compositor/windowcompositor.h b/examples/wayland/qwindow-compositor/windowcompositor.h index 18db41c2..55d964ca 100644 --- a/examples/wayland/qwindow-compositor/windowcompositor.h +++ b/examples/wayland/qwindow-compositor/windowcompositor.h @@ -60,6 +60,8 @@ public: GLuint getTexture(); QPointF position() const { return m_position; } void setPosition(const QPointF &pos) { m_position = pos; } + bool isCursor() const; + bool hasShell() const { return m_shellSurface; } private: friend class WindowCompositor; GLuint m_texture; @@ -104,6 +106,7 @@ private slots: void onCreateShellSurface(QWaylandSurface *s, QWaylandClient *client, uint id); void updateCursor(); private: + WindowCompositorView *findView(const QWaylandSurface *s) const; QWindow *m_window; QList<WindowCompositorView*> m_views; QWaylandShell *m_shell; |