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