1 /****************************************************************************
3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
6 ** This file is part of the config.tests of the Qt Toolkit.
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.
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.
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.
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.
40 ****************************************************************************/
42 #ifndef QWAYLANDWINDOW_H
43 #define QWAYLANDWINDOW_H
45 #include <qpa/qplatformwindow.h>
46 #include <QtCore/QWaitCondition>
48 #include "qwaylanddisplay.h"
50 class QWaylandDisplay;
52 class QWaylandShellSurface;
53 class QWaylandExtendedSurface;
54 class QWaylandSubSurface;
55 class QWaylandDecoration;
59 class QWaylandWindow : public QPlatformWindow
67 QWaylandWindow(QWindow *window);
70 virtual WindowType windowType() const = 0;
72 void setVisible(bool visible);
73 void setParent(const QPlatformWindow *parent);
75 void setWindowTitle(const QString &title);
77 void setGeometry(const QRect &rect);
79 void configure(uint32_t edges, int32_t width, int32_t height);
81 void attach(QWaylandBuffer *buffer);
82 QWaylandBuffer *attached() const;
84 void damage(const QRect &rect);
86 void waitForFrameSync();
88 QMargins frameMargins() const;
90 struct wl_surface *wl_surface() const { return mSurface; }
92 QWaylandShellSurface *shellSurface() const;
93 QWaylandExtendedSurface *extendedWindow() const;
94 QWaylandSubSurface *subSurfaceWindow() const;
96 void handleContentOrientationChange(Qt::ScreenOrientation orientation);
97 Qt::ScreenOrientation requestWindowOrientation(Qt::ScreenOrientation orientation);
99 Qt::WindowState setWindowState(Qt::WindowState state);
100 Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags);
102 bool isExposed() const;
104 QWaylandDecoration *decoration() const;
105 void setDecoration(QWaylandDecoration *decoration);
108 void handleMouse(QWaylandInputDevice *inputDevice,
110 const QPointF & local,
111 const QPointF & global,
113 Qt::KeyboardModifiers mods);
114 void handleMouseEnter();
115 void handleMouseLeave();
117 QWaylandDisplay *mDisplay;
118 struct wl_surface *mSurface;
119 QWaylandShellSurface *mShellSurface;
120 QWaylandExtendedSurface *mExtendedWindow;
121 QWaylandSubSurface *mSubSurfaceWindow;
123 QWaylandDecoration *mWindowDecoration;
124 bool mMouseEventsInContentArea;
125 Qt::MouseButtons mMousePressedInContentArea;
127 QWaylandBuffer *mBuffer;
129 bool mWaitingForFrameSync;
130 struct wl_callback *mFrameCallback;
131 QWaitCondition mFrameSyncWait;
133 bool mSentInitialResize;
136 void handleMouseEventWithDecoration(QWaylandInputDevice *inputDevice,
138 const QPointF & local,
139 const QPointF & global,
141 Qt::KeyboardModifiers mods);
143 static const wl_callback_listener callbackListener;
144 static void frameCallback(void *data, struct wl_callback *wl_callback, uint32_t time);
149 #endif // QWAYLANDWINDOW_H