diff --git a/ScreenPlay/src/settings.cpp b/ScreenPlay/src/settings.cpp index 2dac54cc..edc251dd 100644 --- a/ScreenPlay/src/settings.cpp +++ b/ScreenPlay/src/settings.cpp @@ -105,13 +105,19 @@ void Settings::setWallpaper(int monitorIndex, QUrl absoluteStoragePath) decreaseActiveWallpaperCounter(); } } + increaseActiveWallpaperCounter(); auto pro = new QProcess(); - QStringList proArgs; - proArgs.append(absoluteStoragePath.toString()); + QObject::connect(pro, QOverload::of(&QProcess::finished), [=](int exitCode, QProcess::ExitStatus exitStatus) { + qDebug() << "EX: " <start(m_screenPlayWindowPath.toString()); + pro->start(m_screenPlayWindowPath.toString(),proArgs); } void Settings::setWidget(QUrl absoluteStoragePath) @@ -232,7 +238,6 @@ void Settings::removeAll() m_wallpapers.at(i).data()->destroyWallpaper(); } for (int i = 0; i < m_windows.size(); ++i) { - } setActiveWallpaperCounter(0); } diff --git a/ScreenPlayWindow/ScreenVideo.qml b/ScreenPlayWindow/ScreenVideo.qml index ae4bf495..89642d66 100644 --- a/ScreenPlayWindow/ScreenVideo.qml +++ b/ScreenPlayWindow/ScreenVideo.qml @@ -2,53 +2,58 @@ import QtQuick 2.9 import QtAV 1.7 Rectangle { - color: "black" id: screenVideoPlayer + color: "black" anchors.fill: parent property string videoPath - property bool isPlaying: false - Component.onCompleted: screenVideoPlayer.isPlaying = true - onIsPlayingChanged: { - if(isPlaying){ - player.play() - state = "playing" - } else { - player.pause() - state = "" - } + onVideoPathChanged: { + player.source = Qt.resolvedUrl("file:///" + videoPath) + print("######### " + player.source) + state = "playing" + player.play() } -// Connections{ -// target: wallpaper -// onPrepareDestroy:{ -// player.stop(); -// wallpaper.destroyWindow() -// } + property bool isPlaying: true -// onVolumeChanged:{ -// player.volume = wallpaper.volume -// } -// onIsPlayingChanged:{ -// if(wallpaper.isPlaying){ -// player.play() -// } else { -// player.pause() -// } -// } -// onDecoderChanged:{ -// player.videoCodecPriority = [decoder] -// } -// onFillModeChanged:{ -// if(fillMode === "Stretch"){ -// videoOut.fillMode = VideoOutput2.Stretch -// } else if(fillMode === "PreserveAspectFit"){ -// videoOut.fillMode = VideoOutput2.PreserveAspectFit -// }else if(fillMode === "PreserveAspectCrop"){ -// videoOut.fillMode = VideoOutput2.PreserveAspectCrop -// } -// } -// } + // onIsPlayingChanged: { + // if(isPlaying){ + // player.play() + // state = "playing" + // } else { + // player.pause() + // state = "" + // } + // } + // Connections{ + // target: wallpaper + // onPrepareDestroy:{ + // player.stop(); + // wallpaper.destroyWindow() + // } + // onVolumeChanged:{ + // player.volume = wallpaper.volume + // } + // onIsPlayingChanged:{ + // if(wallpaper.isPlaying){ + // player.play() + // } else { + // player.pause() + // } + // } + // onDecoderChanged:{ + // player.videoCodecPriority = [decoder] + // } + // onFillModeChanged:{ + // if(fillMode === "Stretch"){ + // videoOut.fillMode = VideoOutput2.Stretch + // } else if(fillMode === "PreserveAspectFit"){ + // videoOut.fillMode = VideoOutput2.PreserveAspectFit + // }else if(fillMode === "PreserveAspectCrop"){ + // videoOut.fillMode = VideoOutput2.PreserveAspectCrop + // } + // } + // } VideoOutput2 { id: videoOut @@ -61,10 +66,17 @@ Rectangle { MediaPlayer { id: player + videoCodecPriority: ["CUDA", "VAAPI", "D3D11", "DXVA", "FFmpeg"] loops: MediaPlayer.Infinite volume: 0 - source: "d:/672870/860170953/horde_1980.mp4" + onStatusChanged: { + print("STATUS: " + player.status) + if(player.status === MediaPlayer.Loaded){ + print("init") + mainwindow.init() + } + } } states: [ diff --git a/ScreenPlayWindow/main.cpp b/ScreenPlayWindow/main.cpp index 4add1934..137e75b2 100644 --- a/ScreenPlayWindow/main.cpp +++ b/ScreenPlayWindow/main.cpp @@ -1,18 +1,30 @@ #include "src/mainwindow.h" #include +#include - -int main(int argc, char *argv[]) +int main(int argc, char* argv[]) { //QCoreApplication::addLibraryPath("C:/msys64/mingw64/bin"); + + QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QApplication::setAttribute(Qt::AA_UseOpenGLES); QApplication a(argc, argv); - QStringList argumentList = a.arguments(); + QStringList argumentList = a.arguments(); - //MainWindow w(argumentList.at(0)); - //MainWindow w(0,"D:/672870/860170953"); - //MainWindow w1(1,"D:/672870/818696361"); - MainWindow w2(2,"D:/672870/860170953"); + if(argumentList.length() != 3) { + return -3; + } + + bool ok = false; + int monitor = argumentList.at(1).toInt(&ok); + + if (!ok) { + return -4; + } + + MainWindow w(monitor,argumentList.at(2)); + //MainWindow w(0,"D:/672870/786361026"); return a.exec(); } diff --git a/ScreenPlayWindow/main.qml b/ScreenPlayWindow/main.qml index dd128b89..7f0a08f9 100644 --- a/ScreenPlayWindow/main.qml +++ b/ScreenPlayWindow/main.qml @@ -1,48 +1,46 @@ import QtQuick 2.9 -import net.aimber.screenplaysdk 1.0 +//import net.aimber.screenplaysdk 1.0 Rectangle { color: "gray" anchors.fill: parent + property string tmpVideoPath +// ScreenPlaySDK { +// contentType: "wallpaper" - ScreenPlaySDK { - contentType: "wallpaper" +// onIncommingMessageError: { +// name.text = msg +// } - onIncommingMessageError: { - name.text = msg - } +// onSdkConnected: { +// name.text = "connected" +// } - onSdkConnected: { - name.text = "connected" - } +// onSdkDisconnected: { +// name.text = "disconnected" +// mainwindow.destroyThis() +// } +// } - onSdkDisconnected: { - name.text = "disconnected" - //mainwindow.destroyThis() - } - } +// Text { +// id: name +// text: qsTr("text") +// anchors.centerIn: parent +// font.pixelSize: 64 +// color: "orange" +// } Connections { target: mainwindow - onPlayVideo:{ - loaderVideo.active = true - print(path) - //loaderVideo.item.videoPath = path - + onPlayVideo: { + screenVideo.videoPath = path } } - Loader { - id:loaderVideo - anchors.fill: parent - asynchronous: true - active: false - source: "qrc:/ScreenVideo.qml" - onStateChanged: { - if(status == Loader.Ready){ - loaderVideo.item.isPlaying = true - } - } + + + ScreenVideo { + id:screenVideo } } diff --git a/ScreenPlayWindow/src/mainwindow.cpp b/ScreenPlayWindow/src/mainwindow.cpp index e8bc4693..9ce7eef8 100644 --- a/ScreenPlayWindow/src/mainwindow.cpp +++ b/ScreenPlayWindow/src/mainwindow.cpp @@ -1,7 +1,5 @@ #include "mainwindow.h" -#include - BOOL WINAPI SearchForWorkerWindow(HWND hwnd, LPARAM lparam) { // 0xXXXXXXX "" WorkerW @@ -33,7 +31,7 @@ MainWindow::MainWindow(int i, QString projectPath, QScreen* parent) if (!(parseError.error == QJsonParseError::NoError)) { qWarning("Settings Json Parse Error "); - return; + QApplication::exit(-4); } m_project = configJsonDocument.object(); @@ -51,8 +49,6 @@ MainWindow::MainWindow(int i, QString projectPath, QScreen* parent) if (m_project.contains("file")) m_projectFile = m_project.value("file").toString(); - this->m_hwnd = (HWND)this->winId(); - // Recalculate window coordiantes because of point (0,0) // Is at the origin monitor or the most left QScreen* screen = QApplication::screens().at(i); @@ -61,7 +57,6 @@ MainWindow::MainWindow(int i, QString projectPath, QScreen* parent) for (int i = 0; i < QApplication::screens().count(); i++) { QScreen* screen = QApplication::screens().at(i); - qDebug() << screen->availableGeometry().x(); if (screen->availableGeometry().x() < 0) { offsetX += (screen->availableGeometry().x() * -1); } @@ -70,6 +65,7 @@ MainWindow::MainWindow(int i, QString projectPath, QScreen* parent) } } + m_hwnd = (HWND)this->winId(); HWND progman_hwnd = FindWindowW(L"Progman", L"Program Manager"); // Spawn new worker window below desktop (using some undocumented Win32 magic) @@ -80,38 +76,37 @@ MainWindow::MainWindow(int i, QString projectPath, QScreen* parent) SendMessageTimeoutW(progman_hwnd, WM_SPAWN_WORKER, 0xD, 0x1, SMTO_NORMAL, 1000, nullptr); - EnumWindows(SearchForWorkerWindow, reinterpret_cast(&m_worker_hwnd)); + bool foundWorker = EnumWindows(SearchForWorkerWindow, reinterpret_cast(&m_worker_hwnd)); + + if (!foundWorker) { + qDebug() << "No worker window found"; + } //Hide first to avoid flickering + ShowWindow(m_worker_hwnd, SW_HIDE); ShowWindow(m_hwnd, SW_HIDE); - MoveWindow(m_hwnd, screen->geometry().x() + offsetX, screen->geometry().y() + offsetY, screen->size().width(), screen->size().height(), true); - SetParent(m_hwnd, m_worker_hwnd); - SetWindowLongPtr(m_hwnd, GWL_STYLE, - WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU); - SetWindowLongPtr(m_hwnd, GWL_EXSTYLE, - WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_NOACTIVATE | WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW); + SetParent(m_hwnd, m_worker_hwnd); + + SetWindowLongPtr(m_hwnd, GWL_STYLE, WS_CHILDWINDOW | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU | WS_POPUP); + SetWindowLongPtr(m_hwnd, GWL_EXSTYLE, WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_NOACTIVATE | WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW); Qt::WindowFlags flags = this->flags(); this->setFlags(flags | Qt::FramelessWindowHint | Qt::WindowStaysOnBottomHint); - this->show(); m_quickRenderer = QSharedPointer(new QQuickView(this)); m_quickRenderer.data()->rootContext()->setContextProperty("mainwindow", this); - m_quickRenderer.data()->setGeometry(0,0, screen->size().width(), screen->size().height()); - m_quickRenderer.data()->setResizeMode(QQuickView::ResizeMode::SizeRootObjectToView); m_quickRenderer.data()->setSource(QUrl("qrc:/main.qml")); + m_quickRenderer.data()->setGeometry(0, 0, width(), height()); + m_quickRenderer.data()->setResizeMode(QQuickView::ResizeMode::SizeRootObjectToView); + m_quickRenderer.data()->setFlags(flags | Qt::FramelessWindowHint | Qt::WindowStaysOnBottomHint); QPropertyAnimation* animation = new QPropertyAnimation(this, "opacity"); animation->setDuration(250); animation->setEasingCurve(QEasingCurve::OutCubic); animation->setStartValue(0); animation->setEndValue(1); - m_quickRenderer.data()->show(); - - ShowWindow(m_worker_hwnd, SW_SHOWDEFAULT); - ShowWindow(m_hwnd, SW_SHOWDEFAULT); animation->start(); @@ -119,7 +114,6 @@ MainWindow::MainWindow(int i, QString projectPath, QScreen* parent) if (m_project.contains("type")) { if (m_project.value("type") == "video") { QString tmpPath = m_projectPath.toString() + "/" + m_projectFile; - tmpPath.replace("/", "\\\\"); emit playVideo(tmpPath); } else if (m_project.value("type") == "scene") { return; @@ -130,20 +124,25 @@ MainWindow::MainWindow(int i, QString projectPath, QScreen* parent) void MainWindow::destroyThis() { - - ShowWindow(m_worker_hwnd, SW_HIDE); - ShowWindow(m_hwnd, SW_HIDE); - QCoreApplication::quit(); - /* QPropertyAnimation* animation = new QPropertyAnimation(this, "opacity"); animation->setDuration(5000); animation->setStartValue(1); animation->setEndValue(0); animation->start(); - QObject::connect(animation,&QPropertyAnimation::finished, [&]() { + QObject::connect(animation, &QPropertyAnimation::finished, [&]() { + ShowWindow(m_worker_hwnd, SW_HIDE); + ShowWindow(m_hwnd, SW_HIDE); + QCoreApplication::quit(); + }); +} - });*/ +void MainWindow::init() +{ + ShowWindow(m_worker_hwnd, SW_SHOWDEFAULT); + ShowWindow(m_hwnd, SW_SHOWDEFAULT); + m_quickRenderer.data()->show(); + this->show(); } QUrl MainWindow::projectPath() const diff --git a/ScreenPlayWindow/src/mainwindow.h b/ScreenPlayWindow/src/mainwindow.h index 448d54a1..ce89f0ba 100644 --- a/ScreenPlayWindow/src/mainwindow.h +++ b/ScreenPlayWindow/src/mainwindow.h @@ -1,7 +1,10 @@ #pragma once + #include #include +#include +#include #include #include #include @@ -11,22 +14,19 @@ #include #include #include -#include - #include "qt_windows.h" - class MainWindow : public QWindow { Q_OBJECT public: - explicit MainWindow(int i, QString projectPath, QScreen* parent = 0); - void init(); + explicit MainWindow(int i, QString projectPath, QScreen* parent = 0); ~MainWindow(); QUrl projectPath() const; - void setProjectPath(const QUrl &projectPath); + void setProjectPath(const QUrl& projectPath); public slots: void destroyThis(); + void init(); signals: void playVideo(QString path); @@ -38,5 +38,4 @@ private: QUrl m_projectPath; QString m_projectFile; QJsonObject m_project; - };