diff options
Diffstat (limited to 'src/qt-compositor/hardware_integration/xpixmap_share')
5 files changed, 317 insertions, 2 deletions
diff --git a/src/qt-compositor/hardware_integration/xpixmap_share/xpixmap_share.pri b/src/qt-compositor/hardware_integration/xpixmap_share/xpixmap_share.pri index d7a5178..b186992 100644 --- a/src/qt-compositor/hardware_integration/xpixmap_share/xpixmap_share.pri +++ b/src/qt-compositor/hardware_integration/xpixmap_share/xpixmap_share.pri @@ -1,5 +1,11 @@ INCLUDEPATH += $$PWD -HEADERS += $$PWD/wayland-xpixmap-server-protocol.h +HEADERS += \ + $$PWD/wayland-xpixmap-server-protocol.h \ + $$PWD/xpixmapbuffer.h \ + ../../src/qt-compositor/hardware_integration/xpixmap_share/xpixmaphandler.h -SOURCES += $$PWD/wayland-xpixmap-protocol.c +SOURCES += \ + $$PWD/wayland-xpixmap-protocol.c \ + $$PWD/xpixmapbuffer.cpp \ + ../../src/qt-compositor/hardware_integration/xpixmap_share/xpixmaphandler.cpp diff --git a/src/qt-compositor/hardware_integration/xpixmap_share/xpixmapbuffer.cpp b/src/qt-compositor/hardware_integration/xpixmap_share/xpixmapbuffer.cpp new file mode 100644 index 0000000..2d3a27f --- /dev/null +++ b/src/qt-compositor/hardware_integration/xpixmap_share/xpixmapbuffer.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** This file is part of QtCompositor** +** +** Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** +** Contact: Nokia Corporation qt-info@nokia.com +** +** You may use this file under the terms of the BSD license as follows: +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** +** Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** +** Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** +** Neither the name of Nokia Corporation and its Subsidiary(-ies) nor the +** names of its contributors may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +****************************************************************************/ + +#include "xpixmapbuffer.h" + +void destroy_buffer(struct wl_resource *resource, struct wl_client *client) +{ + +} + +XPixmapBuffer::XPixmapBuffer(Pixmap pixmap, const QSize &size, + wl_visual *visual, Wayland::Compositor *compositor) + : m_pixmap(pixmap) + , m_glxpixmap(0) +{ + base()->height = size.height(); + base()->width = size.width(); + base()->compositor = compositor->base(); + base()->visual = visual; + + //These are set to 0 in super constructor, but do it here as well + //to make a point out of that this surface is a gl surface + base()->attach = 0; + base()->damage = 0; +} + +XPixmapBuffer::~XPixmapBuffer() +{ + +} + +Pixmap XPixmapBuffer::pixmap() const +{ + return m_pixmap; +} + +void xPixmapBufferDestroy(struct wl_client *client, struct wl_buffer *buffer) +{ + Q_UNUSED(client); + delete Wayland::wayland_cast<XPixmapBuffer *>(buffer); +} diff --git a/src/qt-compositor/hardware_integration/xpixmap_share/xpixmapbuffer.h b/src/qt-compositor/hardware_integration/xpixmap_share/xpixmapbuffer.h new file mode 100644 index 0000000..c9574bb --- /dev/null +++ b/src/qt-compositor/hardware_integration/xpixmap_share/xpixmapbuffer.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** This file is part of QtCompositor** +** +** Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** +** Contact: Nokia Corporation qt-info@nokia.com +** +** You may use this file under the terms of the BSD license as follows: +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** +** Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** +** Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** +** Neither the name of Nokia Corporation and its Subsidiary(-ies) nor the +** names of its contributors may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +****************************************************************************/ + +#ifndef XPIXMAPBUFFER_H +#define XPIXMAPBUFFER_H + +#include "waylandobject.h" +#include "wayland_wrapper/wlcompositor.h" + +#include <QtCore/QSize> + +#include <X11/Xlib.h> +#include <GL/glx.h> + +class XPixmapBuffer : public Wayland::Object<struct wl_buffer> +{ +public: + XPixmapBuffer(Pixmap pixmap, const QSize &size, + wl_visual *visual, Wayland::Compositor *compositor); + + ~XPixmapBuffer(); + + Pixmap pixmap() const; + GLXPixmap m_glxpixmap; +private: + Pixmap m_pixmap; +}; + +void xPixmapBufferDestroy(struct wl_client *client, struct wl_buffer *buffer); + +const static struct wl_buffer_interface xpixmap_buffer_interface = { + xPixmapBufferDestroy +}; + + +#endif // XPIXMAPBUFFER_H diff --git a/src/qt-compositor/hardware_integration/xpixmap_share/xpixmaphandler.cpp b/src/qt-compositor/hardware_integration/xpixmap_share/xpixmaphandler.cpp new file mode 100644 index 0000000..3c620c5 --- /dev/null +++ b/src/qt-compositor/hardware_integration/xpixmap_share/xpixmaphandler.cpp @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** This file is part of QtCompositor** +** +** Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** +** Contact: Nokia Corporation qt-info@nokia.com +** +** You may use this file under the terms of the BSD license as follows: +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** +** Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** +** Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** +** Neither the name of Nokia Corporation and its Subsidiary(-ies) nor the +** names of its contributors may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +****************************************************************************/ + +#include "xpixmaphandler.h" + +#include <QtGui/QWidget> +#include "wayland_wrapper/wlcompositor.h" + +#include <QtCore/QDebug> + +#include "xpixmapbuffer.h" +#include <X11/Xlib.h> + +XPixmapHandler::XPixmapHandler(Wayland::Compositor *compositor, QWidget *topLevelWidget) + :m_compositor(compositor) +{ +} + +XPixmapHandler::~XPixmapHandler() +{ + qDebug() << "xpixmapHandler destroyed"; +} + +void create_buffer(struct wl_client *client, + struct wl_xpixmap *xpixmap, + uint32_t id, + uint32_t xpixmap_id, + int width, + int height, + struct wl_visual *visual) +{ + XPixmapHandler *xpixmapHandler = reinterpret_cast<XPixmapHandler *>(xpixmap); + xpixmapHandler->createBuffer(client,id,xpixmap_id,QSize(width,height),visual); +} + +void XPixmapHandler::createBuffer(wl_client *client, uint32_t id, uint32_t xpixmap_id, const QSize &size, wl_visual *visual) +{ + + qDebug() << "creating buffer for id" << xpixmap_id << "and size" << size; + Pixmap pixmap = (Pixmap)xpixmap_id; + XPixmapBuffer *pixmapBuffer = new XPixmapBuffer(pixmap,size,visual,m_compositor); + Wayland::addClientResource(client,&pixmapBuffer->base()->resource,id,&wl_buffer_interface,&xpixmap_buffer_interface,0); +} diff --git a/src/qt-compositor/hardware_integration/xpixmap_share/xpixmaphandler.h b/src/qt-compositor/hardware_integration/xpixmap_share/xpixmaphandler.h new file mode 100644 index 0000000..ad9c24f --- /dev/null +++ b/src/qt-compositor/hardware_integration/xpixmap_share/xpixmaphandler.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** This file is part of QtCompositor** +** +** Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** +** Contact: Nokia Corporation qt-info@nokia.com +** +** You may use this file under the terms of the BSD license as follows: +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** +** Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** +** Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** +** Neither the name of Nokia Corporation and its Subsidiary(-ies) nor the +** names of its contributors may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +****************************************************************************/ + +#ifndef XPIXMAPHANDLER_H +#define XPIXMAPHANDLER_H + +#include "wayland-xpixmap-server-protocol.h" + +#include "waylandobject.h" +#include <QtCore/QSize> + +namespace Wayland { +class Compositor; +} +class QWidget; + +class XPixmapHandler : public Wayland::Object<struct wl_object> +{ +public: + XPixmapHandler(Wayland::Compositor *compositor, QWidget *topLevelWidget); + + ~XPixmapHandler(); + + void createBuffer(wl_client *client, uint32_t id, uint32_t xpixmap_id, const QSize &size, wl_visual *visual); +private: + Wayland::Compositor *m_compositor; +}; + +void create_buffer(struct wl_client *client, + struct wl_xpixmap *xpixmap, + uint32_t id, + uint32_t xpixmap_id, + int width, + int height, + struct wl_visual *visual); + +const static struct wl_xpixmap_interface xpixmap_interface = { + create_buffer +}; + +#endif // XPIXMAPHANDLER_H |