Warning, /system/mycroft-gui/import/qml/MarqueeText.qml is written in an unsupported language. File is not indexed.

0001 import QtQuick 2.15
0002 import QtQuick.Controls 2.15
0003 
0004 Item {
0005     id: control
0006     property alias color: marqueeText.color
0007     property alias text: rtlDetector.text
0008     property alias font: marqueeText.font
0009     property alias minimumPointSize: marqueeText.minimumPointSize
0010     property alias minimumPixelSize: marqueeText.minimumPixelSize
0011     property alias fontSizeMode: marqueeText.fontSizeMode
0012     property alias verticalAlignment: marqueeText.verticalAlignment
0013     property alias paintedWidth: marqueeText.paintedWidth
0014     property int speed: 4000
0015     property int delay: 4000
0016     property var marqueeWidth: width
0017     property bool rightToLeft: false
0018     property int distance: marqueeWidth / 2
0019 
0020     onWidthChanged: {
0021         marqueeWidth = width
0022         reset()
0023     }
0024 
0025     function reset() {
0026         if(marqueeAnimator.running) {
0027             marqueeAnimator.stop()
0028             marqueeText.width = control.marqueeWidth
0029             marqueeText.x = control.x
0030             coverText.width = marqueeText.width
0031             coverText.x = marqueeText.width
0032             marqueeAnimator.start()
0033         } else {
0034             marqueeAnimator.start()
0035         }
0036         marqueeAnimator.start()
0037         marqueeText.enabled = false
0038         marqueeText.enabled = true
0039     }
0040 
0041     Text {
0042         id: rtlDetector
0043         visible: false
0044         width: parent.width
0045 
0046         onHorizontalAlignmentChanged: {
0047             if(rtlDetector.horizontalAlignment == Text.AlignRight) {
0048                 leftToRight = true;
0049             }
0050         }
0051     }
0052 
0053     Text {
0054         id: marqueeText;
0055         horizontalAlignment: Text.AlignHLeft
0056         verticalAlignment: Text.AlignVCenter
0057         height: parent.height
0058         width: parent.width
0059         elide: Text.ElideNone
0060         text: rtlDetector.text
0061         visible: x < parent.width ? 1 : 0
0062     }
0063 
0064     Text {
0065         id: coverText;
0066         horizontalAlignment: marqueeText.horizontalAlignment
0067         verticalAlignment: marqueeText.verticalAlignment
0068         height: marqueeText.height
0069         width: marqueeText.width
0070         elide: marqueeText.elide
0071         x: marqueeText.x - marqueeText.width
0072         font: marqueeText.font
0073         color: marqueeText.color
0074         text: marqueeText.text
0075         minimumPointSize: marqueeText.minimumPointSize
0076         minimumPixelSize: marqueeText.minimumPixelSize
0077         fontSizeMode: marqueeText.fontSizeMode
0078         opacity: 0
0079     }
0080 
0081     SequentialAnimation {
0082         id: marqueeAnimator
0083         loops: Animation.Infinite
0084         running: false
0085 
0086         PropertyAnimation {
0087             id: marqueeAnimatorDelayAnimator
0088             target: marqueeText
0089             property: "opacity"
0090             from: 1
0091             to: 1
0092             duration: control.delay
0093         }
0094 
0095         ScriptAction {
0096             script: coverText.opacity = 1
0097         }
0098 
0099         ParallelAnimation {
0100             PropertyAnimation {
0101                 target: marqueeText
0102                 property: "x"
0103                 from: 0
0104                 to: !rightToLeft ? (control.x + marqueeText.paintedWidth) + distance : (control.x - marqueeText.paintedWidth) - distance
0105                 duration: speed
0106             }
0107 
0108             PropertyAnimation {
0109                 target: coverText
0110                 property: "x"
0111                 from: !rightToLeft ? (control.x - marqueeText.paintedWidth) - distance  : (control.x + marqueeText.paintedWidth) + distance
0112                 to: marqueeText.x
0113                 duration: speed
0114             }
0115         }
0116     }
0117 }