Change copyrights from Nokia to Digia
[profile/ivi/qtwayland.git] / src / plugins / platforms / wayland / qwaylandwindow.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 config.tests of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia.  For licensing terms and
14 ** conditions see http://qt.digia.com/licensing.  For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file.  Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights.  These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file.  Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QWAYLANDWINDOW_H
43 #define QWAYLANDWINDOW_H
44
45 #include <qpa/qplatformwindow.h>
46 #include <QtCore/QWaitCondition>
47
48 #include "qwaylanddisplay.h"
49
50 class QWaylandDisplay;
51 class QWaylandBuffer;
52 class QWaylandShellSurface;
53 class QWaylandExtendedSurface;
54 class QWaylandSubSurface;
55 class QWaylandDecoration;
56
57 struct wl_egl_window;
58
59 class QWaylandWindow : public QPlatformWindow
60 {
61 public:
62     enum WindowType {
63         Shm,
64         Egl
65     };
66
67     QWaylandWindow(QWindow *window);
68     ~QWaylandWindow();
69
70     virtual WindowType windowType() const = 0;
71     WId winId() const;
72     void setVisible(bool visible);
73     void setParent(const QPlatformWindow *parent);
74
75     void setWindowTitle(const QString &title);
76
77     void setGeometry(const QRect &rect);
78
79     void configure(uint32_t edges, int32_t width, int32_t height);
80
81     void attach(QWaylandBuffer *buffer);
82     QWaylandBuffer *attached() const;
83
84     void damage(const QRect &rect);
85
86     void waitForFrameSync();
87
88     QMargins frameMargins() const;
89
90     struct wl_surface *wl_surface() const { return mSurface; }
91
92     QWaylandShellSurface *shellSurface() const;
93     QWaylandExtendedSurface *extendedWindow() const;
94     QWaylandSubSurface *subSurfaceWindow() const;
95
96     void handleContentOrientationChange(Qt::ScreenOrientation orientation);
97     Qt::ScreenOrientation requestWindowOrientation(Qt::ScreenOrientation orientation);
98
99     Qt::WindowState setWindowState(Qt::WindowState state);
100     Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags);
101
102     bool isExposed() const;
103
104     QWaylandDecoration *decoration() const;
105     void setDecoration(QWaylandDecoration *decoration);
106
107
108     void handleMouse(QWaylandInputDevice *inputDevice,
109                      ulong timestamp,
110                      const QPointF & local,
111                      const QPointF & global,
112                      Qt::MouseButtons b,
113                      Qt::KeyboardModifiers mods);
114     void handleMouseEnter();
115     void handleMouseLeave();
116 protected:
117     QWaylandDisplay *mDisplay;
118     struct wl_surface *mSurface;
119     QWaylandShellSurface *mShellSurface;
120     QWaylandExtendedSurface *mExtendedWindow;
121     QWaylandSubSurface *mSubSurfaceWindow;
122
123     QWaylandDecoration *mWindowDecoration;
124     bool mMouseEventsInContentArea;
125     Qt::MouseButtons mMousePressedInContentArea;
126
127     QWaylandBuffer *mBuffer;
128     WId mWindowId;
129     bool mWaitingForFrameSync;
130     struct wl_callback *mFrameCallback;
131     QWaitCondition mFrameSyncWait;
132
133     bool mSentInitialResize;
134
135 private:
136     void handleMouseEventWithDecoration(QWaylandInputDevice *inputDevice,
137                                         ulong timestamp,
138                                         const QPointF & local,
139                                         const QPointF & global,
140                                         Qt::MouseButtons b,
141                                         Qt::KeyboardModifiers mods);
142
143     static const wl_callback_listener callbackListener;
144     static void frameCallback(void *data, struct wl_callback *wl_callback, uint32_t time);
145
146 };
147
148
149 #endif // QWAYLANDWINDOW_H