/
erhoof
/
telegraf
Обзор
Документация
Войти
/
erhoof
/
telegraf
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
qml/components/messageContent/MessageAnimationVideoPlayer.qml
104 строки
2 KB
mbarashkov
Улучшено зацикливание стикеров
02 авг 2025, 18:26
02 авг 2025, 18:26
8086f85
Код
Авторство
О чём код?
import QtQuick 2.6 import Sailfish.Silica 1.0 import QtMultimedia 5.6 import ru.telegrafaurora.telegraf 1.0 import "../" Item { id: videoPlayer; anchors.fill: parent; visible: true; property url source: ""; property url thumbnailSource: ""; property bool loop: true; property bool play: false; onPlayChanged: { if(play) { mediaPlayerLoader.active = true; mediaPlayerLoader.item.play(); } else { mediaPlayerLoader.active = false; } } Loader { id: mediaPlayerLoader active: false anchors.fill: parent z: 1 sourceComponent: Item { function play() { player.play(); } function pause() { player.pause(); } MediaPlayer { id: player source: videoPlayer.source loops: videoPlayer.loop ? MediaPlayer.Infinite : 1 autoPlay: false } VideoOutput { id: output anchors.fill: parent source: player opacity: videoPlayer.visible ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 300 } } } } } function captureFrame() { output.grabToImage(function(result) { bgImage.source = result.url }) } Item { anchors.fill: parent Image { id: bgImage anchors.fill: parent source: thumbnailSource fillMode: Image.PreserveAspectFit visible: videoPlayer.visible } IconButton { anchors.centerIn: parent icon.source: "image://theme/icon-l-play" visible: !play } z: 0 } MouseArea { anchors.fill: parent onClicked: { play = !play; } } Component.onDestruction: { mediaPlayerLoader.active = false; bgImage.source = "" } // Плавные переходы Behavior on visible { enabled: true NumberAnimation { property: "opacity" duration: 500 easing.type: Easing.InOutQuad } } }