#ifndef XPRIVATE_H #define XPRIVATE_H #include "xx.h" #include #include #include #include #include enum class Projector { No, Yes, Maybe }; struct OutputInfo { OutputInfo(RROutput id, XRROutputInfo *output, XRRCrtcInfo *crtc, XRRModeInfo *mode) : output(output), crtc(crtc), mode(mode), id(id), position(-1), outputType(Projector::No) {} ~OutputInfo() { XRRFreeOutputInfo(output); } XRROutputInfo* output; XRRCrtcInfo* crtc; XRRModeInfo* mode; RROutput id; QString modelName; QString outputName; int position; Projector outputType; }; typedef QHash ModeMap; typedef QHash CrtcMap; typedef QHash OutputMap; class XPrivate { public: explicit XPrivate(); virtual ~XPrivate(); void freeResources(); void updateScreenResources(); bool readEdid(OutputInfo* output); void createCrtcBackup(); void freeCrtcBackup(); void disconnectAllCrtcs(); XRRModeInfo* getPreferredMode(OutputInfo *oi) const; void setScreenSize(const QSize &size); RRMode getOutputModeForResolution(const XRROutputInfo *output, unsigned int width, unsigned int height) const; RRMode getOutputModeForResolution(const XRROutputInfo *output, const QSize &resolution) const; RRCrtc getFreeCrtc(const XRROutputInfo* output) const; bool setOutputResolution(OutputInfo *oi, int x, int y, const QSize &size, bool dryRun = false); QList getTotalSize(const QList &projectors, const QList &screens) const; void copyModesToAll(RROutput id, int num); Display* _display; Atom _EDID_ATOM; XRRScreenResources* _screenResources; ModeMap _modeMap; CrtcMap _crtcMap; CrtcMap _crtcBackup; OutputMap _outputMap; ResolutionVector _resolutions; }; #endif // XPRIVATE_H