From 8f0f9a0ef707799cef942170243d6bc28a86b577 Mon Sep 17 00:00:00 2001 From: Henry Hu Date: Thu, 12 May 2016 03:45:03 -0400 Subject: add 2 options for background image: fit and full --- src-qt5/core/lumina-desktop/LDesktop.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src-qt5/core/lumina-desktop') diff --git a/src-qt5/core/lumina-desktop/LDesktop.cpp b/src-qt5/core/lumina-desktop/LDesktop.cpp index 72b267b0..5f959629 100644 --- a/src-qt5/core/lumina-desktop/LDesktop.cpp +++ b/src-qt5/core/lumina-desktop/LDesktop.cpp @@ -509,9 +509,39 @@ void LDesktop::UpdateBackground(){ }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 if( format == "full" || format == "fit") { style = ""; }else{ /* STRETCH*/ style = "QWidget#bgWindow{ background-color: black; border-image:url(%1) stretch;}"; } style = style.arg(bgFile); bgWindow->setStyleSheet(style); + if(!bgFile.startsWith("rgb(") && (format == "full" || format == "fit")){ + // Load the background file and scale + QPixmap background(bgFile); + Qt::AspectRatioMode mode; + if (format == "full") { + mode = Qt::KeepAspectRatioByExpanding; + } else { + mode = Qt::KeepAspectRatio; + } + background = background.scaled(bgWindow->size(), mode); + // Put the image at the center (for fit) + int dx = 0, dy = 0; + if (background.width() < bgWindow->width()) { + dx = (bgWindow->width() - background.width()) / 2; + } + if (background.height() < bgWindow->height()) { + dy = (bgWindow->height() - background.height()) / 2; + } + QPixmap fullBg(bgWindow->size()); + fullBg.fill(Qt::black); + QPainter painter(&fullBg); + painter.setBrush(background); + painter.setBrushOrigin(dx, dy); + painter.drawRect(dx, dy, background.width(), background.height()); + // Set the background + QPalette palette; + palette.setBrush(QPalette::Background, fullBg); + bgWindow->setPalette(palette); + } bgWindow->show(); //Now reset the timer for the next change (if appropriate) if(bgtimer->isActive()){ bgtimer->stop(); } -- cgit