1 /*
2     SPDX-FileCopyrightText: 2016 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 "pointerconstraints_v1_interface.h"
11 
12 #include "qwayland-server-pointer-constraints-unstable-v1.h"
13 
14 namespace KWaylandServer
15 {
16 class PointerConstraintsV1InterfacePrivate : public QtWaylandServer::zwp_pointer_constraints_v1
17 {
18 public:
19     explicit PointerConstraintsV1InterfacePrivate(Display *display);
20 
21 protected:
22     void zwp_pointer_constraints_v1_lock_pointer(Resource *resource,
23                                                  uint32_t id,
24                                                  struct ::wl_resource *surface_resource,
25                                                  struct ::wl_resource *pointer_resource,
26                                                  struct ::wl_resource *region_resource,
27                                                  uint32_t lifetime) override;
28     void zwp_pointer_constraints_v1_confine_pointer(Resource *resource,
29                                                     uint32_t id,
30                                                     struct ::wl_resource *surface_resource,
31                                                     struct ::wl_resource *pointer_resource,
32                                                     struct ::wl_resource *region_resource,
33                                                     uint32_t lifetime) override;
34     void zwp_pointer_constraints_v1_destroy(Resource *resource) override;
35 };
36 
37 class LockedPointerV1InterfacePrivate : public QtWaylandServer::zwp_locked_pointer_v1
38 {
39 public:
40     static LockedPointerV1InterfacePrivate *get(LockedPointerV1Interface *pointer);
41 
42     LockedPointerV1InterfacePrivate(LockedPointerV1Interface *q, LockedPointerV1Interface::LifeTime lifeTime, const QRegion &region, ::wl_resource *resource);
43 
44     void commit();
45 
46     LockedPointerV1Interface *q;
47     LockedPointerV1Interface::LifeTime lifeTime;
48     QRegion region;
49     QRegion pendingRegion;
50     QPointF hint = QPointF(-1, -1);
51     QPointF pendingHint;
52     bool hasPendingRegion = false;
53     bool hasPendingHint = false;
54     bool isLocked = false;
55 
56 protected:
57     void zwp_locked_pointer_v1_destroy_resource(Resource *resource) override;
58     void zwp_locked_pointer_v1_destroy(Resource *resource) override;
59     void zwp_locked_pointer_v1_set_cursor_position_hint(Resource *resource, wl_fixed_t surface_x, wl_fixed_t surface_y) override;
60     void zwp_locked_pointer_v1_set_region(Resource *resource, struct ::wl_resource *region_resource) override;
61 };
62 
63 class ConfinedPointerV1InterfacePrivate : public QtWaylandServer::zwp_confined_pointer_v1
64 {
65 public:
66     static ConfinedPointerV1InterfacePrivate *get(ConfinedPointerV1Interface *pointer);
67 
68     ConfinedPointerV1InterfacePrivate(ConfinedPointerV1Interface *q,
69                                       ConfinedPointerV1Interface::LifeTime lifeTime,
70                                       const QRegion &region,
71                                       ::wl_resource *resource);
72 
73     void commit();
74 
75     ConfinedPointerV1Interface *q;
76     ConfinedPointerV1Interface::LifeTime lifeTime;
77     QRegion region;
78     QRegion pendingRegion;
79     bool hasPendingRegion = false;
80     bool isConfined = false;
81 
82 protected:
83     void zwp_confined_pointer_v1_destroy_resource(Resource *resource) override;
84     void zwp_confined_pointer_v1_destroy(Resource *resource) override;
85     void zwp_confined_pointer_v1_set_region(Resource *resource, struct ::wl_resource *region_resource) override;
86 };
87 
88 } // namespace KWaylandServer
89