#ifndef XRANDR_H #define XRANDR_H #include #include #include struct ScreenInfo; class XPrivate; class QSocketNotifier; typedef QVector ResolutionVector; /////////////////////////////////////////////////////////////////////////// enum class ScreenMode { Single, Clone, Dual, Advanced, }; struct ScreenInfo { int position; QString name; QString output; QSize currentResolution; QSize preferredResolution; bool isProjector; ResolutionVector modes; }; enum class ConnectionEvent { Connected, Disconnected, Unknown, }; class ScreenSetup : public QObject { Q_OBJECT public: void updateScreenResources(); void initModes(); ScreenMode getCurrentMode(); ScreenMode setDefaultMode(bool dryRun = false); bool createMode(unsigned int resX, unsigned int resY, float refresh, QString name); void revertChanges(); bool setCenteredClone(); bool setClone(const QSize &resolution); bool setCustom(const QList>> &list); ResolutionVector getCommonModes() const; int getOutputCount() const; int queryCurrentOutputCount() const; QMap getScreenPositions() const; const ResolutionVector &getVirtualResolutions() const; // Singleton inline static ScreenSetup* inst() { if (_instance == nullptr) _instance = new ScreenSetup(); return _instance; } private: ScreenSetup(); ~ScreenSetup(); static ScreenSetup * _instance; XPrivate *a; QSocketNotifier *_socketNotifier; signals: void outputConfigChanged(ConnectionEvent event); }; /////////////////////////////////////////////////////////////////////////// #endif // XRANDR_H