From 252effc51484cda5a0fcdd858f5936fe14598072 Mon Sep 17 00:00:00 2001 From: mashiros <490328928@qq.com> Date: Mon, 2 May 2022 23:02:54 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8DText=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E8=BE=B9=E7=BC=98=E8=89=B2=E5=B7=AE=20-=20TopUI.qml=20=20=20-?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E[=E6=9B=B2=E7=BA=BF]=E9=80=89=E9=A1=B9=20?= =?UTF-8?q?=20=20-=20=E6=96=B0=E5=A2=9E[=E5=88=87=E6=8D=A2UI]=E6=8C=82?= =?UTF-8?q?=E4=BB=B6=E5=8A=A8=E4=BD=9C=20-=20BottomUI.qml=20=20=20-=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E[=E6=9B=B2=E7=BA=BF]=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qml/BottomUI.qml | 51 ++++++++++----- qml/TopUI.qml | 186 +++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 152 insertions(+), 85 deletions(-) diff --git a/qml/BottomUI.qml b/qml/BottomUI.qml index 68cf5b9..48480e6 100644 --- a/qml/BottomUI.qml +++ b/qml/BottomUI.qml @@ -18,7 +18,9 @@ T.Widget { property real tmin: 0 editing: styleDialog.active - readonly property var configs: widget.settings.styles ? widget.settings.styles : {"Circle Color":"#fffcf9","Line Color":"#fffcf9","Line Width":38,"Shadow Color":"#e0e0e0","Shadow Size":0.5,"Battle UI":false,"Clock Visible":true,"Full Clock":true,"Font Color":"#f5f5f5","Font Size":44,"Font Name":0,"Font Weight":0,"Text Vertical Offset":16} + readonly property var defaultValues: {"Curve":true,"Circle Color":"#fffcf9","Line Color":"#fffcf9","Line Width":38,"Shadow Color":"#e0e0e0","Shadow Size":0.5,"Battle UI":false,"Clock Visible":true,"Full Clock":true,"Font Color":"#f5f5f5","Font Size":44,"Font Name":0,"Font Weight":0,"Text Vertical Offset":16} + + readonly property var configs: widget.settings.styles property string line_color: configs["Line Color"] property string shadowColor: configs["Shadow Color"] @@ -28,21 +30,24 @@ T.Widget { readonly property real w: widget.width readonly property real r: (w**2+4*h**2)/2/h - property real triangle_size: 24 + onConfigsChanged: { + line.requestPaint(); + triangle.requestPaint(); + } Canvas { id: triangle anchors.centerIn: parent anchors.verticalCenterOffset: height/2 - width: triangle_size - height: triangle_size*Math.sin(Math.PI/6) + width: 0.4*h + height: 0.4*h*Math.sin(Math.PI/6) contextType: "2d" onPaint: { context.reset(); context.clearRect(0,0,width,height); context.shadowBlur = shadowBlur; context.shadowColor = shadowColor; - context.lineWidth = Math.max(0.08*configs["Line Width"] - shadowBlur, 0.1); + context.lineWidth = Math.max(0.08*configs["Line Width"], 0.1); context.strokeStyle = line_color; context.beginPath(); context.moveTo(0,0); @@ -65,11 +70,17 @@ T.Widget { context.clearRect(0,0,width,height); context.shadowBlur = shadowBlur; context.shadowColor = shadowColor; - context.lineWidth = Math.max(0.08*configs["Line Width"] - shadowBlur, 0.1); + context.lineWidth = Math.max(0.08*configs["Line Width"], 0.1); context.strokeStyle = line_color; - let deg = Math.asin(w/2/r)*0.95; - context.beginPath(); - context.arc(w/2, r+h/2, r-shadowBlur/2, deg+Math.PI*3/2, -deg+Math.PI*3/2, true); + if (configs["Curve"]) { + let deg = Math.asin(w/2/r)*0.95; + context.beginPath(); + context.arc(w/2, r+h/2, r, deg+Math.PI*3/2, -deg+Math.PI*3/2, true); + } else { + context.beginPath(); + context.moveTo(0, height/2); + context.lineTo(width, height/2); + } context.stroke(); } } @@ -147,14 +158,18 @@ T.Widget { onPreferenceEdited: { widget.settings.styles = rootPreference.save(); - line.requestPaint(); - triangle.requestPaint(); + } + + P.SwitchPreference { + name: "Curve" + label: qsTr("Curve") + defaultValue: defaultValues["Curve"] } P.ColorPreference { name: "Line Color" label: qsTr("Line Color") - defaultValue: "#fffcf9" + defaultValue: defaultValues["Line Color"] } P.SliderPreference { @@ -163,14 +178,14 @@ T.Widget { from: 1 to: 100 stepSize: 1 - defaultValue: 38 + defaultValue: defaultValues["Line Width"] displayValue: value + "%" } P.ColorPreference { name: "Shadow Color" label: qsTr("Shadow Color") - defaultValue: "#e0e0e0" + defaultValue: defaultValues["Shadow Color"] } P.SliderPreference { @@ -179,7 +194,7 @@ T.Widget { from: 0 to: 3 stepSize: 0.1 - defaultValue: 0.5 + defaultValue: defaultValues["Shadow Size"] displayValue: Math.round(value*10)/10 + "px" } @@ -200,9 +215,11 @@ T.Widget { onClosing: { widget.settings.styles = configuration; styleDialog.active = false; - line.requestPaint(); - triangle.requestPaint(); } } } + + Component.onCompleted: { + widget.settings.styles = widget.settings.styles ?? defaultValues; + } } diff --git a/qml/TopUI.qml b/qml/TopUI.qml index 341d380..ef8cc91 100644 --- a/qml/TopUI.qml +++ b/qml/TopUI.qml @@ -19,10 +19,27 @@ T.Widget { editing: styleDialog.active readonly property var fonts: Qt.fontFamilies() - readonly property var fontweight: ["normal", "bold"] - readonly property var sfontweight: [qsTr("Normal"), qsTr("Bold")] + readonly property var fontweight: [Font.Light, Font.Normal, Font.Bold] + readonly property var sfontweight: [qsTr("Light"), qsTr("Normal"), qsTr("Bold")] + + readonly property var defaultValues: { + "Curve": "true", + "Line Color": "#fffcf9", + "Line Width": 38, + "Shadow Color": "#e0e0e0", + "Shadow Size": 0.5, + "Battle UI": false, + "Circle Color": "#fffcf9", + "Clock Visible": true, + "Full Clock": true, + "Font Color": "#f5f5f5", + "Font Size": 44, + "Font Name": 0, + "Font Weight": 0, + "Text Vertical Offset": 16 + } - readonly property var configs: widget.settings.styles ? widget.settings.styles : {"Circle Color":"#fffcf9","Line Color":"#fffcf9","Line Width":38,"Shadow Color":"#e0e0e0","Shadow Size":0.5,"Battle UI":false,"Clock Visible":true,"Full Clock":true,"Font Color":"#f5f5f5","Font Size":60,"Font Name":fonts.length-1,"Font Weight":0,"Text Vertical Offset":-30} + readonly property var configs: widget.settings.styles property string circle_color: configs["Circle Color"] property string line_color: configs["Line Color"] @@ -34,6 +51,42 @@ T.Widget { readonly property real w: widget.width readonly property real r: (w**2+h**2)/4/h + onConfigsChanged: { + line.requestPaint(); + c0.requestPaint(); + c1.requestPaint(); + c2.requestPaint(); + c3.requestPaint(); + c4.requestPaint(); + c5.requestPaint(); + } + + action: T.Action { + id: thiz + + title: qsTr("Top Line Action") + description: title + + execute: function () { + return new Promise(function (resolve, reject) { + if (!styleDialog.active) { + let cfg = widget.settings.styles; + cfg["Battle UI"] = !cfg["Battle UI"]; + widget.settings.styles = cfg; + } + resolve(); + }); + } + + preference: P.SelectPreference { + label: qsTr("Command") + model: [ qsTr("Toggle UI") ] + defaultValue: 0 + load: function () {} + save: function () {} + } + } + Timer { interval: 250 @@ -44,32 +97,26 @@ T.Widget { if (tmin !== now.getMinutes()) { tmin = now.getMinutes(); thour = now.getHours(); - if (!configs["Full Clock"]) - t12hour = thour > 12 ? thour - 12 : thour; - text_clock.requestPaint(); + t12hour = thour > 12 ? thour - 12 : thour; } } } - Canvas{ + Text { id: text_clock - width: widget.width - height: widget.height anchors.top: parent.top anchors.topMargin: widget.height/200*configs["Text Vertical Offset"] anchors.horizontalCenter: parent.horizontalCenter - contextType: "2d" - visible: widget.NVG.View.exposed && !configs["Battle UI"] && configs["Clock Visible"] - onPaint: { - context.clearRect(0,0,width,height); - context.fillStyle = configs["Font Color"]; - context.font = "normal normal " + ["normal", "bold"][configs["Font Weight"]] + " " + widget.height/200*configs["Font Size"] + "px " + fonts[configs["Font Name"]]; - context.textAlign = 'center'; - context.beginPath(); - context.fillText(configs["Full Clock"] ? ("0"+thour).slice(-2) + ":" + ("0"+tmin).slice(-2) : ("0"+t12hour).slice(-2) + ":" + ("0"+tmin).slice(-2), width/2, height/2); - context.fill(); - } + style: Text.Outline + styleColor: "transparent" + + color: configs["Font Color"] + text: configs["Full Clock"] ? ("0"+thour).slice(-2) + ":" + ("0"+tmin).slice(-2) : ("0"+t12hour).slice(-2) + ":" + ("0"+tmin).slice(-2) + font.pointSize: widget.height/200*configs["Font Size"] + font.family: fonts[configs["Font Name"]] + font.weight: fontweight[configs["Font Weight"]] + visible: widget.NVG.View.exposed && !configs["Battle UI"] && configs["Clock Visible"] } Item { @@ -284,15 +331,31 @@ T.Widget { context.strokeStyle = line_color; let deg = Math.asin(w/2/r)*0.95; context.beginPath(); - if (circle.visible) { - context.arc(w/2, -r+h/2, r, deg+Math.PI/2, Math.PI/2+circle.scale*size/1.22/r, true); - context.stroke(); - context.beginPath(); - context.arc(w/2, -r+h/2, r, -deg+Math.PI/2, Math.PI/2-circle.scale*size/1.22/r, false); - context.stroke(); + if (configs["Curve"]) { + if (circle.visible) { + context.arc(w/2, -r+h/2, r, deg+Math.PI/2, Math.PI/2+circle.scale*size/1.22/r, true); + context.stroke(); + context.beginPath(); + context.arc(w/2, -r+h/2, r, -deg+Math.PI/2, Math.PI/2-circle.scale*size/1.22/r, false); + context.stroke(); + } else { + context.arc(w/2, -r+h/2, r, deg+Math.PI/2, -deg+Math.PI/2, true); + context.stroke(); + } } else { - context.arc(w/2, -r+h/2, r, deg+Math.PI/2, -deg+Math.PI/2, true); - context.stroke(); + if (circle.visible) { + context.moveTo(0, height/2); + context.lineTo(width/2-circle.scale*size/1.22, height/2); + context.stroke(); + context.beginPath(); + context.moveTo(width/2+circle.scale*size/1.22, height/2); + context.lineTo(width, height/2); + context.stroke(); + } else { + context.moveTo(0, height/2); + context.lineTo(width, height/2); + context.stroke(); + } } } } @@ -339,14 +402,6 @@ T.Widget { rootPreference.load(); let cfg = rootPreference.save(); widget.settings.styles = cfg; - line.requestPaint(); - c0.requestPaint(); - c1.requestPaint(); - c2.requestPaint(); - c3.requestPaint(); - c4.requestPaint(); - c5.requestPaint(); - text_clock.requestPaint(); } } @@ -376,26 +431,18 @@ T.Widget { onPreferenceEdited: { widget.settings.styles = rootPreference.save(); - line.requestPaint(); - c0.requestPaint(); - c1.requestPaint(); - c2.requestPaint(); - c3.requestPaint(); - c4.requestPaint(); - c5.requestPaint(); - text_clock.requestPaint(); } - P.ColorPreference { - name: "Circle Color" - label: qsTr("Circle Color") - defaultValue: "#fffcf9" + P.SwitchPreference { + name: "Curve" + label: qsTr("Curve") + defaultValue: defaultValues["Curve"] } P.ColorPreference { name: "Line Color" label: qsTr("Line Color") - defaultValue: "#fffcf9" + defaultValue: defaultValues["Line Color"] } P.SliderPreference { @@ -404,14 +451,14 @@ T.Widget { from: 1 to: 100 stepSize: 1 - defaultValue: 38 + defaultValue: defaultValues["Line Width"] displayValue: value + "%" } P.ColorPreference { name: "Shadow Color" label: qsTr("Shadow Color") - defaultValue: "#e0e0e0" + defaultValue: defaultValues["Shadow Color"] } P.SliderPreference { @@ -420,7 +467,7 @@ T.Widget { from: 0 to: 3 stepSize: 0.1 - defaultValue: 0.5 + defaultValue: defaultValues["Shadow Size"] displayValue: Math.round(value*10)/10 + "px" } @@ -430,7 +477,14 @@ T.Widget { id: _cfg_battle_ui name: "Battle UI" label: qsTr("Battle UI") - defaultValue: false + defaultValue: defaultValues["Battle UI"] + } + + P.ColorPreference { + name: "Circle Color" + label: qsTr("Circle Color") + visible: _cfg_battle_ui.value + defaultValue: defaultValues["Circle Color"] } P.Separator {} @@ -441,7 +495,7 @@ T.Widget { label: qsTr("Clock Visible") visible: !_cfg_battle_ui.value enabled: visible - defaultValue: true + defaultValue: defaultValues["Clock Visible"] } P.SwitchPreference { @@ -449,7 +503,7 @@ T.Widget { label: qsTr("24 Hour Clock") visible: !_cfg_battle_ui.value enabled: visible && _cfg_clock_visible.value - defaultValue: true + defaultValue: defaultValues["Full Clock"] } P.ColorPreference { @@ -457,7 +511,7 @@ T.Widget { label: qsTr("Font Color") visible: !_cfg_battle_ui.value enabled: visible && _cfg_clock_visible.value - defaultValue: "#f5f5f5" + defaultValue: defaultValues["Font Color"] } P.SliderPreference { @@ -468,7 +522,7 @@ T.Widget { from: 1 to: 100 stepSize: 1 - defaultValue: 60 + defaultValue: defaultValues["Font Size"] displayValue: value + "%" } @@ -478,7 +532,7 @@ T.Widget { visible: !_cfg_battle_ui.value enabled: visible && _cfg_clock_visible.value icon.name: "solid:\uf1fc" - defaultValue: fonts.length-1 + defaultValue: defaultValues["Font Name"] model: fonts } @@ -488,7 +542,7 @@ T.Widget { visible: !_cfg_battle_ui.value enabled: visible && _cfg_clock_visible.value icon.name: "solid:\uf1fc" - defaultValue: 0 + defaultValue: defaultValues["Font Weight"] model: sfontweight } @@ -500,7 +554,7 @@ T.Widget { from: -100 to: 100 stepSize: 1 - defaultValue: -30 + defaultValue: defaultValues["Text Vertical Offset"] displayValue: value + "%" } @@ -521,15 +575,11 @@ T.Widget { onClosing: { widget.settings.styles = configuration; styleDialog.active = false; - line.requestPaint(); - c0.requestPaint(); - c1.requestPaint(); - c2.requestPaint(); - c3.requestPaint(); - c4.requestPaint(); - c5.requestPaint(); - text_clock.requestPaint(); } } } + + Component.onCompleted: { + widget.settings.styles = widget.settings.styles ?? defaultValues; + } }