Tidy up some things, ACTUALLY fix #14 finally.
This commit is contained in:
parent
0ef0537a31
commit
9b537bc9f5
|
@ -17,6 +17,18 @@ Item {
|
|||
property var progress: progressBar
|
||||
property var controls: controlsBar
|
||||
property var duration: progressBar.to
|
||||
property bool controlsShowing: true
|
||||
|
||||
Connections {
|
||||
target: globalConnections
|
||||
onHideUI: function(force) {
|
||||
controlsBarItem.controlsShowing=false
|
||||
}
|
||||
onShowUI: {
|
||||
controlsBarItem.controlsShowing=true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Component.onCompleted: {
|
||||
setControlsTheme(appearance.themeName)
|
||||
|
@ -103,6 +115,17 @@ Item {
|
|||
}
|
||||
}
|
||||
|
||||
VideoProgress {
|
||||
id: progressBar
|
||||
visible: controlsBarItem.controlsShowing && (appearance.themeName == "RoosterTeeth" ? false : true)
|
||||
anchors.bottom: controlsBackground.top
|
||||
anchors.left: controlsBackground.left
|
||||
anchors.right: controlsBackground.right
|
||||
anchors.bottomMargin: 0
|
||||
bottomPadding: 0
|
||||
z: 20
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: controlsBackground
|
||||
height: controlsBar.visible ? controlsBar.height
|
||||
|
@ -115,7 +138,8 @@ Item {
|
|||
Layout.fillHeight: true
|
||||
color: getAppearanceValueForTheme(appearance.themeName,
|
||||
"mainBackground")
|
||||
visible: controlsOverlay.controlsShowing
|
||||
visible: controlsBarItem.controlsShowing
|
||||
z: 10
|
||||
}
|
||||
|
||||
Item {
|
||||
|
@ -127,15 +151,7 @@ Item {
|
|||
anchors.leftMargin: parent.width / 128
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: 0
|
||||
visible: controlsOverlay.controlsShowing
|
||||
VideoProgress {
|
||||
id: progressBar
|
||||
visible: appearance.themeName == "RoosterTeeth" ? false : true
|
||||
anchors.bottom: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.bottomMargin: 0
|
||||
bottomPadding: 0
|
||||
}
|
||||
visible: controlsBarItem.controlsShowing
|
||||
z: 30
|
||||
}
|
||||
}
|
||||
|
|
|
@ -83,22 +83,6 @@ MenuBar {
|
|||
}
|
||||
}
|
||||
|
||||
LabsPlatform.FileDialog {
|
||||
id: screenshotSaveDialog
|
||||
title: translate.getTranslation("SAVE_SCREENSHOT", i18n.language)
|
||||
fileMode: LabsPlatform.FileDialog.SaveFile
|
||||
defaultSuffix: "png"
|
||||
nameFilters: ["Images (*.png)", "All files (*)"]
|
||||
onAccepted: {
|
||||
player.grabToImage(function (result) {
|
||||
var filepath = String(screenshotSaveDialog.file).replace(
|
||||
"file://", '')
|
||||
result.saveToFile(filepath)
|
||||
subtitlesBar.visible = appearance.useMpvSubs ? false : true
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
LabsPlatform.FileDialog {
|
||||
id: fileDialog
|
||||
title: translate.getTranslation("OPEN_FILE", i18n.language)
|
||||
|
@ -185,31 +169,6 @@ MenuBar {
|
|||
onTriggered: loadDialog.open()
|
||||
shortcut: keybinds.openURI
|
||||
}
|
||||
Action {
|
||||
text: translate.getTranslation("SCREENSHOT", i18n.language)
|
||||
onTriggered: {
|
||||
player.hideControls(true)
|
||||
screenshotSaveDialog.open()
|
||||
}
|
||||
shortcut: keybinds.screenshot
|
||||
}
|
||||
Action {
|
||||
text: translate.getTranslation("SCREENSHOT_WITHOUT_SUBTITLES",
|
||||
i18n.language)
|
||||
onTriggered: {
|
||||
player.hideControls(true)
|
||||
subtitlesBar.visible = false
|
||||
screenshotSaveDialog.open()
|
||||
}
|
||||
shortcut: keybinds.screenshotWithoutSubtitles
|
||||
}
|
||||
Action {
|
||||
text: translate.getTranslation("FULL_SCREENSHOT", i18n.language)
|
||||
onTriggered: {
|
||||
screenshotSaveDialog.open()
|
||||
}
|
||||
shortcut: keybinds.fullScreenshot
|
||||
}
|
||||
Action {
|
||||
text: translate.getTranslation("EXIT", i18n.language)
|
||||
onTriggered: Qt.quit()
|
||||
|
|
|
@ -75,11 +75,14 @@ Item {
|
|||
id: videoProgressRoosterTeeth
|
||||
anchors.left: timeLabel.right
|
||||
anchors.right: speedText.left
|
||||
anchors.leftMargin: parent.width / 128
|
||||
anchors.rightMargin: parent.width / 128
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
height: parent.height
|
||||
to: progressBar.to
|
||||
value: progressBar.value
|
||||
center: true
|
||||
}
|
||||
|
||||
SpeedText {
|
||||
|
|
71
src/qml/UIComponents/MenuTitleBar.qml
Normal file
71
src/qml/UIComponents/MenuTitleBar.qml
Normal file
|
@ -0,0 +1,71 @@
|
|||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Dialogs 1.3
|
||||
import QtQuick.Layouts 1.2
|
||||
import QtQuick.Window 2.2
|
||||
|
||||
Item {
|
||||
id: menuTitleBar
|
||||
height: menuBar.height
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
visible: true
|
||||
|
||||
Connections {
|
||||
target: globalConnections
|
||||
onHideUI: function () {
|
||||
if (!menuBar.anythingOpen()) {
|
||||
menuTitleBar.visible = false
|
||||
}
|
||||
}
|
||||
onShowUI: {
|
||||
menuTitleBar.visible = true
|
||||
}
|
||||
}
|
||||
|
||||
MainMenu {
|
||||
id: menuBar
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: titleBar
|
||||
height: menuBar.height
|
||||
anchors.right: parent.right
|
||||
anchors.left: menuBar.right
|
||||
anchors.top: parent.top
|
||||
color: getAppearanceValueForTheme(appearance.themeName,
|
||||
"mainBackground")
|
||||
|
||||
Text {
|
||||
id: titleLabel
|
||||
objectName: "titleLabel"
|
||||
text: translate.getTranslation("TITLE", i18n.language)
|
||||
color: "white"
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 4
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: 4
|
||||
anchors.top: parent.top
|
||||
font.family: appearance.fontName
|
||||
fontSizeMode: Text.VerticalFit
|
||||
font.pixelSize: appearance.scaleFactor * (height - anchors.topMargin
|
||||
- anchors.bottomMargin - 2)
|
||||
font.bold: true
|
||||
opacity: 1
|
||||
visible: menuTitleBar.visible
|
||||
&& ((!appearance.titleOnlyOnFullscreen)
|
||||
|| (mainWindow.visibility == Window.FullScreen
|
||||
|| mainWindow.visibility == Window.Maximized))
|
||||
Connections {
|
||||
target: player
|
||||
onTitleChanged: function (title) {
|
||||
titleLabel.text = title
|
||||
mainWindow.title = title
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,8 +12,29 @@ Slider {
|
|||
objectName: "progressBar"
|
||||
property string currentMediaURL: ""
|
||||
property bool playing: false
|
||||
property bool center: false
|
||||
to: 1
|
||||
value: 0.0
|
||||
|
||||
Rectangle {
|
||||
id: timestampBox
|
||||
visible: false
|
||||
width: hoverProgressLabel.width
|
||||
height: hoverProgressLabel.height
|
||||
z: 100
|
||||
color: getAppearanceValueForTheme(appearance.themeName,
|
||||
"mainBackground")
|
||||
Text {
|
||||
id: hoverProgressLabel
|
||||
text: "0:00"
|
||||
color: "white"
|
||||
font.family: appearance.fontName
|
||||
font.pixelSize: mainWindow.virtualHeight / 50
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: player
|
||||
onPlayStatusChanged: function (status) {
|
||||
|
@ -50,6 +71,10 @@ Slider {
|
|||
}
|
||||
}
|
||||
function getHandleVisibility(themeName, isMouse) {
|
||||
if (fun.nyanCat) {
|
||||
return true
|
||||
}
|
||||
|
||||
if (appearance.themeName == "Niconico" && isMouse) {
|
||||
return true
|
||||
} else if (appearance.themeName == "Niconico") {
|
||||
|
@ -65,30 +90,30 @@ Slider {
|
|||
anchors.fill: parent
|
||||
|
||||
hoverEnabled: true
|
||||
propagateComposedEvents: false
|
||||
propagateComposedEvents: true
|
||||
acceptedButtons: Qt.NoButton
|
||||
z: 100
|
||||
property string currentTime: ""
|
||||
|
||||
onEntered: previewRect.visible = true
|
||||
onExited: previewRect.visible = false
|
||||
onEntered: timestampBox.visible = true
|
||||
onExited: timestampBox.visible = false
|
||||
|
||||
|
||||
onPositionChanged: {
|
||||
var a = (progressBar.to / progressBar.availableWidth)
|
||||
* (mouseAreaProgressBar.mapToItem(
|
||||
progressBar, mouseAreaProgressBar.mouseX, 0).x - 2)
|
||||
hoverProgressLabel.text = utils.createTimestamp(a)
|
||||
previewRect.x = mouseAreaProgressBar.mapToItem(
|
||||
controlsOverlay, mouseAreaProgressBar.mouseX,
|
||||
0).x - previewRect.width / 2
|
||||
previewRect.y = progressBackground.y - previewRect.height - controlsBar.height * 2
|
||||
timestampBox.x = mouseAreaProgressBar.mouseX - (timestampBox.width / 2)
|
||||
timestampBox.y = progressBackground.y - timestampBox.height * 2
|
||||
}
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: progressBar.center ? (progressBar.height / 2) - (height / 2) : 0
|
||||
id: progressBackground
|
||||
x: progressBar.leftPadding
|
||||
y: progressBar.topPadding + progressBar.availableHeight / 2 - height / 2
|
||||
z: 30
|
||||
width: progressBar.availableWidth
|
||||
height: progressBar.getProgressBarHeight(
|
||||
fun.nyanCat, mouseAreaProgressBar.containsMouse)
|
||||
|
@ -152,9 +177,9 @@ Slider {
|
|||
handle: Rectangle {
|
||||
z: 70
|
||||
id: handleRect
|
||||
x: progressBar.leftPadding + progressBar.visualPosition
|
||||
* (progressBar.availableWidth - width)
|
||||
y: progressBar.topPadding + progressBar.availableHeight / 2 - height / 2
|
||||
x: progressBar.visualPosition * (progressBar.availableWidth - width)
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: progressBar.center ? (progressBar.height / 2) - (height / 2) : -height / 4
|
||||
implicitHeight: radius
|
||||
implicitWidth: radius
|
||||
radius: mainWindow.virtualHeight / 59
|
||||
|
|
115
src/qml/main.qml
115
src/qml/main.qml
|
@ -11,7 +11,7 @@ import "codes.js" as LanguageCodes
|
|||
|
||||
Window {
|
||||
id: mainWindow
|
||||
title: titleLabel.text
|
||||
title: "KittehPlayer"
|
||||
visible: true
|
||||
width: 720
|
||||
height: 480
|
||||
|
@ -24,6 +24,12 @@ Window {
|
|||
id: qmlDebugger
|
||||
}
|
||||
|
||||
Item {
|
||||
id: globalConnections
|
||||
signal showUI()
|
||||
signal hideUI()
|
||||
}
|
||||
|
||||
function getAppearanceValueForTheme(themeName, name) {
|
||||
if (themeName == "YouTube") {
|
||||
return youTubeAppearance[name]
|
||||
|
@ -306,23 +312,19 @@ Window {
|
|||
property bool controlsShowing: true
|
||||
z: 2
|
||||
|
||||
function hideControls(force) {
|
||||
if (!menuBar.anythingOpen() || force) {
|
||||
controlsShowing = false
|
||||
mouseAreaPlayer.cursorShape = Qt.BlankCursor
|
||||
}
|
||||
Connections {
|
||||
target: globalConnections
|
||||
onHideUI: function() {
|
||||
mouseAreaPlayer.cursorShape = Qt.BlankCursor
|
||||
}
|
||||
onShowUI: {
|
||||
mouseAreaPlayer.cursorShape = Qt.ArrowCursor
|
||||
}
|
||||
}
|
||||
|
||||
function showControls() {
|
||||
if (!controlsShowing) {
|
||||
controlsShowing = true
|
||||
mouseAreaPlayer.cursorShape = Qt.ArrowCursor
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseAreaBar
|
||||
|
||||
width: parent.width
|
||||
height: (controlsBar.controls.height * 2) + controlsBar.progress.height
|
||||
anchors.bottom: parent.bottom
|
||||
|
@ -344,9 +346,11 @@ Window {
|
|||
anchors.rightMargin: 0
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 0
|
||||
anchors.top: titleBar.bottom
|
||||
anchors.top: topBar.bottom
|
||||
anchors.topMargin: 0
|
||||
hoverEnabled: true
|
||||
propagateComposedEvents: true
|
||||
|
||||
|
||||
Timer{
|
||||
id: mouseTapTimer
|
||||
|
@ -392,11 +396,11 @@ Window {
|
|||
running: true
|
||||
repeat: false
|
||||
onTriggered: {
|
||||
controlsOverlay.hideControls()
|
||||
globalConnections.hideUI()
|
||||
}
|
||||
}
|
||||
onPositionChanged: {
|
||||
controlsOverlay.showControls()
|
||||
globalConnections.showUI()
|
||||
mouseAreaPlayerTimer.restart()
|
||||
}
|
||||
}
|
||||
|
@ -404,12 +408,10 @@ Window {
|
|||
Timer {
|
||||
id: statsUpdater
|
||||
interval: 1000
|
||||
running: true
|
||||
running: statsForNerdsText.visible
|
||||
repeat: true
|
||||
onTriggered: {
|
||||
if (statsForNerdsText.visible) {
|
||||
statsForNerdsText.text = player.getStats()
|
||||
}
|
||||
statsForNerdsText.text = player.getStats()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -435,81 +437,12 @@ Window {
|
|||
}
|
||||
}
|
||||
|
||||
MainMenu {
|
||||
id: menuBar
|
||||
visible: controlsOverlay.controlsShowing
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: titleBar
|
||||
height: menuBar.height
|
||||
anchors.right: parent.right
|
||||
anchors.left: menuBar.right
|
||||
anchors.top: parent.top
|
||||
visible: controlsOverlay.controlsShowing
|
||||
|
||||
color: getAppearanceValueForTheme(appearance.themeName,
|
||||
"mainBackground")
|
||||
|
||||
Text {
|
||||
id: titleLabel
|
||||
objectName: "titleLabel"
|
||||
text: translate.getTranslation("TITLE", i18n.language)
|
||||
color: "white"
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 4
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: 4
|
||||
anchors.top: parent.top
|
||||
font.family: appearance.fontName
|
||||
fontSizeMode: Text.VerticalFit
|
||||
font.pixelSize: appearance.scaleFactor
|
||||
* (height - anchors.topMargin - anchors.bottomMargin - 2)
|
||||
font.bold: true
|
||||
opacity: 1
|
||||
visible: controlsOverlay.controlsShowing
|
||||
&& ((!appearance.titleOnlyOnFullscreen)
|
||||
|| (mainWindow.visibility == Window.FullScreen
|
||||
|| mainWindow.visibility == Window.Maximized))
|
||||
Connections {
|
||||
target: player
|
||||
onTitleChanged: function (title) {
|
||||
titleLabel.text = title
|
||||
}
|
||||
}
|
||||
}
|
||||
MenuTitleBar {
|
||||
id: topBar
|
||||
}
|
||||
|
||||
ControlsBar {
|
||||
id: controlsBar
|
||||
Item {
|
||||
id: previewRect
|
||||
z: 80
|
||||
visible: false
|
||||
width: hoverProgressLabel.width
|
||||
|
||||
Rectangle {
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
width: hoverProgressLabel.width
|
||||
height: hoverProgressLabel.height
|
||||
z: 100
|
||||
color: getAppearanceValueForTheme(appearance.themeName,
|
||||
"mainBackground")
|
||||
Text {
|
||||
id: hoverProgressLabel
|
||||
text: "0:00"
|
||||
color: "white"
|
||||
font.family: appearance.fontName
|
||||
font.pixelSize: mainWindow.virtualHeight / 50
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<file>YouTubeButtonLayout.qml</file>
|
||||
<file>NiconicoButtonLayout.qml</file>
|
||||
<file>RoosterTeethButtonLayout.qml</file>
|
||||
<file alias="MenuTitleBar.qml">UIComponents/MenuTitleBar.qml</file>
|
||||
<file alias="SmoothButton.qml">UIComponents/SmoothButton.qml</file>
|
||||
<file alias="ButtonImage.qml">UIComponents/ButtonImage.qml</file>
|
||||
<file alias="VerticalVolume.qml">UIComponents/VerticalVolume.qml</file>
|
||||
|
|
Loading…
Reference in a new issue