1 /*
2     SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
3     SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
4 
5     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6 */
7 
8 #pragma once
9 
10 #include "subcompositor_interface.h"
11 #include "surfacerole_p.h"
12 
13 #include <QPoint>
14 #include <QPointer>
15 
16 #include "qwayland-server-wayland.h"
17 
18 namespace KWaylandServer
19 {
20 class SubCompositorInterfacePrivate : public QtWaylandServer::wl_subcompositor
21 {
22 public:
23     SubCompositorInterfacePrivate(Display *display, SubCompositorInterface *q);
24 
25     SubCompositorInterface *q;
26 
27 protected:
28     void subcompositor_destroy(Resource *resource) override;
29     void subcompositor_get_subsurface(Resource *resource, uint32_t id, struct ::wl_resource *surface_resource, struct ::wl_resource *parent_resource) override;
30 };
31 
32 class SubSurfaceInterfacePrivate : public SurfaceRole, public QtWaylandServer::wl_subsurface
33 {
34 public:
35     static SubSurfaceInterfacePrivate *get(SubSurfaceInterface *subsurface);
36 
37     SubSurfaceInterfacePrivate(SubSurfaceInterface *q, SurfaceInterface *surface, SurfaceInterface *parent, ::wl_resource *resource);
38 
39     void commit() override;
40     void parentCommit();
41 
42     SubSurfaceInterface *q;
43     QPoint position = QPoint(0, 0);
44     QPoint pendingPosition = QPoint(0, 0);
45     SubSurfaceInterface::Mode mode = SubSurfaceInterface::Mode::Synchronized;
46     QPointer<SurfaceInterface> surface;
47     QPointer<SurfaceInterface> parent;
48     bool hasPendingPosition = false;
49 
50 protected:
51     void subsurface_destroy_resource(Resource *resource) override;
52     void subsurface_destroy(Resource *resource) override;
53     void subsurface_set_position(Resource *resource, int32_t x, int32_t y) override;
54     void subsurface_place_above(Resource *resource, struct ::wl_resource *sibling_resource) override;
55     void subsurface_place_below(Resource *resource, struct ::wl_resource *sibling_resource) override;
56     void subsurface_set_sync(Resource *resource) override;
57     void subsurface_set_desync(Resource *resource) override;
58 };
59 
60 } // namespace KWaylandServer
61