59 static QWaylandSurfacePrivate *get(QWaylandSurface *surface);
61 QWaylandSurfacePrivate();
62 ~QWaylandSurfacePrivate() override;
67 void refView(QWaylandView *view);
68 void derefView(QWaylandView *view);
70 using QtWaylandServer::wl_surface::resource;
72 void removeFrameCallback(QtWayland::FrameCallback *callback);
74 void notifyViewsAboutDestruction();
77 static void addUninitializedSurface(QWaylandSurfacePrivate *surface);
78 static void removeUninitializedSurface(QWaylandSurfacePrivate *surface);
79 static bool hasUninitializedSurface();
82 void initSubsurface(QWaylandSurface *parent,
struct ::wl_client *client,
int id,
int version);
83 bool isSubsurface()
const {
return subsurface; }
84 QWaylandSurfacePrivate *parentSurface()
const {
return subsurface ? subsurface->parentSurface :
nullptr; }
87 void surface_destroy_resource(Resource *resource) override;
89 void surface_destroy(Resource *resource) override;
90 void surface_offset(Resource *resource, int32_t x, int32_t y) override;
91 void surface_attach(Resource *resource,
92 struct wl_resource *buffer,
int x,
int y) override;
93 void surface_damage(Resource *resource,
94 int32_t x, int32_t y, int32_t width, int32_t height) override;
95 void surface_damage_buffer(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
96 void surface_frame(Resource *resource,
97 uint32_t callback) override;
98 void surface_set_opaque_region(Resource *resource,
99 struct wl_resource *region) override;
100 void surface_set_input_region(Resource *resource,
101 struct wl_resource *region) override;
102 void surface_commit(Resource *resource) override;
103 void surface_set_buffer_transform(Resource *resource, int32_t transform) override;
104 void surface_set_buffer_scale(Resource *resource, int32_t bufferScale) override;
106 QtWayland::ClientBuffer *getBuffer(
struct ::wl_resource *buffer);
109 QWaylandCompositor *compositor =
nullptr;
111 QWaylandClient *client =
nullptr;
112 QList<QWaylandView *> views;
114 QWaylandBufferRef bufferRef;
115 QWaylandSurfaceRole *role =
nullptr;
116 QWaylandViewporterPrivate::Viewport *viewport =
nullptr;
119 QWaylandBufferRef buffer;
120 QRegion surfaceDamage;
121 QRegion bufferDamage;
123 bool newlyAttached =
false;
126 QRectF sourceGeometry;
127 QSize destinationSize;
128 QRegion opaqueRegion;
129 Qt::ScreenOrientation contentOrientation = Qt::PrimaryOrientation;
132 QPoint lastLocalMousePos;
133 QPoint lastGlobalMousePos;
135 QList<QtWayland::FrameCallback *> pendingFrameCallbacks;
136 QList<QtWayland::FrameCallback *> frameCallbacks;
138 QList<QPointer<QWaylandSurface>> subsurfaceChildren;
140 QList<QWaylandIdleInhibitManagerV1Private::Inhibitor *> idleInhibitors;
143 QRegion opaqueRegion;
145 QRectF sourceGeometry;
146 QSize destinationSize;
149 bool isCursorSurface =
false;
150 bool destroyed =
false;
151 bool hasContent =
false;
152 bool isInitialized =
false;
153 bool isOpaque =
false;
154 Qt::ScreenOrientation contentOrientation = Qt::PrimaryOrientation;
155 QWindow::Visibility visibility;
157 QWaylandInputMethodControl *inputMethodControl =
nullptr;
160 class Subsurface :
public QtWaylandServer::wl_subsurface
163 Subsurface(QWaylandSurfacePrivate *s) : surface(s) {}
164 QWaylandSurfacePrivate *surfaceFromResource();
167 void subsurface_set_position(wl_subsurface::Resource *resource, int32_t x, int32_t y) override;
168 void subsurface_place_above(wl_subsurface::Resource *resource,
struct wl_resource *sibling) override;
169 void subsurface_place_below(wl_subsurface::Resource *resource,
struct wl_resource *sibling) override;
170 void subsurface_set_sync(wl_subsurface::Resource *resource) override;
171 void subsurface_set_desync(wl_subsurface::Resource *resource) override;
174 friend class QWaylandSurfacePrivate;
175 QWaylandSurfacePrivate *surface =
nullptr;
176 QWaylandSurfacePrivate *parentSurface =
nullptr;
180 Subsurface *subsurface =
nullptr;
183 static QList<QWaylandSurfacePrivate *> uninitializedSurfaces;
185 Q_DECLARE_PUBLIC(QWaylandSurface)
186 Q_DISABLE_COPY(QWaylandSurfacePrivate)