1 /*
2  * SPDX-FileCopyrightText: 2015 Daniel Vrátil <dvratil@redhat.com>
3  *
4  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
5  *
6  */
7 #pragma once
8 
9 #include <QMap>
10 #include <QObject>
11 #include <QRect>
12 #include <QVector>
13 
14 #include <xcb/randr.h>
15 
16 class XRandRConfig;
17 
18 class XRandRCrtc : public QObject
19 {
20     Q_OBJECT
21 
22 public:
23     typedef QMap<xcb_randr_crtc_t, XRandRCrtc *> Map;
24 
25     XRandRCrtc(xcb_randr_crtc_t crtc, XRandRConfig *config);
26 
27     xcb_randr_crtc_t crtc() const;
28     xcb_randr_mode_t mode() const;
29 
30     QRect geometry() const;
31     xcb_randr_rotation_t rotation() const;
32 
33     QVector<xcb_randr_output_t> possibleOutputs();
34     QVector<xcb_randr_output_t> outputs() const;
35 
36     bool connectOutput(xcb_randr_output_t output);
37     void disconectOutput(xcb_randr_output_t output);
38 
39     bool isFree() const;
40 
41     void update();
42     void update(xcb_randr_crtc_t mode, xcb_randr_rotation_t rotation, const QRect &geom);
43 
44 private:
45     xcb_randr_crtc_t m_crtc;
46     xcb_randr_mode_t m_mode;
47 
48     QRect m_geometry;
49     xcb_randr_rotation_t m_rotation;
50 
51     QVector<xcb_randr_output_t> m_possibleOutputs;
52     QVector<xcb_randr_output_t> m_outputs;
53 };
54