import QtQuick 2.12 import QtGraphicalEffects 1.12 import NERvGear.Preferences 1.0 as P import "../../qml/api" AdvpStyleTemplate { style: Rectangle { id: main width: widget.width; height: widget.height; property bool gradientEnable LinearGradient { id: gradient_mask anchors.fill: parent visible: gradientEnable gradient: Gradient { GradientStop { id: p_start; position: 0.0 } GradientStop { id: p_middle; position: 0.5 } GradientStop { id: p_end; position: 1.0 } } } layer.enabled: true layer.effect: OpacityMask{ maskSource: AdvpCanvasTemplate { readonly property var audioData: new Array(128) readonly property bool autoNormalizing: configs["Data Settings"]["Auto Normalizing"] readonly property real amplitude: 400/configs["Data Settings"]["Amplitude"] readonly property int uDataLen: Math.pow(2, configs["Data Length"]); readonly property int dataLength: 64/uDataLen readonly property int unitStyle: configs["Data Settings"]["Unit Style"] readonly property int total: dataLength*2 readonly property bool vertical_flag: configs["Direction"] readonly property real halfWidth: vertical_flag ? height/2 : width/2 readonly property real halfHeight: vertical_flag ? width/2 : height/2 readonly property real ux: halfWidth*2/(total+1) readonly property real _y_dy: centerRotateAngleTangent*halfWidth readonly property bool centerRotateFlag: configs["Rotate Settings"]["Center Enable"] readonly property real centerRotateAngleTangent: centerRotateFlag*Math.tan(configs["Rotate Settings"]["Center Angle"]*Math.PI/180) readonly property bool lineRotateFlag: configs["Rotate Settings"]["Line Enable"] readonly property real lineRotateAngleTangent: lineRotateFlag*Math.tan(configs["Rotate Settings"]["Line Angle"]*Math.PI/180) readonly property real xOffset: configs["Rotate Settings"]["X Offset"]/100 readonly property real yOffset: configs["Rotate Settings"]["Y Offset"]/100 readonly property real xScale: configs["Rotate Settings"]["X Scale"]/100 readonly property real yScale: configs["Rotate Settings"]["Y Scale"]/100 onWidthChanged: { gradient_mask.end = Qt.point(width*(configs["Gradient Direction"]!==1), height*(configs["Gradient Direction"]%2)); } onHeightChanged: { gradient_mask.start = Qt.point(0, height*(configs["Gradient Direction"]===2)); gradient_mask.end = Qt.point(width*(configs["Gradient Direction"]!==1), height*(configs["Gradient Direction"]%2)); } onConfigsUpdated: { //尽量不要使用绑定configs的属性以免造成竞争,若一定要使用推荐使用Qt.callLater(()=>{}) gradientEnable = configs["Enable Gradient"]; context.lineWidth = configs["Line Width"]; main.color = configs["Line Color"]; if (gradientEnable) { gradient_mask.start = Qt.point(0, height*(configs["Gradient Direction"]===2)); gradient_mask.end = Qt.point(width*(configs["Gradient Direction"]!==1), height*(configs["Gradient Direction"]%2)); p_start.color = configs["Start Position Color"]; p_middle.color = configs["Middle Position Color"]; p_end.color = configs["End Position Color"]; } } onAudioDataUpdeted: { let normalizing_ratio = autoNormalizing ? data[128]*2 : amplitude; if (unitStyle) { //对数化显示 for(let i=0; i