diff options
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.h | 104 |
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 |