aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/core')
-rw-r--r--src-qt5/core/lumina-desktop/LDesktop.cpp15
-rw-r--r--src-qt5/core/lumina-desktop/LDesktop.h3
-rw-r--r--src-qt5/core/lumina-desktop/LDesktopBackground.cpp78
-rw-r--r--src-qt5/core/lumina-desktop/LDesktopBackground.h27
-rw-r--r--src-qt5/core/lumina-desktop/lumina-desktop.pro2
5 files changed, 111 insertions, 14 deletions
diff --git a/src-qt5/core/lumina-desktop/LDesktop.cpp b/src-qt5/core/lumina-desktop/LDesktop.cpp
index 72b267b0..113b7efc 100644
--- a/src-qt5/core/lumina-desktop/LDesktop.cpp
+++ b/src-qt5/core/lumina-desktop/LDesktop.cpp
@@ -214,7 +214,7 @@ void LDesktop::InitDesktop(){
connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(LocaleChanged()) );
if(DEBUG){ qDebug() << "Create bgWindow"; }
- bgWindow = new QWidget();
+ bgWindow = new LDesktopBackground();
bgWindow->setObjectName("bgWindow");
bgWindow->setContextMenuPolicy(Qt::CustomContextMenu);
bgWindow->setFocusPolicy(Qt::StrongFocus);
@@ -500,19 +500,8 @@ void LDesktop::UpdateBackground(){
//qDebug() << " - Set Background to:" << CBG << index << bgL;
if( (bgFile.toLower()=="default")){ bgFile = LOS::LuminaShare()+"desktop-background.jpg"; }
//Now set this file as the current background
- QString style;
QString format = settings->value(DPREFIX+"background/format","stretch").toString();
- if(bgFile.startsWith("rgb(")){ style = "QWidget#bgWindow{ border-image: none; background-color: %1;}";
- }else if( format == "center"){ style = "QWidget#bgWindow{ background: black url(%1); background-position: center; background-repeat: no-repeat; }";
- }else if( format == "topleft"){ style = "QWidget#bgWindow{ background: black url(%1); background-position: top left; background-repeat: no-repeat; }";
- }else if( format == "topright"){ style = "QWidget#bgWindow{ background: black url(%1); background-position: top right; background-repeat: no-repeat; }";
- }else if( format == "bottomleft"){ style = "QWidget#bgWindow{ background: black url(%1); background-position: bottom left; background-repeat: no-repeat; }";
- }else if( format == "bottomright"){ style = "QWidget#bgWindow{ background: black url(%1); background-position: bottom right; background-repeat: no-repeat; }";
- }else if( format == "tile"){ style = "QWidget#bgWindow{ background-color: black; border-image:url(%1) repeat;}";
- }else{ /* STRETCH*/ style = "QWidget#bgWindow{ background-color: black; border-image:url(%1) stretch;}"; }
- style = style.arg(bgFile);
- bgWindow->setStyleSheet(style);
- bgWindow->show();
+ bgWindow->setBackground(bgFile, format);
//Now reset the timer for the next change (if appropriate)
if(bgtimer->isActive()){ bgtimer->stop(); }
if(bgL.length() > 1){
diff --git a/src-qt5/core/lumina-desktop/LDesktop.h b/src-qt5/core/lumina-desktop/LDesktop.h
index 14b6efc3..52505b12 100644
--- a/src-qt5/core/lumina-desktop/LDesktop.h
+++ b/src-qt5/core/lumina-desktop/LDesktop.h
@@ -31,6 +31,7 @@
#include "LDesktopPluginSpace.h"
#include "desktop-plugins/LDPlugin.h"
//#include "desktop-plugins/NewDP.h"
+#include "LDesktopBackground.h"
class LDesktop : public QObject{
Q_OBJECT
@@ -67,7 +68,7 @@ private:
QStringList oldBGL;
QList<LPanel*> PANELS;
LDesktopPluginSpace *bgDesktop; //desktop plugin area
- QWidget *bgWindow; //full screen background
+ LDesktopBackground *bgWindow; //full screen background
QMenu *deskMenu, *winMenu;
QLabel *workspacelabel;
QWidgetAction *wkspaceact;
diff --git a/src-qt5/core/lumina-desktop/LDesktopBackground.cpp b/src-qt5/core/lumina-desktop/LDesktopBackground.cpp
new file mode 100644
index 00000000..bdb6dbab
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/LDesktopBackground.cpp
@@ -0,0 +1,78 @@
+//===========================================
+// Lumina-DE source code
+// Copyright (c) 2016, Henry Hu
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "LDesktopBackground.h"
+
+#include <QPainter>
+
+void LDesktopBackground::paintEvent(QPaintEvent *pe) {
+ if (bgPixmap != NULL) {
+ QPainter painter(this);
+ painter.setBrush(*bgPixmap);
+ painter.drawRect(0, 0, width(), height());
+ }
+}
+
+void LDesktopBackground::setBackground(const QString& bgFile, const QString& format) {
+ if (bgPixmap != NULL) delete bgPixmap;
+ bgPixmap = new QPixmap(size());
+
+ if (bgFile.startsWith("rgb(")) {
+ QStringList colors = bgFile.section(")",0,0).section("(",1,1).split(",");
+ QColor color = QColor(colors[0].toInt(), colors[1].toInt(), colors[2].toInt());
+ bgPixmap->fill(color);
+ } else {
+ bgPixmap->fill(Qt::black);
+
+ // Load the background file and scale
+ QPixmap bgImage(bgFile);
+ if (format == "stretch" || format == "full" || format == "fit") {
+ Qt::AspectRatioMode mode;
+ if (format == "stretch") {
+ mode = Qt::IgnoreAspectRatio;
+ } else if (format == "full") {
+ mode = Qt::KeepAspectRatioByExpanding;
+ } else {
+ mode = Qt::KeepAspectRatio;
+ }
+ bgImage = bgImage.scaled(size(), mode);
+ }
+
+ // Calculate the offset
+ int dx = 0, dy = 0;
+ int drawWidth = bgImage.width(), drawHeight = bgImage.height();
+ if (format == "fit" || format == "center" || format == "full") {
+ dx = (width() - bgImage.width()) / 2;
+ dy = (height() - bgImage.height()) / 2;
+ } else if (format == "tile") {
+ drawWidth = width();
+ drawHeight = height();
+ } else {
+ if (format.endsWith("right")) {
+ dx = width() - bgImage.width();
+ }
+ if (format.startsWith("bottom")) {
+ dy = height() - bgImage.height();
+ }
+ }
+
+ // Draw the background image
+ QPainter painter(bgPixmap);
+ painter.setBrush(bgImage);
+ painter.setBrushOrigin(dx, dy);
+ painter.drawRect(dx, dy, drawWidth, drawHeight);
+ }
+ update();
+ show();
+}
+
+LDesktopBackground::LDesktopBackground() : QWidget() {
+ bgPixmap = NULL;
+}
+
+LDesktopBackground::~LDesktopBackground() {
+ if (bgPixmap != NULL) delete bgPixmap;
+}
diff --git a/src-qt5/core/lumina-desktop/LDesktopBackground.h b/src-qt5/core/lumina-desktop/LDesktopBackground.h
new file mode 100644
index 00000000..a9ce64fa
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/LDesktopBackground.h
@@ -0,0 +1,27 @@
+//===========================================
+// Lumina-DE source code
+// Copyright (c) 2016, Henry Hu
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_DESKTOP_LDESKTOPBACKGROUND_H_
+#define _LUMINA_DESKTOP_LDESKTOPBACKGROUND_H_
+
+#include <QString>
+#include <QWidget>
+#include <QPixmap>
+
+class LDesktopBackground: public QWidget {
+ Q_OBJECT
+public:
+ LDesktopBackground();
+ virtual ~LDesktopBackground();
+
+ virtual void paintEvent(QPaintEvent*);
+ void setBackground(const QString&, const QString&);
+
+private:
+ QPixmap *bgPixmap;
+};
+
+#endif // _LUMINA_DESKTOP_LDESKTOPBACKGROUND_H_
diff --git a/src-qt5/core/lumina-desktop/lumina-desktop.pro b/src-qt5/core/lumina-desktop/lumina-desktop.pro
index cfc175ef..89053fda 100644
--- a/src-qt5/core/lumina-desktop/lumina-desktop.pro
+++ b/src-qt5/core/lumina-desktop/lumina-desktop.pro
@@ -19,6 +19,7 @@ SOURCES += main.cpp \
LXcbEventFilter.cpp \
LSession.cpp \
LDesktop.cpp \
+ LDesktopBackground.cpp \
LDesktopPluginSpace.cpp \
LPanel.cpp \
LWinInfo.cpp \
@@ -34,6 +35,7 @@ HEADERS += Globals.h \
LXcbEventFilter.h \
LSession.h \
LDesktop.h \
+ LDesktopBackground.h \
LDesktopPluginSpace.h \
LPanel.h \
LWinInfo.h \
bgstack15