Warning, /multimedia/plasmatube/src/ui/videoplayer/PictureInPictureVideo.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
0002 // SPDX-License-Identifier: GPL-3.0-or-later
0003
0004 import QtQuick
0005 import QtQuick.Controls as QQC2
0006 import Qt5Compat.GraphicalEffects
0007
0008 import org.kde.kirigami as Kirigami
0009
0010 import org.kde.plasmatube
0011
0012 Kirigami.ApplicationWindow {
0013 id: root
0014
0015 title: i18n("Picture in Picture")
0016
0017 flags: Qt.Window | Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint
0018
0019 minimumWidth: 320
0020 minimumHeight: 240
0021
0022 property alias renderer: renderer
0023 readonly property var video: PlasmaTube.videoController.currentVideo
0024
0025 MouseArea {
0026 id: videoContainer
0027 anchors.fill: parent
0028
0029 Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
0030 Kirigami.Theme.inherit: false
0031
0032 property bool showControls: false
0033 onClicked: {
0034 if (showControls) {
0035 controlTimer.stop();
0036 videoContainer.showControls = false;
0037 } else {
0038 showControls = true;
0039 controlTimer.restart();
0040 }
0041 }
0042
0043 hoverEnabled: !Kirigami.Settings.tabletMode
0044 onContainsMouseChanged: {
0045 if (!pressed && hoverEnabled) {
0046 videoContainer.showControls = containsMouse;
0047 }
0048 }
0049
0050 Timer {
0051 id: controlTimer
0052 interval: 2000
0053 onTriggered: videoContainer.showControls = false
0054 }
0055
0056 MpvObject {
0057 id: renderer
0058 anchors.fill: parent
0059
0060 visible: !stopped
0061 }
0062 Rectangle {
0063 anchors.fill: renderer
0064
0065 color: "black"
0066 visible: renderer.stopped
0067
0068 Image {
0069 id: thumbnailImage
0070
0071 anchors.fill: parent
0072 source: video.thumbnailUrl("high")
0073 }
0074
0075 QQC2.BusyIndicator {
0076 anchors.centerIn: parent
0077 }
0078 }
0079
0080 VideoData {
0081 title: video.title
0082 visible: opacity > 0
0083 opacity: videoContainer.showControls ? 1 : 0
0084 Behavior on opacity {
0085 NumberAnimation {
0086 duration: Kirigami.Units.veryLongDuration; easing.type: Easing.InOutCubic
0087 }
0088 }
0089 }
0090
0091 VideoControls {
0092 inFullScreen: false
0093 anchors.fill: parent
0094 showPresentationControls: false
0095
0096 visible: opacity > 0
0097 opacity: videoContainer.showControls ? 1 : 0
0098 Behavior on opacity {
0099 NumberAnimation {
0100 duration: Kirigami.Units.veryLongDuration; easing.type: Easing.InOutCubic
0101 }
0102 }
0103
0104 QQC2.ToolButton {
0105 anchors {
0106 top: parent.top
0107 right: parent.right
0108 }
0109
0110 display: QQC2.AbstractButton.IconOnly
0111
0112 icon.name: "window-close-symbolic"
0113 icon.color: "white"
0114
0115 onClicked: root.close()
0116 }
0117
0118 QQC2.ToolButton {
0119 id: resizeHandler
0120
0121 anchors {
0122 bottom: parent.bottom
0123 right: parent.right
0124 }
0125
0126 display: QQC2.AbstractButton.IconOnly
0127
0128 icon.name: "drag-surface"
0129
0130 hoverEnabled: true
0131 }
0132 }
0133 }
0134
0135 DragHandler {
0136 grabPermissions: PointerHandler.CanTakeOverFromItems | PointerHandler.CanTakeOverFromHandlersOfDifferentType | PointerHandler.ApprovesTakeOverByAnything
0137 onActiveChanged: {
0138 if (active) {
0139 if (resizeHandler.hovered) {
0140 root.startSystemResize(Qt.RightEdge | Qt.BottomEdge);
0141 } else {
0142 root.startSystemMove();
0143 }
0144 }
0145 }
0146 target: null
0147 }
0148 }