aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core/lumina-desktop/src-screensaver/animations/Text.h
diff options
context:
space:
mode:
authorKen Moore <moorekou@gmail.com>2020-04-24 17:53:28 -0400
committerKen Moore <moorekou@gmail.com>2020-04-24 17:55:02 -0400
commitbf545b933bcb59a695702ecfcc7b1fa5f07fa557 (patch)
tree1030e63496788315e279b3c50f59ded8e370afb8 /src-qt5/core/lumina-desktop/src-screensaver/animations/Text.h
parentDisable xscreensaver from auto-start. (diff)
downloadlumina-bf545b933bcb59a695702ecfcc7b1fa5f07fa557.tar.gz
lumina-bf545b933bcb59a695702ecfcc7b1fa5f07fa557.tar.bz2
lumina-bf545b933bcb59a695702ecfcc7b1fa5f07fa557.zip
Initial merge of the screensaver into the main lumina-desktop builds
Diffstat (limited to 'src-qt5/core/lumina-desktop/src-screensaver/animations/Text.h')
-rw-r--r--src-qt5/core/lumina-desktop/src-screensaver/animations/Text.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/src-qt5/core/lumina-desktop/src-screensaver/animations/Text.h b/src-qt5/core/lumina-desktop/src-screensaver/animations/Text.h
new file mode 100644
index 00000000..bdde5ba2
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/src-screensaver/animations/Text.h
@@ -0,0 +1,100 @@
+//===========================================
+// Lumina-DE source code
+// Copyright (c) 2015, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_DESKTOP_SCREEN_SAVER_TEXT_ANIMATION_H
+#define _LUMINA_DESKTOP_SCREEN_SAVER_TEXT_ANIMATION_H
+
+#include "global-includes.h"
+#include "BaseAnimGroup.h"
+#include <QParallelAnimationGroup>
+#include <QtMath>
+
+#include <unistd.h>
+
+class Text: public QParallelAnimationGroup{
+ Q_OBJECT
+private:
+ QLabel *text;
+ QPropertyAnimation *movement;
+ QSize range;
+ QPoint v;
+ bool bounce;
+
+private slots:
+ void LoopChanged(){
+ movement->setStartValue(movement->endValue());
+ QPoint currLoc = movement->startValue().toPoint();
+ bounce = !(currLoc.y() < 100 or currLoc.y() > range.height()-100 or currLoc.x() > range.width()-100 or currLoc.x() < 100);
+ if((currLoc.y() < 10 or currLoc.y() > range.height()-40) and !bounce) {
+ v.setY((v.y() * -1) + (qrand() % 20 - 10));
+ }else if((currLoc.x() > range.width()-10 or currLoc.x() < 10) and !bounce) {
+ v.setX((v.x() * -1) + (qrand() % 20 - 10));
+ }
+ currLoc.setX(currLoc.x() + v.x());
+ currLoc.setY(currLoc.y() + v.y());
+ movement->setEndValue(currLoc);
+ }
+ void stopped(){ qDebug() << "Text Stopped"; text->hide();}
+
+public:
+ Text(QWidget *parent, QString display) : QParallelAnimationGroup(parent){
+ text = new QLabel(parent);
+ range = parent->size();
+ QPoint center = QRect( QPoint(0,0), parent->size()).center();
+
+ QString color = "rgba(" + QString::number(qrand() % 206 + 50) + ", " + QString::number(qrand() % 206 + 50) + ", " + QString::number(qrand() % 206 + 50);
+ text->setStyleSheet("QLabel {background-color: transparent; color: " + color + "); }");
+ text->setFont(QFont("Courier", 24, QFont::Bold));
+ text->setText(display);
+ QFontMetrics metrics(text->font());
+ text->setMinimumSize(QSize( metrics.horizontalAdvance(text->text())+10, metrics.height()*text->text().count("\n") +10));
+
+ movement = new QPropertyAnimation(text);
+ movement->setPropertyName("pos");
+ movement->setTargetObject(text);
+
+ this->addAnimation(movement);
+ text->show();
+ v.setX((qrand() % 100 + 50) * qPow(-1, qrand() % 2));
+ v.setY((qrand() % 100 + 50) * qPow(-1, qrand() % 2));
+ movement->setStartValue(center);
+ //Ensures the screensaver will not stop until the user wishes to login or it times out
+ this->setLoopCount(200); //number of wall bounces
+ movement->setDuration(200);
+ movement->setEndValue(QPoint(qrand() % (int)range.height(), qrand() % range.width()));
+ LoopChanged(); //load initial values
+
+ connect(this, SIGNAL(currentLoopChanged(int)), this, SLOT(LoopChanged()) );
+ connect(this, SIGNAL(finished()), this, SLOT(stopped()) );
+ }
+ ~Text(){}
+
+};
+
+class TextAnimation : public BaseAnimGroup{
+ Q_OBJECT
+public:
+ TextAnimation(QWidget *parent) : BaseAnimGroup(parent){}
+ ~TextAnimation(){
+ this->stop();
+ }
+
+ void LoadAnimations(){
+ canvas->setStyleSheet("background: black;");
+ //Read off the text that needs to be displayed
+ QString textToShow = readSetting("text", "").toString();
+ if(textToShow.isEmpty()){
+ char hname[300];
+ gethostname(hname, 300);
+ textToShow = QString::fromLocal8Bit(hname);
+ }
+ // Now create the animation
+ Text *tmp = new Text(canvas, textToShow);
+ this->addAnimation(tmp);
+ }
+
+};
+#endif
bgstack15