//=========================================== // Lumina Desktop source code // Copyright (c) 2017, Ken Moore // Available under the 3-clause BSD license // See the LICENSE file for full details //=========================================== // This class creates and manages a virtual "root" window // for all monitors at all times. //=========================================== #ifndef _LUMINA_ROOT_WINDOW_H #define _LUMINA_ROOT_WINDOW_H #include #include #include #include #include #include #include #include class RootWindow : public QWidget{ Q_OBJECT public: enum ScaleType{ SolidColor, Stretch, Full, Fit, Center, Tile, BottomLeft, BottomRight, BottomCenter, \ TopLeft, TopRight, TopCenter, CenterLeft, CenterRight}; RootWindow(); ~RootWindow(); void start(); private: struct screeninfo{ QString id; QRect area; QString file; ScaleType scale; QPixmap wallpaper; //Note: This pixmap will always be the same size as "area" }; QTimer *autoResizeTimer; QList WALLPAPERS; void updateScreenPixmap(screeninfo *info); //used for recalculating the wallpaper pixmap based on file/area/scale as needed public slots: void ResizeRoot(); void ChangeWallpaper(QString id, RootWindow::ScaleType scale, QString file); //Note: for "SingleColor" scaling the "file" variable should be "rgb(R,G,B)" or "#hexcode" private slots: protected: void paintEvent(QPaintEvent *ev); signals: void RootResized(); void NewScreens(QStringList); // [screen_id_1, screen_id_2, etc..] void RemovedScreens(QStringList); // [screen_id_1, screen_id_2, etc..] }; #endif