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_attach(Resource *resource,
91 struct wl_resource *buffer,
int x,
int y) override;
92 void surface_damage(Resource *resource,
93 int32_t x, int32_t y, int32_t width, int32_t height) override;
94 void surface_damage_buffer(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
95 void surface_frame(Resource *resource,
96 uint32_t callback) override;
97 void surface_set_opaque_region(Resource *resource,
98 struct wl_resource *region) override;
99 void surface_set_input_region(Resource *resource,
100 struct wl_resource *region) override;
101 void surface_commit(Resource *resource) override;
102 void surface_set_buffer_transform(Resource *resource, int32_t transform) override;
103 void surface_set_buffer_scale(Resource *resource, int32_t bufferScale) override;
105 QtWayland::ClientBuffer *getBuffer(
struct ::wl_resource *buffer);
108 QWaylandCompositor *compositor =
nullptr;
110 QWaylandClient *client =
nullptr;
111 QList<QWaylandView *> views;
113 QWaylandBufferRef bufferRef;
114 QWaylandSurfaceRole *role =
nullptr;
115 QWaylandViewporterPrivate::Viewport *viewport =
nullptr;
118 QWaylandBufferRef buffer;
119 QRegion surfaceDamage;
120 QRegion bufferDamage;
122 bool newlyAttached =
false;
125 QRectF sourceGeometry;
126 QSize destinationSize;
127 QRegion opaqueRegion;
130 QPoint lastLocalMousePos;
131 QPoint lastGlobalMousePos;
133 QList<QtWayland::FrameCallback *> pendingFrameCallbacks;
134 QList<QtWayland::FrameCallback *> frameCallbacks;
136 QList<QPointer<QWaylandSurface>> subsurfaceChildren;
138 QList<QWaylandIdleInhibitManagerV1Private::Inhibitor *> idleInhibitors;
141 QRegion opaqueRegion;
143 QRectF sourceGeometry;
144 QSize destinationSize;
147 bool isCursorSurface =
false;
148 bool destroyed =
false;
149 bool hasContent =
false;
150 bool isInitialized =
false;
151 bool isOpaque =
false;
152 Qt::ScreenOrientation contentOrientation = Qt::PrimaryOrientation;
153 QWindow::Visibility visibility;
155 QWaylandInputMethodControl *inputMethodControl =
nullptr;
158 class Subsurface :
public QtWaylandServer::wl_subsurface
161 Subsurface(QWaylandSurfacePrivate *s) : surface(s) {}
162 QWaylandSurfacePrivate *surfaceFromResource();
165 void subsurface_set_position(wl_subsurface::Resource *resource, int32_t x, int32_t y) override;
166 void subsurface_place_above(wl_subsurface::Resource *resource,
struct wl_resource *sibling) override;
167 void subsurface_place_below(wl_subsurface::Resource *resource,
struct wl_resource *sibling) override;
168 void subsurface_set_sync(wl_subsurface::Resource *resource) override;
169 void subsurface_set_desync(wl_subsurface::Resource *resource) override;
172 friend class QWaylandSurfacePrivate;
173 QWaylandSurfacePrivate *surface =
nullptr;
174 QWaylandSurfacePrivate *parentSurface =
nullptr;
178 Subsurface *subsurface =
nullptr;
181 static QList<QWaylandSurfacePrivate *> uninitializedSurfaces;
183 Q_DECLARE_PUBLIC(QWaylandSurface)
184 Q_DISABLE_COPY(QWaylandSurfacePrivate)