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 ®ion, ::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 ®ion, 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