mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
Merge pull request #1467 from qwerasd205/macos-fix-dpi-scaling
fix(macOS): Prevent incorrect scaling of the Metal layer after DPI change
This commit is contained in:
@ -403,6 +403,29 @@ extension Ghostty {
|
||||
}
|
||||
|
||||
override func viewDidChangeBackingProperties() {
|
||||
super.viewDidChangeBackingProperties()
|
||||
|
||||
// The Core Animation compositing engine uses the layer's contentsScale property
|
||||
// to determine whether to scale its contents during compositing. When the window
|
||||
// moves between a high DPI display and a low DPI display, or the user modifies
|
||||
// the DPI scaling for a display in the system settings, this can result in the
|
||||
// layer being scaled inappropriately. Since we handle the adjustment of scale
|
||||
// and resolution ourselves below, we update the layer's contentsScale property
|
||||
// to match the window's backingScaleFactor, so as to ensure it is not scaled by
|
||||
// the compositor.
|
||||
//
|
||||
// Ref: High Resolution Guidelines for OS X
|
||||
// https://developer.apple.com/library/archive/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/CapturingScreenContents/CapturingScreenContents.html#//apple_ref/doc/uid/TP40012302-CH10-SW27
|
||||
if let window = window {
|
||||
CATransaction.begin()
|
||||
// Disable the implicit transition animation that Core Animation applies to
|
||||
// property changes. Otherwise it will apply a scale animation to the layer
|
||||
// contents which looks pretty janky.
|
||||
CATransaction.setDisableActions(true)
|
||||
layer?.contentsScale = window.backingScaleFactor
|
||||
CATransaction.commit()
|
||||
}
|
||||
|
||||
guard let surface = self.surface else { return }
|
||||
|
||||
// Detect our X/Y scale factor so we can update our surface
|
||||
|
Reference in New Issue
Block a user