diff --git a/src/wayland/compositor.cpp b/src/wayland/compositor.cpp new file mode 100644 index 0000000000..8c6373a600 --- /dev/null +++ b/src/wayland/compositor.cpp @@ -0,0 +1,75 @@ +/******************************************************************** + KWin - the KDE window manager + This file is part of the KDE project. + +Copyright (C) 2014 Martin Gräßlin + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*********************************************************************/ +#include "compositor.h" +#include "surface.h" + +#include + +namespace KWin +{ +namespace Wayland +{ + +Compositor::Compositor(QObject *parent) + : QObject(parent) + , m_compositor(nullptr) +{ +} + +Compositor::~Compositor() +{ + release(); +} + +void Compositor::setup(wl_compositor *compositor) +{ + Q_ASSERT(compositor); + Q_ASSERT(!m_compositor); + m_compositor = compositor; +} + +void Compositor::release() +{ + if (!m_compositor) { + return; + } + wl_compositor_destroy(m_compositor); + m_compositor = nullptr; +} + +void Compositor::destroy() +{ + if (!m_compositor) { + return; + } + free(m_compositor); + m_compositor = nullptr; +} + +Surface *Compositor::createSurface(QObject *parent) +{ + Q_ASSERT(isValid()); + Surface *s = new Surface(parent); + s->setup(wl_compositor_create_surface(m_compositor)); + return s; +} + +} +} diff --git a/src/wayland/compositor.h b/src/wayland/compositor.h new file mode 100644 index 0000000000..9938fd893a --- /dev/null +++ b/src/wayland/compositor.h @@ -0,0 +1,64 @@ +/******************************************************************** + KWin - the KDE window manager + This file is part of the KDE project. + +Copyright (C) 2014 Martin Gräßlin + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*********************************************************************/ +#ifndef KWIN_WAYLAND_COMPOSITOR_H +#define KWIN_WAYLAND_COMPOSITOR_H + +#include + +struct wl_compositor; + +namespace KWin +{ +namespace Wayland +{ + +class Surface; + +class Compositor : public QObject +{ + Q_OBJECT +public: + explicit Compositor(QObject *parent = nullptr); + virtual ~Compositor(); + + bool isValid() const { + return m_compositor != nullptr; + } + void setup(wl_compositor *compositor); + void release(); + void destroy(); + + Surface *createSurface(QObject *parent = nullptr); + + operator wl_compositor*() { + return m_compositor; + } + operator wl_compositor*() const { + return m_compositor; + } + +private: + wl_compositor *m_compositor; +}; + +} +} + +#endif