diff options
Diffstat (limited to 'GUIModel/Meter')
-rw-r--r-- | GUIModel/Meter/ChargeGuage.qml | 266 | ||||
-rw-r--r-- | GUIModel/Meter/DigitalSpeed.qml | 296 | ||||
-rw-r--r-- | GUIModel/Meter/Mask.qml | 139 | ||||
-rw-r--r-- | GUIModel/Meter/Meter.qml | 163 | ||||
-rw-r--r-- | GUIModel/Meter/Ready.qml | 132 | ||||
-rw-r--r-- | GUIModel/Meter/Ring.qml | 136 | ||||
-rw-r--r-- | GUIModel/Meter/Sideline.qml | 160 | ||||
-rw-r--r-- | GUIModel/Meter/SpeedGuage.qml | 278 | ||||
-rw-r--r-- | GUIModel/Meter/SpeedNeedle.qml | 287 | ||||
-rw-r--r-- | GUIModel/Meter/Tachometer.qml | 136 |
10 files changed, 1993 insertions, 0 deletions
diff --git a/GUIModel/Meter/ChargeGuage.qml b/GUIModel/Meter/ChargeGuage.qml new file mode 100644 index 0000000..4e41cad --- /dev/null +++ b/GUIModel/Meter/ChargeGuage.qml @@ -0,0 +1,266 @@ +/* + * 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 + +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..b039b6f --- /dev/null +++ b/GUIModel/Meter/DigitalSpeed.qml @@ -0,0 +1,296 @@ +/* + * 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 + +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..333f258 --- /dev/null +++ b/GUIModel/Meter/Mask.qml @@ -0,0 +1,139 @@ +/* + * 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 + +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..06f9f95 --- /dev/null +++ b/GUIModel/Meter/Meter.qml @@ -0,0 +1,163 @@ +/* + * 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 + +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..87e013c --- /dev/null +++ b/GUIModel/Meter/Ready.qml @@ -0,0 +1,132 @@ +/* + * 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 + +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..1b1fc59 --- /dev/null +++ b/GUIModel/Meter/Ring.qml @@ -0,0 +1,136 @@ +/* + * 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 + +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..ac1eba2 --- /dev/null +++ b/GUIModel/Meter/Sideline.qml @@ -0,0 +1,160 @@ +/* + * 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 + +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..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 + } + } +} diff --git a/GUIModel/Meter/SpeedNeedle.qml b/GUIModel/Meter/SpeedNeedle.qml new file mode 100644 index 0000000..86767c2 --- /dev/null +++ b/GUIModel/Meter/SpeedNeedle.qml @@ -0,0 +1,287 @@ +/* + * 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 + +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..f6b948a --- /dev/null +++ b/GUIModel/Meter/Tachometer.qml @@ -0,0 +1,136 @@ +/* + * 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 + +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 + } + } + +} |