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