File indexing completed on 2024-05-19 05:32:39

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