macos: use the configured unfocused split opacity

This commit is contained in:
Mitchell Hashimoto
2023-09-10 18:52:40 -07:00
parent 2820db55be
commit 2b04a7114b
3 changed files with 25 additions and 1 deletions

View File

@ -96,6 +96,7 @@ struct PrimaryView: View {
Ghostty.TerminalSplit(onClose: Self.closeWindow, baseConfig: self.baseConfig) Ghostty.TerminalSplit(onClose: Self.closeWindow, baseConfig: self.baseConfig)
.ghosttyApp(ghostty.app!) .ghosttyApp(ghostty.app!)
.ghosttyConfig(ghostty.config!)
.background(WindowAccessor(window: $window)) .background(WindowAccessor(window: $window))
.onReceive(gotoTab) { onGotoTab(notification: $0) } .onReceive(gotoTab) { onGotoTab(notification: $0) }
.onReceive(toggleFullscreen) { onToggleFullscreen(notification: $0) } .onReceive(toggleFullscreen) { onToggleFullscreen(notification: $0) }

View File

@ -350,15 +350,28 @@ private struct GhosttyAppKey: EnvironmentKey {
static let defaultValue: ghostty_app_t? = nil static let defaultValue: ghostty_app_t? = nil
} }
private struct GhosttyConfigKey: EnvironmentKey {
static let defaultValue: ghostty_config_t? = nil
}
extension EnvironmentValues { extension EnvironmentValues {
var ghosttyApp: ghostty_app_t? { var ghosttyApp: ghostty_app_t? {
get { self[GhosttyAppKey.self] } get { self[GhosttyAppKey.self] }
set { self[GhosttyAppKey.self] = newValue } set { self[GhosttyAppKey.self] = newValue }
} }
var ghosttyConfig: ghostty_config_t? {
get { self[GhosttyConfigKey.self] }
set { self[GhosttyConfigKey.self] = newValue }
}
} }
extension View { extension View {
func ghosttyApp(_ app: ghostty_app_t?) -> some View { func ghosttyApp(_ app: ghostty_app_t?) -> some View {
environment(\.ghosttyApp, app) environment(\.ghosttyApp, app)
} }
func ghosttyConfig(_ config: ghostty_config_t?) -> some View {
environment(\.ghosttyConfig, config)
}
} }

View File

@ -48,10 +48,20 @@ extension Ghostty {
// Maintain whether our window has focus (is key) or not // Maintain whether our window has focus (is key) or not
@State private var windowFocus: Bool = true @State private var windowFocus: Bool = true
@Environment(\.ghosttyConfig) private var ghostty_config
// This is true if the terminal is considered "focused". The terminal is focused if // This is true if the terminal is considered "focused". The terminal is focused if
// it is both individually focused and the containing window is key. // it is both individually focused and the containing window is key.
private var hasFocus: Bool { surfaceFocus && windowFocus } private var hasFocus: Bool { surfaceFocus && windowFocus }
// The opacity of the rectangle when unfocused.
private var unfocusedOpacity: Double {
var opacity: Double = 0.85
let key = "unfocused-split-opacity"
_ = ghostty_config_get(ghostty_config, &opacity, key, UInt(key.count))
return 1 - opacity
}
var body: some View { var body: some View {
ZStack { ZStack {
// We use a GeometryReader to get the frame bounds so that our metal surface // We use a GeometryReader to get the frame bounds so that our metal surface
@ -130,7 +140,7 @@ extension Ghostty {
Rectangle() Rectangle()
.fill(.white) .fill(.white)
.allowsHitTesting(false) .allowsHitTesting(false)
.opacity(0.15) .opacity(unfocusedOpacity)
} }
} }
} }