[vlc-commits] [Git][videolan/vlc][master] 5 commits: qml/Player: Add the 'applyMenu' function

Steve Lhomme (@robUx4) gitlab at videolan.org
Fri Sep 9 11:53:03 UTC 2022



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
42cefbca by Benjamin Arnaud at 2022-09-09T11:26:42+00:00
qml/Player: Add the 'applyMenu' function

- - - - -
7247f1ae by Benjamin Arnaud at 2022-09-09T11:26:42+00:00
qml/LangButton: Update to 'Player.applyMenu'

- - - - -
9f1abc57 by Benjamin Arnaud at 2022-09-09T11:26:42+00:00
qml: Create ControlButtonPopup

- - - - -
94d5ad6e by Benjamin Arnaud at 2022-09-09T11:26:42+00:00
qml/PlaybackSpeedButton: Update to ControlButtonPopup

- - - - -
3de5b7f1 by Benjamin Arnaud at 2022-09-09T11:26:42+00:00
qml/TeletextButton: Update to ControlButtonPopup

- - - - -


7 changed files:

- modules/gui/qt/Makefile.am
- modules/gui/qt/player/qml/Player.qml
- + modules/gui/qt/player/qml/controlbarcontrols/ControlButtonPopup.qml
- modules/gui/qt/player/qml/controlbarcontrols/LangButton.qml
- modules/gui/qt/player/qml/controlbarcontrols/PlaybackSpeedButton.qml
- modules/gui/qt/player/qml/controlbarcontrols/TeletextButton.qml
- modules/gui/qt/vlc.qrc


Changes:

=====================================
modules/gui/qt/Makefile.am
=====================================
@@ -883,6 +883,7 @@ libqt_plugin_la_QML = \
 	gui/qt/player/qml/controlbarcontrols/BookmarkButton.qml \
 	gui/qt/player/qml/controlbarcontrols/ChapterNextButton.qml \
 	gui/qt/player/qml/controlbarcontrols/ChapterPreviousButton.qml \
+	gui/qt/player/qml/controlbarcontrols/ControlButtonPopup.qml \
 	gui/qt/player/qml/controlbarcontrols/DvdMenuButton.qml \
 	gui/qt/player/qml/controlbarcontrols/ExpandingSpacerWidget.qml \
 	gui/qt/player/qml/controlbarcontrols/ExtendedSettingsButton.qml \


=====================================
modules/gui/qt/player/qml/Player.qml
=====================================
@@ -103,6 +103,19 @@ FocusScope {
             toolbarAutoHide.setVisibleControlBar(true)
     }
 
