From b8147ac99b4dff65f515193e87dd4c4174e78821 Mon Sep 17 00:00:00 2001 From: Haoyu Xu Date: Sat, 3 Feb 2024 22:46:51 +0800 Subject: [PATCH] feat(showcase): add scale option --- config/_project_json.yaml | 11 +++++++++++ src/components/settings.js | 30 ++++++++++++++++++++++++++++++ src/libs/spine-player.js | 3 ++- src/libs/wallpaper_engine.js | 4 ++++ 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/config/_project_json.yaml b/config/_project_json.yaml index 808a373..0a5bd4a 100644 --- a/config/_project_json.yaml +++ b/config/_project_json.yaml @@ -16,6 +16,7 @@ localization: ui_operator_logo: Operator Logo ui_translate_x: X Axis Position ui_translate_y: Y Axis Position + ui_scale: Scale ui_position_title:

⚠️ Posistion


ui_position_padding_bottom: Padding Bottom ui_position_padding_left: Padding Left @@ -55,6 +56,7 @@ localization: ui_operator_logo: 干员图标 ui_translate_x: X 轴位置 ui_translate_y: Y 轴位置 + ui_scale: 比例 ui_position_title:

⚠️ 位置


ui_position_padding_bottom: 底部距离 ui_position_padding_left: 左部距离 @@ -276,6 +278,15 @@ properties: text: ui_useStartAnimation_title type: bool value: true + - key: scale + value: + text: ui_scale + type: slider + value: 1 + fraction: true + max: 10 + min: 0 + step: 0.1 - key: position value: text: ui_position_title diff --git a/src/components/settings.js b/src/components/settings.js index 3dd7593..bc7c21d 100644 --- a/src/components/settings.js +++ b/src/components/settings.js @@ -16,6 +16,7 @@ export default class Settings { #defaultPadRight = getPercentage(`${import.meta.env.VITE_VIEWPORT_RIGHT}%`) #defaultPadTop = getPercentage(`${import.meta.env.VITE_VIEWPORT_TOP}%`) #defaultPadBottom = getPercentage(`${import.meta.env.VITE_VIEWPORT_BOTTOM}%`) + #defaultScale = 1 #defaultLogoX = 0 #defaultLogoY = 0 #defaultViewport = { @@ -34,6 +35,7 @@ export default class Settings { #padRight = this.#defaultPadRight #padTop = this.#defaultPadTop #padBottom = this.#defaultPadBottom + #scale = this.#defaultScale #logoX = this.#defaultLogoX #logoY = this.#defaultLogoY #isInsightsInited = false @@ -219,6 +221,14 @@ export default class Settings { }) } + setScale(value) { + this.#scale = value + } + + get scale() { + return 1 / this.#scale + } + positionPadding(key, value) { switch (key) { case "left": @@ -259,6 +269,10 @@ export default class Settings { document.getElementById("position_padding_bottom_slider").value = this.#defaultPadBottom document.getElementById("position_padding_bottom_input").value = this.#defaultPadBottom } + + scaleReset() { + this.#scale = this.#defaultScale + } elementPosition(el, x, y) { const computedStyle = getComputedStyle(el) @@ -318,6 +332,7 @@ export default class Settings { reset() { this.positionReset() + this.scaleReset() this.setLogoRatio(this.#defaultRatio) document.getElementById("logo_ratio_slider").value = this.#defaultRatio document.getElementById("logo_ratio_input").value = this.#defaultRatio @@ -499,6 +514,11 @@ export default class Settings { +
+ + + +
@@ -735,6 +755,16 @@ export default class Settings { _this.#showRelated(e.currentTarget, "position_realted"); if (!e.currentTarget.checked) _this.positionReset(); } + }, { + id: "scale_slider", event: "input", handler: e => { + _this.#sync(e.currentTarget, "scale_input"); + _this.setScale(e.currentTarget.value); + } + }, { + id: "scale_input", event: "change", handler: e => { + _this.#sync(e.currentTarget, "scale_slider"); + _this.setScale(e.currentTarget.value); + } }, { id: "position_padding_left_slider", event: "input", handler: e => { _this.#sync(e.currentTarget, "position_padding_left_input"); diff --git a/src/libs/spine-player.js b/src/libs/spine-player.js index 79b535c..621583f 100644 --- a/src/libs/spine-player.js +++ b/src/libs/spine-player.js @@ -11389,7 +11389,8 @@ var spine; } var devicePixelRatio = window.devicePixelRatio || 1; var viewportSize = this.scale(viewport.width, viewport.height, this.canvas.width, this.canvas.height); - this.sceneRenderer.camera.zoom = viewport.width * devicePixelRatio / viewportSize.x; + // this.sceneRenderer.camera.zoom = viewport.width * devicePixelRatio / viewportSize.x; + this.sceneRenderer.camera.zoom = viewport.width * devicePixelRatio / viewportSize.x * window.settings.scale; this.sceneRenderer.camera.position.x = viewport.x + viewport.width / 2; this.sceneRenderer.camera.position.y = viewport.y + viewport.height / 2; this.sceneRenderer.begin(); diff --git a/src/libs/wallpaper_engine.js b/src/libs/wallpaper_engine.js index c2e51e3..140f478 100644 --- a/src/libs/wallpaper_engine.js +++ b/src/libs/wallpaper_engine.js @@ -111,6 +111,10 @@ window.wallpaperPropertyListener = { window.settings.resetMusic() } } + if (properties.scale) { + window.settings.setScale(properties.scale.value) + window.settings.functionInsights("setScale", Object.keys(properties) !== 1) + } if (properties.position) { if (!properties.position.value) { window.settings.positionReset()