File indexing completed on 2024-04-28 16:49:42

0001 /*
0002  * SPDX-FileCopyrightText: 2015 Daniel Vrátil <dvratil@redhat.com>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  *
0006  */
0007 #pragma once
0008 
0009 #include <QMap>
0010 #include <QObject>
0011 #include <QRect>
0012 #include <QVector>
0013 
0014 #include <xcb/randr.h>
0015 
0016 class XRandRConfig;
0017 
0018 class XRandRCrtc : public QObject
0019 {
0020     Q_OBJECT
0021 
0022 public:
0023     typedef QMap<xcb_randr_crtc_t, XRandRCrtc *> Map;
0024 
0025     XRandRCrtc(xcb_randr_crtc_t crtc, XRandRConfig *config);
0026 
0027     xcb_randr_crtc_t crtc() const;
0028     xcb_randr_mode_t mode() const;
0029 
0030     QRect geometry() const;
0031     xcb_randr_rotation_t rotation() const;
0032 
0033     QVector<xcb_randr_output_t> possibleOutputs();
0034     QVector<xcb_randr_output_t> outputs() const;
0035 
0036     bool connectOutput(xcb_randr_output_t output);
0037     void disconectOutput(xcb_randr_output_t output);
0038 
0039     bool isFree() const;
0040 
0041     void update();
0042     void update(xcb_randr_crtc_t mode, xcb_randr_rotation_t rotation, const QRect &geom);
0043 
0044     void updateTimestamp(const xcb_timestamp_t tmstamp);
0045     void updateConfigTimestamp(const xcb_timestamp_t tmstamp);
0046     bool isChangedFromOutside() const;
0047 
0048 private:
0049     xcb_randr_crtc_t m_crtc;
0050     xcb_randr_mode_t m_mode;
0051 
0052     QRect m_geometry;
0053     xcb_randr_rotation_t m_rotation;
0054 
0055     QVector<xcb_randr_output_t> m_possibleOutputs;
0056     QVector<xcb_randr_output_t> m_outputs;
0057 
0058     xcb_timestamp_t m_timestamp;
0059     xcb_timestamp_t m_configTimestamp;
0060 };