Merge branch 'main' of https://github.com/Ebullioscopic/Atoll into pr-440

This commit is contained in:
Jis G Jacob 2026-05-14 20:32:58 +05:30
commit b31bab2b4d
14 changed files with 1447 additions and 99 deletions

View file

@ -36,10 +36,12 @@ struct DynamicIslandHeader: View {
@Default(.showClipboardIcon) var showClipboardIcon
@Default(.showColorPickerIcon) var showColorPickerIcon
@Default(.clipboardDisplayMode) var clipboardDisplayMode
@Default(.showBatteryIndicator) var showBatteryIndicator
@Default(.enableMinimalisticUI) var enableMinimalisticUI
var body: some View {
HStack(spacing: 0) {
if !Defaults[.enableMinimalisticUI] {
if !enableMinimalisticUI {
HStack {
let shouldShowTabs = coordinator.alwaysShowTabs || vm.notchState == .open || !shelfState.items.isEmpty
if shouldShowTabs {
@ -55,7 +57,7 @@ struct DynamicIslandHeader: View {
}
if vm.notchState == .open && !Defaults[.enableMinimalisticUI] {
if vm.notchState == .open && !enableMinimalisticUI {
let spacerWidth = min(vm.closedNotchSize.width, 300)
Rectangle()
.fill(NSScreen.screens
@ -67,7 +69,7 @@ struct DynamicIslandHeader: View {
}
HStack(spacing: 4) {
if vm.notchState == .open && !Defaults[.enableMinimalisticUI] {
if vm.notchState == .open && !enableMinimalisticUI {
if Defaults[.showMirror] {
Button(action: {
vm.toggleCameraPreview()
@ -230,7 +232,7 @@ struct DynamicIslandHeader: View {
if Defaults[.showBatteryIndicator] {
if showBatteryIndicator {
DynamicIslandBatteryView(
batteryWidth: 30,
isCharging: batteryModel.isCharging,

View file

@ -86,9 +86,39 @@ struct NotchTerminalView: View {
@ObservedObject var terminalManager = TerminalManager.shared
@EnvironmentObject var vm: DynamicIslandViewModel
@Default(.enableTerminalFeature) var enableTerminalFeature
@Default(.cornerRadiusScaling) var cornerRadiusScaling
@Default(.enableMinimalisticUI) var enableMinimalisticUI
@State private var suppressionToken = UUID()
@State private var isSuppressing = false
/// Top corners stay mild; bottom follows shell − padding (see `notchTerminalBottomCornerRadii`).
private static let terminalClipTopCornerRadius: CGFloat = 6
private var currentScreenName: String {
vm.screen ?? DynamicIslandViewCoordinator.shared.selectedScreen
}
private var isDynamicIslandMode: Bool {
shouldUseDynamicIslandMode(for: currentScreenName)
}
private var terminalClipShape: UnevenRoundedRectangle {
let innerBottom = notchTerminalBottomCornerRadii(
isDynamicIslandMode: isDynamicIslandMode,
notchState: vm.notchState,
cornerRadiusScaling: cornerRadiusScaling,
enableMinimalisticUI: enableMinimalisticUI,
closedNotchHeight: vm.closedNotchSize.height
).innerBottom
return UnevenRoundedRectangle(
topLeadingRadius: Self.terminalClipTopCornerRadius,
bottomLeadingRadius: innerBottom,
bottomTrailingRadius: innerBottom,
topTrailingRadius: Self.terminalClipTopCornerRadius,
style: .continuous
)
}
var body: some View {
VStack(spacing: 0) {
if enableTerminalFeature {
@ -121,15 +151,20 @@ struct NotchTerminalView: View {
.padding(.bottom, 4)
Divider()
.padding(.horizontal, 8)
.padding(.horizontal, notchTerminalContentEdgePadding.horizontal)
// Terminal content — the containerView is stable across
// notch close/open cycles; updateNSView handles restart.
TerminalNSViewRepresentable(terminalManager: terminalManager)
.clipShape(RoundedRectangle(cornerRadius: 6, style: .continuous))
.padding(.horizontal, 8)
.padding(.bottom, 8)
.padding(.top, 4)
.clipShape(terminalClipShape)
.padding(
EdgeInsets(
top: notchTerminalContentEdgePadding.top,
leading: notchTerminalContentEdgePadding.horizontal,
bottom: notchTerminalContentEdgePadding.bottom,
trailing: notchTerminalContentEdgePadding.horizontal
)
)
.onHover { hovering in
updateSuppression(for: hovering)
}
@ -154,6 +189,10 @@ struct NotchTerminalView: View {
.onDisappear {
updateSuppression(for: false)
}
.onAppear {
terminalManager.refreshTerminalAppearanceIfNeeded()
terminalManager.focusTerminalIfPossible()
}
}
private func updateSuppression(for hovering: Bool) {