From 14341fdd69aa8034d194660c02a5ed55a8c3c838 Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Wed, 7 Jun 2017 20:46:50 -0400 Subject: Commit some more work-in-progress for the new LuminaRandR class (replacement for xrandr using the XCB libraries) --- src-qt5/core/libLumina/LuminaRandR.h | 60 ++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 16 deletions(-) (limited to 'src-qt5/core/libLumina/LuminaRandR.h') diff --git a/src-qt5/core/libLumina/LuminaRandR.h b/src-qt5/core/libLumina/LuminaRandR.h index 448c676d..86c713db 100644 --- a/src-qt5/core/libLumina/LuminaRandR.h +++ b/src-qt5/core/libLumina/LuminaRandR.h @@ -17,17 +17,34 @@ #include #include +// XCB +#include "xcb/randr.h" +#include "xcb/xcb_atom.h" + +struct p_objects{ +//public: + xcb_atom_t monitor_atom; //This is the index used to identify particular monitors (unique ID) + + //Cached Information + bool primary, automatic; + QRect geometry; + QList resolutions; + QSize physicalSizeMM; + QString name; + QList outputs; + + /*p_objects(){ + // Set the defaults for non-default-constructed variables + primary = automatic = false; + monitor_atom = 0; + }*/ + +}; class OutputDevice{ public: - QString id; //output ID - bool enabled; - bool isPrimary; - //Monitor Geometry - QPoint geom; //geometry of monitor within session - //Monitor Resolution - QSize cRes; //current resolution of the monitor (could be different from geom.size() if panning is enabled) - QList availRes; //available resolutions supported by the monitor + + // EXPANSIONS TO-DO //Refresh Rate //int cHz; //current refresh rate //QList availHz; //available refresh rates @@ -39,19 +56,32 @@ public: static QList availableMonitors(); //FUNCTIONS (do not use directly - use the static list function instead) - OutputDevice(); + OutputDevice(QString id); ~OutputDevice(); + //Information + QString ID(); + + bool isEnabled(); + bool isPrimary(); + bool isAutomatic(); + QList availableResolutions(); + QSize currentResolution(); //could be different from geometry.size() if things like panning/rotation are enabled + QRect currentGeometry(); + //Modification - bool setAsPrimary(); + bool setAsPrimary(bool); bool disable(); void enable(QRect geom = QRect()); //if no geom provided, will add as the right-most screen at optimal resolution void changeResolution(QSize); - + void changeGeometry(QRect); //move a currently-enabled screen to another place + + void updateInfoCache(); //Run this after all modification functions to refresh the current info for this device + //Now define a simple public_objects class so that each implementation - // has a storage container for placing private objects as needed - class p_objects; - p_objects* p_obj; + // has a storage container for placing semi-private objects as needed + //class p_objects; //forward declaration - defined in the .cpp file + p_objects p_obj; }; class OutputDeviceList : public QList{ @@ -64,7 +94,5 @@ public: void disableMonitor(QString id); //void enableMonitor(QString id, -private: - }; #endif -- cgit