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": {
|
"mixer.section.apps": {
|
||||||
"localizations": {
|
"localizations": {
|
||||||
"de": {
|
"de": {
|
||||||
|
|||||||
@@ -175,6 +175,8 @@ private struct ProcessRow: View {
|
|||||||
: Onyx.Color.textTertiary)
|
: Onyx.Color.textTertiary)
|
||||||
// Feste Breite, sonst wandert der Regler beim Ziehen.
|
// Feste Breite, sonst wandert der Regler beim Ziehen.
|
||||||
.frame(width: 36, alignment: .trailing)
|
.frame(width: 36, alignment: .trailing)
|
||||||
|
|
||||||
|
resetButton
|
||||||
}
|
}
|
||||||
.contentShape(.rect)
|
.contentShape(.rect)
|
||||||
.help(group.name)
|
.help(group.name)
|
||||||
@@ -188,6 +190,33 @@ private struct ProcessRow: View {
|
|||||||
.animation(Onyx.Motion.value, value: managed)
|
.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
|
/// Wie viele Wellen am Lautsprecher — folgt der Lautstärke, wie überall
|
||||||
/// sonst in macOS auch.
|
/// sonst in macOS auch.
|
||||||
private var speakerSymbol: String {
|
private var speakerSymbol: String {
|
||||||
|
|||||||
Reference in New Issue
Block a user