Rücksetzknopf im Mixer, mit reserviertem Platz
Ein kleiner Pfeil je Programm stellt die Lautstärke auf 100 % zurück. Er erscheint nur, wenn der Wert davon abweicht — es gibt sonst nichts zurückzusetzen. Der Platz dafür ist trotzdem **immer** reserviert. Ein Knopf, der auftaucht und dabei den Regler schmaler macht, verschiebt genau das, was man gerade bedient: man zieht auf 90 %, der Knopf erscheint, der Regler schrumpft, und der Griff sitzt woanders als die Hand. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -180,6 +180,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mixer.reset": {
|
||||
"localizations": {
|
||||
"de": {
|
||||
"stringUnit": {
|
||||
"state": "translated",
|
||||
"value": "Zurück auf 100 %"
|
||||
}
|
||||
},
|
||||
"en": {
|
||||
"stringUnit": {
|
||||
"state": "translated",
|
||||
"value": "Back to 100 %"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mixer.section.apps": {
|
||||
"localizations": {
|
||||
"de": {
|
||||
|
||||
@@ -175,6 +175,8 @@ private struct ProcessRow: View {
|
||||
: Onyx.Color.textTertiary)
|
||||
// Feste Breite, sonst wandert der Regler beim Ziehen.
|
||||
.frame(width: 36, alignment: .trailing)
|
||||
|
||||
resetButton
|
||||
}
|
||||
.contentShape(.rect)
|
||||
.help(group.name)
|
||||
@@ -188,6 +190,33 @@ private struct ProcessRow: View {
|
||||
.animation(Onyx.Motion.value, value: managed)
|
||||
}
|
||||
|
||||
/// Zurück auf 100 %.
|
||||
///
|
||||
/// Der Platz dafür ist **immer** reserviert, auch wenn der Knopf nicht zu
|
||||
/// sehen ist. Ein Knopf, der auftaucht und dabei den Regler schmaler macht,
|
||||
/// verschiebt genau das, was man gerade bedient — und beim Loslassen springt
|
||||
/// es zurück.
|
||||
@ViewBuilder
|
||||
private var resetButton: some View {
|
||||
Group {
|
||||
if managed, abs(volume - 1) > 0.001 {
|
||||
Button { mixer.setVolume(1, for: group.bundleID) } label: {
|
||||
Image(systemName: "arrow.counterclockwise")
|
||||
.font(.system(size: 9, weight: .medium))
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.foregroundStyle(Onyx.Color.textTertiary)
|
||||
.help(Text("mixer.reset", bundle: .module))
|
||||
} else {
|
||||
Color.clear
|
||||
}
|
||||
}
|
||||
.frame(width: Self.resetSlotWidth, height: 14)
|
||||
}
|
||||
|
||||
/// Die reservierte Breite des Rücksetzknopfes.
|
||||
private static let resetSlotWidth: CGFloat = 14
|
||||
|
||||
/// Wie viele Wellen am Lautsprecher — folgt der Lautstärke, wie überall
|
||||
/// sonst in macOS auch.
|
||||
private var speakerSymbol: String {
|
||||
|
||||
Reference in New Issue
Block a user