1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
6 ** This file is part of the Qt Compositor.
8 ** $QT_BEGIN_LICENSE:BSD$
9 ** You may use this file under the terms of the BSD license as follows:
11 ** "Redistribution and use in source and binary forms, with or without
12 ** modification, are permitted provided that the following conditions are
14 ** * Redistributions of source code must retain the above copyright
15 ** notice, this list of conditions and the following disclaimer.
16 ** * Redistributions in binary form must reproduce the above copyright
17 ** notice, this list of conditions and the following disclaimer in
18 ** the documentation and/or other materials provided with the
20 ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
21 ** the names of its contributors may be used to endorse or promote
22 ** products derived from this software without specific prior written
25 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
39 ****************************************************************************/
44 #include "waylandexport.h"
54 class WaylandInputDevice;
61 class Q_COMPOSITOR_EXPORT WaylandCompositor
64 WaylandCompositor(QWindow *window = 0, const char *socketName = 0);
65 virtual ~WaylandCompositor();
67 struct wl_display *waylandDisplay() const;
69 void frameFinished(WaylandSurface *surface = 0);
71 void destroyClientForSurface(WaylandSurface *surface);
72 void destroyClient(WaylandClient *client);
74 QList<WaylandSurface *> surfacesForClient(WaylandClient* client) const;
76 void setDirectRenderSurface(WaylandSurface *surface, QOpenGLContext *context);
77 WaylandSurface *directRenderSurface() const;
79 QWindow *window()const;
81 virtual void surfaceCreated(WaylandSurface *surface) = 0;
82 virtual void surfaceAboutToBeDestroyed(WaylandSurface *surface);
84 virtual void openUrl(WaylandClient *client, const QUrl &url);
86 Wayland::Compositor *handle() const;
88 void setRetainedSelectionEnabled(bool enable);
89 virtual void retainedSelectionReceived(QMimeData *mimeData);
90 void overrideSelection(QMimeData *data);
92 void setClientFullScreenHint(bool value);
94 const char *socketName() const;
96 void setScreenOrientation(Qt::ScreenOrientation orientation);
98 void setOutputGeometry(const QRect &outputGeometry);
99 QRect outputGeometry() const;
101 void setOutputRefreshRate(int refreshRate);
102 int outputRefreshRate() const;
104 WaylandInputDevice *defaultInputDevice() const;
106 bool isDragging() const;
107 void sendDragMoveEvent(const QPoint &global, const QPoint &local, WaylandSurface *surface);
108 void sendDragEndEvent();
110 virtual void changeCursor(const QImage &image, int hotspotX, int hotspotY);
112 void enableSubSurfaceExtension();
114 void enableTouchExtension();
115 enum TouchExtensionFlag {
116 TouchExtMouseFromTouch = 0x01
118 Q_DECLARE_FLAGS(TouchExtensionFlags, TouchExtensionFlag)
119 void configureTouchExtension(TouchExtensionFlags flags);
122 static void retainedSelectionChanged(QMimeData *mimeData, void *param);
124 Wayland::Compositor *m_compositor;
125 QWindow *m_toplevel_window;
126 QByteArray m_socket_name;
129 Q_DECLARE_OPERATORS_FOR_FLAGS(WaylandCompositor::TouchExtensionFlags)