From 95fdef825d6d6d0e2bf55439d88c6d93daced887 Mon Sep 17 00:00:00 2001 From: mashiros <490328928@qq.com> Date: Mon, 20 Jun 2022 11:36:59 +0800 Subject: [PATCH] =?UTF-8?q?-=20[=E7=BA=BF][=E6=B3=A2=E6=B5=AA]=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E6=96=B0=E5=A2=9E"=E5=BE=84=E5=90=91=E6=B8=90?= =?UTF-8?q?=E5=8F=98"=E9=80=89=E9=A1=B9=20-=20=E4=BF=AE=E5=A4=8D=E6=8C=82?= =?UTF-8?q?=E4=BB=B6=E5=9C=A8=E5=90=AF=E5=8A=A8=E5=99=A8=E4=B8=8E=E6=A1=8C?= =?UTF-8?q?=E9=9D=A2=E5=88=87=E6=8D=A2=E6=97=B6=E7=9A=84=E9=97=AA=E7=83=81?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20-=20=E4=BC=98=E5=8C=96=E6=B8=90=E5=8F=98?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Locales/ja.qm | Bin 6950 -> 7301 bytes Locales/zh.qm | Bin 6536 -> 6871 bytes Locales/zh_TW.qm | Bin 6536 -> 6871 bytes Presets/Circle/settings.xml | 2 +- Presets/Gradient_Line/preset.json | 4 + Presets/Gradient_Line/preview.png | Bin 0 -> 5383 bytes Presets/Gradient_Line/settings.xml | 5 + Presets/Line/settings.xml | 2 +- Presets/Solidcircle/settings.xml | 2 +- Presets/Waves/settings.xml | 2 +- package.json | 2 +- qml/Common.qml | 6 +- qml/api/AdvpCanvasTemplate.qml | 2 +- styles/Preset_Ordinal_Scale_UI_bottom/Style.qml | 4 + styles/Preset_circle/Style.qml | 81 ++++--- styles/Preset_line/Style.qml | 286 ++++++++++++++++++------ styles/Preset_solidcircle/Style.qml | 81 ++++--- styles/Preset_waves/Style.qml | 273 +++++++++++++++++----- 18 files changed, 562 insertions(+), 190 deletions(-) create mode 100644 Presets/Gradient_Line/preset.json create mode 100644 Presets/Gradient_Line/preview.png create mode 100644 Presets/Gradient_Line/settings.xml diff --git a/Locales/ja.qm b/Locales/ja.qm index 853a861d2506399e18229ae62b0b97f230f89716..71431fb2433ca3ed1e0e343ce35ffcddc5813ecd 100644 GIT binary patch delta 938 zcmZWnX>3eU7(Mf5?t5>h&wI0WrX{16AhErK)E*3iTGPs?#FEjzGU+l=qk=L)`a`9b zJQYDKwS=bDL1~0if=C-0M35$yp=yn_KdSW&;s-x&Ztnfgch33Fy@yjvhHddiCIPG# zaPNg_`w<`^8Kxuq0j@ht=bC^{i@^Hc1C%~s{t1A!7OZF+Ac%0(9HPFV7}5VZaR^BJ zr~%S?%xs8J-%w=!_yRaiWATcvfcYra9HqM1h_#zVz;za7u}#3%@}$Y544to55%j(x zyPYKYWX_i5B}zXxpfa7PHgJLb46^W;E1Pr;u-9>obxy)h=N_ar00yTqZ(2LxJhk;z z@5nZ0PAnn*2veu5qo!gu_enP3vC$r;eKad-jRMGJtHjgfKacIW?xS-ftEfCg^VhS= zo0sX{%Br|J!oOsXzl^8);NQC^pEYHj1uUh!dUp`bTg|J@4iX>3=YH=A47XYN{T=Z^ zeSFPl0$O|UxA%SpY%lnh=4WKAg?}3$x1N*yk2QUO#Gv5npa7**{e&UW=UgHzh>}lt zOj!5k2I=^PEz6D*e@wWx{5{c(5nk6&t_iK8Y0rEL=Zctm>i~tpi8ZnK*`^CzFV0b{ z59GWS+h)s!);1z<)@O5GpEX^YH^olgill)4iL?(&#VrfTV~Mo0?IMX@mae`#L!s@H zZtat4Xh`)H)UKpS-~9&(_e?**xg$-o=Q#spP3~4(PLdt+)G)o1$uI9VP9UqIe97#k zNe9XguM8lS-il#tBfZ-yWpE2cEx%EQe5;`IC}nXkx)(+&D>o8eKCeWoFVVeODUT;; zsSW~3Nk+0^QSYd2>Us5*`dLJDnz1&air=zo&nKC0MXQ}oty@WaOx>=m_r>=*RtA7G(;{zlB delta 688 zcmX9)ZAepL6n=Kyy>}mX_s(r@OKG8)NtRqll*odtfn`5Jawt@$B57I>m_u)Tow z71T}bfIb%Lb}zsrK>cJCFlfN0ya6Nutjh@)ci~)fgb8NvmHzyVDqydX15cb_P^S; zu%ji90o_GT4s9S&`J6myCIw!uVlI(P9Ob-ArGPez3(U|z=^Xd+)-NC-+Q~&G$AB0c zH(m6X4xi-~&m>dd#K$a=OF^%EQdzUiVZP8;MPn0R^R1tFTztc^2c+A?2akWJ`(A!3 zKq2UdH0qZ96k?kueee#MEztxfs24hw3?_*&jVOhTLudS<>zZF6^n!ApakwR)urJ3% z;;MxrcZtnWP70-5?AAI+{9f_hvs7dwW{;%W8U~_2 zN@)>FTYN2L{HDXvEmBz$;e4iavW^zSX36dECj5}pxSXcWFHHu?wP9^JMHBH=MuqfB znRH1>HilASpxOj8q57jT!_+V`%IH`(-D=TR&^5EdEg=Y^ zTA7Tn+muWq!R??W%+fIFwwt0LvCIxS%!*Qbmu#W_dU@aX_kG{sgi?qq;9 z0VW21Uo8-{7<}z9K-Ulc+;c!K0h@RqP|RRUk^r?5Y{Ona*oX*U4G?)4GbVQcd<{}Q z+JWFBSa_?G&ZQu;uLlU9hjk?*0I3tDCuuJwV%r`GFvek5=Wd|9V#xdi-LNaC2zBUk z`sqnl$%SQ`>Bjb%3+2&makxxn0REKv*%?-fX1$ihG!Hi=;xIx1b-0h%bK~ z=TP6os_JS;KVx;* zF424=JH<5vQ8U@op1HKQ{Hdl^_B{J6U}zCy@5T{-TZrw7An`YZ+;3xn>FO)t*nr+N@h>-&nU~raJuZx=9CtAIJnWJxsmA@|1qvPZ&@6V8AkKA@t zArdIe9G<AFhx<2WT%jG-we&0FgJA-NGQyQFmVgS|+ z*f+y))d!dhVDPm9x&F0t7y13; zfMpW97p8!ShaR^>u$6n7R+zYM`O9{K20UHSvB!i<*+IZMDh%{Q5tt`@+1^il@Pya8 z%b3Y=7O*?`D2@$l>#GLa{?hD!mdUJU%De`>k-_SQ78%BqMHq3dWH#EvG!4dv>IXEw*%&Tc>sYBavwa|5t}uuep}B`~#}> Bx;X#< diff --git a/Locales/zh_TW.qm b/Locales/zh_TW.qm index 7673028209ddd7fa15dbe13d1a69fb5bff99c4eb..98a973c92b5888150f55e2d01cb8eecfe22a11f4 100644 GIT binary patch delta 952 zcmZ9Kc}Nst7{;HSoo{AV#~F`xwSz6Yq1ps9qxz#X!_+7$O6k}(U2D;HLAT7VEg^`a zTA2*7!?GlkNN_u739~Xvy6?LnvBM6!4@&J_vW5EV<$d4Z_kGXv%xp-wo9H!r(g4;3 zm>Br&wLr*B@U?pZT_^ZsPXM_DZ0IdOF@w!Y1=LEgW!nH@IimbEK=f{m9o`D?HAsJN z2STeb?MfS+OGj46XCQJC7MJt^q&BQMNP8&->$XaOF#(&~wg6@2JtimVdYw5$s6&_A zNl&s$E+WTFSH9ycb<^pp9h_~+43cn~+nm-6L=QfeUm*I325Wa^t(bzKeVXRPkR zDVi^5hq$vq%sBS&^F-QP{#4U>_9W*hU}zTNuO|?HRfvBXMdB|B`QHWrW7Oxu-mZYr zQo;X;K&4B#SoH-6-!HVkd`8A|g*P@*8^a47YlcvNTa50a07DmO^}3h|9ir72keMNt zzCKUSct!8h!(_)HHW$C6Ta4l>KgAkqk@(&7DVv+psFr<{MXls-3-tXpksHKC8nqFe zIV5~e$cgX2i0;&8bLM2#BG1c+Bxwz@P5Ve5WqDQmLi(mwx$@UZdUT+C=Is%Z?3G*g zDC8OPEH{~77e4nhG6(I^*=&-3Kc?La@phV8Nn$9uAKa0N0D6{rL2t;y#KDlQ(Q}( zZhK))kUF3|^!e1Uy4ckZ77TWc-n21zm73{r+HHlJRq4_D?{edCk246wb^}ghKi|QK zL|)r!WG4HGnGr!Ea=OcHb30s4O*QrOJ&iW#Qzc|gn_BX->}n8_vieTV%PX?GMe@aF WxJwG`x`0^;+5eN--K2Iuw*EJ7y#t5< delta 668 zcmX9*e@IhN7(IL2eS6#9dv`iFwQyyH36V%@iwZ(fkQ9_isi20IVkG?_wa9ECM4<$( zmst^}mN3c+92Kol%SGA`DT^!ul|)z;f#t71)b&Y!TrS_a_xsK{-x*4~kka7X9Rsi) zz`hxVD?Y%y69!)^pj(9D(J&yd1Y7qBP-egivjDCKtGWz`Ct(Y;15qEbW&IdnXh;6Q zIAEE?u7xQe;(^!W5Nu`MrWGcxTmGVhph0hUbnJ2AVs;R)jtYalQ3U1*pSKSXAH3nU zo>FFVoC9pBEIFqZP%~N8oF9OjRZE>DlCi5VGpO!iclx@C{2uENdI3iq`!c^~cYuC%fL7I}@30^?L$UTZEPL5Qf)+=A20gXSl5^Mtl*=LM%nZIbuq zM3S~nxk&p%)aml+iDJ^&Ctsg`Mx=Y>{uY(ILVnjqZEB1>TX>sDS1WNjZ4_X<671Uw z=!cZi0`eGDt;UQo3ecs-_cT)1h?-lmg94M(8~Q8~6;``UP7)tdzdTPuHf-;?E`5*^ zYT>C9v~1-mcg@gX>j7StK)C4Rr|PLespFoa zn$=_4HvTqNDsWdO9@$i1CoL%#>F}(>MaAVMm+Y~A**dNBAB{{i_`f>Ldd;=0 "nvg://advp.widget.mashiros.top/advp-style-preset/circle" - {"Gradient Style":0,"Radial Gradient Settings":{"Inside Position Color":"#f44336","Middle Position Color":"#4caf50","Outside Position Color":"#03a9f4","Inside Position":40,"Middle Position":60,"Outside Position":80},"Conical Gradient Settings":{"Start Position Color":"#f44336","Quarter Position Color":"#4caf50","Middle Position Color":"#03a9f4","End Position Color":"#ffeb3b"},"Main Color":"#ff4500","Line Position":0,"Line Width":1,"Max Range":80,"Data Length":0,"Channel":2,"Reverse":false,"Rotate":false,"Ratate Speed":10,"Angle":0,"Data Settings":{"Auto Normalizing":true,"Amplitude":10,"Unit Style":0}} + {"Gradient Style":0,"Radial Gradient Settings":{"Inside Position Color":"#f44336","Middle Position Color":"#4caf50","Outside Position Color":"#03a9f4","Inside Position":40,"Middle Position":60,"Outside Position":80},"Conical Gradient Settings":{"Start Position Color":"#f44336","Quarter Position Color":"#4caf50","Middle Position Color":"#03a9f4","End Position Color":"#ffeb3b"},"Main Color":"#ff4500","Line Position":0,"Line Width":1,"Max Range":80,"Data Length":0,"Channel":2,"Reverse":false,"Rotate":false,"Rotation Direction":0,"Ratate Speed":10,"Angle":0,"Data Settings":{"Auto Normalizing":true,"Amplitude":10,"Unit Style":0}} \ No newline at end of file diff --git a/Presets/Gradient_Line/preset.json b/Presets/Gradient_Line/preset.json new file mode 100644 index 0000000..8d2612c --- /dev/null +++ b/Presets/Gradient_Line/preset.json @@ -0,0 +1,4 @@ +{ + "source": "nvg://advp.widget.mashiros.top/widget", + "settings": "settings.xml" +} \ No newline at end of file diff --git a/Presets/Gradient_Line/preview.png b/Presets/Gradient_Line/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..46191eb654ca7e0152d7de956337baf966545333 GIT binary patch literal 5383 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 literal 0 HcmV?d00001 diff --git a/Presets/Gradient_Line/settings.xml b/Presets/Gradient_Line/settings.xml new file mode 100644 index 0000000..9834129 --- /dev/null +++ b/Presets/Gradient_Line/settings.xml @@ -0,0 +1,5 @@ + + + "nvg://advp.widget.mashiros.top/advp-style-preset/line" + {"Gradient Style":1,"Linear Gradient Settings":{"Gradient Direction":0,"Start Position Color":"#f44336","Middle Position Color":"#4caf50","End Position Color":"#03a9f4"},"Radial Gradient Settings":{"Inside Position Color":"#f44336","Middle Position Color":"#4caf50","Outside Position Color":"#03a9f4","Inside Position":0,"Middle Position":50,"Outside Position":100,"Center X Offset":0,"Center Y Offset":0},"Center Line":true,"Center Color":"#ff4500","Center Width":20,"Direction":0,"Line Color":"#ff4500","Line Position":0,"Data Length":0,"Channel":2,"Rotate Settings":{"Center Enable":false,"Center Angle":10,"Line Enable":false,"Line Angle":10,"X Scale":100,"Y Scale":100,"X Offset":0,"Y Offset":0},"Data Settings":{"Auto Normalizing":true,"Amplitude":10,"Unit Style":0}} + \ No newline at end of file diff --git a/Presets/Line/settings.xml b/Presets/Line/settings.xml index cfe4c52..a7efee6 100644 --- a/Presets/Line/settings.xml +++ b/Presets/Line/settings.xml @@ -1,5 +1,5 @@ - {"Enable Gradient":false,"Gradient Direction":0,"Start Position Color":"#f44336","Middle Position Color":"#4caf50","End Position Color":"#03a9f4","Center Line":true,"Center Color":"#ff4500","Center Width":20,"Line Color":"#ff4500","Line Position":0,"Data Length":0,"Channel":2,"Direction":0,"Rotate Settings":{"Center Enable":false,"Center Angle":10,"Line Enable":false,"Line Angle":10,"X Scale":100,"Y Scale":100,"X Offset":0,"Y Offset":0},"Data Settings":{"Auto Normalizing":true,"Amplitude":10,"Unit Style":0}} + {"Gradient Style":0,"Linear Gradient Settings":{"Gradient Direction":0,"Start Position Color":"#f44336","Middle Position Color":"#4caf50","End Position Color":"#03a9f4"},"Radial Gradient Settings":{"Inside Position Color":"#f44336","Middle Position Color":"#4caf50","Outside Position Color":"#03a9f4","Inside Position":0,"Middle Position":50,"Outside Position":100,"Center X Offset":0,"Center Y Offset":0},"Center Line":true,"Center Color":"#ff4500","Center Width":20,"Direction":0,"Line Color":"#ff4500","Line Position":0,"Data Length":0,"Channel":2,"Rotate Settings":{"Center Enable":false,"Center Angle":10,"Line Enable":false,"Line Angle":10,"X Scale":100,"Y Scale":100,"X Offset":0,"Y Offset":0},"Data Settings":{"Auto Normalizing":true,"Amplitude":10,"Unit Style":0}} "nvg://advp.widget.mashiros.top/advp-style-preset/line" \ No newline at end of file diff --git a/Presets/Solidcircle/settings.xml b/Presets/Solidcircle/settings.xml index 85e540d..5a3029c 100644 --- a/Presets/Solidcircle/settings.xml +++ b/Presets/Solidcircle/settings.xml @@ -1,5 +1,5 @@ "nvg://advp.widget.mashiros.top/advp-style-preset/solidcircle" - {"Gradient Style":0,"Radial Gradient Settings":{"Inside Position Color":"#f44336","Middle Position Color":"#4caf50","Outside Position Color":"#03a9f4","Inside Position":40,"Middle Position":60,"Outside Position":80},"Conical Gradient Settings":{"Start Position Color":"#f44336","Quarter Position Color":"#4caf50","Middle Position Color":"#03a9f4","End Position Color":"#ffeb3b"},"Main Color":"#ff4500","Line Position":0,"Line Width":1,"Max Range":80,"Data Length":0,"Channel":2,"Reverse":false,"Rotate":false,"Ratate Speed":10,"Angle":0,"Data Settings":{"Auto Normalizing":true,"Amplitude":10,"Unit Style":0}} + {"Gradient Style":0,"Radial Gradient Settings":{"Inside Position Color":"#f44336","Middle Position Color":"#4caf50","Outside Position Color":"#03a9f4","Inside Position":40,"Middle Position":60,"Outside Position":80},"Conical Gradient Settings":{"Start Position Color":"#f44336","Quarter Position Color":"#4caf50","Middle Position Color":"#03a9f4","End Position Color":"#ffeb3b"},"Main Color":"#ff4500","Line Position":0,"Line Width":1,"Max Range":80,"Data Length":0,"Channel":2,"Reverse":false,"Rotate":false,"Rotation Direction":0,"Ratate Speed":10,"Angle":0,"Data Settings":{"Auto Normalizing":true,"Amplitude":10,"Unit Style":0}} \ No newline at end of file diff --git a/Presets/Waves/settings.xml b/Presets/Waves/settings.xml index f519fd9..1cc083d 100644 --- a/Presets/Waves/settings.xml +++ b/Presets/Waves/settings.xml @@ -1,5 +1,5 @@ "nvg://advp.widget.mashiros.top/advp-style-preset/waves" - {"Enable Gradient":false,"Gradient Direction":0,"Start Position Color":"#f44336","Middle Position Color":"#4caf50","End Position Color":"#03a9f4","Direction":0,"Line Color":"#ff4500","Line Width":1,"Data Length":0,"Rotate Settings":{"Center Enable":false,"Center Angle":10,"Line Enable":false,"Line Angle":10,"X Scale":100,"Y Scale":100,"X Offset":0,"Y Offset":0},"Data Settings":{"Auto Normalizing":true,"Amplitude":10,"Unit Style":0}} + {"Gradient Style":0,"Linear Gradient Settings":{"Gradient Direction":0,"Start Position Color":"#f44336","Middle Position Color":"#4caf50","End Position Color":"#03a9f4"},"Radial Gradient Settings":{"Inside Position Color":"#f44336","Middle Position Color":"#4caf50","Outside Position Color":"#03a9f4","Inside Position":0,"Middle Position":50,"Outside Position":100,"Center X Offset":0,"Center Y Offset":0},"Direction":0,"Line Color":"#ff4500","Line Width":1,"Data Length":0,"Rotate Settings":{"Center Enable":false,"Center Angle":10,"Line Enable":false,"Line Angle":10,"X Scale":100,"Y Scale":100,"X Offset":0,"Y Offset":0},"Data Settings":{"Auto Normalizing":true,"Amplitude":10,"Unit Style":0}} \ No newline at end of file diff --git a/package.json b/package.json index 09ea770..f12c798 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "top.mashiros.widget.advp", - "version": "1.4.0", + "version": "1.4.1", "title": { "en": "ADV Plugin", diff --git a/qml/Common.qml b/qml/Common.qml index 09fab2c..dc83255 100644 --- a/qml/Common.qml +++ b/qml/Common.qml @@ -179,8 +179,10 @@ Item { if (force || !debug && wsocket.active && rebootFlag) { console.log("Try to reboot ADVServer..."); execute(serverEXE, "-reboot"); - wsocket.active = false; - wsocket.active = true; + if (widgetsNum) { + wsocket.active = false; + wsocket.active = true; + } rebootFlag = false; } } diff --git a/qml/api/AdvpCanvasTemplate.qml b/qml/api/AdvpCanvasTemplate.qml index 3be503f..e1b9feb 100644 --- a/qml/api/AdvpCanvasTemplate.qml +++ b/qml/api/AdvpCanvasTemplate.qml @@ -20,7 +20,7 @@ Canvas { return Common.updateObject(Common.deepClone(target), Common.deepClone(source)); } - onVersionUpdated: { + function updateConfiguration() { delete widget.settings[widget.settings.current_style]["Version"]; widget.settings[widget.settings.current_style] = updateObject(defaultValues, widget.settings[widget.settings.current_style]); } diff --git a/styles/Preset_Ordinal_Scale_UI_bottom/Style.qml b/styles/Preset_Ordinal_Scale_UI_bottom/Style.qml index 6ace99c..946c0a5 100644 --- a/styles/Preset_Ordinal_Scale_UI_bottom/Style.qml +++ b/styles/Preset_Ordinal_Scale_UI_bottom/Style.qml @@ -115,6 +115,10 @@ AdvpStyleTemplate { audioData[i] = 0; } } + + onVersionUpdated: { + updateConfiguration(); + } } defaultValues: { diff --git a/styles/Preset_circle/Style.qml b/styles/Preset_circle/Style.qml index fb54291..0703fe2 100644 --- a/styles/Preset_circle/Style.qml +++ b/styles/Preset_circle/Style.qml @@ -1,42 +1,56 @@ import QtQuick 2.12 import QtGraphicalEffects 1.12 +import QtQuick.Shapes 1.12 import NERvGear.Preferences 1.0 as P import "../../qml/api" AdvpStyleTemplate { - style: Rectangle { - id: main - width: widget.width; - height: widget.height; + style: Shape { + id: shape + width: widget.width + height: widget.height property int gradientStyle + property string main_color: "transparent" + + LinearGradient { + id: pureGradient + GradientStop { color: main_color} + } RadialGradient { id: radialGradient - anchors.fill: parent - visible: gradientStyle===1 - horizontalRadius: Math.min(width, height)/2 - verticalRadius: horizontalRadius - gradient: Gradient { - GradientStop {id: radialGradient_pstart} - GradientStop {id: radialGradient_pmiddle} - GradientStop {id: radialGradient_pend} - } + centerX: widget.width/2 + centerY: widget.height/2 + focalX: centerX + focalY: centerY + centerRadius: Math.min(width, height)/2 + GradientStop {id: radialGradient_pstart; color: "transparent"} + GradientStop {id: radialGradient_pmiddle; color: "transparent"} + GradientStop {id: radialGradient_pend; color: "transparent"} } ConicalGradient { id: conicalGradient - anchors.fill: parent - visible: gradientStyle===2 - angle: -90; - gradient: Gradient { - GradientStop{id: conicalGradient_pstart; position: 0.0} - GradientStop{id: conicalGradient_pquarter; position: 0.25} - GradientStop {id: conicalGradient_phalf; position: 0.5} - GradientStop {id: conicalGradient_p3quarter; position: 0.75} - GradientStop{id: conicalGradient_pend; position: 1.0} - } + angle: -90 + centerX: widget.width/2 + centerY: widget.height/2 + GradientStop{id: conicalGradient_pstart; position: 0.0; color: "transparent"} + GradientStop{id: conicalGradient_pquarter; position: 0.25; color: "transparent"} + GradientStop {id: conicalGradient_phalf; position: 0.5; color: "transparent"} + GradientStop {id: conicalGradient_p3quarter; position: 0.75; color: "transparent"} + GradientStop{id: conicalGradient_pend; position: 1.0; color: "transparent"} + } + + ShapePath { + id: main + fillGradient: [pureGradient, radialGradient, conicalGradient][gradientStyle] + startX: -1 + startY: -1 + PathLine { x: widget.width+1; y: -1 } + PathLine { x: widget.width+1; y: widget.height+1 } + PathLine { x: -1; y: widget.height+1 } } layer.enabled: true @@ -57,6 +71,7 @@ AdvpStyleTemplate { readonly property bool autoNormalizing: configs["Data Settings"]["Auto Normalizing"] readonly property real amplitude: 400/configs["Data Settings"]["Amplitude"] readonly property int unitStyle: configs["Data Settings"]["Unit Style"] + readonly property int rotationDirection: configs["Rotation Direction"] readonly property int total: channel*dataLength @@ -79,7 +94,7 @@ AdvpStyleTemplate { onConfigsUpdated: { gradientStyle = configs["Gradient Style"]; context.lineWidth = configs["Line Width"]; - main.color = configs["Main Color"]; + main_color = configs["Main Color"]; if (gradientStyle === 1) { radialGradient_pstart.color = configs["Radial Gradient Settings"]["Inside Position Color"]; radialGradient_pstart.position = configs["Radial Gradient Settings"]["Inside Position"]/100; @@ -104,7 +119,7 @@ AdvpStyleTemplate { for (let j=0; j < channel; j++) { for (let i=0; i < dataLength; i++) { - deg = degUnit*((i+j*dataLength)*dotGap+offsetAngle); + deg = degUnit*((i+j*dataLength)*dotGap+offsetAngle*(1-2*rotationDirection)); deltaR = audioData[reverse*(dataLength-i-1)+(!reverse)*(i+j*dataLength)] * ratio; r1 = _rhmLen+1+deltaR*(linePosition!==2); r2 = _rhmLen-1-deltaR*(linePosition!==1); @@ -112,7 +127,7 @@ AdvpStyleTemplate { innerPos.push([halfWidth+Math.cos(deg)*r2,halfHeight+Math.sin(deg)*r2]); } } - conicalGradient.rotation = offsetAngle; + conicalGradient.angle = offsetAngle*(2*rotationDirection-1); offsetAngle = rotateFlag ? ((offsetAngle + rSpeed) % 360) : angle; } @@ -155,12 +170,16 @@ AdvpStyleTemplate { audioData[i] = 0; } } + + onVersionUpdated: { + updateConfiguration(); + } } } } defaultValues: { - "Version": "1.2.0", + "Version": "1.2.2", "Gradient Style": 0, "Radial Gradient Settings": { "Inside Position Color": "#f44336", @@ -184,6 +203,7 @@ AdvpStyleTemplate { "Channel": 2, "Reverse": false, "Rotate": false, + "Rotation Direction": 0, "Ratate Speed": 10, "Angle": 0, "Data Settings": { @@ -362,6 +382,13 @@ AdvpStyleTemplate { defaultValue: defaultValues["Rotate"] } + P.SelectPreference { + name: "Rotation Direction" + label: qsTr("Rotation Direction") + defaultValue: defaultValues["Rotation Direction"] + model: [qsTr("Clockwise"), qsTr("Counterclockwise")] + } + P.SliderPreference { name: "Ratate Speed" label: qsTr("Ratate Speed") diff --git a/styles/Preset_line/Style.qml b/styles/Preset_line/Style.qml index 86bf86b..179059b 100644 --- a/styles/Preset_line/Style.qml +++ b/styles/Preset_line/Style.qml @@ -1,33 +1,60 @@ import QtQuick 2.12 import QtGraphicalEffects 1.12 +import QtQuick.Shapes 1.12 import NERvGear.Preferences 1.0 as P import "../../qml/api" AdvpStyleTemplate { - style: Rectangle { - id: main - width: widget.width; - height: widget.height; + style: Shape { + width: widget.width + height: widget.height + + property int gradientStyle + + LinearGradient { + id: linearGradient + GradientStop { id: p_start; color: "transparent"; position: 0.0 } + GradientStop { id: p_middle; color: "transparent"; position: 0.5 } + GradientStop { id: p_end; color: "transparent"; position: 1.0 } + } + + LinearGradient { + id: pureGradient + GradientStop { color: main_color} + } + + RadialGradient { + id: radialGradient + centerX: widget.width/2*(1+radialGradient_xOffset/100) + centerY: widget.height/2*(1+radialGradient_yOffset/100) + focalX: centerX + focalY: centerY + centerRadius: Math.max(width, height)/2 + GradientStop {id: radialGradient_pstart; color: "transparent"} + GradientStop {id: radialGradient_pmiddle; color: "transparent"} + GradientStop {id: radialGradient_pend; color: "transparent"} + } + + ShapePath { + id: main + fillGradient: [pureGradient, linearGradient, radialGradient][gradientStyle] + startX: -1 + startY: -1 + PathLine { x: widget.width+1; y: -1 } + PathLine { x: widget.width+1; y: widget.height+1 } + PathLine { x: -1; y: widget.height+1 } + } - property bool gradientEnable property bool centerLineFlag property string center_color property real center_width property int linePosition + property string main_color: "transparent" property bool vertical_flag property real _y_dy - - 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 } - } - } + property real radialGradient_xOffset + property real radialGradient_yOffset Canvas { id: centerLine @@ -35,7 +62,7 @@ AdvpStyleTemplate { contextType: "2d" renderTarget: Canvas.FramebufferObject renderStrategy: Canvas.Cooperative - visible: centerLineFlag && !gradientEnable + visible: centerLineFlag && !gradientStyle onPaint: { context.clearRect(0, 0, width+32, height+32); context.fillStyle = center_color; @@ -89,16 +116,19 @@ AdvpStyleTemplate { readonly property real _dx: Math.round(_ux/2) onWidthChanged: { - if (gradientEnable) { - gradient_mask.end = Qt.point(width*(configs["Gradient Direction"]!==1), height*(configs["Gradient Direction"]%2)); + if (gradientStyle === 1) { + linearGradient.x2 = width*(configs["Linear Gradient Settings"]["Gradient Direction"]!==1); + linearGradient.y2 = height*(configs["Linear Gradient Settings"]["Gradient Direction"]%2); } centerLine.requestPaint(); } onHeightChanged: { - 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)); + if (gradientStyle === 1) { + linearGradient.x1 = 0; + linearGradient.y1 = height*(configs["Linear Gradient Settings"]["Gradient Direction"]===2); + linearGradient.x2 = width*(configs["Linear Gradient Settings"]["Gradient Direction"]!==1); + linearGradient.y2 = height*(configs["Linear Gradient Settings"]["Gradient Direction"]%2); } centerLine.requestPaint(); } @@ -110,16 +140,27 @@ AdvpStyleTemplate { center_width = configs["Center Width"]/10; linePosition = configs["Line Position"]; vertical_flag = configs["Direction"]; - gradientEnable = configs["Enable Gradient"]; + gradientStyle = configs["Gradient Style"]; context.lineWidth = configs["Line Width"]; - main.color = configs["Line Color"]; + main_color = configs["Line Color"]; _y_dy = configs["Rotate Settings"]["Center Enable"]*Math.tan(configs["Rotate Settings"]["Center Angle"]*Math.PI/180)*(vertical_flag ? height/2 : width/2); - 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"]; + if (gradientStyle === 1) { + linearGradient.x1 = 0; + linearGradient.y1 = height*(configs["Linear Gradient Settings"]["Gradient Direction"]===2); + linearGradient.x2 = width*(configs["Linear Gradient Settings"]["Gradient Direction"]!==1); + linearGradient.y2 = height*(configs["Linear Gradient Settings"]["Gradient Direction"]%2); + p_start.color = configs["Linear Gradient Settings"]["Start Position Color"]; + p_middle.color = configs["Linear Gradient Settings"]["Middle Position Color"]; + p_end.color = configs["Linear Gradient Settings"]["End Position Color"]; + } else if (gradientStyle === 2) { + radialGradient_pstart.color = configs["Radial Gradient Settings"]["Inside Position Color"]; + radialGradient_pstart.position = configs["Radial Gradient Settings"]["Inside Position"]/100; + radialGradient_pmiddle.color = configs["Radial Gradient Settings"]["Middle Position Color"]; + radialGradient_pmiddle.position = configs["Radial Gradient Settings"]["Middle Position"]/100; + radialGradient_pend.color = configs["Radial Gradient Settings"]["Outside Position Color"]; + radialGradient_pend.position = configs["Radial Gradient Settings"]["Outside Position"]/100; + radialGradient_xOffset = configs["Radial Gradient Settings"]["Center X Offset"]; + radialGradient_yOffset = configs["Radial Gradient Settings"]["Center Y Offset"]; } centerLine.requestPaint(); } @@ -247,25 +288,51 @@ AdvpStyleTemplate { } onVersionUpdated: { + //1.2.0 -> 1.3.0 if (widget.settings.current_style === "nvg://advp.widget.mashiros.top/advp-style-preset/gradient_line") { widget.settings.current_style = "nvg://advp.widget.mashiros.top/advp-style-preset/line"; widget.settings[widget.settings.current_style] = updateObject(widget.settings["nvg://advp.widget.mashiros.top/advp-style-preset/gradient_line"], widget.settings[widget.settings.current_style]); - widget.settings[widget.settings.current_style]["Enable Gradient"] = true; + widget.settings[widget.settings.current_style]["Enable Gradient"] = 1; + } + //1.3.0 -> 1.3.2 + if(widget.settings[widget.settings.current_style]["Gradient Style"] === undefined) { + if (widget.settings[widget.settings.current_style]["Enable Gradient"] === undefined) { + widget.settings[widget.settings.current_style]["Gradient Style"] = 0; + } else { + widget.settings[widget.settings.current_style]["Gradient Style"] = widget.settings[widget.settings.current_style]["Enable Gradient"]+0; + } + widget.settings[widget.settings.current_style]["Linear Gradient Settings"] = { + "Gradient Direction": widget.settings[widget.settings.current_style]["Gradient Direction"], + "Start Position Color": widget.settings[widget.settings.current_style]["Start Position Color"], + "Middle Position Color": widget.settings[widget.settings.current_style]["Middle Position Color"], + "End Position Color": widget.settings[widget.settings.current_style]["End Position Color"] + }; } - delete widget.settings[widget.settings.current_style]["Version"]; - widget.settings[widget.settings.current_style] = updateObject(defaultValues, widget.settings[widget.settings.current_style]); + updateConfiguration(); } } } } defaultValues: { - "Version": "1.3.0", - "Enable Gradient": false, - "Gradient Direction": 0, - "Start Position Color": "#f44336", - "Middle Position Color": "#4caf50", - "End Position Color": "#03a9f4", + "Version": "1.3.2", + "Gradient Style": 0, + "Linear Gradient Settings": { + "Gradient Direction": 0, + "Start Position Color": "#f44336", + "Middle Position Color": "#4caf50", + "End Position Color": "#03a9f4" + }, + "Radial Gradient Settings": { + "Inside Position Color": "#f44336", + "Middle Position Color": "#4caf50", + "Outside Position Color": "#03a9f4", + "Inside Position": 0, + "Middle Position": 50, + "Outside Position": 100, + "Center X Offset": 0, + "Center Y Offset": 0 + }, "Center Line": true, "Center Color": "#ff4500", "Center Width": 20, @@ -294,40 +361,121 @@ AdvpStyleTemplate { preference: AdvpPreference { version: defaultValues["Version"] - P.SwitchPreference { - id: _cfg_enable_gradient - name: "Enable Gradient" - label: qsTr("Enable Gradient") - defaultValue: defaultValues["Enable Gradient"] - } - P.SelectPreference { - name: "Gradient Direction" - label: qsTr("Gradient Direction") - visible: _cfg_enable_gradient.value - defaultValue: defaultValues["Gradient Direction"] - model: [qsTr("Horizontal"), qsTr("Vertical"), qsTr("Oblique Upward"), qsTr("Oblique downward")] + id: _cfg_gradient_style + name: "Gradient Style" + label: qsTr("Gradient Style") + defaultValue: defaultValues["Gradient Style"] + model: [qsTr("None"), qsTr("Linear Gradient"), qsTr("Radial Gradient")] } - P.ColorPreference { - name: "Start Position Color" - label: qsTr("Start Position Color") - visible: _cfg_enable_gradient.value - defaultValue: defaultValues["Start Position Color"] - } + P.DialogPreference { + name: "Linear Gradient Settings" + label: qsTr("Linear Gradient Settings") + live: true + visible: _cfg_gradient_style.value===1 - P.ColorPreference { - name: "Middle Position Color" - label: qsTr("Middle Position Color") - visible: _cfg_enable_gradient.value - defaultValue: defaultValues["Middle Position Color"] + P.SelectPreference { + name: "Gradient Direction" + label: qsTr("Gradient Direction") + defaultValue: defaultValues["Linear Gradient Settings"]["Gradient Direction"] + model: [qsTr("Horizontal"), qsTr("Vertical"), qsTr("Oblique Upward"), qsTr("Oblique downward")] + } + + P.ColorPreference { + name: "Start Position Color" + label: qsTr("Start Position Color") + defaultValue: defaultValues["Linear Gradient Settings"]["Start Position Color"] + } + + P.ColorPreference { + name: "Middle Position Color" + label: qsTr("Middle Position Color") + defaultValue: defaultValues["Linear Gradient Settings"]["Middle Position Color"] + } + + P.ColorPreference { + name: "End Position Color" + label: qsTr("End Position Color") + defaultValue: defaultValues["Linear Gradient Settings"]["End Position Color"] + } } - P.ColorPreference { - name: "End Position Color" - label: qsTr("End Position Color") - visible: _cfg_enable_gradient.value - defaultValue: defaultValues["End Position Color"] + P.DialogPreference { + name: "Radial Gradient Settings" + label: qsTr("Radial Gradient Settings") + live: true + visible: _cfg_gradient_style.value===2 + + P.ColorPreference { + name: "Inside Position Color" + label: qsTr("Inside Position Color") + defaultValue: defaultValues["Radial Gradient Settings"]["Inside Position Color"] + } + + P.ColorPreference { + name: "Middle Position Color" + label: qsTr("Middle Position Color") + defaultValue: defaultValues["Radial Gradient Settings"]["Middle Position Color"] + } + + P.ColorPreference { + name: "Outside Position Color" + label: qsTr("Outside Position Color") + defaultValue: defaultValues["Radial Gradient Settings"]["Outside Position Color"] + } + + P.SliderPreference { + id: _cfg_gradient_settings_inside_position + name: "Inside Position" + label: qsTr("Inside Position") + from: 0 + to: 75 + stepSize: 1 + defaultValue: defaultValues["Radial Gradient Settings"]["Inside Position"] + displayValue: value + "%" + } + + P.SliderPreference { + id: _cfg_gradient_settings_middle_position + name: "Middle Position" + label: qsTr("Middle Position") + from: _cfg_gradient_settings_inside_position.value + 1 + to: 90 + stepSize: 1 + defaultValue: defaultValues["Radial Gradient Settings"]["Middle Position"] + displayValue: value + "%" + } + + P.SliderPreference { + name: "Outside Position" + label: qsTr("Outside Position") + from: _cfg_gradient_settings_middle_position.value + 1 + to: 100 + stepSize: 1 + defaultValue: defaultValues["Radial Gradient Settings"]["Outside Position"] + displayValue: value + "%" + } + + P.SliderPreference { + name: "Center X Offset" + label: qsTr("X Offset") + from: -100 + to: 100 + stepSize: 1 + defaultValue: defaultValues["Radial Gradient Settings"]["Center X Offset"] + displayValue: value + "%" + } + + P.SliderPreference { + name: "Center Y Offset" + label: qsTr("Y Offset") + from: -100 + to: 100 + stepSize: 1 + defaultValue: defaultValues["Radial Gradient Settings"]["Center Y Offset"] + displayValue: value + "%" + } } P.Separator {} @@ -342,7 +490,7 @@ AdvpStyleTemplate { P.ColorPreference { name: "Center Color" label: qsTr("Center Line Color") - visible: !_cfg_enable_gradient.value && _cfg_preset_line_Center_Line.value + visible: !_cfg_gradient_style.value && _cfg_preset_line_Center_Line.value defaultValue: defaultValues["Center Color"] } @@ -370,7 +518,7 @@ AdvpStyleTemplate { P.ColorPreference { name: "Line Color" label: qsTr("Spectrum Line Color") - visible: !_cfg_enable_gradient.value + visible: !_cfg_gradient_style.value defaultValue: defaultValues["Line Color"] } diff --git a/styles/Preset_solidcircle/Style.qml b/styles/Preset_solidcircle/Style.qml index 069825e..c6e27f7 100644 --- a/styles/Preset_solidcircle/Style.qml +++ b/styles/Preset_solidcircle/Style.qml @@ -1,42 +1,56 @@ import QtQuick 2.12 import QtGraphicalEffects 1.12 +import QtQuick.Shapes 1.12 import NERvGear.Preferences 1.0 as P import "../../qml/api" AdvpStyleTemplate { - style: Rectangle { - id: main - width: widget.width; - height: widget.height; + style: Shape { + id: shape + width: widget.width + height: widget.height property int gradientStyle + property string main_color: "transparent" + + LinearGradient { + id: pureGradient + GradientStop { color: main_color} + } RadialGradient { id: radialGradient - anchors.fill: parent - visible: gradientStyle===1 - horizontalRadius: Math.min(width, height)/2 - verticalRadius: horizontalRadius - gradient: Gradient { - GradientStop {id: radialGradient_pstart} - GradientStop {id: radialGradient_pmiddle} - GradientStop {id: radialGradient_pend} - } + centerX: widget.width/2 + centerY: widget.height/2 + focalX: centerX + focalY: centerY + centerRadius: Math.min(width, height)/2 + GradientStop {id: radialGradient_pstart; color: "transparent"} + GradientStop {id: radialGradient_pmiddle; color: "transparent"} + GradientStop {id: radialGradient_pend; color: "transparent"} } ConicalGradient { id: conicalGradient - anchors.fill: parent - visible: gradientStyle===2 - angle: -90; - gradient: Gradient { - GradientStop{id: conicalGradient_pstart; position: 0.0} - GradientStop{id: conicalGradient_pquarter; position: 0.25} - GradientStop {id: conicalGradient_phalf; position: 0.5} - GradientStop {id: conicalGradient_p3quarter; position: 0.75} - GradientStop{id: conicalGradient_pend; position: 1.0} - } + angle: -90 + centerX: widget.width/2 + centerY: widget.height/2 + GradientStop{id: conicalGradient_pstart; position: 0.0; color: "transparent"} + GradientStop{id: conicalGradient_pquarter; position: 0.25; color: "transparent"} + GradientStop {id: conicalGradient_phalf; position: 0.5; color: "transparent"} + GradientStop {id: conicalGradient_p3quarter; position: 0.75; color: "transparent"} + GradientStop{id: conicalGradient_pend; position: 1.0; color: "transparent"} + } + + ShapePath { + id: main + fillGradient: [pureGradient, radialGradient, conicalGradient][gradientStyle] + startX: -1 + startY: -1 + PathLine { x: widget.width+1; y: -1 } + PathLine { x: widget.width+1; y: widget.height+1 } + PathLine { x: -1; y: widget.height+1 } } layer.enabled: true @@ -57,6 +71,7 @@ AdvpStyleTemplate { readonly property bool autoNormalizing: configs["Data Settings"]["Auto Normalizing"] readonly property real amplitude: 400/configs["Data Settings"]["Amplitude"] readonly property int unitStyle: configs["Data Settings"]["Unit Style"] + readonly property int rotationDirection: configs["Rotation Direction"] readonly property int total: channel*dataLength @@ -79,7 +94,7 @@ AdvpStyleTemplate { onConfigsUpdated: { gradientStyle = configs["Gradient Style"]; context.lineWidth = configs["Line Width"]; - main.color = configs["Main Color"]; + main_color = configs["Main Color"]; if (gradientStyle === 1) { radialGradient_pstart.color = configs["Radial Gradient Settings"]["Inside Position Color"]; radialGradient_pstart.position = configs["Radial Gradient Settings"]["Inside Position"]/100; @@ -104,7 +119,7 @@ AdvpStyleTemplate { for (let j=0; j < channel; j++) { for (let i=0; i < dataLength; i++) { - deg = degUnit*((i+j*dataLength)*dotGap+offsetAngle); + deg = degUnit*((i+j*dataLength)*dotGap+offsetAngle*(1-2*rotationDirection)); deltaR = audioData[reverse*(dataLength-i-1)+(!reverse)*(i+j*dataLength)] * ratio; r1 = _rhmLen+1+deltaR*(linePosition!==2); r2 = _rhmLen-1-deltaR*(linePosition!==1); @@ -112,7 +127,7 @@ AdvpStyleTemplate { innerPos.push([halfWidth+Math.cos(deg)*r2,halfHeight+Math.sin(deg)*r2]); } } - conicalGradient.rotation = offsetAngle; + conicalGradient.angle = offsetAngle*(2*rotationDirection-1); offsetAngle = rotateFlag ? ((offsetAngle + rSpeed) % 360) : angle; } @@ -171,12 +186,16 @@ AdvpStyleTemplate { audioData[i] = 0; } } + + onVersionUpdated: { + updateConfiguration(); + } } } } defaultValues: { - "Version": "1.2.0", + "Version": "1.2.2", "Gradient Style": 0, "Radial Gradient Settings": { "Inside Position Color": "#f44336", @@ -200,6 +219,7 @@ AdvpStyleTemplate { "Channel": 2, "Reverse": false, "Rotate": false, + "Rotation Direction": 0, "Ratate Speed": 10, "Angle": 0, "Data Settings": { @@ -378,6 +398,13 @@ AdvpStyleTemplate { defaultValue: defaultValues["Rotate"] } + P.SelectPreference { + name: "Rotation Direction" + label: qsTr("Rotation Direction") + defaultValue: defaultValues["Rotation Direction"] + model: [qsTr("Clockwise"), qsTr("Counterclockwise")] + } + P.SliderPreference { name: "Ratate Speed" label: qsTr("Ratate Speed") diff --git a/styles/Preset_waves/Style.qml b/styles/Preset_waves/Style.qml index 351d41d..c574bc9 100644 --- a/styles/Preset_waves/Style.qml +++ b/styles/Preset_waves/Style.qml @@ -1,26 +1,52 @@ import QtQuick 2.12 import QtGraphicalEffects 1.12 +import QtQuick.Shapes 1.12 import NERvGear.Preferences 1.0 as P import "../../qml/api" AdvpStyleTemplate { - style: Rectangle { - id: main - width: widget.width; - height: widget.height; + style: Shape { + width: widget.width + height: widget.height - property bool gradientEnable + property int gradientStyle + property string main_color: "transparent" + property real radialGradient_xOffset + property real radialGradient_yOffset 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 } - } + id: pureGradient + GradientStop { color: main_color} + } + + LinearGradient { + id: linearGradient + GradientStop { id: p_start; color: "transparent"; position: 0.0 } + GradientStop { id: p_middle; color: "transparent"; position: 0.5 } + GradientStop { id: p_end; color: "transparent"; position: 1.0 } + } + + RadialGradient { + id: radialGradient + centerX: widget.width/2*(1+radialGradient_xOffset/100) + centerY: widget.height/2*(1+radialGradient_yOffset/100) + focalX: centerX + focalY: centerY + centerRadius: Math.max(width, height)/2 + GradientStop {id: radialGradient_pstart; color: "transparent"} + GradientStop {id: radialGradient_pmiddle; color: "transparent"} + GradientStop {id: radialGradient_pend; color: "transparent"} + } + + ShapePath { + id: main + fillGradient: [pureGradient, linearGradient, radialGradient][gradientStyle] + startX: -1 + startY: -1 + PathLine { x: widget.width+1; y: -1 } + PathLine { x: widget.width+1; y: widget.height+1 } + PathLine { x: -1; y: widget.height+1 } } layer.enabled: true @@ -54,25 +80,43 @@ AdvpStyleTemplate { 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)); + if (gradientStyle === 1) { + linearGradient.x2 = width*(configs["Linear Gradient Settings"]["Gradient Direction"]!==1); + linearGradient.y2 = height*(configs["Linear Gradient Settings"]["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)); + if (gradientStyle === 1) { + linearGradient.x1 = 0; + linearGradient.y1 = height*(configs["Linear Gradient Settings"]["Gradient Direction"]===2); + linearGradient.x2 = width*(configs["Linear Gradient Settings"]["Gradient Direction"]!==1); + linearGradient.y2 = height*(configs["Linear Gradient Settings"]["Gradient Direction"]%2); + } } onConfigsUpdated: { //尽量不要使用绑定configs的属性以免造成竞争,若一定要使用推荐使用Qt.callLater(()=>{}) - gradientEnable = configs["Enable Gradient"]; + gradientStyle = configs["Gradient Style"]; 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"]; + main_color = configs["Line Color"]; + if (gradientStyle === 1) { + linearGradient.x1 = 0; + linearGradient.y1 = height*(configs["Linear Gradient Settings"]["Gradient Direction"]===2); + linearGradient.x2 = width*(configs["Linear Gradient Settings"]["Gradient Direction"]!==1); + linearGradient.y2 = height*(configs["Linear Gradient Settings"]["Gradient Direction"]%2); + p_start.color = configs["Linear Gradient Settings"]["Start Position Color"]; + p_middle.color = configs["Linear Gradient Settings"]["Middle Position Color"]; + p_end.color = configs["Linear Gradient Settings"]["End Position Color"]; + } else if (gradientStyle === 2) { + radialGradient_pstart.color = configs["Radial Gradient Settings"]["Inside Position Color"]; + radialGradient_pstart.position = configs["Radial Gradient Settings"]["Inside Position"]/100; + radialGradient_pmiddle.color = configs["Radial Gradient Settings"]["Middle Position Color"]; + radialGradient_pmiddle.position = configs["Radial Gradient Settings"]["Middle Position"]/100; + radialGradient_pend.color = configs["Radial Gradient Settings"]["Outside Position Color"]; + radialGradient_pend.position = configs["Radial Gradient Settings"]["Outside Position"]/100; + radialGradient_xOffset = configs["Radial Gradient Settings"]["Center X Offset"]; + radialGradient_yOffset = configs["Radial Gradient Settings"]["Center Y Offset"]; } } @@ -149,17 +193,47 @@ AdvpStyleTemplate { audioData[i] = 0; } } + + onVersionUpdated: { + //1.2.0 -> 1.2.2 + if(widget.settings[widget.settings.current_style]["Gradient Style"] === undefined) { + if (widget.settings[widget.settings.current_style]["Enable Gradient"] === undefined) { + widget.settings[widget.settings.current_style]["Gradient Style"] = 0; + } else { + widget.settings[widget.settings.current_style]["Gradient Style"] = widget.settings[widget.settings.current_style]["Enable Gradient"]+0; + } + widget.settings[widget.settings.current_style]["Linear Gradient Settings"] = { + "Gradient Direction": widget.settings[widget.settings.current_style]["Gradient Direction"], + "Start Position Color": widget.settings[widget.settings.current_style]["Start Position Color"], + "Middle Position Color": widget.settings[widget.settings.current_style]["Middle Position Color"], + "End Position Color": widget.settings[widget.settings.current_style]["End Position Color"] + }; + } + updateConfiguration(); + } } } } defaultValues: { - "Version": "1.2.0", - "Enable Gradient": false, - "Gradient Direction": 0, - "Start Position Color": "#f44336", - "Middle Position Color": "#4caf50", - "End Position Color": "#03a9f4", + "Version": "1.2.2", + "Gradient Style": 0, + "Linear Gradient Settings": { + "Gradient Direction": 0, + "Start Position Color": "#f44336", + "Middle Position Color": "#4caf50", + "End Position Color": "#03a9f4" + }, + "Radial Gradient Settings": { + "Inside Position Color": "#f44336", + "Middle Position Color": "#4caf50", + "Outside Position Color": "#03a9f4", + "Inside Position": 0, + "Middle Position": 50, + "Outside Position": 100, + "Center X Offset": 0, + "Center Y Offset": 0 + }, "Line Color": "#ff4500", "Line Width": 1, "Data Length": 0, @@ -184,40 +258,121 @@ AdvpStyleTemplate { preference: AdvpPreference { version: defaultValues["Version"] - P.SwitchPreference { - id: _cfg_enable_gradient - name: "Enable Gradient" - label: qsTr("Enable Gradient") - defaultValue: defaultValues["Enable Gradient"] - } - P.SelectPreference { - name: "Gradient Direction" - label: qsTr("Gradient Direction") - visible: _cfg_enable_gradient.value - defaultValue: defaultValues["Gradient Direction"] - model: [qsTr("Horizontal"), qsTr("Vertical"), qsTr("Oblique Upward"), qsTr("Oblique downward")] + id: _cfg_gradient_style + name: "Gradient Style" + label: qsTr("Gradient Style") + defaultValue: defaultValues["Gradient Style"] + model: [qsTr("None"), qsTr("Linear Gradient"), qsTr("Radial Gradient")] } - P.ColorPreference { - name: "Start Position Color" - label: qsTr("Start Position Color") - visible: _cfg_enable_gradient.value - defaultValue: defaultValues["Start Position Color"] - } + P.DialogPreference { + name: "Linear Gradient Settings" + label: qsTr("Linear Gradient Settings") + live: true + visible: _cfg_gradient_style.value===1 - P.ColorPreference { - name: "Middle Position Color" - label: qsTr("Middle Position Color") - visible: _cfg_enable_gradient.value - defaultValue: defaultValues["Middle Position Color"] + P.SelectPreference { + name: "Gradient Direction" + label: qsTr("Gradient Direction") + defaultValue: defaultValues["Linear Gradient Settings"]["Gradient Direction"] + model: [qsTr("Horizontal"), qsTr("Vertical"), qsTr("Oblique Upward"), qsTr("Oblique downward")] + } + + P.ColorPreference { + name: "Start Position Color" + label: qsTr("Start Position Color") + defaultValue: defaultValues["Linear Gradient Settings"]["Start Position Color"] + } + + P.ColorPreference { + name: "Middle Position Color" + label: qsTr("Middle Position Color") + defaultValue: defaultValues["Linear Gradient Settings"]["Middle Position Color"] + } + + P.ColorPreference { + name: "End Position Color" + label: qsTr("End Position Color") + defaultValue: defaultValues["Linear Gradient Settings"]["End Position Color"] + } } - P.ColorPreference { - name: "End Position Color" - label: qsTr("End Position Color") - visible: _cfg_enable_gradient.value - defaultValue: defaultValues["End Position Color"] + P.DialogPreference { + name: "Radial Gradient Settings" + label: qsTr("Radial Gradient Settings") + live: true + visible: _cfg_gradient_style.value===2 + + P.ColorPreference { + name: "Inside Position Color" + label: qsTr("Inside Position Color") + defaultValue: defaultValues["Radial Gradient Settings"]["Inside Position Color"] + } + + P.ColorPreference { + name: "Middle Position Color" + label: qsTr("Middle Position Color") + defaultValue: defaultValues["Radial Gradient Settings"]["Middle Position Color"] + } + + P.ColorPreference { + name: "Outside Position Color" + label: qsTr("Outside Position Color") + defaultValue: defaultValues["Radial Gradient Settings"]["Outside Position Color"] + } + + P.SliderPreference { + id: _cfg_gradient_settings_inside_position + name: "Inside Position" + label: qsTr("Inside Position") + from: 0 + to: 75 + stepSize: 1 + defaultValue: defaultValues["Radial Gradient Settings"]["Inside Position"] + displayValue: value + "%" + } + + P.SliderPreference { + id: _cfg_gradient_settings_middle_position + name: "Middle Position" + label: qsTr("Middle Position") + from: _cfg_gradient_settings_inside_position.value + 1 + to: 90 + stepSize: 1 + defaultValue: defaultValues["Radial Gradient Settings"]["Middle Position"] + displayValue: value + "%" + } + + P.SliderPreference { + name: "Outside Position" + label: qsTr("Outside Position") + from: _cfg_gradient_settings_middle_position.value + 1 + to: 100 + stepSize: 1 + defaultValue: defaultValues["Radial Gradient Settings"]["Outside Position"] + displayValue: value + "%" + } + + P.SliderPreference { + name: "Center X Offset" + label: qsTr("X Offset") + from: -100 + to: 100 + stepSize: 1 + defaultValue: defaultValues["Radial Gradient Settings"]["Center X Offset"] + displayValue: value + "%" + } + + P.SliderPreference { + name: "Center Y Offset" + label: qsTr("Y Offset") + from: -100 + to: 100 + stepSize: 1 + defaultValue: defaultValues["Radial Gradient Settings"]["Center Y Offset"] + displayValue: value + "%" + } } P.Separator {} @@ -232,7 +387,7 @@ AdvpStyleTemplate { P.ColorPreference { name: "Line Color" label: qsTr("Spectrum Line Color") - visible: !_cfg_enable_gradient.value + visible: !_cfg_gradient_style.value defaultValue: defaultValues["Line Color"] }