60 static QWaylandSurfacePrivate *get(QWaylandSurface *surface);
62 QWaylandSurfacePrivate();
63 ~QWaylandSurfacePrivate() override;
68 void refView(QWaylandView *view);
69 void derefView(QWaylandView *view);
71 using QtWaylandServer::wl_surface::resource;
73 void removeFrameCallback(QtWayland::FrameCallback *callback);
75 void notifyViewsAboutDestruction();
78 static void addUninitializedSurface(QWaylandSurfacePrivate *surface);
79 static void removeUninitializedSurface(QWaylandSurfacePrivate *surface);
80 static bool hasUninitializedSurface();
83 void initSubsurface(QWaylandSurface *parent,
struct ::wl_client *client,
int id,
int version);
84 bool isSubsurface()
const {
return subsurface; }
85 QPoint subsurfacePosition()
const {
return subsurface ? subsurface->position() : QPoint(); }
86 QWaylandSurfacePrivate *parentSurface()
const {
return subsurface ? subsurface->parentSurface :
nullptr; }
89 void surface_destroy_resource(Resource *resource) override;
91 void surface_destroy(Resource *resource) override;
92 void surface_offset(Resource *resource, int32_t x, int32_t y) override;
93 void surface_attach(Resource *resource,
94 struct wl_resource *buffer,
int x,
int y) override;
95 void surface_damage(Resource *resource,
96 int32_t x, int32_t y, int32_t width, int32_t height) override;
97 void surface_damage_buffer(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
98 void surface_frame(Resource *resource,
99 uint32_t callback) override;
100 void surface_set_opaque_region(Resource *resource,
101 struct wl_resource *region) override;
102 void surface_set_input_region(Resource *resource,
103 struct wl_resource *region) override;
104 void surface_commit(Resource *resource) override;
105 void surface_set_buffer_transform(Resource *resource, int32_t transform) override;
106 void surface_set_buffer_scale(Resource *resource, int32_t bufferScale) override;
108 QtWayland::ClientBuffer *getBuffer(
struct ::wl_resource *buffer);
111 QWaylandCompositor *compositor =
nullptr;
113 QWaylandClient *client =
nullptr;
114 QList<QWaylandView *> views;
116 QWaylandBufferRef bufferRef;
117 QWaylandSurfaceRole *role =
nullptr;
118 QWaylandViewporterPrivate::Viewport *viewport =
nullptr;
121 QWaylandBufferRef buffer;
122 QRegion surfaceDamage;
123 QRegion bufferDamage;
125 bool newlyAttached =
false;
128 QRectF sourceGeometry;
129 QSize destinationSize;
130 QRegion opaqueRegion;
131 Qt::ScreenOrientation contentOrientation = Qt::PrimaryOrientation;
134 QPoint lastLocalMousePos;
135 QPoint lastGlobalMousePos;
137 QList<QtWayland::FrameCallback *> pendingFrameCallbacks;
138 QList<QtWayland::FrameCallback *> frameCallbacks;
140 QList<QPointer<QWaylandSurface>> subsurfaceChildren;
142 QList<QWaylandIdleInhibitManagerV1Private::Inhibitor *> idleInhibitors;
145 QRegion opaqueRegion;
147 QRectF sourceGeometry;
148 QSize destinationSize;
151 bool isCursorSurface =
false;
152 bool destroyed =
false;
153 bool hasContent =
false;
154 bool isInitialized =
false;
155 bool isOpaque =
false;
156 Qt::ScreenOrientation contentOrientation = Qt::PrimaryOrientation;
157 QWindow::Visibility visibility;
159 QWaylandInputMethodControl *inputMethodControl =
nullptr;
162 class Subsurface :
public QtWaylandServer::wl_subsurface
165 Subsurface(QWaylandSurfacePrivate *s) : surface(s) {}
166 QWaylandSurfacePrivate *surfaceFromResource();
167 QPoint position()
const {
return pos; };
170 void subsurface_set_position(wl_subsurface::Resource *resource, int32_t x, int32_t y) override;
171 void subsurface_place_above(wl_subsurface::Resource *resource,
struct wl_resource *sibling) override;
172 void subsurface_place_below(wl_subsurface::Resource *resource,
struct wl_resource *sibling) override;
173 void subsurface_set_sync(wl_subsurface::Resource *resource) override;
174 void subsurface_set_desync(wl_subsurface::Resource *resource) override;
177 friend class QWaylandSurfacePrivate;
178 QWaylandSurfacePrivate *surface =
nullptr;
179 QWaylandSurfacePrivate *parentSurface =
nullptr;
183 Subsurface *subsurface =
nullptr;
186 static QList<QWaylandSurfacePrivate *> uninitializedSurfaces;
188 Q_DECLARE_PUBLIC(QWaylandSurface)
189 Q_DISABLE_COPY(QWaylandSurfacePrivate)