#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(); void addMissingEdidResolutions(); bool getEdid(RROutput outputId, unsigned char *buffer, unsigned long *size); bool readEdid(OutputInfo* output); void addMissingModesFromExtBlock(XRRScreenResources *res, RROutput outputId, unsigned char *data); void addMissingModesFromDtd(XRRScreenResources *res, RROutput outputId, unsigned char *data); void disconnectAllCrtcs(); XRRModeInfo* getPreferredMode(const OutputInfo *oi, XRRModeInfo *fallback = nullptr) const; void setScreenSize(const QSize &size); QList getOutputModeForResolution(const XRROutputInfo *output, unsigned int width, unsigned int height) const; QList 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; OutputMap _outputMap; ResolutionVector _resolutions; }; #endif // XPRIVATE_H