summaryrefslogtreecommitdiffstats
path: root/src/xprivate.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/xprivate.h')
-rw-r--r--src/xprivate.h70
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