Warning, /multimedia/kdenlive/src/timeline2/view/qml/RulerZone.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2021 Jean-Baptiste Mardelle
0003 
0004     SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 import QtQuick 2.15
0008 import QtQuick.Controls 2.15
0009 
0010 // monitor zone
0011 Rectangle {
0012     id: rzone
0013     property int frameIn: 0
0014     property int frameOut: 0
0015     x:  frameIn * timeline.scaleFactor
0016     width: (frameOut - frameIn) * timeline.scaleFactor
0017     visible: frameOut > frameIn
0018     Rectangle {
0019         anchors.left: parent.left
0020         height: parent.height
0021         width: 2
0022         color: 'white'
0023         opacity: 0.5
0024     }
0025     Rectangle {
0026         anchors.right: parent.right
0027         height: parent.height
0028         width: 2
0029         color: 'white'
0030         opacity: 0.5
0031     }
0032     
0033     
0034     Rectangle {
0035         id: centerDrag
0036         anchors.centerIn: parent
0037         height: parent.height
0038         width: height
0039         color: moveMouseArea.containsMouse || moveMouseArea.drag.active ? 'white' : 'transparent'
0040         border.color: 'white'
0041         border.width: 1.5
0042         opacity: 0.5
0043         Drag.active: moveMouseArea.drag.active
0044         Drag.proposedAction: Qt.MoveAction
0045         MouseArea {
0046             id: moveMouseArea
0047             anchors.left: parent.left
0048             anchors.top: parent.top
0049             width: parent.width
0050             height: parent.height
0051             hoverEnabled: true
0052             drag.axis: Drag.XAxis
0053             drag.smoothed: false
0054             property var startZone
0055             onPressed: {
0056                 startZone = Qt.point(frameIn, frameOut)
0057                 anchors.left= undefined
0058             }
0059             onEntered: {
0060                 resizeActive = true
0061             }
0062             onExited: {
0063                 if (!pressed) {
0064                     resizeActive = false
0065                 }
0066             }
0067             onReleased: {
0068                 updateZone(startZone, Qt.point(frameIn, frameOut), true)
0069                 resizeActive = false
0070                 anchors.left= parent.left
0071             }
0072             onPositionChanged: mouse => {
0073                 if (mouse.buttons === Qt.LeftButton) {
0074                     resizeActive = true
0075                     var offset = Math.round(mouseX/ timeline.scaleFactor)
0076                     if (offset != 0) {
0077                         var newPos = Math.max(0, controller.suggestSnapPoint(frameIn + offset,mouse.modifiers & Qt.ShiftModifier ? -1 : root.snapping))
0078                         if (newPos == frameIn + offset) {
0079                             // No snap at start, check end
0080                             var newPos = Math.max(0, controller.suggestSnapPoint(frameOut + offset,mouse.modifiers & Qt.ShiftModifier ? -1 : root.snapping))
0081                             if (newPos == frameOut + offset) {
0082                                 newPos = frameIn + offset
0083                             } else {
0084                                 newPos = frameIn + (newPos - frameOut)
0085                             }
0086                         }
0087                         if (newPos < 0) {
0088                             newPos = frameIn + offset;
0089                         }
0090                         frameOut += newPos - frameIn
0091                         frameIn = newPos
0092                     }
0093                 }
0094             }
0095         }
0096     }
0097     // Zone frame indicator
0098     Rectangle {
0099         visible: trimInMouseArea.drag.active || trimInMouseArea.containsMouse
0100         width: inLabel.contentWidth + 4
0101         height: inLabel.contentHeight
0102         anchors.bottom: rzone.top
0103         color: activePalette.highlight
0104         Label {
0105             id: inLabel
0106             anchors.fill: parent
0107             horizontalAlignment: Text.AlignHCenter
0108             text: timeline.timecode(frameIn)
0109             font: miniFont
0110             color: activePalette.highlightedText
0111         }
0112     }
0113     Rectangle {
0114         visible: trimOutMouseArea.drag.active || trimOutMouseArea.containsMouse
0115         width: outLabel.contentWidth + 4
0116         height: outLabel.contentHeight
0117         anchors.bottom: rzone.top
0118         color: activePalette.highlight
0119         x: rzone.width - (outLabel.contentWidth + 4)
0120         Label {
0121             id: outLabel
0122             anchors.fill: parent
0123             horizontalAlignment: Text.AlignHCenter
0124             text: timeline.timecode(frameOut)
0125             font: miniFont
0126             color: activePalette.highlightedText
0127         }
0128     }
0129     Rectangle {
0130         id: durationRect
0131         anchors.bottom: rzone.top
0132         visible: (!useTimelineRuler && moveMouseArea.containsMouse && !moveMouseArea.pressed) || ((useTimelineRuler || trimInMouseArea.drag.active || trimOutMouseArea.drag.active) && showZoneLabels && parent.width > 3 * width) || (useTimelineRuler && !trimInMouseArea.drag.active && !trimOutMouseArea.drag.active)
0133         anchors.horizontalCenter: parent.horizontalCenter
0134         width: durationLabel.contentWidth + 4
0135         height: durationLabel.contentHeight
0136         color: activePalette.highlight
0137         Label {
0138             id: durationLabel
0139             anchors.fill: parent
0140             horizontalAlignment: Text.AlignHCenter
0141             text: timeline.timecode(frameOut - frameIn)
0142             font: miniFont
0143             color: activePalette.highlightedText
0144         }
0145     }
0146     Rectangle {
0147             id: trimIn
0148             anchors.left: parent.left
0149             anchors.leftMargin: 0
0150             height: parent.height
0151             width: 5
0152             color: 'lawngreen'
0153             opacity: 0
0154             Drag.active: trimInMouseArea.drag.active
0155             Drag.proposedAction: Qt.MoveAction
0156 
0157             MouseArea {
0158                 id: trimInMouseArea
0159                 anchors.fill: parent
0160                 hoverEnabled: true
0161                 drag.target: parent
0162                 drag.axis: Drag.XAxis
0163                 drag.smoothed: false
0164                 property var startZone
0165                 onEntered: {
0166                     resizeActive = true
0167                     parent.opacity = 1
0168                 }
0169                 onExited: {
0170                     resizeActive = false
0171                     parent.opacity = 0
0172                 }
0173                 onPressed: {
0174                     parent.anchors.left = undefined
0175                     parent.opacity = 1
0176                     startZone = Qt.point(frameIn, frameOut)
0177                 }
0178                 onReleased: {
0179                     resizeActive = false
0180                     parent.anchors.left = rzone.left
0181                     updateZone(startZone, Qt.point(frameIn, frameOut), true)
0182                 }
0183                 onPositionChanged: mouse => {
0184                     if (mouse.buttons === Qt.LeftButton) {
0185                         resizeActive = true
0186                         var newPos = controller.suggestSnapPoint(frameIn + Math.round(trimIn.x / timeline.scaleFactor), mouse.modifiers & Qt.ShiftModifier ? -1 : root.snapping)
0187                         if (newPos < 0) {
0188                             newPos = 0
0189                         }
0190                         frameIn = frameOut > -1 ? Math.min(newPos, frameOut - 1) : newPos
0191                     }
0192                 }
0193             }
0194         }
0195         Rectangle {
0196             id: trimOut
0197             anchors.right: parent.right
0198             anchors.rightMargin: 0
0199             height: parent.height
0200             width: 5
0201             color: 'darkred'
0202             opacity: 0
0203             Drag.active: trimOutMouseArea.drag.active
0204             Drag.proposedAction: Qt.MoveAction
0205 
0206             MouseArea {
0207                 id: trimOutMouseArea
0208                 anchors.fill: parent
0209                 hoverEnabled: true
0210                 drag.target: parent
0211                 drag.axis: Drag.XAxis
0212                 drag.smoothed: false
0213                 property var startZone
0214                 onEntered: {
0215                     resizeActive = true
0216                     parent.opacity = 1
0217                 }
0218                 onExited: {
0219                     resizeActive = false
0220                     parent.opacity = 0
0221                 }
0222                 onPressed: {
0223                     parent.anchors.right = undefined
0224                     parent.opacity = 1
0225                     startZone = Qt.point(frameIn, frameOut)
0226                 }
0227                 onReleased: {
0228                     resizeActive = false
0229                     parent.anchors.right = rzone.right
0230                     updateZone(startZone, Qt.point(frameIn, frameOut), true)
0231                 }
0232                 onPositionChanged: mouse => {
0233                     if (mouse.buttons === Qt.LeftButton) {
0234                         resizeActive = true
0235                         frameOut = Math.max(controller.suggestSnapPoint(frameIn + Math.round((trimOut.x + trimOut.width) / timeline.scaleFactor), mouse.modifiers & Qt.ShiftModifier ? -1 : root.snapping), frameIn + 1)
0236                     }
0237                 }
0238             }
0239         }
0240 }
0241 
0242