From c8a01e7a3b409298e7f7413bd255b65ae25cd341 Mon Sep 17 00:00:00 2001 From: LemonNeko Date: Fri, 10 Apr 2026 17:50:38 +0800 Subject: [PATCH] feat(stage-pocket): allow to set transparent background --- .../java/ai/moeru/airi_pocket/MainActivity.kt | 2 + .../app/src/main/res/layout/activity_main.xml | 4 +- .../ios/App/App/DevBridgeViewController.swift | 15 +++++ apps/stage-pocket/src/styles/main.css | 6 ++ .../src/components/Backgrounds/Provider.vue | 13 ++++- .../components/Backgrounds/default/index.ts | 1 + .../default/transparent-preview.vue | 56 +++++++++++++++++++ .../src/composables/theme-color.ts | 14 ++++- .../stage-layouts/src/stores/background.ts | 18 ++++-- .../background-picker/background-picker.vue | 25 +++++++-- 10 files changed, 139 insertions(+), 15 deletions(-) create mode 100644 packages/stage-layouts/src/components/Backgrounds/default/transparent-preview.vue diff --git a/apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MainActivity.kt b/apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MainActivity.kt index 1e9e84c48..bebb2c7bc 100644 --- a/apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MainActivity.kt +++ b/apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MainActivity.kt @@ -1,5 +1,6 @@ package ai.moeru.airi_pocket +import android.graphics.Color import android.net.Uri import android.net.http.SslError import android.webkit.SslErrorHandler @@ -29,6 +30,7 @@ class MainActivity : BridgeActivity() { super.load() val bridge = bridge ?: return + bridge.webView.setBackgroundColor(Color.TRANSPARENT) installWebSocketBridge(bridge) if (!bridge.isDevMode) { diff --git a/apps/stage-pocket/android/app/src/main/res/layout/activity_main.xml b/apps/stage-pocket/android/app/src/main/res/layout/activity_main.xml index b5ad13870..5dec473cb 100644 --- a/apps/stage-pocket/android/app/src/main/res/layout/activity_main.xml +++ b/apps/stage-pocket/android/app/src/main/res/layout/activity_main.xml @@ -4,9 +4,11 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@android:color/transparent" tools:context=".MainActivity"> + android:layout_height="match_parent" + android:background="@android:color/transparent" /> diff --git a/apps/stage-pocket/ios/App/App/DevBridgeViewController.swift b/apps/stage-pocket/ios/App/App/DevBridgeViewController.swift index 45c4faf44..ed63c23fe 100644 --- a/apps/stage-pocket/ios/App/App/DevBridgeViewController.swift +++ b/apps/stage-pocket/ios/App/App/DevBridgeViewController.swift @@ -14,6 +14,7 @@ class DevBridgeViewController: CAPBridgeViewController { override func capacitorDidLoad() { super.capacitorDidLoad() + configureTransparentBackground() webView?.allowsBackForwardNavigationGestures = true installWebSocketBridge() } @@ -44,6 +45,20 @@ class DevBridgeViewController: CAPBridgeViewController { webView.configuration.userContentController.add(hostBridgeMessageHandler, name: hostBridgeName) } + private func configureTransparentBackground() { + view.isOpaque = false + view.backgroundColor = .clear + + guard let webView = bridge?.webView else { + return + } + + webView.isOpaque = false + webView.backgroundColor = .clear + webView.scrollView.backgroundColor = .clear + webView.superview?.backgroundColor = .clear + } + private func dispatchWebSocketBridgeEvent(_ payload: String) { guard let webView = bridge?.webView else { return diff --git a/apps/stage-pocket/src/styles/main.css b/apps/stage-pocket/src/styles/main.css index 79f4498d4..8d884843e 100755 --- a/apps/stage-pocket/src/styles/main.css +++ b/apps/stage-pocket/src/styles/main.css @@ -32,6 +32,12 @@ html { transition: all 0.3s ease-in-out; } +html:has(.airi-native-transparent-surface), +body:has(.airi-native-transparent-surface), +#app:has(.airi-native-transparent-surface) { + background: transparent !important; +} + html.dark { --bg-color: var(--bg-color-dark); color-scheme: dark; diff --git a/packages/stage-layouts/src/components/Backgrounds/Provider.vue b/packages/stage-layouts/src/components/Backgrounds/Provider.vue index c7615bbae..a2da57a50 100644 --- a/packages/stage-layouts/src/components/Backgrounds/Provider.vue +++ b/packages/stage-layouts/src/components/Backgrounds/Provider.vue @@ -20,11 +20,15 @@ defineExpose({