1 /* 2 SPDX-FileCopyrightText: 2021 Roman Gilg <subdiff@gmail.com> 3 4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only 5 */ 6 #pragma once 7 8 #include <Wrapland/Server/wraplandserver_export.h> 9 10 #include <QMargins> 11 #include <QObject> 12 #include <QSize> 13 #include <memory> 14 #include <vector> 15 16 namespace Wrapland::Server 17 { 18 19 class Client; 20 class Display; 21 class drm_lease_connector_v1; 22 class drm_lease_v1; 23 class Output; 24 25 class WRAPLANDSERVER_EXPORT drm_lease_device_v1 : public QObject 26 { 27 Q_OBJECT 28 public: 29 ~drm_lease_device_v1() override; 30 31 void update_fd(int fd); 32 drm_lease_connector_v1* create_connector(Output* output); 33 34 Q_SIGNALS: 35 void needs_new_client_fd(); 36 void leased(drm_lease_v1* lease); 37 38 private: 39 explicit drm_lease_device_v1(Display* display, QObject* parent = nullptr); 40 friend class Display; 41 friend class drm_lease_connector_v1; 42 43 class Private; 44 std::unique_ptr<Private> d_ptr; 45 }; 46 47 class WRAPLANDSERVER_EXPORT drm_lease_connector_v1 : public QObject 48 { 49 Q_OBJECT 50 public: 51 ~drm_lease_connector_v1() override; 52 53 Output* output() const; 54 55 private: 56 drm_lease_connector_v1(Output* output, drm_lease_device_v1* device); 57 friend class drm_lease_connector_v1_res; 58 friend class drm_lease_device_v1; 59 friend class drm_lease_request_v1; 60 61 class Private; 62 std::unique_ptr<Private> d_ptr; 63 }; 64 65 class WRAPLANDSERVER_EXPORT drm_lease_v1 : public QObject 66 { 67 Q_OBJECT 68 public: 69 Client* lessee() const; 70 std::vector<drm_lease_connector_v1*> connectors() const; 71 72 int lessee_id() const; 73 74 void grant(int fd); 75 void finish(); 76 77 Q_SIGNALS: 78 void resourceDestroyed(); 79 80 private: 81 drm_lease_v1(Client* client, 82 uint32_t version, 83 uint32_t id, 84 std::vector<drm_lease_connector_v1*>&& connectors, 85 drm_lease_device_v1* device); 86 friend class drm_lease_request_v1; 87 88 class Private; 89 Private* d_ptr; 90 }; 91 92 } 93