diff options
Diffstat (limited to 'GUIModel/Meter/SpeedGuage.qml')
-rw-r--r-- | GUIModel/Meter/SpeedGuage.qml | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/GUIModel/Meter/SpeedGuage.qml b/GUIModel/Meter/SpeedGuage.qml new file mode 100644 index 0000000..3015b1f --- /dev/null +++ b/GUIModel/Meter/SpeedGuage.qml @@ -0,0 +1,278 @@ +/* + * Copyright 2020,2021 Panasonic Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +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 + } + } +} |