diff options
Diffstat (limited to 'src/xprivate.h')
-rw-r--r-- | src/xprivate.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/xprivate.h b/src/xprivate.h new file mode 100644 index 0000000..6725273 --- /dev/null +++ b/src/xprivate.h @@ -0,0 +1,70 @@ +#ifndef XPRIVATE_H +#define XPRIVATE_H + +#include "xx.h" + +#include <QHash> +#include <QSize> +#include <QTextStream> + +#include <X11/Xlib.h> +#include <X11/extensions/Xrandr.h> + +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<RRMode, XRRModeInfo*> ModeMap; +typedef QHash<RRCrtc, XRRCrtcInfo*> CrtcMap; +typedef QHash<RROutput, OutputInfo*> 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<QSize> getTotalSize(const QList<OutputInfo*> &projectors, const QList<OutputInfo*> &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 |