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 QPoint subsurfacePosition()
const {
return subsurface ? subsurface->position() : QPoint(); }
85 QWaylandSurfacePrivate *parentSurface()
const {
return subsurface ? subsurface->parentSurface :
nullptr; }
88 void surface_destroy_resource(Resource *resource) override;
90 void surface_destroy(Resource *resource) override;
91 void surface_offset(Resource *resource, int32_t x, int32_t y) override;
92 void surface_attach(Resource *resource,
93 struct wl_resource *buffer,
int x,
int y) override;
94 void surface_damage(Resource *resource,
95 int32_t x, int32_t y, int32_t width, int32_t height) override;
96 void surface_damage_buffer(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
97 void surface_frame(Resource *resource,
98 uint32_t callback) override;
99 void surface_set_opaque_region(Resource *resource,
100 struct wl_resource *region) override;
101 void surface_set_input_region(Resource *resource,
102 struct wl_resource *region) override;
103 void surface_commit(Resource *resource) override;
104 void surface_set_buffer_transform(Resource *resource, int32_t transform) override;
105 void surface_set_buffer_scale(Resource *resource, int32_t bufferScale) override;
107 QtWayland::ClientBuffer *getBuffer(
struct ::wl_resource *buffer);
110 QWaylandCompositor *compositor =
nullptr;
112 QWaylandClient *client =
nullptr;
113 QList<QWaylandView *> views;
115 QWaylandBufferRef bufferRef;
116 QWaylandSurfaceRole *role =
nullptr;
117 QWaylandViewporterPrivate::Viewport *viewport =
nullptr;
120 QWaylandBufferRef buffer;
121 QRegion surfaceDamage;
122 QRegion bufferDamage;
124 bool newlyAttached =
false;
127 QRectF sourceGeometry;
128 QSize destinationSize;
129 QRegion opaqueRegion;
130 Qt::ScreenOrientation contentOrientation = Qt::PrimaryOrientation;
133 QPoint lastLocalMousePos;
134 QPoint lastGlobalMousePos;
136 QList<QtWayland::FrameCallback *> pendingFrameCallbacks;
137 QList<QtWayland::FrameCallback *> frameCallbacks;
139 QList<QPointer<QWaylandSurface>> subsurfaceChildren;
141 QList<QWaylandIdleInhibitManagerV1Private::Inhibitor *> idleInhibitors;
144 QRegion opaqueRegion;
146 QRectF sourceGeometry;
147 QSize destinationSize;
150 bool isCursorSurface =
false;
151 bool destroyed =
false;
152 bool hasContent =
false;
153 bool isInitialized =
false;
154 bool isOpaque =
false;
155 Qt::ScreenOrientation contentOrientation = Qt::PrimaryOrientation;
156 QWindow::Visibility visibility;
158 QWaylandInputMethodControl *inputMethodControl =
nullptr;
161 class Subsurface :
public QtWaylandServer::wl_subsurface
164 Subsurface(QWaylandSurfacePrivate *s) : surface(s) {}
165 QWaylandSurfacePrivate *surfaceFromResource();
166 QPoint position()
const {
return pos; };
169 void subsurface_set_position(wl_subsurface::Resource *resource, int32_t x, int32_t y) override;
170 void subsurface_place_above(wl_subsurface::Resource *resource,
struct wl_resource *sibling) override;
171 void subsurface_place_below(wl_subsurface::Resource *resource,
struct wl_resource *sibling) override;
172 void subsurface_set_sync(wl_subsurface::Resource *resource) override;
173 void subsurface_set_desync(wl_subsurface::Resource *resource) override;
176 friend class QWaylandSurfacePrivate;
177 QWaylandSurfacePrivate *surface =
nullptr;
178 QWaylandSurfacePrivate *parentSurface =
nullptr;
182 Subsurface *subsurface =
nullptr;
185 static QList<QWaylandSurfacePrivate *> uninitializedSurfaces;
187 Q_DECLARE_PUBLIC(QWaylandSurface)
188 Q_DISABLE_COPY(QWaylandSurfacePrivate)