mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-17 17:26:09 +03:00
macos: use correct title background if top surface
This commit is contained in:
@ -191,15 +191,10 @@ class TerminalController: BaseTerminalController {
|
|||||||
private func syncAppearance(_ surfaceConfig: Ghostty.SurfaceView.DerivedConfig) {
|
private func syncAppearance(_ surfaceConfig: Ghostty.SurfaceView.DerivedConfig) {
|
||||||
guard let window = self.window as? TerminalWindow else { return }
|
guard let window = self.window as? TerminalWindow else { return }
|
||||||
|
|
||||||
// If our window is not visible, then delay this. This is possible specifically
|
// If our window is not visible, then we do nothing. Some things such as blurring
|
||||||
// during state restoration but probably in other scenarios as well. To delay,
|
// have no effect if the window is not visible. Ultimately, we'll have this called
|
||||||
// we just loop directly on the dispatch queue. We have to delay because some
|
// at some point when a surface becomes focused.
|
||||||
// APIs such as window blur have no effect unless the window is visible.
|
guard window.isVisible else { return }
|
||||||
guard window.isVisible else {
|
|
||||||
// Weak window so that if the window changes or is destroyed we aren't holding a ref
|
|
||||||
DispatchQueue.main.async { [weak self] in self?.syncAppearance(surfaceConfig) }
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the font for the window and tab titles.
|
// Set the font for the window and tab titles.
|
||||||
if let titleFontName = surfaceConfig.windowTitleFontFamily {
|
if let titleFontName = surfaceConfig.windowTitleFontFamily {
|
||||||
@ -233,7 +228,7 @@ class TerminalController: BaseTerminalController {
|
|||||||
let backgroundColor: OSColor
|
let backgroundColor: OSColor
|
||||||
if let surfaceTree {
|
if let surfaceTree {
|
||||||
if let focusedSurface, surfaceTree.doesBorderTop(view: focusedSurface) {
|
if let focusedSurface, surfaceTree.doesBorderTop(view: focusedSurface) {
|
||||||
backgroundColor = OSColor(focusedSurface.backgroundColor ?? derivedConfig.backgroundColor)
|
backgroundColor = OSColor(focusedSurface.backgroundColor ?? surfaceConfig.backgroundColor)
|
||||||
} else {
|
} else {
|
||||||
// We don't have a focused surface or our surface doesn't border the
|
// We don't have a focused surface or our surface doesn't border the
|
||||||
// top. We choose to match the color of the top-left most surface.
|
// top. We choose to match the color of the top-left most surface.
|
||||||
|
@ -21,6 +21,14 @@ extension OSColor {
|
|||||||
return (0.299 * r) + (0.587 * g) + (0.114 * b)
|
return (0.299 * r) + (0.587 * g) + (0.114 * b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var hexString: String? {
|
||||||
|
guard let rgb = usingColorSpace(.deviceRGB) else { return nil }
|
||||||
|
let red = Int(rgb.redComponent * 255)
|
||||||
|
let green = Int(rgb.greenComponent * 255)
|
||||||
|
let blue = Int(rgb.blueComponent * 255)
|
||||||
|
return String(format: "#%02X%02X%02X", red, green, blue)
|
||||||
|
}
|
||||||
|
|
||||||
func darken(by amount: CGFloat) -> OSColor {
|
func darken(by amount: CGFloat) -> OSColor {
|
||||||
var h: CGFloat = 0, s: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0
|
var h: CGFloat = 0, s: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0
|
||||||
self.getHue(&h, saturation: &s, brightness: &b, alpha: &a)
|
self.getHue(&h, saturation: &s, brightness: &b, alpha: &a)
|
||||||
|
Reference in New Issue
Block a user