mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-11 13:51:01 -05:00
Add subpixel anti-aliasing support on macOS 10.14+
This commit is contained in:
parent
395fee2b01
commit
ab1f173ccd
6 changed files with 47 additions and 15 deletions
7
Cargo.lock
generated
7
Cargo.lock
generated
|
@ -331,7 +331,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "cocoa"
|
||||
version = "0.20.0"
|
||||
version = "0.20.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -597,6 +597,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
name = "font"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cocoa 0.20.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-graphics 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2204,7 +2205,7 @@ version = "0.22.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cocoa 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cocoa 0.20.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-graphics 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-video-sys 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2367,7 +2368,7 @@ dependencies = [
|
|||
"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
|
||||
"checksum cmake 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "49f97562167906afc51aa3fd7e6c83c10a5c96d33bd18f98a4c06a1413134caa"
|
||||
"checksum cocoa 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f29f7768b2d1be17b96158e3285951d366b40211320fb30826a76cb7a0da6400"
|
||||
"checksum cocoa 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a4736c86d51bd878b474400d9ec888156f4037015f5d09794fab9f26eab1ad4"
|
||||
"checksum cocoa 0.20.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8f7b6f3f7f4f0b3ec5c5039aaa9e8c3cef97a7a480a400fd62944841314f293d"
|
||||
"checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
|
||||
"checksum copypasta 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "865e9675691e2a7dfc806b16ef2dd5dd536e26ea9b8046519767d79be03aeb6a"
|
||||
"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d"
|
||||
|
|
|
@ -153,17 +153,7 @@
|
|||
# Thin stroke font rendering (macOS only)
|
||||
#
|
||||
# Thin strokes are suitable for retina displays, but for non-retina screens
|
||||
# it is recommended to set `use_thin_strokes` to `false`
|
||||
#
|
||||
# macOS >= 10.14.x:
|
||||
#
|
||||
# If the font quality on non-retina display looks bad then set
|
||||
# `use_thin_strokes` to `true` and enable font smoothing by running the
|
||||
# following command:
|
||||
# `defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO`
|
||||
#
|
||||
# This is a global setting and will require a log out or restart to take
|
||||
# effect.
|
||||
# it is recommended to set `use_thin_strokes` to `false`.
|
||||
#use_thin_strokes: true
|
||||
|
||||
# If `true`, bold text is drawn using the bright color variants.
|
||||
|
|
|
@ -32,6 +32,8 @@ use parking_lot::MutexGuard;
|
|||
use wayland_client::{Display as WaylandDisplay, EventQueue};
|
||||
|
||||
use font::{self, Rasterize};
|
||||
#[cfg(target_os = "macos")]
|
||||
use font::set_font_smoothing;
|
||||
|
||||
use alacritty_terminal::config::{Font, StartupMode};
|
||||
use alacritty_terminal::event::{Event, OnResize};
|
||||
|
@ -225,6 +227,10 @@ impl Display {
|
|||
api.clear(background_color);
|
||||
});
|
||||
|
||||
// Set subpixel anti-aliasing.
|
||||
#[cfg(target_os = "macos")]
|
||||
set_font_smoothing(config.font.use_thin_strokes());
|
||||
|
||||
#[cfg(not(any(target_os = "macos", windows)))]
|
||||
let is_x11 = event_loop.is_x11();
|
||||
|
||||
|
|
|
@ -22,7 +22,9 @@ use glutin::platform::unix::EventLoopWindowTargetExtUnix;
|
|||
use log::{debug, info, warn};
|
||||
use serde_json as json;
|
||||
|
||||
use font::Size;
|
||||
use font::{self, Size};
|
||||
#[cfg(target_os = "macos")]
|
||||
use font::set_font_smoothing;
|
||||
|
||||
use alacritty_terminal::clipboard::ClipboardType;
|
||||
use alacritty_terminal::config::Font;
|
||||
|
@ -726,6 +728,10 @@ impl<N: Notify + OnResize> Processor<N> {
|
|||
}
|
||||
}
|
||||
|
||||
// Set subpixel anti-aliasing.
|
||||
#[cfg(target_os = "macos")]
|
||||
set_font_smoothing(config.font.use_thin_strokes());
|
||||
|
||||
*processor.ctx.config = config;
|
||||
|
||||
processor.ctx.terminal.dirty = true;
|
||||
|
|
|
@ -17,6 +17,7 @@ servo-fontconfig = "0.5.0"
|
|||
freetype-rs = "0.25"
|
||||
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
cocoa = "0.20.1"
|
||||
core-foundation = "0.7"
|
||||
core-text = "15"
|
||||
core-graphics = "0.19"
|
||||
|
|
|
@ -38,6 +38,9 @@ use core_text::font_descriptor::kCTFontVerticalOrientation;
|
|||
use core_text::font_descriptor::SymbolicTraitAccessors;
|
||||
use core_text::font_descriptor::{CTFontDescriptor, CTFontOrientation};
|
||||
|
||||
use cocoa::base::{id, nil, NO};
|
||||
use cocoa::foundation::{NSOperatingSystemVersion, NSProcessInfo, NSString, NSUserDefaults};
|
||||
|
||||
use euclid::{Point2D, Rect, Size2D};
|
||||
|
||||
use log::{trace, warn};
|
||||
|
@ -278,6 +281,31 @@ pub struct Font {
|
|||
|
||||
unsafe impl Send for Font {}
|
||||
|
||||
|
||||
/// Set subpixel anti-aliasing on macOS.
|
||||
///
|
||||
/// Sub-pixel anti-aliasing has been disabled since macOS Mojave by default. This function allows
|
||||
/// overriding the global `CGFontRenderingFontSmoothingDisabled` setting on a per-application basis
|
||||
/// to re-enable it.
|
||||
///
|
||||
/// This is a no-op on systems running High Sierra or earlier (< 10.14.0).
|
||||
pub fn set_font_smoothing(enable: bool) {
|
||||
let min_macos_version = NSOperatingSystemVersion::new(10, 14, 0);
|
||||
unsafe {
|
||||
// Check that we're running at least Mojave (10.14.0+).
|
||||
if !NSProcessInfo::processInfo(nil).isOperatingSystemAtLeastVersion(min_macos_version) {
|
||||
return
|
||||
}
|
||||
|
||||
let key = NSString::alloc(nil).init_str("CGFontRenderingFontSmoothingDisabled");
|
||||
if enable {
|
||||
id::standardUserDefaults().setBool_forKey_(NO, key);
|
||||
} else {
|
||||
id::standardUserDefaults().removeObject_forKey_(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// List all family names.
|
||||
pub fn get_family_names() -> Vec<String> {
|
||||
// CFArray of CFStringRef.
|
||||
|
|
Loading…
Reference in a new issue