1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-09-18 16:32:33 +02:00
ScreenPlay/ScreenPlayWallpaper/qml/MultimediaView.qml

109 lines
3.0 KiB
QML
Raw Normal View History

2021-10-08 10:14:11 +02:00
import QtQuick
2021-07-15 12:07:39 +02:00
import QtMultimedia
import ScreenPlayWallpaper
2021-07-15 12:07:39 +02:00
Item {
2021-09-10 11:36:47 +02:00
id: root
anchors.fill: parent
property bool loops: Wallpaper.loops
property bool isPlaying: Wallpaper.isPlaying
property string fillMode: Wallpaper.fillMode
property bool fadeInDone: false
onFillModeChanged: {
// Convert Web based video modes to the limited Qt fillModes
2023-02-02 15:25:26 +01:00
if (fillMode === "cover" || fillMode === "stretch" || fillMode === "contain") {
return vo.fillMode = VideoOutput.Stretch;
}
if (fillMode === "fill") {
2023-02-02 15:25:26 +01:00
return vo.fillMode = VideoOutput.PreserveAspectFit;
}
if (fillMode === "scale_down") {
2023-02-02 15:25:26 +01:00
return vo.fillMode = VideoOutput.PreserveAspectCrop;
}
}
onIsPlayingChanged: isPlaying ? mediaPlayer.play() : mediaPlayer.pause()
2021-11-11 18:08:24 +01:00
property bool isWindows: Qt.platform.os === "windows"
property string source: Wallpaper.projectSourceFileAbsolute
onSourceChanged: {
// Qt 6.3 workaround
2023-02-02 15:25:26 +01:00
mediaPlayer.stop();
mediaPlayer.source = Qt.resolvedUrl(root.source);
mediaPlayer.play();
}
// Add slight delay to give the multimedia
// engine some time to put out some frames. This
// fixes some white frame flickering
Timer {
id: startTimer
interval: 50
onTriggered: {
Wallpaper.requestFadeIn();
}
}
MediaPlayer {
id: mediaPlayer
2023-02-02 15:25:26 +01:00
onPlaybackStateChanged: {
if (mediaPlayer.playbackState == MediaPlayer.PlayingState && !fadeInDone) {
2023-06-11 10:07:39 +02:00
fadeInDone = true;
startTimer.start();
2023-02-02 15:25:26 +01:00
}
}
loops: root.loops ? MediaPlayer.Infinite : 1
videoOutput: vo
audioOutput: ao
}
VideoOutput {
id: vo
anchors.fill: parent
2021-09-10 12:45:54 +02:00
}
AudioOutput {
id: ao
volume: Wallpaper.volume
muted: Wallpaper.muted
}
// Wait until Windows window animation is complete
// before pausing the wallpaper
Timer {
id: pauseTimer
interval: 100
onTriggered: {
mediaPlayer.pause();
}
}
Connections {
function onFillModeChanged(fillMode) {
if (fillMode === "stretch") {
2023-02-02 15:25:26 +01:00
vo.fillMode = VideoOutput.Stretch;
return;
}
if (fillMode === "fill") {
2023-02-02 15:25:26 +01:00
vo.fillMode = VideoOutput.PreserveAspectFit;
return;
}
2023-02-02 15:25:26 +01:00
if (fillMode === "contain" || fillMode === "cover" || fillMode === "scale-down") {
vo.fillMode = VideoOutput.PreserveAspectCrop;
}
}
function onCurrentTimeChanged(currentTime) {
2023-02-02 15:25:26 +01:00
mediaPlayer.position = currentTime * mediaPlayer.duration;
}
function onVisualsPausedChanged(visualsPaused) {
if (!Wallpaper.isPlaying)
return;
if (visualsPaused)
pauseTimer.start();
else
mediaPlayer.play();
}
target: Wallpaper
2021-07-15 12:07:39 +02:00
}
}