From 6bc4971051ae8d0290ff1e6ce6aa96235b41ecb6 Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Wed, 6 May 2026 14:27:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E9=80=8F=E6=98=8E=E5=BA=A6?= =?UTF-8?q?=E8=B0=83=E8=8A=82=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=AF=9B=E7=8E=BB?= =?UTF-8?q?=E7=92=83=E5=9B=BA=E5=AE=9A=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../App/FloatingWindowController.swift | 11 ++++++---- Sources/FloatingMonitor/Configuration.swift | 4 ---- Sources/FloatingMonitor/ContentView.swift | 9 -------- .../FloatingMonitor/Views/SettingsView.swift | 22 ------------------- 4 files changed, 7 insertions(+), 39 deletions(-) diff --git a/Sources/FloatingMonitor/App/FloatingWindowController.swift b/Sources/FloatingMonitor/App/FloatingWindowController.swift index eb51f76..863355a 100644 --- a/Sources/FloatingMonitor/App/FloatingWindowController.swift +++ b/Sources/FloatingMonitor/App/FloatingWindowController.swift @@ -1,7 +1,7 @@ import AppKit import SwiftUI -/// 悬浮窗口控制器:管理毛玻璃效果 + SwiftUI 视图嵌入 +/// 悬浮窗口控制器:管理毛玻璃 + SwiftUI 视图嵌入 + 窗口显隐 final class FloatingWindowController: NSWindowController { private var hostingView: NSHostingView? private var visualEffect: NSVisualEffectView! @@ -13,6 +13,8 @@ final class FloatingWindowController: NSWindowController { setupVisualEffect() } + // MARK: - 毛玻璃(只做合成锚点,alpha 始终=1) + private func setupVisualEffect() { guard let window = window else { return } @@ -21,6 +23,7 @@ final class FloatingWindowController: NSWindowController { ve.material = .hudWindow ve.blendingMode = .behindWindow ve.state = .active + ve.alphaValue = 1.0 // 始终不透明,维持窗口合成通道 ve.translatesAutoresizingMaskIntoConstraints = false ve.layer?.cornerRadius = 16 @@ -42,6 +45,8 @@ final class FloatingWindowController: NSWindowController { ]) } + // MARK: - SwiftUI 嵌入 + func embed(rootView: ContentView) { guard let window = window, let contentView = window.contentView else { return } @@ -93,9 +98,7 @@ final class FloatingWindowController: NSWindowController { window?.isVisible ?? false } - func applyOpacity(_ value: Double) { - window?.alphaValue = value - } + // MARK: - 尺寸 & 位置 func resize(width: CGFloat, height: CGFloat) { guard let window = window else { return } diff --git a/Sources/FloatingMonitor/Configuration.swift b/Sources/FloatingMonitor/Configuration.swift index ceecf31..a6435cd 100644 --- a/Sources/FloatingMonitor/Configuration.swift +++ b/Sources/FloatingMonitor/Configuration.swift @@ -100,9 +100,6 @@ final class Configuration: ObservableObject { @Published var refreshInterval: Double { didSet { save("refreshInterval", refreshInterval) } } - @Published var opacity: Double { - didSet { save("opacity", opacity) } - } @Published var fontSize: Double { didSet { save("fontSize", fontSize) } } @@ -192,7 +189,6 @@ final class Configuration: ObservableObject { processCount = defaults.object(forKey: "processCount") as? Int ?? 5 refreshInterval = defaults.object(forKey: "refreshInterval") as? Double ?? 1.5 - opacity = defaults.object(forKey: "opacity") as? Double ?? 1.0 fontSize = defaults.object(forKey: "fontSize") as? Double ?? 12 windowWidth = defaults.object(forKey: "windowWidth") as? Double ?? 250 windowHeight = defaults.object(forKey: "windowHeight") as? Double ?? 300 diff --git a/Sources/FloatingMonitor/ContentView.swift b/Sources/FloatingMonitor/ContentView.swift index 143c8f8..a8f7c51 100644 --- a/Sources/FloatingMonitor/ContentView.swift +++ b/Sources/FloatingMonitor/ContentView.swift @@ -36,14 +36,10 @@ struct ContentView: View { .onAppear { monitor.interval = config.refreshInterval monitor.topN = config.processCount - applyOpacity() } .onChange(of: config.processCount) { _, new in monitor.topN = new } - .onChange(of: config.opacity) { _, _ in - applyOpacity() - } .onReceive(NotificationCenter.default.publisher(for: .refreshIntervalChanged)) { notification in if let interval = notification.object as? Double { monitor.interval = interval @@ -269,9 +265,4 @@ struct ContentView: View { } } - private func applyOpacity() { - DispatchQueue.main.async { - windowController?.applyOpacity(config.opacity) - } - } } diff --git a/Sources/FloatingMonitor/Views/SettingsView.swift b/Sources/FloatingMonitor/Views/SettingsView.swift index d04b5b2..3a09ca8 100644 --- a/Sources/FloatingMonitor/Views/SettingsView.swift +++ b/Sources/FloatingMonitor/Views/SettingsView.swift @@ -223,22 +223,6 @@ struct SettingsView: View { .frame(width: 180) } - HStack { - Text("透明度") - .font(.system(size: 12)) - .frame(width: 52, alignment: .leading) - Slider(value: $config.opacity, in: 0.5...1.0, step: 0.05) { - Text("") - } onEditingChanged: { editing in - if !editing { updateWindowOpacity() } - } - .frame(width: 130) - Text(String(format: "%.0f%%", config.opacity * 100)) - .font(.system(size: 11, design: .monospaced)) - .foregroundColor(.secondary) - .frame(width: 38, alignment: .trailing) - } - HStack { Text("字体大小") .font(.system(size: 12)) @@ -314,12 +298,6 @@ struct SettingsView: View { ) } - private func updateWindowOpacity() { - if let window = NSApplication.shared.windows.first(where: { $0 is FloatingWindow }) { - window.alphaValue = config.opacity - } - } - private func closeWindow() { NSApp.keyWindow?.close() }