From 329bf3058792882b6f913232fa4796d4e1832e34 Mon Sep 17 00:00:00 2001 From: jackie-yellow Date: Thu, 29 Aug 2024 17:45:09 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E5=A2=9E=E5=8A=A0=20Alt+PrtScr=20?= =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desktopMain/kotlin/startDwebBrowser.kt | 35 +++++++++++++++++++ .../browser/scan/CameraPreview.kt | 4 +-- .../org/dweb_browser/sys/tray/TrayNMM.kt | 2 +- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/next/kmp/app/desktopApp/src/desktopMain/kotlin/startDwebBrowser.kt b/next/kmp/app/desktopApp/src/desktopMain/kotlin/startDwebBrowser.kt index 61e98b995..3b13468a4 100644 --- a/next/kmp/app/desktopApp/src/desktopMain/kotlin/startDwebBrowser.kt +++ b/next/kmp/app/desktopApp/src/desktopMain/kotlin/startDwebBrowser.kt @@ -5,8 +5,17 @@ import org.dweb_browser.core.std.dns.nativeFetch import org.dweb_browser.helper.collectIn import org.dweb_browser.helper.platform.DeepLinkHook import org.dweb_browser.helper.platform.PureViewController +import org.dweb_browser.helper.platform.toByteArray +import org.dweb_browser.pure.http.PureHeaders +import org.dweb_browser.pure.http.PureMethod +import org.dweb_browser.pure.http.buildRequestX import org.dweb_browser.sys.tray.TrayNMM +import java.awt.AWTEvent import java.awt.Desktop +import java.awt.Robot +import java.awt.Toolkit +import java.awt.event.AWTEventListener +import java.awt.event.KeyEvent suspend fun startDwebBrowser(debugTags: String?): DnsNMM { @@ -27,6 +36,7 @@ suspend fun startDwebBrowser(debugTags: String?): DnsNMM { val dnsRuntime = launcher.launch() dnsRuntime.open("tray.sys.dweb") // 由于快捷功能增加了截屏后,直接打开SmartScan功能,所以这边手动启动 + registerHotKey(dnsRuntime) // 注册热键 // TODO fuck this DeepLinkHook.instance.onLink { @@ -56,5 +66,30 @@ suspend fun startDwebBrowser(debugTags: String?): DnsNMM { } return launcher.dnsNMM +} +/** + * 注册热键,快捷键 + */ +private fun registerHotKey(dnsRuntime: DnsNMM.DnsRuntime) { + val listener = AWTEventListener { event -> + if (event is KeyEvent) { + if (event.id == KeyEvent.KEY_RELEASED && event.keyCode == KeyEvent.VK_PRINTSCREEN && event.isAltDown) { + // released => alt + printScreen + dnsRuntime.scopeLaunch(cancelable = true) { + val imageBitmap = PureViewController.awaitScreenCapture() // 打开截图 + dnsRuntime.nativeFetch( + buildRequestX( + url = "file://scan.browser.dweb/parseImage", + method = PureMethod.POST, + headers = PureHeaders(), + body = imageBitmap.toByteArray() + ) + ) + } + } + } + } + val toolkit = Toolkit.getDefaultToolkit() + toolkit.addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK) } diff --git a/next/kmp/browser/src/commonMain/kotlin/org/dweb_browser/browser/scan/CameraPreview.kt b/next/kmp/browser/src/commonMain/kotlin/org/dweb_browser/browser/scan/CameraPreview.kt index e7baab6a5..5a96e6601 100644 --- a/next/kmp/browser/src/commonMain/kotlin/org/dweb_browser/browser/scan/CameraPreview.kt +++ b/next/kmp/browser/src/commonMain/kotlin/org/dweb_browser/browser/scan/CameraPreview.kt @@ -8,15 +8,13 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.zIndex -import kotlinx.coroutines.FlowPreview -import kotlinx.coroutines.flow.debounce import org.dweb_browser.helper.platform.IPureViewController import org.dweb_browser.helper.platform.isDesktop import org.dweb_browser.sys.window.core.WindowContentRenderScope import org.jetbrains.compose.resources.ExperimentalResourceApi import org.jetbrains.compose.resources.decodeToImageBitmap -@OptIn(ExperimentalResourceApi::class, FlowPreview::class) +@OptIn(ExperimentalResourceApi::class) @Composable fun WindowContentRenderScope.RenderBarcodeScanning( modifier: Modifier, controller: SmartScanController diff --git a/next/kmp/sys/src/desktopMain/kotlin/org/dweb_browser/sys/tray/TrayNMM.kt b/next/kmp/sys/src/desktopMain/kotlin/org/dweb_browser/sys/tray/TrayNMM.kt index 1104f7029..4fb1bbcb3 100644 --- a/next/kmp/sys/src/desktopMain/kotlin/org/dweb_browser/sys/tray/TrayNMM.kt +++ b/next/kmp/sys/src/desktopMain/kotlin/org/dweb_browser/sys/tray/TrayNMM.kt @@ -89,7 +89,7 @@ class TrayNMM : NativeMicroModule("tray.sys.dweb", "tray") { RenderNodeList(trayRootTree.children.collectAsState().value) Item( - text = SysI18nResource.capture(), + text = "${SysI18nResource.capture()} Alt+PrtScr", // shortcut = KeyShortcut(key = Key.PrintScreen, ctrl = true) // 有异常 ) { runtime.scopeLaunch(cancelable = false) {