63 lines
1.8 KiB
Swift
63 lines
1.8 KiB
Swift
//
|
||
// CustomWindowControls.swift
|
||
// punchnet
|
||
//
|
||
// Created by 安礼成 on 2026/3/25.
|
||
//
|
||
import SwiftUI
|
||
|
||
struct CustomWindowControls: View {
|
||
@State private var isHovering = false
|
||
|
||
var body: some View {
|
||
HStack(spacing: 8) {
|
||
// 关闭按钮 (红色)
|
||
CircleButton(color: .red, systemName: "xmark", isHovering: isHovering) {
|
||
// 执行关闭当前窗口的操作
|
||
if let window = NSApp.keyWindow {
|
||
window.close()
|
||
}
|
||
}
|
||
|
||
// // 最小化按钮 (黄色)
|
||
// CircleButton(color: .yellow, systemName: "minus", isHovering: isHovering) {
|
||
// NSApp.keyWindow?.miniaturize(nil)
|
||
// }
|
||
//
|
||
// // 全屏/放大按钮 (绿色)
|
||
// CircleButton(color: .green, systemName: "arrow.up.left.and.arrow.down.right", isHovering: isHovering) {
|
||
// NSApp.keyWindow?.toggleFullScreen(nil)
|
||
// }
|
||
}
|
||
.onHover { hovering in
|
||
withAnimation(.easeInOut(duration: 0.1)) {
|
||
isHovering = hovering
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
struct CircleButton: View {
|
||
let color: Color
|
||
let systemName: String
|
||
let isHovering: Bool
|
||
let action: () -> Void
|
||
|
||
var body: some View {
|
||
Button(action: action) {
|
||
ZStack {
|
||
Circle()
|
||
.fill(color.opacity(0.8))
|
||
.frame(width: 12, height: 12)
|
||
|
||
// 只有悬停时才显示里面的小图标,像原生一样
|
||
Image(systemName: systemName)
|
||
.font(.system(size: 8, weight: .bold))
|
||
.foregroundColor(.black.opacity(0.5))
|
||
.opacity(isHovering ? 1 : 0)
|
||
}
|
||
}
|
||
.buttonStyle(.plain)
|
||
}
|
||
}
|