Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (2)
/*****************************************************************************
* Copyright (C) 2019 VLC authors and VideoLAN
* Copyright (C) 2024 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
......@@ -39,8 +39,6 @@ FocusScope {
//behave like a Page
property var pagePrefix: []
property bool hasEmbededVideo: MainCtx.hasEmbededVideo
readonly property int positionSliderY: controlBar.y + controlBar.sliderY
readonly property string coverSource: {
......@@ -100,14 +98,6 @@ FocusScope {
lockUnlockAutoHide(_controlsUnderVideo)
}
Connections {
target: Player
function onVolumeChanged() {
animationVolume.restart()
}
}
// Functions
function lockUnlockAutoHide(lock) {
......@@ -173,94 +163,346 @@ FocusScope {
}
}
VideoSurface {
id: videoSurface
Loader {
id: playerSpecializationLoader
videoSurfaceProvider: MainCtx.videoSurfaceProvider
anchors {
left: parent.left
right: parent.right
top: (MainCtx.hasEmbededVideo && !rootPlayer._controlsUnderVideo) ? parent.top : topBar.bottom
bottom: (MainCtx.hasEmbededVideo && !rootPlayer._controlsUnderVideo) ? parent.bottom : controlBar.top
}
visible: rootPlayer.hasEmbededVideo
sourceComponent: MainCtx.hasEmbededVideo ? videoComponent : audioComponent
anchors.fill: parent
anchors.topMargin: rootPlayer._controlsUnderVideo ? topBar.height : 0
anchors.bottomMargin: rootPlayer._controlsUnderVideo ? controlBar.height : 0
property int cursorShape
onMouseMoved: {
//short interval for mouse events
if (Player.isInteractive)
interactiveAutoHideTimer.restart()
else
playerToolbarVisibilityFSM.mouseMove();
}
Component {
id: videoComponent
Binding on cursorShape {
when: topBar.state === "hidden"
&& controlBar.state === "hidden"
&& !interactiveAutoHideTimer.running
value: Qt.BlankCursor
}
}
FocusScope {
// Video
// background image
Rectangle {
visible: !rootPlayer.hasEmbededVideo
focus: false
color: bgtheme.bg.primary
anchors.fill: parent
focus: true
readonly property ColorContext colorContext: ColorContext {
id: bgtheme
colorSet: ColorContext.View
}
VideoSurface {
id: videoSurface
PlayerBlurredBackground {
id: backgroundImage
anchors.fill: parent
//destination aspect ratio
readonly property real dar: parent.width / parent.height
videoSurfaceProvider: MainCtx.videoSurfaceProvider
anchors.centerIn: parent
width: (cover.sar < dar) ? parent.width : parent.height * cover.sar
height: (cover.sar < dar) ? parent.width / cover.sar : parent.height
visible: MainCtx.hasEmbededVideo
source: cover
focus: true
screenColor: bgtheme.bg.primary.alpha(.55)
overlayColor: Qt.tint(bgtheme.fg.primary, bgtheme.bg.primary).alpha(0.4)
}
}
cursorShape: playerSpecializationLoader.cursorShape
Rectangle {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
onMouseMoved: {
//short interval for mouse events
if (Player.isInteractive)
interactiveAutoHideTimer.restart()
else
playerToolbarVisibilityFSM.mouseMove();
}
implicitHeight: VLCStyle.dp(206, VLCStyle.scale)
Binding on cursorShape {
when: topBar.state === "hidden"
&& controlBar.state === "hidden"
&& !interactiveAutoHideTimer.running
value: Qt.BlankCursor
}
}
opacity: topBar.opacity
visible: !topBarAcrylicBg.visible && MainCtx.hasEmbededVideo
Rectangle {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
gradient: Gradient {
GradientStop { position: 0; color: Qt.rgba(0, 0, 0, .8) }
GradientStop { position: 1; color: "transparent" }
}
}
implicitHeight: VLCStyle.dp(206, VLCStyle.scale)
Rectangle {
anchors.bottom: controlBar.bottom
anchors.left: controlBar.left
anchors.right: controlBar.right
opacity: topBar.opacity
visible: !topBarAcrylicBg.visible
implicitHeight: VLCStyle.dp(206, VLCStyle.scale)
gradient: Gradient {
GradientStop { position: 0; color: Qt.rgba(0, 0, 0, .8) }
GradientStop { position: 1; color: "transparent" }
}
}
opacity: controlBar.opacity
Rectangle {
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
gradient: Gradient {
GradientStop { position: 0; color: "transparent" }
GradientStop { position: .64; color: Qt.rgba(0, 0, 0, .8) }
GradientStop { position: 1; color: "black" }
implicitHeight: VLCStyle.dp(206, VLCStyle.scale)
opacity: controlBar.opacity
gradient: Gradient {
GradientStop { position: 0; color: "transparent" }
GradientStop { position: .64; color: Qt.rgba(0, 0, 0, .8) }
GradientStop { position: 1; color: "black" }
}
visible: !(controlBar.background && controlBar.background.visible)
}
}
}
visible: !(controlBar.background && controlBar.background.visible)
Component {
id: audioComponent
FocusScope {
// Audio
focus: true
// background image
Rectangle {
focus: false
color: bgtheme.bg.primary
anchors.fill: parent
readonly property ColorContext colorContext: ColorContext {
id: bgtheme
colorSet: ColorContext.View
}
PlayerBlurredBackground {
id: backgroundImage
//destination aspect ratio
readonly property real dar: parent.width / parent.height
anchors.centerIn: parent
width: (cover.sar < dar) ? parent.width : parent.height * cover.sar
height: (cover.sar < dar) ? parent.width / cover.sar : parent.height
source: cover
screenColor: bgtheme.bg.primary.alpha(.55)
overlayColor: Qt.tint(bgtheme.fg.primary, bgtheme.bg.primary).alpha(0.4)
}
}
MouseArea {
id: centerContent
readonly property ColorContext colorContext: ColorContext {
id: centerTheme
colorSet: ColorContext.View
}
anchors.fill: parent
anchors.topMargin: VLCStyle.margin_xsmall
anchors.bottomMargin: VLCStyle.margin_xsmall
onWheel: (wheel) => {
wheel.accepted = true
var delta = wheel.angleDelta.y
if (delta === 0)
return
Helpers.applyVolume(Player, delta)
}
ColumnLayout {
anchors.centerIn: parent
spacing: 0
Item {
id: coverItem
Layout.preferredHeight: rootPlayer.height / sizeConstant
Layout.preferredWidth: cover.paintedWidth
Layout.maximumHeight: centerContent.height
Layout.alignment: Qt.AlignHCenter
readonly property real sizeConstant: 2.7182
Image {
id: cover
//source aspect ratio
readonly property real sar: paintedWidth / paintedHeight
readonly property int maximumWidth: Helpers.alignUp((Screen.desktopAvailableWidth / coverItem.sizeConstant), 32)
readonly property int maximumHeight: Helpers.alignUp((Screen.desktopAvailableHeight / coverItem.sizeConstant), 32)
readonly property int maximumSize: Math.min(maximumWidth, maximumHeight)
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
source: VLCAccessImage.uri(rootPlayer.coverSource)
fillMode: Image.PreserveAspectFit
mipmap: true
cache: false
asynchronous: true
sourceSize: Qt.size(maximumSize, maximumSize)
Accessible.role: Accessible.Graphic
Accessible.name: qsTr("Cover")
onStatusChanged: {
if (status === Image.Ready)
backgroundImage.scheduleUpdate()
}
// TODO: Qt >= 6.4 Investigate using MultiEffect.
Widgets.DoubleShadow {
anchors.centerIn: parent
sourceItem: parent
cache: false
primaryVerticalOffset: VLCStyle.dp(24)
primaryBlurRadius: VLCStyle.dp(54)
secondaryVerticalOffset: VLCStyle.dp(5)
secondaryBlurRadius: VLCStyle.dp(14)
}
}
}
Widgets.SubtitleLabel {
id: albumLabel
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: VLCStyle.margin_xxlarge
Binding on visible {
delayed: true
when: albumLabel.componentCompleted
value: centerContent.height > (albumLabel.y + albumLabel.height)
}
text: MainPlaylistController.currentItem.album
font.pixelSize: VLCStyle.fontSize_xxlarge
horizontalAlignment: Text.AlignHCenter
color: centerTheme.fg.primary
Accessible.description: qsTr("album")
property bool componentCompleted: false
Component.onCompleted: {
componentCompleted = true
}
}
Widgets.MenuLabel {
id: artistLabel
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: VLCStyle.margin_small
Binding on visible {
delayed: true
when: artistLabel.componentCompleted
value: centerContent.height > (artistLabel.y + artistLabel.height)
}
text: MainPlaylistController.currentItem.artist
font.weight: Font.Light
horizontalAlignment: Text.AlignHCenter
color: centerTheme.fg.primary
Accessible.description: qsTr("artist")
property bool componentCompleted: false
Component.onCompleted: {
componentCompleted = true
}
}
Widgets.NavigableRow {
id: audioControls
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: VLCStyle.margin_large
Binding on visible {
delayed: true
when: audioControls.componentCompleted
value: Player.videoTracks.count === 0 && centerContent.height > (audioControls.y + audioControls.height)
}
focus: true
spacing: VLCStyle.margin_xxsmall
Navigation.parentItem: rootPlayer
Navigation.upItem: topBar
Navigation.downItem: Player.isInteractive ? toggleControlBarButton : controlBar
property bool componentCompleted: false
Component.onCompleted: {
componentCompleted = true
}
model: ObjectModel {
Widgets.IconToolButton {
text: VLCIcons.skip_back
font.pixelSize: VLCStyle.icon_audioPlayerButton
onClicked: Player.jumpBwd()
description: qsTr("Step back")
}
Widgets.IconToolButton {
text: VLCIcons.visualization
font.pixelSize: VLCStyle.icon_audioPlayerButton
onClicked: Player.toggleVisualization()
description: qsTr("Visualization")
}
Widgets.IconToolButton{
text: VLCIcons.skip_for
font.pixelSize: VLCStyle.icon_audioPlayerButton
onClicked: Player.jumpFwd()
description: qsTr("Step forward")
}
}
}
}
Widgets.SubtitleLabel {
id: labelVolume
anchors.right: parent.right
anchors.top: parent.top
anchors.rightMargin: VLCStyle.margin_normal
anchors.topMargin: VLCStyle.margin_xxsmall
visible: false
text: qsTr("Volume %1%").arg(Math.round(Player.volume * 100))
color: centerTheme.fg.primary
font.weight: Font.Normal
Connections {
target: Player
function onVolumeChanged() {
animationVolume.restart()
}
}
SequentialAnimation {
id: animationVolume
PropertyAction { target: labelVolume; property: "visible"; value: true }
PauseAnimation { duration: VLCStyle.duration_humanMoment }
PropertyAction { target: labelVolume; property: "visible"; value: false }
}
}
}
}
}
}
TopBar {
......@@ -299,8 +541,8 @@ FocusScope {
Navigation.downItem: {
if (playlistVisibility.isPlaylistVisible)
return playlistpopup
if (audioControls.visible)
return audioControls
if (MainCtx.hasEmbededVideo)
return playerSpecializationLoader
if (Player.isInteractive)
return toggleControlBarButton
return controlBar
......@@ -346,228 +588,6 @@ FocusScope {
}
}
MouseArea {
id: centerContent
readonly property ColorContext colorContext: ColorContext {
id: centerTheme
colorSet: ColorContext.View
}
anchors {
left: parent.left
right: parent.right
top: topBar.bottom
bottom: controlBar.top
topMargin: VLCStyle.margin_xsmall
bottomMargin: VLCStyle.margin_xsmall
}
visible: !rootPlayer.hasEmbededVideo
onWheel: (wheel) => {
if (rootPlayer.hasEmbededVideo) {
wheel.accepted = false
return
}
wheel.accepted = true
var delta = wheel.angleDelta.y
if (delta === 0)
return
Helpers.applyVolume(Player, delta)
}
ColumnLayout {
anchors.centerIn: parent
spacing: 0
Item {
id: coverItem
Layout.preferredHeight: rootPlayer.height / sizeConstant
Layout.preferredWidth: cover.paintedWidth
Layout.maximumHeight: centerContent.height
Layout.alignment: Qt.AlignHCenter
readonly property real sizeConstant: 2.7182
visible: MainCtx.bgCone
Image {
id: cover
//source aspect ratio
readonly property real sar: paintedWidth / paintedHeight
readonly property int maximumWidth: Helpers.alignUp((Screen.desktopAvailableWidth / coverItem.sizeConstant), 32)
readonly property int maximumHeight: Helpers.alignUp((Screen.desktopAvailableHeight / coverItem.sizeConstant), 32)
readonly property int maximumSize: Math.min(maximumWidth, maximumHeight)
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
source: VLCAccessImage.uri(rootPlayer.coverSource)
fillMode: Image.PreserveAspectFit
mipmap: true
cache: false
asynchronous: true
sourceSize: Qt.size(maximumSize, maximumSize)
Accessible.role: Accessible.Graphic
Accessible.name: qsTr("Cover")
onStatusChanged: {
if (status === Image.Ready)
backgroundImage.scheduleUpdate()
}
// TODO: Qt >= 6.4 Investigate using MultiEffect.
Widgets.DoubleShadow {
anchors.centerIn: parent
sourceItem: parent
cache: false
primaryVerticalOffset: VLCStyle.dp(24)
primaryBlurRadius: VLCStyle.dp(54)
secondaryVerticalOffset: VLCStyle.dp(5)
secondaryBlurRadius: VLCStyle.dp(14)
}
}
}
Widgets.SubtitleLabel {
id: albumLabel
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: VLCStyle.margin_xxlarge
Binding on visible {
delayed: true
when: albumLabel.componentCompleted
value: centerContent.height > (albumLabel.y + albumLabel.height)
}
text: MainPlaylistController.currentItem.album
font.pixelSize: VLCStyle.fontSize_xxlarge
horizontalAlignment: Text.AlignHCenter
color: centerTheme.fg.primary
Accessible.description: qsTr("album")
property bool componentCompleted: false
Component.onCompleted: {
componentCompleted = true
}
}
Widgets.MenuLabel {
id: artistLabel
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: VLCStyle.margin_small
Binding on visible {
delayed: true
when: artistLabel.componentCompleted
value: centerContent.height > (artistLabel.y + artistLabel.height)
}
text: MainPlaylistController.currentItem.artist
font.weight: Font.Light
horizontalAlignment: Text.AlignHCenter
color: centerTheme.fg.primary
Accessible.description: qsTr("artist")
property bool componentCompleted: false
Component.onCompleted: {
componentCompleted = true
}
}
Widgets.NavigableRow {
id: audioControls
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: VLCStyle.margin_large
Binding on visible {
delayed: true
when: audioControls.componentCompleted
value: Player.videoTracks.count === 0 && centerContent.height > (audioControls.y + audioControls.height)
}
focus: visible
spacing: VLCStyle.margin_xxsmall
Navigation.parentItem: rootPlayer
Navigation.upItem: topBar
Navigation.downItem: Player.isInteractive ? toggleControlBarButton : controlBar
property bool componentCompleted: false
Component.onCompleted: {
componentCompleted = true
}
model: ObjectModel {
Widgets.IconToolButton {
text: VLCIcons.skip_back
font.pixelSize: VLCStyle.icon_audioPlayerButton
onClicked: Player.jumpBwd()
description: qsTr("Step back")
}
Widgets.IconToolButton {
text: VLCIcons.visualization
font.pixelSize: VLCStyle.icon_audioPlayerButton
onClicked: Player.toggleVisualization()
description: qsTr("Visualization")
}
Widgets.IconToolButton{
text: VLCIcons.skip_for
font.pixelSize: VLCStyle.icon_audioPlayerButton
onClicked: Player.jumpFwd()
description: qsTr("Step forward")
}
}
}
}
Widgets.SubtitleLabel {
id: labelVolume
anchors.right: parent.right
anchors.top: parent.top
anchors.rightMargin: VLCStyle.margin_normal
anchors.topMargin: VLCStyle.margin_xxsmall
visible: false
text: qsTr("Volume %1%").arg(Math.round(Player.volume * 100))
color: centerTheme.fg.primary
font.weight: Font.Normal
SequentialAnimation {
id: animationVolume
PropertyAction { target: labelVolume; property: "visible"; value: true }
PauseAnimation { duration: VLCStyle.duration_humanMoment }
PropertyAction { target: labelVolume; property: "visible"; value: false }
}
}
}
Widgets.DrawerExt {
id: playlistpopup
......@@ -702,7 +722,7 @@ FocusScope {
id: navBox
visible: Player.isInteractive && navBox.show
&& (interactiveAutoHideTimer.running
|| navBox.hovered || !rootPlayer.hasEmbededVideo)
|| navBox.hovered || !MainCtx.hasEmbededVideo)
x: rootPlayer.x + VLCStyle.margin_normal + VLCStyle.applicationHorizontalMargin
y: controlBar.y - navBox.height - VLCStyle.margin_normal
......@@ -738,7 +758,7 @@ FocusScope {
Widgets.ButtonExt {
id: toggleControlBarButton
visible: Player.isInteractive
&& rootPlayer.hasEmbededVideo
&& MainCtx.hasEmbededVideo
&& !(MainCtx.pinVideoControls && !Player.fullscreen)
&& (interactiveAutoHideTimer.running === true
|| controlBar.state !== "hidden" || toggleControlBarButton.hovered)
......@@ -751,7 +771,7 @@ FocusScope {
iconTxt: controlBar.state === "hidden" ? VLCIcons.expand_inverted : VLCIcons.expand
Navigation.parentItem: rootPlayer
Navigation.upItem: playlistVisibility.isPlaylistVisible ? playlistpopup : (audioControls.visible ? audioControls : topBar)
Navigation.upItem: playlistVisibility.isPlaylistVisible ? playlistpopup : (MainCtx.hasEmbededVideo ? playerSpecializationLoader : topBar)
Navigation.downItem: controlBar
onClicked:{
......@@ -795,8 +815,8 @@ FocusScope {
return playlistpopup
if (Player.isInteractive)
return toggleControlBarButton
if (audioControls.visible)
return audioControls
if (!MainCtx.hasEmbededVideo)
return playerSpecializationLoader
return topBar
}
......@@ -836,7 +856,7 @@ FocusScope {
TapHandler {
acceptedButtons: Qt.RightButton
enabled: !hasEmbededVideo
enabled: !MainCtx.hasEmbededVideo
onTapped: (eventPoint, button) => {
if (button & Qt.RightButton) {
......