From c816fad1b4462b979d7b60c4e510fab3896a6bf1 Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Mon, 17 Oct 2016 10:31:51 -0400 Subject: Fix the painting routines for the desktop/panel. Make sure we only paint the *requested* rectangle, and not the whole thing on every request. --- src-qt5/core/lumina-desktop/LDesktopBackground.cpp | 5 +++-- src-qt5/core/lumina-desktop/LPanel.cpp | 10 +++++----- 2 files changed, 8 insertions(+), 7 deletions(-) (limited to 'src-qt5/core/lumina-desktop') diff --git a/src-qt5/core/lumina-desktop/LDesktopBackground.cpp b/src-qt5/core/lumina-desktop/LDesktopBackground.cpp index 3d33db71..97249384 100644 --- a/src-qt5/core/lumina-desktop/LDesktopBackground.cpp +++ b/src-qt5/core/lumina-desktop/LDesktopBackground.cpp @@ -7,12 +7,13 @@ #include "LDesktopBackground.h" #include +#include -void LDesktopBackground::paintEvent(QPaintEvent *) { +void LDesktopBackground::paintEvent(QPaintEvent *ev) { if (bgPixmap != NULL) { QPainter painter(this); painter.setBrush(*bgPixmap); - painter.drawRect(0, 0, width(), height()); + painter.drawRect(ev->rect()); } } diff --git a/src-qt5/core/lumina-desktop/LPanel.cpp b/src-qt5/core/lumina-desktop/LPanel.cpp index b0abf498..6e07f624 100644 --- a/src-qt5/core/lumina-desktop/LPanel.cpp +++ b/src-qt5/core/lumina-desktop/LPanel.cpp @@ -324,12 +324,12 @@ void LPanel::paintEvent(QPaintEvent *event){ QPainter *painter = new QPainter(this); //qDebug() << "Paint Panel:" << PPREFIX; //Make sure the base background of the event rectangle is the associated rectangle from the BGWindow - QRect rec = this->geometry(); //start with the global geometry of the panel + QRect rec = event->rect();//this->geometry(); //start with the global geometry of the panel //Need to translate that rectangle to the background image coordinates - //qDebug() << " - Rec:" << rec << hidden << this->geometry(); - rec.moveTo( rec.x()-LSession::handle()->screenGeom(screennum).x(), rec.y()-LSession::handle()->screenGeom(screennum).y() ); - //qDebug() << " - Adjusted Global Rec:" << rec; - painter->drawPixmap(QRect(0,0,this->width(), this->height()), bgWindow->grab(rec) ); + qDebug() << " - Rec:" << rec << hidden << this->geometry() << bgWindow->geometry(); + rec.moveTo( bgWindow->mapFromGlobal( this->mapToGlobal(rec.topLeft()) ) ); //(rec.x()-LSession::handle()->screenGeom(screennum).x(), rec.y()-LSession::handle()->screenGeom(screennum).y() ); + qDebug() << " - Adjusted Window Rec:" << rec; + painter->drawPixmap(event->rect(), bgWindow->grab(rec) ); } QWidget::paintEvent(event); //now pass the event along to the normal painting event } -- cgit From 8691662461303fe6ab195df5aa2f23ed4dc8eedb Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Mon, 17 Oct 2016 10:43:26 -0400 Subject: Turn off some debugging and fix the repaint of the entire wallpaper on change. --- src-qt5/core/lumina-desktop/LDesktopBackground.cpp | 2 +- src-qt5/core/lumina-desktop/LPanel.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src-qt5/core/lumina-desktop') diff --git a/src-qt5/core/lumina-desktop/LDesktopBackground.cpp b/src-qt5/core/lumina-desktop/LDesktopBackground.cpp index 97249384..c3d67117 100644 --- a/src-qt5/core/lumina-desktop/LDesktopBackground.cpp +++ b/src-qt5/core/lumina-desktop/LDesktopBackground.cpp @@ -67,7 +67,7 @@ void LDesktopBackground::setBackground(const QString& bgFile, const QString& for painter.setBrushOrigin(dx, dy); painter.drawRect(dx, dy, drawWidth, drawHeight); } - update(); + this->repaint(this->geometry()); //make sure the entire thing gets repainted right away show(); } diff --git a/src-qt5/core/lumina-desktop/LPanel.cpp b/src-qt5/core/lumina-desktop/LPanel.cpp index 6e07f624..1308d61f 100644 --- a/src-qt5/core/lumina-desktop/LPanel.cpp +++ b/src-qt5/core/lumina-desktop/LPanel.cpp @@ -326,9 +326,9 @@ void LPanel::paintEvent(QPaintEvent *event){ //Make sure the base background of the event rectangle is the associated rectangle from the BGWindow QRect rec = event->rect();//this->geometry(); //start with the global geometry of the panel //Need to translate that rectangle to the background image coordinates - qDebug() << " - Rec:" << rec << hidden << this->geometry() << bgWindow->geometry(); + //qDebug() << " - Rec:" << rec << hidden << this->geometry() << bgWindow->geometry(); rec.moveTo( bgWindow->mapFromGlobal( this->mapToGlobal(rec.topLeft()) ) ); //(rec.x()-LSession::handle()->screenGeom(screennum).x(), rec.y()-LSession::handle()->screenGeom(screennum).y() ); - qDebug() << " - Adjusted Window Rec:" << rec; + //qDebug() << " - Adjusted Window Rec:" << rec; painter->drawPixmap(event->rect(), bgWindow->grab(rec) ); } QWidget::paintEvent(event); //now pass the event along to the normal painting event -- cgit