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

0001 /*
0002     SPDX-FileCopyrightText: 2016 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 "pointerconstraints_v1_interface.h"
0011 #include <QPointer>
0012 
0013 #include "qwayland-server-pointer-constraints-unstable-v1.h"
0014 
0015 namespace KWaylandServer
0016 {
0017 class PointerConstraintsV1InterfacePrivate : public QtWaylandServer::zwp_pointer_constraints_v1
0018 {
0019 public:
0020     explicit PointerConstraintsV1InterfacePrivate(Display *display);
0021 
0022 protected:
0023     void zwp_pointer_constraints_v1_lock_pointer(Resource *resource,
0024                                                  uint32_t id,
0025                                                  struct ::wl_resource *surface_resource,
0026                                                  struct ::wl_resource *pointer_resource,
0027                                                  struct ::wl_resource *region_resource,
0028                                                  uint32_t lifetime) override;
0029     void zwp_pointer_constraints_v1_confine_pointer(Resource *resource,
0030                                                     uint32_t id,
0031                                                     struct ::wl_resource *surface_resource,
0032                                                     struct ::wl_resource *pointer_resource,
0033                                                     struct ::wl_resource *region_resource,
0034                                                     uint32_t lifetime) override;
0035     void zwp_pointer_constraints_v1_destroy(Resource *resource) override;
0036 };
0037 
0038 class LockedPointerV1InterfacePrivate : public QtWaylandServer::zwp_locked_pointer_v1
0039 {
0040 public:
0041     static LockedPointerV1InterfacePrivate *get(LockedPointerV1Interface *pointer);
0042 
0043     LockedPointerV1InterfacePrivate(LockedPointerV1Interface *q, SurfaceInterface *surface, LockedPointerV1Interface::LifeTime lifeTime, const QRegion &region, ::wl_resource *resource);
0044 
0045     void commit();
0046 
0047     LockedPointerV1Interface *q;
0048     QPointer<SurfaceInterface> surface;
0049     LockedPointerV1Interface::LifeTime lifeTime;
0050     QRegion region;
0051     QRegion pendingRegion;
0052     QPointF hint = QPointF(-1, -1);
0053     QPointF pendingHint;
0054     bool hasPendingRegion = false;
0055     bool hasPendingHint = false;
0056     bool isLocked = false;
0057 
0058 protected:
0059     void zwp_locked_pointer_v1_destroy_resource(Resource *resource) override;
0060     void zwp_locked_pointer_v1_destroy(Resource *resource) override;
0061     void zwp_locked_pointer_v1_set_cursor_position_hint(Resource *resource, wl_fixed_t surface_x, wl_fixed_t surface_y) override;
0062     void zwp_locked_pointer_v1_set_region(Resource *resource, struct ::wl_resource *region_resource) override;
0063 };
0064 
0065 class ConfinedPointerV1InterfacePrivate : public QtWaylandServer::zwp_confined_pointer_v1
0066 {
0067 public:
0068     static ConfinedPointerV1InterfacePrivate *get(ConfinedPointerV1Interface *pointer);
0069 
0070     ConfinedPointerV1InterfacePrivate(ConfinedPointerV1Interface *q, SurfaceInterface *surface,
0071                                       ConfinedPointerV1Interface::LifeTime lifeTime,
0072                                       const QRegion &region,
0073                                       ::wl_resource *resource);
0074 
0075     void commit();
0076 
0077     ConfinedPointerV1Interface *q;
0078     QPointer<SurfaceInterface> surface;
0079     ConfinedPointerV1Interface::LifeTime lifeTime;
0080     QRegion region;
0081     QRegion pendingRegion;
0082     bool hasPendingRegion = false;
0083     bool isConfined = false;
0084 
0085 protected:
0086     void zwp_confined_pointer_v1_destroy_resource(Resource *resource) override;
0087     void zwp_confined_pointer_v1_destroy(Resource *resource) override;
0088     void zwp_confined_pointer_v1_set_region(Resource *resource, struct ::wl_resource *region_resource) override;
0089 };
0090 
0091 } // namespace KWaylandServer