1// Copyright (C) 2017-2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
2// Copyright (C) 2017 The Qt Company Ltd.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
4
5#ifndef QWAYLANDSURFACE_H
6#define QWAYLANDSURFACE_H
7
8#include <QtWaylandCompositor/qtwaylandcompositorglobal.h>
9#include <QtWaylandCompositor/qwaylandcompositor.h>
10#include <QtWaylandCompositor/qwaylandcompositorextension.h>
11#include <QtWaylandCompositor/qwaylandclient.h>
12#include <QtWaylandCompositor/qwaylanddrag.h>
13
14#include <QtCore/QScopedPointer>
15#include <QtGui/QImage>
16#include <QtGui/QWindow>
17#include <QtCore/QVariantMap>
18
19struct wl_client;
20struct wl_resource;
21
22QT_BEGIN_NAMESPACE
23
24class QTouchEvent;
25class QWaylandSurfacePrivate;
26class QWaylandBufferRef;
27class QWaylandView;
28class QWaylandInputMethodControl;
29
30class QWaylandSurfaceRole
31{
32public:
33 QWaylandSurfaceRole(const QByteArray &n) : m_name(n) {}
34
35 const QByteArray name() { return m_name; }
36
37private:
38 QByteArray m_name;
39};
40
41class Q_WAYLANDCOMPOSITOR_EXPORT QWaylandSurface : public QWaylandObject
42{
43 Q_OBJECT
44 Q_DECLARE_PRIVATE(QWaylandSurface)
45 Q_PROPERTY(QWaylandClient *client READ client CONSTANT)
46 Q_PROPERTY(QRectF sourceGeometry READ sourceGeometry NOTIFY sourceGeometryChanged REVISION(1, 13))
47 Q_PROPERTY(QSize destinationSize READ destinationSize NOTIFY destinationSizeChanged REVISION(1, 13))
48 Q_PROPERTY(QSize bufferSize READ bufferSize NOTIFY bufferSizeChanged REVISION(1, 13))
49 Q_PROPERTY(int bufferScale READ bufferScale NOTIFY bufferScaleChanged)
50 Q_PROPERTY(Qt::ScreenOrientation contentOrientation READ contentOrientation NOTIFY contentOrientationChanged)
51 Q_PROPERTY(QWaylandSurface::Origin origin READ origin NOTIFY originChanged)
52 Q_PROPERTY(bool hasContent READ hasContent NOTIFY hasContentChanged)
53 Q_PROPERTY(bool cursorSurface READ isCursorSurface WRITE markAsCursorSurface NOTIFY cursorSurfaceChanged)
54 Q_PROPERTY(bool inhibitsIdle READ inhibitsIdle NOTIFY inhibitsIdleChanged REVISION(1, 14))
55 Q_PROPERTY(bool isOpaque READ isOpaque NOTIFY isOpaqueChanged REVISION(6, 4))
56 Q_MOC_INCLUDE("qwaylanddrag.h")
57 Q_MOC_INCLUDE("qwaylandcompositor.h")
58
59 QML_NAMED_ELEMENT(WaylandSurfaceBase)
60 QML_ADDED_IN_VERSION(1, 0)
61 QML_UNCREATABLE("Cannot create instance of WaylandSurfaceBase, use WaylandSurface instead")
62public:
63 enum Origin {
64 OriginTopLeft,
65 OriginBottomLeft
66 };
67 Q_ENUM(Origin)
68
69 QWaylandSurface();
70 QWaylandSurface(QWaylandCompositor *compositor, QWaylandClient *client, uint id, int version);
71 ~QWaylandSurface() override;
72
73 Q_INVOKABLE void initialize(QWaylandCompositor *compositor, QWaylandClient *client, uint id, int version);
74 bool isInitialized() const;
75
76 QWaylandClient *client() const;
77 ::wl_client *waylandClient() const;
78
79 bool setRole(QWaylandSurfaceRole *role, wl_resource *errorResource, uint32_t errorCode);
80 QWaylandSurfaceRole *role() const;
81
82 bool hasContent() const;
83
84 QRectF sourceGeometry() const;
85 QSize destinationSize() const;
86 QSize bufferSize() const;
87 int bufferScale() const;
88
89 Qt::ScreenOrientation contentOrientation() const;
90
91 Origin origin() const;
92
93 QWaylandCompositor *compositor() const;
94
95 bool inputRegionContains(const QPoint &p) const;
96 bool inputRegionContains(const QPointF &position) const;
97
98 Q_INVOKABLE void destroy();
99 Q_INVOKABLE bool isDestroyed() const;
100
101 Q_INVOKABLE void frameStarted();
102 Q_INVOKABLE void sendFrameCallbacks();
103
104 QWaylandView *primaryView() const;
105 void setPrimaryView(QWaylandView *view);
106
107 QList<QWaylandView *> views() const;
108
109 static QWaylandSurface *fromResource(::wl_resource *resource);
110 struct wl_resource *resource() const;
111
112 void markAsCursorSurface(bool cursorSurface);
113 bool isCursorSurface() const;
114
115 bool inhibitsIdle() const;
116 bool isOpaque() const;
117
118#if QT_CONFIG(im)
119 QWaylandInputMethodControl *inputMethodControl() const;
120#endif
121
122public Q_SLOTS:
123#if QT_CONFIG(clipboard)
124 void updateSelection();
125#endif
126
127protected:
128 QWaylandSurface(QWaylandSurfacePrivate &dptr);
129
130Q_SIGNALS:
131 void hasContentChanged();
132 void damaged(const QRegion &rect);
133 void parentChanged(QWaylandSurface *newParent, QWaylandSurface *oldParent);
134 void childAdded(QWaylandSurface *child);
135 Q_REVISION(1, 13) void sourceGeometryChanged();
136 Q_REVISION(1, 13) void destinationSizeChanged();
137 Q_REVISION(1, 13) void bufferSizeChanged();
138 void bufferScaleChanged();
139 void offsetForNextFrame(const QPoint &offset);
140 void contentOrientationChanged();
141 void surfaceDestroyed();
142 void originChanged();
143 void subsurfacePositionChanged(const QPoint &position);
144 void subsurfacePlaceAbove(QWaylandSurface *sibling);
145 void subsurfacePlaceBelow(QWaylandSurface *sibling);
146 void dragStarted(QWaylandDrag *drag);
147 void cursorSurfaceChanged();
148 Q_REVISION(14) void inhibitsIdleChanged();
149 Q_REVISION(6, 4) void isOpaqueChanged();
150
151 void configure(bool hasBuffer);
152 void redraw();
153};
154
155QT_END_NAMESPACE
156
157#endif // QWAYLANDSURFACE_H
158

source code of qtwayland/src/compositor/compositor_api/qwaylandsurface.h