From ff6c6a59c8f8aea4a7c0e2d5647f66d51a4c7a58 Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Mon, 31 Jul 2017 12:50:09 -0400 Subject: Fix up the grav screensaver a bit so it does not crash on close any more. --- .../src-screensaver/SSBaseWidget.cpp | 2 +- .../lumina-desktop-unified/src-screensaver/SSBaseWidget.h | 8 ++++---- .../src-screensaver/animations/Grav.h | 15 ++++++++------- 3 files changed, 13 insertions(+), 12 deletions(-) (limited to 'src-qt5/core/lumina-desktop-unified') diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp index b31ef793..ed224695 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp @@ -78,7 +78,7 @@ void SSBaseWidget::stopPainting(){ if(ANIM!=0){ ANIM->stop(); ANIM->clear(); - delete ANIM; + ANIM->deleteLater(); ANIM = 0; } } diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h index bdcefa24..9d987178 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h @@ -14,10 +14,10 @@ class SSBaseWidget : public QWidget{ Q_OBJECT -public: +public: SSBaseWidget(QWidget *parent, QSettings *set); ~SSBaseWidget(); - + void setPlugin(QString); public slots: @@ -30,7 +30,7 @@ private: QSettings *settings; private slots: - + signals: void InputDetected(); //just in case no event handling setup at the WM level @@ -49,7 +49,7 @@ protected: QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); } - + }; #endif diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h index ad1b1122..d62fe980 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h @@ -93,13 +93,16 @@ public: orbit->setTargetObject(planet); //Creates the random position of the planet, making sure it isn't too close to the sun - int randwidth = qrand()%(range.width()/2); - if(randwidth < range.width() + 100 and randwidth > range.width() - 100) randwidth = 100; - int randheight= qrand()%(range.height()/2); - if(randheight < range.height() + 100 and randheight > range.height() - 100) randheight = 100; + QRect invalid = QRect(center+QPoint(-50,-50), center+QPoint(50,50)); + QPoint tmp = center; + while(invalid.contains(center)){ + int randwidth = qrand()%(range.width() - 2*planet_radius) + planet_radius; + int randheight= qrand()%(range.height()- 2*planet_radius) + planet_radius; + tmp = QPoint(randwidth, randheight); + } //Creates all frames for the animation - setupLoop(QPoint(randwidth, randheight), ¢er); + setupLoop(tmp, ¢er); this->addAnimation(orbit); planet->show(); @@ -172,13 +175,11 @@ public: //Loops through all planets and sets up the animations, then adds them to the base group and vector, which for(int i=0; inumber){ continue; } Grav *tmp = new Grav(canvas); this->addAnimation(tmp); connect(tmp, SIGNAL(finished()), this, SLOT(checkFinished())); planets << tmp; } - while(planets.length()>number){planets.takeAt(number)->deleteLater(); } } }; -- cgit From 2458ca5221c850389f2def844061a529042fe794 Mon Sep 17 00:00:00 2001 From: ZackaryWelch Date: Tue, 1 Aug 2017 15:00:12 -0400 Subject: Fixed Grav loop and disabled screensaver brightness --- .../src-screensaver/LScreenSaver.cpp | 6 +++--- .../src-screensaver/animations/BaseAnimGroup.cpp | 2 +- .../src-screensaver/animations/Grav.h | 18 ++++++++++++------ 3 files changed, 16 insertions(+), 10 deletions(-) (limited to 'src-qt5/core/lumina-desktop-unified') diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp index bfcfa54d..f9682c79 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp @@ -102,8 +102,8 @@ void LScreenSaver::ShowScreenSaver(){ //Now go through and create/show all the various widgets QList SCREENS = QApplication::screens(); QRect bounds; - cBright = LOS::ScreenBrightness(); - if(cBright>0){ LOS::setScreenBrightness(cBright/2); } //cut to half while the screensaver is active + //cBright = LOS::ScreenBrightness(); + //if(cBright>0){ LOS::setScreenBrightness(cBright/2); } //cut to half while the screensaver is active for(int i=0; igeometry()); if(DEBUG){ qDebug() << " - New SS Base:" << i; } @@ -144,7 +144,7 @@ void LScreenSaver::HideScreenSaver(){ //QApplication::restoreOverrideCursor(); if(DEBUG){ qDebug() << "Hiding Screen Saver:" << QDateTime::currentDateTime().toString(); } SSRunning = false; - if(cBright>0){ LOS::setScreenBrightness(cBright); } //return to current brightness + //if(cBright>0){ LOS::setScreenBrightness(cBright); } //return to current brightness if(!SSLocked){ this->hide(); emit ClosingScreenSaver(); diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp index 017eaf9f..aaae8b41 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp @@ -31,5 +31,5 @@ BaseAnimGroup* BaseAnimGroup::NewAnimation(QString type, QWidget *parent, QSetti } QStringList BaseAnimGroup::KnownAnimations(){ - return (QStringList() << "fireflies" << "grav" << "text"); + return (QStringList() << "grav"); } diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h index d62fe980..a4ea5ed8 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h @@ -14,6 +14,7 @@ #include "BaseAnimGroup.h" #include #include +#include class Grav: public QParallelAnimationGroup{ Q_OBJECT @@ -56,7 +57,7 @@ private: QPoint newLoc = QPoint(newX, newY); //orbit->setKeyValueAt(i/step, newLoc); path.push_back(newLoc); - } + } //Sets the time for a full orbit. Increasing makes the orbit slower. path.push_back(lastP); @@ -94,13 +95,17 @@ public: //Creates the random position of the planet, making sure it isn't too close to the sun QRect invalid = QRect(center+QPoint(-50,-50), center+QPoint(50,50)); - QPoint tmp = center; - while(invalid.contains(center)){ - int randwidth = qrand()%(range.width() - 2*planet_radius) + planet_radius; - int randheight= qrand()%(range.height()- 2*planet_radius) + planet_radius; + QPoint tmp = center; + while(invalid.contains(tmp)){ + int randwidth = qrand()%(int)(range.width() - 2*planet_radius) + planet_radius; + int randheight= qrand()%(int)(range.height()- 2*planet_radius) + planet_radius; tmp = QPoint(randwidth, randheight); } + /*double tmpDistance = qSqrt((qPow((tmp.x()-center.x()), 2) + qPow((tmp.y()-center.y()), 2))); + double theta = qAsin(qAbs(tmp.y()-center.y())/tmpDistance); + QMatrix rotation = QMatrix(qCos(theta), qSin(theta), -qSin(theta), qCos(theta), -center.x(), -center.y());*/ + //Creates all frames for the animation setupLoop(tmp, ¢er); this->addAnimation(orbit); @@ -174,10 +179,11 @@ public: int number = settings->value("planets/number",10).toInt(); //Loops through all planets and sets up the animations, then adds them to the base group and vector, which + qDebug() << "Starting planets"; for(int i=0; iaddAnimation(tmp); - connect(tmp, SIGNAL(finished()), this, SLOT(checkFinished())); + connect(tmp, SIGNAL(finished()), this, SLOT(checkFinished())); planets << tmp; } } -- cgit From dfbc5f67f3069fb7d64b49f9b860f62835abb66a Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Tue, 1 Aug 2017 15:35:40 -0400 Subject: Fix up the screensaver animation crashes *again*. --- .../src-screensaver/LScreenSaver.cpp | 5 +-- .../src-screensaver/SSBaseWidget.cpp | 3 +- .../src-screensaver/animations/Grav.h | 38 +++++++++++----------- 3 files changed, 24 insertions(+), 22 deletions(-) (limited to 'src-qt5/core/lumina-desktop-unified') diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp index f9682c79..0ac8aaeb 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp @@ -8,7 +8,7 @@ #include #include -#define DEBUG 0 +#define DEBUG 1 LScreenSaver::LScreenSaver() : QWidget(0,Qt::BypassWindowManagerHint | Qt::WindowStaysOnTopHint){ starttimer = new QTimer(this); @@ -151,8 +151,9 @@ void LScreenSaver::HideScreenSaver(){ emit LockStatusChanged(false); } for(int i=0; ihide(); + qDebug() << "Stop ScreenSaver:" << i; BASES[i]->stopPainting(); + BASES[i]->hide(); } UpdateTimers(); } diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp index ed224695..9ef0c491 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp @@ -76,8 +76,9 @@ void SSBaseWidget::startPainting(){ void SSBaseWidget::stopPainting(){ if(ANIM!=0){ + qDebug() << "Stopping Animation!!"; ANIM->stop(); - ANIM->clear(); + //ANIM->clear(); ANIM->deleteLater(); ANIM = 0; } diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h index a4ea5ed8..ec1de914 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h @@ -22,11 +22,11 @@ private: QWidget *planet; QPropertyAnimation *orbit; QSize range; - QList path; + //QList path; double radius; void setupLoop(QPoint start, QPoint *ref){ - orbit->setStartValue(start); + //orbit->setStartValue(start); //Used to find overall speed. Distance from the planet to the sun radius = qSqrt( (qPow(start.x()-ref->x(),2) + qPow(start.y()-ref->y(),2) )); @@ -40,9 +40,9 @@ private: QPoint firstP = QPoint(ref->x() + xrand*start.x()*(qCos(0/step) -qSin(0/step)), ref->y() + yrand*start.y()*(qCos(0/step) -qSin(0/step))); QPoint lastP = QPoint(ref->x() + xrand*start.x()*(qCos(PI/step) -qSin(PI/step)), ref->y() + yrand*start.y()*(qCos(PI/step) -qSin(PI/step))); - //orbit->setKeyValueAt(0, firstP); - //orbit->setKeyValueAt(1, lastP); - path.push_back(firstP); + orbit->setKeyValueAt(0, firstP); + orbit->setKeyValueAt(1, lastP); + //path.push_back(firstP); //Loops through all steps and creates all the points of the orbit for(int i=1; isetKeyValueAt(i/step, newLoc); - path.push_back(newLoc); + orbit->setKeyValueAt(i/step, newLoc); + //path.push_back(newLoc); } - //Sets the time for a full orbit. Increasing makes the orbit slower. - path.push_back(lastP); + //path.push_back(lastP); } private slots: void LoopChanged(int loop){ //Adjust the orbit animation a bit - if(loop >= 0) { + /*if(loop >= 0) { orbit->setStartValue(orbit->endValue()); //start at the previous end point orbit->setEndValue(path.at(loop%1000)); orbit->setDuration(10); - } + }*/ } void stopped(){ qDebug() << "Planet stopped"; planet->hide();} @@ -80,7 +79,7 @@ public: QPoint center = parent->geometry().center(); //Creates a random planet size. Between 12 and 45 pixels - double planet_radius = 1.75* ((qrand()%20)+7); + int planet_radius = qRound(1.75* ((qrand()%20)+7) ); //Creates a random color in RGB, then creates a circular gradient QString color = "rgba(" + QString::number(qrand() % 256) + ", " + QString::number(qrand() % 256) + ", " + QString::number(qrand() % 256); @@ -97,28 +96,29 @@ public: QRect invalid = QRect(center+QPoint(-50,-50), center+QPoint(50,50)); QPoint tmp = center; while(invalid.contains(tmp)){ - int randwidth = qrand()%(int)(range.width() - 2*planet_radius) + planet_radius; - int randheight= qrand()%(int)(range.height()- 2*planet_radius) + planet_radius; + int randwidth = qrand()%(range.width() - 2*planet_radius) + planet_radius; + int randheight= qrand()%(range.height()- 2*planet_radius) + planet_radius; tmp = QPoint(randwidth, randheight); } /*double tmpDistance = qSqrt((qPow((tmp.x()-center.x()), 2) + qPow((tmp.y()-center.y()), 2))); double theta = qAsin(qAbs(tmp.y()-center.y())/tmpDistance); QMatrix rotation = QMatrix(qCos(theta), qSin(theta), -qSin(theta), qCos(theta), -center.x(), -center.y());*/ - + //Creates all frames for the animation setupLoop(tmp, ¢er); this->addAnimation(orbit); planet->show(); //Ensures the screensaver will not stop until the user wishes to login or it times out - this->setLoopCount(2000); //number of orbits - orbit->setEndValue(path.at(0)); - LoopChanged(0); //load initial values + this->setLoopCount(5); //number of orbits + orbit->setDuration( qrand() %1000 + 19000); //20 second orbits + //orbit->setEndValue(path.at(0)); + //LoopChanged(0); //load initial values //Sets the initial size and location of the planet planet->setGeometry(QRect(orbit->startValue().toPoint(), QSize(planet_radius, planet_radius))); - connect(this, SIGNAL(currentLoopChanged(int)), this, SLOT(LoopChanged(int)) ); + //connect(this, SIGNAL(currentLoopChanged(int)), this, SLOT(LoopChanged(int)) ); connect(this, SIGNAL(finished()), this, SLOT(stopped()) ); } ~Grav(){} -- cgit From f03f72324ff70af5285c50632df4148a6881fa46 Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Wed, 2 Aug 2017 11:30:36 -0400 Subject: Adjust the screensaver restart routine a bit. --- src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp | 1 + src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src-qt5/core/lumina-desktop-unified') diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp index 0ac8aaeb..2c36af80 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp @@ -109,6 +109,7 @@ void LScreenSaver::ShowScreenSaver(){ if(DEBUG){ qDebug() << " - New SS Base:" << i; } BASES << new SSBaseWidget(this, settings); connect(BASES[i], SIGNAL(InputDetected()), this, SLOT(newInputEvent()) ); + //Setup the geometry of the base to match the screen BASES[i]->setGeometry(SCREENS[i]->geometry()); //match this screen geometry BASES[i]->setPlugin(settings->value("screenplugin"+QString::number(i+1), settings->value("defaultscreenplugin","random").toString() ).toString() ); diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp index 9ef0c491..7854b597 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp @@ -39,8 +39,7 @@ void SSBaseWidget::startPainting(){ cplug = plugType; //free up any old animation instance if(ANIM!=0){ - ANIM->stop(); ANIM->clear(); - delete ANIM; ANIM = 0; + stopPainting(); } //If a random plugin - grab one of the known plugins if(cplug=="random"){ -- cgit