diff options
Diffstat (limited to 'GUIModel/Meter')
-rw-r--r-- | GUIModel/Meter/ChargeGuage.qml | 272 | ||||
-rw-r--r-- | GUIModel/Meter/DigitalSpeed.qml | 302 | ||||
-rw-r--r-- | GUIModel/Meter/Mask.qml | 145 | ||||
-rw-r--r-- | GUIModel/Meter/Meter.qml | 169 | ||||
-rw-r--r-- | GUIModel/Meter/Ready.qml | 138 | ||||
-rw-r--r-- | GUIModel/Meter/Ring.qml | 142 | ||||
-rw-r--r-- | GUIModel/Meter/Sideline.qml | 166 | ||||
-rw-r--r-- | GUIModel/Meter/SpeedGuage.qml | 284 | ||||
-rw-r--r-- | GUIModel/Meter/SpeedNeedle.qml | 293 | ||||
-rw-r--r-- | GUIModel/Meter/Tachometer.qml | 142 |
10 files changed, 2053 insertions, 0 deletions
diff --git a/GUIModel/Meter/ChargeGuage.qml b/GUIModel/Meter/ChargeGuage.qml new file mode 100644 index 0000000..7331727 --- /dev/null +++ b/GUIModel/Meter/ChargeGuage.qml @@ -0,0 +1,272 @@ +/* + * Copyright (c) 2020,2021 Panasonic Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +import QtQuick 2.14 +import QtGraphicalEffects 1.14 + +Item { + id: chargeGuage + x:666 + y:97 + width:588 + height:588 + property real chargeValue + + readonly property real chargeGuageMax: 100 + readonly property real chargeGuageMin: 0 + + onChargeValueChanged: { + limitChargeValue(); + effectChr.angleBase = (-0.45 * chargeValue*Math.PI/180)+effectChr.angle + } + + Connections{ + target: rootItem + onTransNormalToAdas:{ + normalToAdasAnimation.start() + } + + onTransAdasToMap:{ + /**/ + } + + onTransMapToNormal:{ + mapToNormalAnimation.start() + } + } + + function limitChargeValue(){ + if(chargeValue > chargeGuageMax){ + chargeValue = chargeGuageMax + }else if(chargeValue < chargeGuageMin){ + chargeValue = chargeGuageMin + } + } + + Item{ + id: chrGuageGroup + width:588 + height:588 + Item { + id: chrGuage + width:588 + height:588 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + visible: false + Image{ + id: chrGuageImg + source: "qrc:/Images/NormalView/METER/charge_guage.ktx" + width:588 + height:588 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + visible: true + } + Image { + id: chrEffect + source: "" + width:588 + height:588 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + visible: true + } + } + ShaderEffect{ + id: effectChr + anchors.fill: parent + visible: true + blending: true + supportsAtlasTextures: true + property real angleBase: -pi*1/2 + property real angle:-pi*1/2 + property var src: ShaderEffectSource{ + sourceItem: chrGuage + live: false + } + + readonly property real pi: 3.1415926535 + + vertexShader: "qrc:/Shaders/vert/guageMask.vert" + fragmentShader:"qrc:/Shaders/frag/guageMask.frag" + } + } + SequentialAnimation{ + id: normalToAdasAnimation + onStarted: rootItem.focus=false + SequentialAnimation{ + NumberAnimation{ + target: chrGuageGroup + property: "opacity" + duration: 330 + easing.type: Easing.InOutSine + from:1.0 + to:0.0 + } + PropertyAnimation{ + target: chrGuageGroup + property: "visible" + duration: 0 + easing.type: Easing.InOutSine + from:true + to:false + } + } + + ParallelAnimation{ + /* down size */ + NumberAnimation{ + target: chargeGuage + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:1 + to:0.75 + } + + /* translation */ + PathAnimation{ + target: chargeGuage + anchorPoint: Qt.point(chargeGuage.width/2, chargeGuage.height/2) + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 960; startY: 391 + PathLine { x: 540; y: 402 } + } + } + PropertyAnimation{ + target: chrGuageImg + property: "source" + to: "qrc:/Images/ADASView/METER/chr_wave.png" + duration: 0 + } + PropertyAnimation{ + target: chrEffect + property: "source" + to: "qrc:/Images/ADASView/METER/chr_glow.png" + duration: 0 + } + } + PauseAnimation{ + duration: 396 + } + PropertyAnimation{ + target: chrGuageGroup + property: "visible" + to: true + duration: 0 + } + PropertyAnimation{ + target: chrGuageGroup + property: "opacity" + to: 1 + duration: 198 + } + } + + SequentialAnimation{ + id: mapToNormalAnimation + onStarted: rootItem.focus=false + onStopped: rootItem.focus=true + PropertyAnimation{ + target: chrGuageGroup + property: "opacity" + to: 0 + duration: 198 + } + PropertyAnimation{ + target: chrGuageGroup + property: "visible" + to: true + duration: 0 + } + PauseAnimation { + duration: 254 + 330 + } + + + ParallelAnimation{ + /* scaling */ + NumberAnimation{ + target: chargeGuage + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:0.75 + to:1.0 + } + + /* slide */ + PathAnimation{ + target: chargeGuage + anchorPoint: Qt.point(chargeGuage.width/2, chargeGuage.height/2) + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 540; startY: 402 + PathLine { x: 960; y: 391 } + } + } + PropertyAnimation{ + target: chrGuageImg + property: "source" + to: "qrc:/Images/NormalView/METER/charge_guage.ktx" + duration: 0 + } + PropertyAnimation{ + target: chrEffect + property: "source" + to: "" + duration: 0 + } + } + + SequentialAnimation{ + PropertyAnimation{ + target: chrGuageGroup + property: "visible" + duration: 0 + easing.type: Easing.InOutSine + from:false + to:true + } + + NumberAnimation{ + target: chrGuageGroup + property: "opacity" + duration: 330 + easing.type: Easing.InOutSine + from:0.0 + to:1.0 + } + } + PauseAnimation { + duration: 330 + } + } +} diff --git a/GUIModel/Meter/DigitalSpeed.qml b/GUIModel/Meter/DigitalSpeed.qml new file mode 100644 index 0000000..107962a --- /dev/null +++ b/GUIModel/Meter/DigitalSpeed.qml @@ -0,0 +1,302 @@ +/* + * Copyright (c) 2020,2021 Panasonic Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +import QtQuick 2.14 +import QtGraphicalEffects 1.14 + +Item{ + id: digitalSpeed + property real speedValue + + readonly property real digitalSpeedMax: 300 + readonly property real digitalSpeedMin: 0 + + onSpeedValueChanged: { + updateSpeedValue(); + updateSpeedNumPosition(); + updateSpeedNumVisible(); + } + + Connections{ + target: rootItem + onTransNormalToAdas:{ + normalToAdasAnimation.start() + } + + onTransAdasToMap:{ + /**/ + } + + onTransMapToNormal:{ + mapToNormalAnimation.start() + } + } + + function updateSpeedValue(){ + digitalSpeedParts.speedValue1 = speedValue%10 + digitalSpeedParts.speedValue10 = (speedValue/10)%10 + digitalSpeedParts.speedValue100 = (speedValue/100)%10 + } + + function updateSpeedNumPosition(){ + if((0 <= speedValue) && (speedValue < 10)){ + speedNum1.x = 93 + }else if((10 <= speedValue) && (speedValue < 100)){ + speedNum1.x = 137 + speedNum10.x = 47 + }else if(100 <= speedValue){ + speedNum1.x = 180 + speedNum10.x = 90 + } + } + + function updateSpeedNumVisible(){ + if((digitalSpeedMin <= speedValue) && (speedValue < 10)){ + speedNum1.visible = true + speedNum10.visible = false + speedNum100.visible = false + }else if((10 <= speedValue) && (speedValue < 100)){ + speedNum1.visible = true + speedNum10.visible = true + speedNum100.visible = false + }else if((100 <= speedValue) && (speedValue <= digitalSpeedMax)){ + speedNum1.visible = true + speedNum10.visible = true + speedNum100.visible = true + }else{ + speedNum1.visible = false + speedNum10.visible = false + speedNum100.visible = false + } + } + + Item{ + id:digitalSpeedParts + property int speedValue1 + property int speedValue10 + property int speedValue100 + + Image{ + id:ring4 + source: "qrc:/Images/NormalView/METER/ring4.ktx" + x:762 + y:200 + width:396 + height:395 + } + + Image{ + id:speedUnit + source: "qrc:/Images/NormalView/SPEED/speed_unit.png" + x:907 + y:457 + width:97 + height:59 + } + + Item{ + id:speedNum + + x:816 + y:324 + Image{ + id:speedNum1 + source: "qrc:/Images/NormalView/SPEED/speed_num1-" + digitalSpeedParts.speedValue1 + ".png" + x:93 + width:98 + height:120 + visible: true + } + Image{ + id:speedNum10 + source: "qrc:/Images/NormalView/SPEED/speed_num1-" + digitalSpeedParts.speedValue10 + ".png" + width:98 + height:120 + visible: false + } + Image{ + id:speedNum100 + source: "qrc:/Images/NormalView/SPEED/speed_num1-" + digitalSpeedParts.speedValue100 + ".png" + width:98 + height:120 + visible: false + } + } + + SequentialAnimation{ + id: normalToAdasAnimation + onStarted: rootItem.focus=false + /* remove background */ + SequentialAnimation{ + NumberAnimation{ + target: ring4 + property: "scale" + duration: 330 + easing.type: Easing.Linear + from:1.0 + to:0 + } + + PropertyAnimation{ + target: ring4 + property: "visible" + duration: 0 + from:true + to:false + } + } + + ParallelAnimation{ + /* scaling */ + NumberAnimation { + target: speedNum + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:1 + to:0.725 + } + + /* translation */ + PathAnimation{ + target: speedNum + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 816; startY: 324 + PathLine { x: 860; y: 41 } + } + } + + /* scaling */ + NumberAnimation { + target: speedUnit + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:1 + to:0.73 + } + + /* slide */ + PathAnimation{ + target: speedUnit + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 907; startY: 457 + PathLine { x: 914; y: 128 } + } + } + } + + } + + + SequentialAnimation{ + id: mapToNormalAnimation + onStarted: rootItem.focus=false + onStopped: rootItem.focus=true + PauseAnimation { + duration: 254 + } + + PauseAnimation { + duration: 330 + } + + ParallelAnimation{ + /* scaling */ + NumberAnimation { + target: speedNum + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:0.725 + to:1.00 + } + + /* translation */ + PathAnimation{ + target: speedNum + duration: 891 + easing.type: meterParts.easing + path: Path { + startX: 860; startY: 41 + PathLine { x: 816; y: 324 } + } + } + + /* scaling */ + NumberAnimation { + target: speedUnit + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:0.73 + to:1.00 + } + + /* translation */ + PathAnimation{ + target: speedUnit + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 914; startY: 128 + PathLine { x: 907; y: 457 } + } + } + } + + /* visible backgournd */ + SequentialAnimation{ + PropertyAnimation{ + target: ring4 + property: "visible" + duration: 0 + from:false + to:true + } + + NumberAnimation{ + target: ring4 + property: "scale" + duration: 330 + easing.type: Easing.Linear + from:0.0 + to:1.0 + } + } + PauseAnimation { + duration: 330 + } + + } + } +} diff --git a/GUIModel/Meter/Mask.qml b/GUIModel/Meter/Mask.qml new file mode 100644 index 0000000..932df8f --- /dev/null +++ b/GUIModel/Meter/Mask.qml @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2020,2021 Panasonic Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +import QtQuick 2.14 +import QtGraphicalEffects 1.14 + +Item{ + id:mask + visible: false + opacity: 0 + + Connections{ + target: rootItem + onTransNormalToAdas:{ + normalToAdasAnimation.start() + } + + onTransAdasToMap:{ + /* nop */ + } + + onTransMapToNormal:{ + mapToNormalAnimation.start() + } + } + + Item { + id:maskTop + width: 1920 + height: 128 + + Rectangle { + anchors.fill: parent + gradient: Gradient { + GradientStop { + position: 0.0 + color: "#FF000000" + } + GradientStop { + position: 0.25 + color: "#FF000000" + } + GradientStop { + position: 1.0 + color: "#00000000" + } + + } + } + } + + Item { + id:maskBottom + x:480 + y:720 - 64 + width: 120 + height: 64 + + Rectangle { + anchors.fill: parent + gradient: Gradient { + GradientStop { + position: 1.0 + color: "#FF000000" + } + GradientStop { + position: 0.0 + color: "#00000000" + } + + } + } + } + + SequentialAnimation{ + id:normalToAdasAnimation + onStarted: rootItem.focus=false + PauseAnimation { + duration: 330 + } + + PropertyAnimation{ + target: mask + property: "visible" + duration:0 + from:false + to:true + } + + PropertyAnimation{ + target: mask + property: "opacity" + duration:891 + from:0 + to:1 + } + + + } + + SequentialAnimation{ + id:mapToNormalAnimation + onStarted: rootItem.focus=false + PauseAnimation { + duration: 254 + 330 + } + + PropertyAnimation{ + target: mask + property: "opacity" + duration:891 + from:1 + to:0 + } + + PropertyAnimation{ + target: mask + property: "visible" + duration:0 + from:true + to:false + } + + } + +} diff --git a/GUIModel/Meter/Meter.qml b/GUIModel/Meter/Meter.qml new file mode 100644 index 0000000..b1a4a78 --- /dev/null +++ b/GUIModel/Meter/Meter.qml @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2020,2021 Panasonic Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +import QtQuick 2.14 +import QtGraphicalEffects 1.14 + +Item { + id: meter + property real speedValue: 0 + property real tachoValue: 0 + property real chargeValue:100 + + onSpeedValueChanged: { + speedGuage.speedValue = speedValue + speedNeedle.speedValue = speedValue + digitalSpeed.speedValue = speedValue + } + + onTachoValueChanged: { + tachometer.tachoValue = tachoValue + } + onChargeValueChanged: { + chargeGuage.chargeValue = chargeValue + } + + + Item { + id: meterParts + property var easing: Easing.InOutQuad + Component.onCompleted: { + testAnim.start() + } + + Connections{ + target: rootItem + onTransNormalToAdas:{ + / *nop */ + } + + onTransAdasToMap:{ + / *nop */ + } + + onTransMapToNormal:{ + / *nop */ + } + } + + Sideline { + id: sideline + } + + Ring { + id: ring + } + + ChargeGuage { + id: chargeGuage + } + + SpeedGuage { + id: speedGuage + } + + SpeedNeedle { + id: speedNeedle + } + + Tachometer { + id: tachometer + } + + Ready { + id: ready + } + + Mask { + id: mask + } + + DigitalSpeed { + id: digitalSpeed + } + + ParallelAnimation{ + id: testAnim + SequentialAnimation{ + id: testAnimSpeed + loops: Animation.Infinite + NumberAnimation { + target: meter + property: "speedValue" + duration: 1000 + easing.type: Easing.InOutQuad + to: 300 + } + NumberAnimation{ + duration: 5000 + } + + NumberAnimation { + target: meter + property: "speedValue" + duration: 5000 + easing.type: Easing.InOutQuad + to: 0 + } + } + + SequentialAnimation{ + id: testAnimTacho + loops: Animation.Infinite + NumberAnimation { + target: meter + property: "tachoValue" + duration: 500 + easing.type: Easing.InOutQuad + to: 8000 + } + NumberAnimation { + target: meter + property: "tachoValue" + duration: 2500 + easing.type: Easing.InOutQuad + to: 0 + } + } + SequentialAnimation{ + id: testAnimCharge + loops: Animation.Infinite + NumberAnimation { + target: meter + property: "chargeValue" + duration: 10000 + easing.type: Easing.Linear + to: 0 + } + NumberAnimation { + target: meter + property: "chargeValue" + duration: 10000 + easing.type: Easing.Linear + to: 100 + } + } + } + } +} + + diff --git a/GUIModel/Meter/Ready.qml b/GUIModel/Meter/Ready.qml new file mode 100644 index 0000000..7719fd0 --- /dev/null +++ b/GUIModel/Meter/Ready.qml @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2020,2021 Panasonic Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +import QtQuick 2.14 +import QtGraphicalEffects 1.14 + +Item { + id: ready + x:666 + y:97 + width:588 + height:588 + + Connections{ + target: rootItem + onTransNormalToAdas:{ + normalToAdasAnimation.start() + } + + onTransAdasToMap:{ + /**/ + } + + onTransMapToNormal:{ + mapToNormalAnimation.start() + } + } + + Image{ + id:readyBase + source: "qrc:/Images/NormalView/METER/ready_base.png" + width:159 + height:51 + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + } + + Image{ + id:readyText + source: "qrc:/Images/NormalView/METER/ready_text-on.png" + width:159 + height:51 + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + } + + + SequentialAnimation{ + id: normalToAdasAnimation + onStarted: rootItem.focus=false + /* delay */ + PauseAnimation { + duration: 330 + } + + ParallelAnimation{ + NumberAnimation{ + target: ready + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:1.0 + to:0.75 + } + + /* translation */ + PathAnimation{ + target: ready + anchorPoint: Qt.point(ready.width/2, ready.height/2) + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 960; startY: 391 + PathLine { x: 540; y: 402 } + } + } + } + } + + SequentialAnimation{ + id: mapToNormalAnimation + onStarted: rootItem.focus=false + /* delay */ + PauseAnimation { + duration: 254 + } + + PauseAnimation { + duration: 330 + } + + ParallelAnimation{ + NumberAnimation{ + target: ready + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:0.75 + to:1.00 + } + + /* translation */ + PathAnimation{ + target: ready + anchorPoint: Qt.point(ready.width/2, ready.height/2) + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 540; startY: 402 + PathLine { x: 960; y: 391 } + } + } + } + } +} diff --git a/GUIModel/Meter/Ring.qml b/GUIModel/Meter/Ring.qml new file mode 100644 index 0000000..46c2f50 --- /dev/null +++ b/GUIModel/Meter/Ring.qml @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2020,2021 Panasonic Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +import QtQuick 2.14 +import QtGraphicalEffects 1.14 + +Item { + id: ring + width:656 + height:656 + x:632 + y:63 + + Connections{ + target: rootItem + onTransNormalToAdas:{ + normalToAdasAnimation.start() + } + + onTransAdasToMap:{ + /**/ + } + + onTransMapToNormal:{ + mapToNormalAnimation.start() + } + } + + Image{ + id:ring1 + source: "qrc:/Images/NormalView/METER/ring1.ktx" + width:656 + height:656 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + } + + Image{ + id:ring3 + source: "qrc:/Images/NormalView/METER/ring3.ktx" + width:456 + height:456 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + } + + Image{ + id:ring2 + source: "qrc:/Images/NormalView/METER/ring2.ktx" + width:588 + height:588 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + } + + SequentialAnimation{ + id: normalToAdasAnimation + onStarted: rootItem.focus=false + PauseAnimation { + duration: 330 + } + + ParallelAnimation{ + /* down size */ + NumberAnimation{ + target: ring + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:1 + to:0.75 + } + + /* translation */ + PathAnimation{ + target: ring + anchorPoint: Qt.point(ring.width/2, ring.height/2) + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 960; startY: 391 + PathLine { x: 540; y: 402 } + } + } + } + } + + SequentialAnimation{ + id: mapToNormalAnimation + onStarted: rootItem.focus=false + PauseAnimation { + duration: 254 + 330 + } + + ParallelAnimation{ + /* down size */ + NumberAnimation{ + target: ring + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:0.75 + to:1.0 + } + + /* translation */ + PathAnimation{ + target: ring + anchorPoint: Qt.point(ring.width/2, ring.height/2) + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 540; startY: 402 + PathLine { x: 960; y: 391 } + } + } + } + } +} diff --git a/GUIModel/Meter/Sideline.qml b/GUIModel/Meter/Sideline.qml new file mode 100644 index 0000000..e210dcb --- /dev/null +++ b/GUIModel/Meter/Sideline.qml @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2020,2021 Panasonic Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +import QtQuick 2.14 +import QtGraphicalEffects 1.14 + +Item { + id: sideline + width: 1780 + height: 1780 + x:70 + y:-499 + + Connections{ + target: rootItem + onTransNormalToAdas:{ + normalToAdasAnimation.start() + } + + onTransAdasToMap:{ + / *nop */ + } + + onTransMapToNormal:{ + mapToNormalAnimation.start() + } + } + + Image{ + id:meterLineR + source: "qrc:/Images/NormalView/METER/meter_line_r.ktx" + x:980 + y:0 + width:800 + height:636 + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 0 + } + + Image{ + id:meterLineL + source: "qrc:/Images/NormalView/METER/meter_line_l.ktx" + y:0 + width:800 + height:636 + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: 0 + } + + transform: Rotation { + id:sidelineRotation + origin.x: sideline.width/2; + origin.y: sideline.height/2; + angle: 0 + } + + SequentialAnimation{ + id: normalToAdasAnimation + onStarted: rootItem.focus=false + PauseAnimation { + duration: 330 + } + + ParallelAnimation{ + /* down size */ + NumberAnimation{ + target: sideline + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:1 + to:0.75 + } + + /* rotation */ + PropertyAnimation{ + target: sidelineRotation + property: "angle" + duration: 891 + easing.type: meterParts.easing + from:0 + to:-90 + } + + /* translation */ + PathAnimation{ + target: sideline + anchorPoint: Qt.point(sideline.width/2, sideline.height/2) + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 960; startY: 391 + PathLine { x: 540; y: 402 } + } + } + } + } + + SequentialAnimation{ + id: mapToNormalAnimation + onStarted: rootItem.focus=false + PauseAnimation { + duration: 254 + 330 + } + + ParallelAnimation{ + /* down size */ + NumberAnimation{ + target: sideline + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:0.75 + to:1.0 + } + + /* rotation */ + PropertyAnimation{ + target: sidelineRotation + property: "angle" + duration: 891 + easing.type: meterParts.easing + from:-90 + to:0 + } + + /* translation */ + PathAnimation{ + target: sideline + anchorPoint: Qt.point(sideline.width/2, sideline.height/2) + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 540; startY: 402 + PathLine { x: 960; y: 391 } + } + } + } + } + +} diff --git a/GUIModel/Meter/SpeedGuage.qml b/GUIModel/Meter/SpeedGuage.qml new file mode 100644 index 0000000..72ae57f --- /dev/null +++ b/GUIModel/Meter/SpeedGuage.qml @@ -0,0 +1,284 @@ +/* + * Copyright (c) 2020,2021 Panasonic Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +import QtQuick 2.14 +import QtGraphicalEffects 1.14 +import QtQuick.Shapes 1.14 + +Item { + id: speedGuage + x:666 + y:97 + width:588 + height:588 + property real speedValue + + readonly property real speedGuageMax: 100 + readonly property real speedGuageMin: 0 + + onSpeedValueChanged: { + limitSpeedValue(); + effectPwr.angle = (2.25 * speedValue*Math.PI/180)+effectPwr.angleBase + } + + Connections{ + target: rootItem + onTransNormalToAdas:{ + normalToAdasAnimation.start() + } + + onTransAdasToMap:{ + /* nop */ + } + + onTransMapToNormal:{ + mapToNormalAnimation.start() + } + } + + function limitSpeedValue(){ + if(speedGuageMax < speedValue){ + speedValue = speedGuageMax + }else if(speedValue < speedGuageMin){ + speedValue = speedGuageMin + } + } + + /* Guage - visible in Normal mode */ + Item { + id:pwrGuageGroup + width:588 + height:588 + + Image{ + id:pwrGuage + source: "qrc:/Images/NormalView/METER/pwr_guage.png" + width:588 + height:588 + + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + opacity: 1 + visible: false + } + ShaderEffect{ + id: effectPwr + anchors.fill: parent + visible: true + blending: true + supportsAtlasTextures: true + property real angleBase: -pi*1/2 + property real angle:-pi*1/2 + property var src: ShaderEffectSource{ + sourceItem: pwrGuage + live: false + } + + readonly property real pi: 3.1415926535 + + vertexShader: "qrc:/Shaders/vert/guageMask.vert" + fragmentShader:"qrc:/Shaders/frag/guageMask.frag" + } + } + + + Image{ + id:ringLine + source: "qrc:/Images/NormalView/METER/ring_line.ktx" + width:588 + height:588 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + } + + Image{ + id:speedTxt + source: "qrc:/Images/NormalView/SPEED/speed_txt.png" + width:588 + height:588 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + } + + Image{ + id:ring5 + source: "qrc:/Images/NormalView/METER/ring5.png" + width: 34 + height:24 + anchors.left: parent.left + anchors.leftMargin: -11 + anchors.verticalCenter: parent.verticalCenter + } + + SequentialAnimation{ + id: normalToAdasAnimation + onStarted: rootItem.focus=false + ParallelAnimation{ + NumberAnimation{ + target: speedTxt + property: "opacity" + duration: 330 + easing.type: Easing.InOutSine + from:1.0 + to:0.5 + } + + SequentialAnimation{ + NumberAnimation{ + target: pwrGuageGroup + property: "opacity" + duration: 330 + easing.type: Easing.InOutSine + from:1.0 + to:0.0 + } + PropertyAnimation{ + target: pwrGuageGroup + property: "visible" + duration: 0 + easing.type: Easing.InOutSine + from:true + to:false + } + } + } + + ParallelAnimation{ + /* down size */ + NumberAnimation{ + target: speedGuage + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:1 + to:0.75 + } + + /* translation */ + PathAnimation{ + target: speedGuage + anchorPoint: Qt.point(speedGuage.width/2, speedGuage.height/2) + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 960; startY: 391 + PathLine { x: 540; y: 402 } + } + } + + SequentialAnimation{ + PauseAnimation { + duration: 891-330 + } + NumberAnimation{ + target: speedTxt + property: "opacity" + duration: 330 + easing.type: Easing.InOutSine + from:0.5 + to:1.0 + } + } + } + } + + SequentialAnimation{ + id: mapToNormalAnimation + onStarted: rootItem.focus=false + + PauseAnimation { + duration: 254 + 330 + } + + + ParallelAnimation{ + /* scaling */ + NumberAnimation{ + target: speedGuage + property: "scale" + duration: 891 + easing.type: meterParts.easing + from:0.75 + to:1.0 + } + + /* slide */ + PathAnimation{ + target: speedGuage + anchorPoint: Qt.point(speedGuage.width/2, speedGuage.height/2) + orientation: PathAnimation.Fixed + duration: 891 + easing.type: meterParts.easing + + path: Path { + startX: 540; startY: 402 + PathLine { x: 960; y: 391 } + } + } + + NumberAnimation{ + target: speedTxt + property: "opacity" + duration: 330 + easing.type: Easing.InOutSine + from:1.0 + to:0.5 + } + } + + ParallelAnimation{ + NumberAnimation{ + target: speedTxt + property: "opacity" + duration: 330 + easing.type: Easing.InOutSine + from:0.5 + to:1.0 + } + + SequentialAnimation{ + PropertyAnimation{ + target: pwrGuageGroup + property: "visible" + duration: 0 + easing.type: Easing.InOutSine + from:false + to:true + } + + NumberAnimation{ + target: pwrGuageGroup + property: "opacity" + duration: 330 + easing.type: Easing.InOutSine + from:0.0 + to:1.0 + } + } + } + PauseAnimation { + duration: 330 + } + } +} diff --git a/GUIModel/Meter/SpeedNeedle.qml b/GUIModel/Meter/SpeedNeedle.qml new file mode 100644 index 0000000..31cb074 --- /dev/null +++ b/GUIModel/Meter/SpeedNeedle.qml @@ -0,0 +1,293 @@ +/* + * Copyright (c) 2020,2021 Panasonic Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +import QtQuick 2.14 +import QtGraphicalEffects 1.14 + +Item { + id: speedNeedle + width:444 + height:444 + x: 318 + y: 180 + visible: false + property real speedValue + + readonly property real speedNeedleMax: 100 + readonly property real speedNeedleMin: 0 + + onSpeedValueChanged: { + setNeedleAngle(); + effectPwrNeedle.angle = (2.25 * speedValue*Math.PI/180)+effectPwrNeedle.angleBase + } + + Connections{ + target: rootItem + onTransNormalToAdas:{ + normalToAdasAnimation.start() + } + + onTransAdasToMap:{ + /**/ + } + + onTransMapToNormal:{ + mapToNormalAnimation.start() + } + } + + function setNeedleAngle(){ + if(speedNeedleMax < speedValue){ + speedValue = speedNeedleMax + }else if( speedValue < speedNeedleMin){ + speedValue = speedNeedleMin + } + rotateNeedle.angle = 2.25 * speedValue + } + + /* Needle - visible in ADAS/Map mode */ + Item { + id:needleGroup + width:444 + height:444 + + Image{ + id: pwrNeedle + source: "qrc:/Images/ADASView/METER/needle.png" + x: 28 + y: 220 + width:182 + height:4 + visible: false + } + + Item{ + id: needleMask + visible: false + anchors.fill:pwrNeedle + property double maskPercent: 0 + + Rectangle{ + id: needleMaskInvisible + color: "red" + opacity: 0 + anchors.left: parent.left + width: pwrNeedle.width * (1.0 - needleMask.maskPercent/100.0) + height: pwrNeedle.height + visible: true + } + Rectangle{ + id: needleMaskVisible + color: "blue" + anchors.right: parent.right + opacity: 1 + width: pwrNeedle.width * (needleMask.maskPercent/100.0) + height: pwrNeedle.height + visible: true + } + } + + + OpacityMask { + id: maskedPwrNeedle + cached: false + width: pwrNeedle.x + height:pwrNeedle.y + anchors.fill:pwrNeedle + source: pwrNeedle + maskSource: needleMask + } + + transform: Rotation{ + id:rotateNeedle + origin.x: needleGroup.width / 2 + origin.y: needleGroup.height / 2 + angle : 0 + } + + + } + + Item{ + id: centerCircleGroup + width:124 + height:126 + x:160 + y:166 + Image{ + id: centerCircle + source: "qrc:/Images/ADASView/METER/center_circle.png" + width:124 + height:126 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + visible: true + } + } + + Item { + id: pwrNeedleEffect + width:444 + height:444 + x: 0 + y: 0 + visible: false + + Image{ + source: "qrc:/Images/ADASView/METER/pwr_wave.png" + width:444 + height:442 + visible: true + } + + Image{ + source: "qrc:/Images/ADASView/METER/pwr_glow.png" + width:444 + height:442 + visible: true + } + } + + + ShaderEffect{ + id: effectPwrNeedle + anchors.fill: pwrNeedleEffect + visible: false + blending: true + supportsAtlasTextures: true + property real angleBase: -pi*1/2 + property real angle:-pi*1/2 + property var src: ShaderEffectSource{ + sourceItem: pwrNeedleEffect + } + + readonly property real pi: 3.1415926535 + + vertexShader: "qrc:/Shaders/vert/guageMask.vert" + fragmentShader:"qrc:/Shaders/frag/guageMask.frag" + } + + + SequentialAnimation{ + id: normalToAdasAnimation + onStarted: rootItem.focus=false + onStopped: rootItem.focus=true + PauseAnimation { + duration: 330 + 891 + } + + PropertyAnimation{ + target: speedNeedle + property: "visible" + duration: 0 + from:false + to:true + } + + NumberAnimation{ + target: centerCircle + property: "scale" + duration: 396 + easing.type: Easing.InOutSine + from: 0 + to: 1 + } + + PropertyAnimation{ + target:effectPwrNeedle + property:"visible" + duration:0 + from:false + to:true + } + + ParallelAnimation{ + NumberAnimation { + target:needleMask + property: "maskPercent" + duration: 198 + from:0.0 + to:100.0 + } + + NumberAnimation{ + target:effectPwrNeedle + property:"opacity" + duration:198 + from:0 + to:1 + } + } + PauseAnimation { + duration: 330 + } + + } + + SequentialAnimation{ + id: mapToNormalAnimation + onStarted: rootItem.focus=false + ParallelAnimation{ + NumberAnimation { + target:needleMask + property: "maskPercent" + duration: 198 + from:100.0 + to:0.0 + } + + NumberAnimation{ + target:effectPwrNeedle + property:"opacity" + duration:198 + from:1 + to:0 + } + } + + PropertyAnimation{ + target:effectPwrNeedle + property:"visible" + duration:0 + from:true + to:false + } + + NumberAnimation{ + target: centerCircle + property: "scale" + duration: 396 + easing.type: Easing.InOutSine + from: 1 + to: 0 + } + + PropertyAnimation{ + target: speedNeedle + property: "visible" + duration: 0 + from:true + to:false + } + } + +} diff --git a/GUIModel/Meter/Tachometer.qml b/GUIModel/Meter/Tachometer.qml new file mode 100644 index 0000000..fcc750b --- /dev/null +++ b/GUIModel/Meter/Tachometer.qml @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2020,2021 Panasonic Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +import QtQuick 2.14 +import QtGraphicalEffects 1.14 + +Item { + id: tachometer + property real tachoValue + + readonly property real tachoValueMax: 8000 + readonly property real tachoValueMin: 0 + + onTachoValueChanged: { + limitTachoValue(); + effectRpm.angle = (0.03375 * tachoValue*Math.PI/180)+effectRpm.angleBase + } + + Connections{ + target: rootItem + onTransNormalToAdas:{ + normalToAdasAnimation.start() + } + + onTransAdasToMap:{ + /**/ + } + + onTransMapToNormal:{ + mapToNormalAnimation.start() + } + } + + function limitTachoValue(){ + if(tachoValue > tachoValueMax){ + tachoValue = tachoValueMax + }else if(tachoValue < tachoValueMin){ + tachoValue = tachoValueMin + } + } + + Image{ + id:rpmGuage + source: "qrc:/Images/NormalView/METER/prm_guage.ktx" + x:770 + y:200 + width:380 + height:382 + visible: false + } + ShaderEffect{ + id: effectRpm + anchors.fill: rpmGuage + visible: true + blending: true + supportsAtlasTextures: true + property real angleBase: -pi*3/4 + property real angle:-pi*3/4 + property var src: ShaderEffectSource{ + sourceItem: rpmGuage + live: false + } + + + readonly property real pi: 3.1415926535 + + vertexShader: "qrc:/Shaders/vert/guageMask.vert" + fragmentShader:"qrc:/Shaders/frag/guageMask.frag" + } + + + Image{ + id:rpmTxt + source: "qrc:/Images/NormalView/METER/prm_txt.png" + x:770 + y:190 + width:379 + height:401 + } + + SequentialAnimation{ + id:normalToAdasAnimation + onStarted: rootItem.focus=false + PropertyAnimation{ + target:tachometer + property:"opacity" + duration: 330 + easing.type: Easing.Linear + to:0 + } + PropertyAnimation{ + target: tachometer + property: "visible" + duration: 0 + to:false + } + } + + SequentialAnimation{ + id:mapToNormalAnimation + onStarted: rootItem.focus=false + + PauseAnimation { + duration: 891 + 330 + 254 + } + + PropertyAnimation{ + target: tachometer + property: "visible" + duration: 0 + to:true + } + + PropertyAnimation{ + target:tachometer + property:"opacity" + duration: 330 + easing.type: Easing.Linear + to:1 + } + } + +} |