Change copyrights from Nokia to Digia
[profile/ivi/qtwayland.git] / src / compositor / compositor_api / waylandcompositor.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the Qt Compositor.
7 **
8 ** $QT_BEGIN_LICENSE:BSD$
9 ** You may use this file under the terms of the BSD license as follows:
10 **
11 ** "Redistribution and use in source and binary forms, with or without
12 ** modification, are permitted provided that the following conditions are
13 ** met:
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
19 **     distribution.
20 **   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
21 **     of its contributors may be used to endorse or promote products derived
22 **     from this software without specific prior written permission.
23 **
24 **
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."
36 **
37 ** $QT_END_LICENSE$
38 **
39 ****************************************************************************/
40
41 #ifndef QTCOMP_H
42 #define QTCOMP_H
43
44 #include "waylandexport.h"
45
46 #include <QObject>
47 #include <QImage>
48 #include <QRect>
49
50 class QMimeData;
51 class QUrl;
52 class QOpenGLContext;
53 class WaylandSurface;
54 class WaylandInputDevice;
55
56 namespace Wayland
57 {
58     class Compositor;
59 }
60
61 class Q_COMPOSITOR_EXPORT WaylandCompositor
62 {
63 public:
64     WaylandCompositor(QWindow *window = 0, const char *socketName = 0);
65     virtual ~WaylandCompositor();
66
67     struct wl_display *waylandDisplay() const;
68
69     void frameFinished(WaylandSurface *surface = 0);
70
71     void destroyClientForSurface(WaylandSurface *surface);
72     void destroyClient(WaylandClient *client);
73
74     QList<WaylandSurface *> surfacesForClient(WaylandClient* client) const;
75
76     void setDirectRenderSurface(WaylandSurface *surface, QOpenGLContext *context);
77     WaylandSurface *directRenderSurface() const;
78
79     QWindow *window()const;
80
81     virtual void surfaceCreated(WaylandSurface *surface) = 0;
82     virtual void surfaceAboutToBeDestroyed(WaylandSurface *surface);
83
84     virtual void openUrl(WaylandClient *client, const QUrl &url);
85
86     Wayland::Compositor *handle() const;
87
88     void setRetainedSelectionEnabled(bool enable);
89     virtual void retainedSelectionReceived(QMimeData *mimeData);
90     void overrideSelection(QMimeData *data);
91
92     void setClientFullScreenHint(bool value);
93
94     const char *socketName() const;
95
96     void setScreenOrientation(Qt::ScreenOrientation orientation);
97
98     void setOutputGeometry(const QRect &outputGeometry);
99     QRect outputGeometry() const;
100
101     void setOutputRefreshRate(int refreshRate);
102     int outputRefreshRate() const;
103
104     WaylandInputDevice *defaultInputDevice() const;
105
106     bool isDragging() const;
107     void sendDragMoveEvent(const QPoint &global, const QPoint &local, WaylandSurface *surface);
108     void sendDragEndEvent();
109
110     virtual void changeCursor(const QImage &image, int hotspotX, int hotspotY);
111
112     void enableSubSurfaceExtension();
113
114     void enableTouchExtension();
115     enum TouchExtensionFlag {
116         TouchExtMouseFromTouch = 0x01
117     };
118     Q_DECLARE_FLAGS(TouchExtensionFlags, TouchExtensionFlag)
119     void configureTouchExtension(TouchExtensionFlags flags);
120
121 private:
122     static void retainedSelectionChanged(QMimeData *mimeData, void *param);
123
124     Wayland::Compositor *m_compositor;
125     QWindow  *m_toplevel_window;
126     QByteArray m_socket_name;
127 };
128
129 Q_DECLARE_OPERATORS_FOR_FLAGS(WaylandCompositor::TouchExtensionFlags)
130
131 #endif // QTCOMP_H