aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/VideoSlideshow.h
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/core/lumina-desktop-unified/src-screensaver/animations/VideoSlideshow.h')
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/VideoSlideshow.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/VideoSlideshow.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/VideoSlideshow.h
new file mode 100644
index 00000000..cc3c1b83
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/VideoSlideshow.h
@@ -0,0 +1,104 @@
+//===========================================
+// 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_VIDEOSLIDESHOW_ANIMATION_H
+#define _LUMINA_DESKTOP_SCREEN_SAVER_VIDEOSLIDESHOW_ANIMATION_H
+
+#include "global-includes.h"
+#include "BaseAnimGroup.h"
+
+class VideoSlideshow: public QPropertyAnimation{
+ Q_OBJECT
+public:
+ VideoSlideshow(QWidget *parent, QVideoWidget *videoWidget) : QPropertyAnimation(videoWidget, "pos", parent){
+ this->setKeyValueAt(0,QPoint(0,0));
+ this->setKeyValueAt(1,QPoint(0,0));
+ this->setDuration(1000000);
+ this->setLoopCount(-1);
+ }
+ ~VideoSlideshow(){}
+
+};
+
+class VideoAnimation: public BaseAnimGroup{
+ Q_OBJECT
+private:
+ QString videoPath;
+ VideoSlideshow *tmp;
+ QVideoWidget *videoWidget;
+ QMediaPlayer *video;
+ QStringList videoFiles;
+ bool multimonitor;
+
+private slots:
+ void startVideo(QAbstractAnimation::State state) {
+ qDebug() << "Status: " << video->mediaStatus() << "New Animation State:" << state;
+ if(state==QAbstractAnimation::Running){
+ video->setVolume(100);
+ video->play();
+ }
+ if(state==QAbstractAnimation::Stopped && video->state()!=QMediaPlayer::StoppedState){
+ video->stop();
+ }
+ }
+
+ void stopVideo() {
+ if(video->state() == QMediaPlayer::StoppedState) {
+ qDebug() << "Stopping Animation";
+ //this->deleteLater();
+ videoWidget->hide();
+ tmp->stop();
+ //tmp->deleteLater();
+ videoWidget->deleteLater();
+ video->deleteLater();
+ }
+ }
+
+public:
+ VideoAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){}
+
+ ~VideoAnimation(){
+ this->stop();
+ }
+
+ void LoadAnimations(){
+ canvas->setStyleSheet("background: black;");
+
+ //Load the path of the videos from the configuration file (default /usr/local/videos/)
+ videoPath = settings->value("videoSlideshow/path","/usr/local/videos").toString();
+ if(!videoPath.endsWith("/")){ videoPath.append("/"); }
+
+ //Set whether to copy videos on two monitors or play different videos
+ multimonitor = settings->value("videoSlideshow/multimonitor",true).toBool();
+
+ video = new QMediaPlayer(canvas, QMediaPlayer::VideoSurface);
+ videoWidget = new QVideoWidget(canvas);
+ videoWidget->setGeometry(QRect(QPoint(0,0), canvas->size()));
+
+ tmp = new VideoSlideshow(canvas, videoWidget);
+ this->addAnimation(tmp);
+
+ //Generate the list of files in the directory
+ videoFiles = QDir(videoPath).entryList(QDir::Files);
+ if(videoFiles.empty())
+ qDebug() << "Current video file path has no files.";
+
+ this->setLoopCount(1);
+
+ QUrl url = QUrl::fromLocalFile(videoPath+videoFiles[qrand() % videoFiles.size()]);
+ video->setMedia(url);
+ qDebug() << url;
+ video->setVideoOutput(videoWidget);
+ videoWidget->show();
+
+ qDebug() << "VideoWidget Displayed";
+ connect(tmp, SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), this, SLOT(startVideo(QAbstractAnimation::State)) );
+ //connect(video, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), this, SLOT(startVideo()) );
+ connect(video, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(stopVideo()) );
+ }
+
+};
+#endif
bgstack15