+    // Functions
+
+    function applyMenu(menu) {
+        if (rootPlayer.menu === menu)
+            return
+
+        // NOTE: When applying a new menu we hide the previous one.
+        if (menu)
+            dismiss()
+
+        rootPlayer.menu = menu
+    }
+
     function dismiss() {
         if ((typeof menu === undefined) || !menu)
             return
@@ -117,6 +130,8 @@ FocusScope {
         console.assert(_lockAutoHide >= 0)
     }
 
+    // Private
+
     function _onNavigationCancel() {
         if (rootPlayer.hasEmbededVideo && controlBarView.state === "visible") {
             toolbarAutoHide.setVisibleControlBar(false)


=====================================
modules/gui/qt/player/qml/controlbarcontrols/ControlButtonPopup.qml
=====================================
@@ -0,0 +1,150 @@
+/*****************************************************************************
+ * Copyright (C) 2019 VLC authors and VideoLAN
+ *
+ * Authors: Benjamin Arnaud <bunjee at omega.gg>
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+import QtQuick 2.11
+import QtQuick.Controls 2.4
+
+import org.videolan.vlc 0.1
+
+import "qrc:///style/"
+import "qrc:///widgets/" as Widgets
+import "qrc:///util/Helpers.js" as Helpers
+
+Widgets.IconControlButton {
+    // Properties
+
+    // Private
+
+    readonly property bool _isCurrentViewPlayer: (History.current.name === "player")
+
+    // Aliases
+
+    property alias popupContent: popup.contentItem
+
+    property alias popup: popup
+
+    // Signals
+
+    signal requestLockUnlockAutoHide(bool lock)
+
+    // Settings
+
+    color: (popup.visible) ? colors.accent : colors.playerControlBarFg
+
+    // FIXME: We can't use upItem because a Popup is not an Item.
+    Navigation.upAction: function() {
+        if (popup.visible) {
+            popup.forceActiveFocus(Qt.TabFocusReason)
+
+            return
+        }
+
+        var parent = Navigation.parentItem;
+
+        if (parent)
+            parent.Navigation.defaultNavigationUp()
+    }
+
+    // Events
+
+    onClicked: popup.open()
+
+    // Connections
+
+    Connections {
+        target: (popup.visible) ? popup.parent : null
+
+        onWidthChanged: _updatePosition()
+        onHeightChanged: _updatePosition()
+    }
+
+    // Functions
+
+    // Private
+
+    // NOTE: coordinates are based on the popup parent view.
+    function _updatePosition() {
+        var parent = popup.parent
+
+        var position = parent.mapFromItem(root, x, y)
+
+        var popupX = Math.round(position.x - ((popup.width - width) / 2))
+
+        var minimum = VLCStyle.applicationHorizontalMargin + VLCStyle.margin_xxsmall
+
+        var maximum = parent.width - popup.width - minimum
+
+        popup.x = Helpers.clamp(popupX, minimum, maximum)
+
+        popup.y = position.y - popup.height - VLCStyle.margin_xxsmall
+    }
+
+    // Children
+
+    Popup {
+        id: popup
+
+        parent: (root._isCurrentViewPlayer) ? rootPlayer : g_root
+
+        padding: VLCStyle.margin_small
+
+        z: 1
+
+        focus: true
+
+        modal: true
+
+        // NOTE: Popup.CloseOnPressOutside doesn't work with non-model Popup on Qt < 5.15.
+        closePolicy: (Popup.CloseOnPressOutside | Popup.CloseOnEscape)
+
+        Overlay.modal: null
+
+        // Events
+
+        onOpened: {
+            root._updatePosition()
+
+            root.requestLockUnlockAutoHide(true)
+
+            if (root._isCurrentViewPlayer)
+                rootPlayer.applyMenu(popup)
+        }
+
+        onClosed: {
+            root.requestLockUnlockAutoHide(false)
+
+            root.forceActiveFocus()
+
+            if (root._isCurrentViewPlayer)
+                rootPlayer.applyMenu(null)
+        }
+
+        onWidthChanged: if (visible) root._updatePosition()
+        onHeightChanged: if (visible) root._updatePosition()
+
+        background: Rectangle {
+            radius: VLCStyle.dp(8, VLCStyle.scale)
+
+            opacity: 0.85
+
+            color: colors.bg
+        }
+    }
+}


=====================================
modules/gui/qt/player/qml/controlbarcontrols/LangButton.qml
=====================================
@@ -52,14 +52,14 @@ Widgets.IconControlButton {
             onOpened: {
                 langBtn.requestLockUnlockAutoHide(true)
                 if (!!rootPlayer)
-                    rootPlayer.menu = menu
+                    rootPlayer.applyMenu(menu)
             }
 
             onClosed: {
                 langBtn.requestLockUnlockAutoHide(false)
                 langBtn.forceActiveFocus()
                 if (!!rootPlayer)
-                    rootPlayer.menu = undefined
+                    rootPlayer.applyMenu(null)
             }
         }
     }


=====================================
modules/gui/qt/player/qml/controlbarcontrols/PlaybackSpeedButton.qml
=====================================
@@ -17,126 +17,34 @@
  *****************************************************************************/
 
 import QtQuick 2.11
-import QtQuick.Controls 2.4
 import QtQuick.Templates 2.4 as T
 
 import org.videolan.vlc 0.1
 
-import "qrc:///widgets/" as Widgets
 import "qrc:///style/"
 import "qrc:///player/" as P
-import "qrc:///util/Helpers.js" as Helpers
 
-Widgets.IconControlButton {
+ControlButtonPopup {
     id: root
 
-    signal requestLockUnlockAutoHide(bool lock)
-
-    readonly property bool _isCurrentViewPlayer: !paintOnly && (History.current.name === "player")
+    popup.width: VLCStyle.dp(256, VLCStyle.scale)
 
     text: I18n.qtr("Playback Speed")
 
-    color: (popup.visible) ? colors.accent : colors.playerControlBarFg
-
-    // FIXME: We can't use upItem because a Popup is not an Item.
-    Navigation.upAction: function() {
-        if (popup.visible) {
-            popup.forceActiveFocus(Qt.TabFocusReason)
+    popupContent: P.PlaybackSpeed {
+        colors: root.colors
 
-            return
-        }
+        Navigation.parentItem: root
 
-        var parent = Navigation.parentItem;
-
-        if (parent)
-            parent.Navigation.defaultNavigationUp()
+        // NOTE: Mapping the right direction because the down action triggers the ComboBox.
+        Navigation.rightItem: root
     }
 
-    onClicked: popup.open()
-
-    Popup {
-        id: popup
-
-        parent: root.paintOnly
-                ? root // button is not part of main display (ToolbarEditorDialog)
-                : root._isCurrentViewPlayer ? rootPlayer : g_root
-
-        width: VLCStyle.dp(256, VLCStyle.scale)
-        height: implicitHeight
-
-        padding: VLCStyle.margin_small
-
-        z: 1
-
-        focus: true
-
-        // Popup.CloseOnPressOutside doesn't work with non-model Popup on Qt < 5.15
-        closePolicy: Popup.CloseOnPressOutside | Popup.CloseOnEscape
-
-        modal: true
-
-        onOpened: {
-            // update popup coordinates
-            //
-            // mapFromItem is affected by various properties of source and target objects which
-            // can't be represented in a binding expression so a initial setting in object
-            // definition (x: clamp(...)) doesn't work, so we set x and y on initial open
-            x = Qt.binding(function () {
-                // coords are mapped through root.parent so that binding is
-                // generated based on root.x
-                var position = parent.mapFromItem(root.parent, root.x, 0)
-
-                var minimum = VLCStyle.margin_xxsmall + VLCStyle.applicationHorizontalMargin
-
-                var maximum = parent.width - VLCStyle.applicationHorizontalMargin
-                               - VLCStyle.margin_xxsmall - width
-
-                return Helpers.clamp(position.x - ((width - root.width) / 2), minimum, maximum)
-            })
-
-            y = Qt.binding(function () {
-                // coords are mapped through root.parent so that binding is
-                // generated based on root.y
-                var position = parent.mapFromItem(root.parent, 0, root.y)
-
-                return position.y - popup.height - VLCStyle.margin_xxsmall
-            })
-
-            // player related --
-            root.requestLockUnlockAutoHide(true)
-
-            if (root._isCurrentViewPlayer)
-                rootPlayer.menu = popup
-        }
-
-        onClosed: {
-            root.requestLockUnlockAutoHide(false)
-
-            root.forceActiveFocus()
-
-            if (root._isCurrentViewPlayer)
-                rootPlayer.menu = undefined
-        }
-
-        Overlay.modal: null
-
-        background: Rectangle {
-            color: colors.bg
-            opacity: .85
-        }
-
-        contentItem: P.PlaybackSpeed {
-            colors: root.colors
-
-            Navigation.parentItem: root
-
-            // NOTE: Mapping the right direction because the down action triggers the ComboBox.
-            Navigation.rightItem: root
-        }
-    }
+    // Children
 
     T.Label {
         anchors.centerIn: parent
+
         font.pixelSize: VLCStyle.fontSize_normal
 
         text: !root.paintOnly ? I18n.qtr("%1x").arg(+Player.rate.toFixed(2))


=====================================
modules/gui/qt/player/qml/controlbarcontrols/TeletextButton.qml
=====================================
@@ -24,24 +24,10 @@ import QtQuick.Controls 2.4
 import org.videolan.vlc 0.1
 
 import "qrc:///style/"
-import "qrc:///widgets/" as Widgets
-import "qrc:///util/Helpers.js" as Helpers
 
-Widgets.IconControlButton {
+ControlButtonPopup {
     id: root
 
-    // Signals
-
-    signal requestLockUnlockAutoHide(bool lock)
-
-    // Properties
-
-    // Private
-
-    readonly property bool _isCurrentViewPlayer: (paintOnly === false
-                                                  &&
-                                                  History.current.name === "player")
-
     // Settings
 
     enabled: Player.isTeletextAvailable
@@ -50,111 +36,10 @@ Widgets.IconControlButton {
 
     text: I18n.qtr("Teletext")
 
-    color: (popup.visible) ? colors.accent : colors.playerControlBarFg
-
-    // FIXME: We can't use upItem because a Popup is not an Item.
-    Navigation.upAction: function() {
-        if (popup.visible) {
-            popup.forceActiveFocus(Qt.TabFocusReason)
-
-            return
-        }
-
-        var parent = Navigation.parentItem;
-
-        if (parent)
-            parent.Navigation.defaultNavigationUp()
-    }
-
-    // Events
-
-    onClicked: popup.open()
-
-    // Connections
-
-    Connections {
-        target: (popup.visible) ? popup.parent : null
-
-        onWidthChanged: _updatePosition()
-        onHeightChanged: _updatePosition()
-    }
-
-    // Functions
-
-    // Private
-
-    function _updatePosition() {
-        var parent = popup.parent
-
-        var position = parent.mapFromItem(root, x, y)
-
-        var popupX = Math.round(position.x - ((popup.width - width) / 2))
-
-        var minimum = VLCStyle.applicationHorizontalMargin + VLCStyle.margin_xxsmall
-
-        var maximum = parent.width - popup.width - minimum
-
-        popup.x = Helpers.clamp(popupX, minimum, maximum)
-
-        popup.y = position.y - popup.height - VLCStyle.margin_xxsmall
-    }
-
-    // Children
-
-    Popup {
-        id: popup
-
-        parent: (root._isCurrentViewPlayer) ? rootPlayer : g_root
-
-        width: VLCStyle.dp(256, VLCStyle.scale)
-        height: implicitHeight
-
-        padding: VLCStyle.margin_small
-
-        z: 1
-
-        focus: true
-
-        modal: true
-
-        // NOTE: Popup.CloseOnPressOutside doesn't work with non-model Popup on Qt < 5.15.
-        closePolicy: (Popup.CloseOnPressOutside | Popup.CloseOnEscape)
-
-        Overlay.modal: null
-
-        onOpened: {
-            root._updatePosition()
-
-            root.requestLockUnlockAutoHide(true)
-
-            if (root._isCurrentViewPlayer)
-                rootPlayer.menu = popup
-        }
-
-        onClosed: {
-            root.requestLockUnlockAutoHide(false)
-
-            root.forceActiveFocus()
-
-            if (root._isCurrentViewPlayer)
-                rootPlayer.menu = undefined
-        }
-
-        onWidthChanged: if (visible) root._updatePosition()
-        onHeightChanged: if (visible) root._updatePosition()
-
-        background: Rectangle {
-            opacity: 0.85
-
-            color: colors.bg
-        }
-
-        contentItem: TeletextWidget {
-            colors: root.colors
-
-            Navigation.parentItem: root
+    popupContent: TeletextWidget {
+        colors: root.colors
 
-            Navigation.downItem: root
-        }
+        Navigation.parentItem: root
+        Navigation.downItem: root
     }
 }


=====================================
modules/gui/qt/vlc.qrc
=====================================
@@ -316,6 +316,7 @@
         <file alias="BookmarkButton.qml">player/qml/controlbarcontrols/BookmarkButton.qml</file>
         <file alias="ChapterNextButton.qml">player/qml/controlbarcontrols/ChapterNextButton.qml</file>
         <file alias="ChapterPreviousButton.qml">player/qml/controlbarcontrols/ChapterPreviousButton.qml</file>
+        <file alias="ControlButtonPopup.qml">player/qml/controlbarcontrols/ControlButtonPopup.qml</file>
         <file alias="DvdMenuButton.qml">player/qml/controlbarcontrols/DvdMenuButton.qml</file>
         <file alias="ExpandingSpacerWidget.qml">player/qml/controlbarcontrols/ExpandingSpacerWidget.qml</file>
         <file alias="ExtendedSettingsButton.qml">player/qml/controlbarcontrols/ExtendedSettingsButton.qml</file>



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/28e2f45929eb9f8ccb2d86f44cbc66fa3abc14d0...3de5b7f1ee932d2b61235ebe6490c31da7727548

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/28e2f45929eb9f8ccb2d86f44cbc66fa3abc14d0...3de5b7f1ee932d2b61235ebe6490c31da7727548
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list