File indexing completed on 2024-05-19 16:35:28

0001 /*
0002     SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
0003     SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006 */
0007 
0008 #pragma once
0009 
0010 #include "subcompositor_interface.h"
0011 #include "surfacerole_p.h"
0012 
0013 #include <QPoint>
0014 #include <QPointer>
0015 
0016 #include "qwayland-server-wayland.h"
0017 
0018 namespace KWaylandServer
0019 {
0020 class SubCompositorInterfacePrivate : public QtWaylandServer::wl_subcompositor
0021 {
0022 public:
0023     SubCompositorInterfacePrivate(Display *display, SubCompositorInterface *q);
0024 
0025     SubCompositorInterface *q;
0026 
0027 protected:
0028     void subcompositor_destroy(Resource *resource) override;
0029     void subcompositor_get_subsurface(Resource *resource, uint32_t id, struct ::wl_resource *surface_resource, struct ::wl_resource *parent_resource) override;
0030 };
0031 
0032 class SubSurfaceInterfacePrivate : public SurfaceRole, public QtWaylandServer::wl_subsurface
0033 {
0034 public:
0035     static SubSurfaceInterfacePrivate *get(SubSurfaceInterface *subsurface);
0036 
0037     SubSurfaceInterfacePrivate(SubSurfaceInterface *q, SurfaceInterface *surface, SurfaceInterface *parent, ::wl_resource *resource);
0038 
0039     void commit() override;
0040     void parentCommit();
0041 
0042     SubSurfaceInterface *q;
0043     QPoint position = QPoint(0, 0);
0044     QPoint pendingPosition = QPoint(0, 0);
0045     SubSurfaceInterface::Mode mode = SubSurfaceInterface::Mode::Synchronized;
0046     QPointer<SurfaceInterface> surface;
0047     QPointer<SurfaceInterface> parent;
0048     bool hasPendingPosition = false;
0049 
0050 protected:
0051     void subsurface_destroy_resource(Resource *resource) override;
0052     void subsurface_destroy(Resource *resource) override;
0053     void subsurface_set_position(Resource *resource, int32_t x, int32_t y) override;
0054     void subsurface_place_above(Resource *resource, struct ::wl_resource *sibling_resource) override;
0055     void subsurface_place_below(Resource *resource, struct ::wl_resource *sibling_resource) override;
0056     void subsurface_set_sync(Resource *resource) override;
0057     void subsurface_set_desync(Resource *resource) override;
0058 };
0059 
0060 } // namespace KWaylandServer