1 /* 2 * SPDX-FileCopyrightText: 2012, 2013 Daniel Vrátil <dvratil@redhat.com> 3 * 4 * SPDX-License-Identifier: LGPL-2.1-or-later 5 */ 6 #pragma once 7 8 #include "output.h" 9 10 #include "../xcbwrapper.h" 11 #include "xrandrmode.h" 12 13 #include <QMap> 14 #include <QObject> 15 #include <QVariant> 16 17 class XRandRConfig; 18 class XRandRCrtc; 19 namespace KScreen 20 { 21 class Config; 22 class Output; 23 } 24 25 class XRandROutput : public QObject 26 { 27 Q_OBJECT 28 29 public: 30 typedef QMap<xcb_randr_output_t, XRandROutput *> Map; 31 32 explicit XRandROutput(xcb_randr_output_t id, XRandRConfig *config); 33 ~XRandROutput() override; 34 35 void disabled(); 36 void disconnected(); 37 38 void update(); 39 void update(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_connection_t conn, bool primary); 40 41 void setIsPrimary(bool primary); 42 43 xcb_randr_output_t id() const; 44 45 bool isEnabled() const; 46 bool isConnected() const; 47 bool isPrimary() const; 48 49 QPoint position() const; 50 QSize size() const; 51 QSizeF logicalSize() const; 52 53 QString currentModeId() const; 54 XRandRMode::Map modes() const; 55 XRandRMode *currentMode() const; 56 57 KScreen::Output::Rotation rotation() const; 58 bool isHorizontal() const; 59 60 QByteArray edid() const; 61 XRandRCrtc *crtc() const; 62 63 KScreen::OutputPtr toKScreenOutput() const; 64 65 void updateLogicalSize(const KScreen::OutputPtr &output, XRandRCrtc *crtc = nullptr); 66 67 private: 68 void init(); 69 void updateModes(const XCB::OutputInfo &outputInfo); 70 71 static KScreen::Output::Type fetchOutputType(xcb_randr_output_t outputId, const QString &name); 72 static QByteArray typeFromProperty(xcb_randr_output_t outputId); 73 74 xcb_render_transform_t currentTransform() const; 75 76 XRandRConfig *m_config; 77 xcb_randr_output_t m_id; 78 QString m_name; 79 QString m_icon; 80 mutable QByteArray m_edid; 81 82 xcb_randr_connection_t m_connected; 83 bool m_primary; 84 KScreen::Output::Type m_type; 85 86 XRandRMode::Map m_modes; 87 QStringList m_preferredModes; 88 89 QList<xcb_randr_output_t> m_clones; 90 91 unsigned int m_widthMm; 92 unsigned int m_heightMm; 93 94 bool m_hotplugModeUpdate = false; 95 XRandRCrtc *m_crtc; 96 }; 97 98 Q_DECLARE_METATYPE(XRandROutput::Map) 99