windows: Introduce Direct Write
(#10119)
This PR brings `Direct Write` to Zed. Now, Zed first trys to query dwrite interface, if not supported, which means runing on Windows below win10 1703), will choose `cosmic` as a fallback text system. This direct write text system supports: - Full font features support - Emoji support - Default system fonts as fallback ### Font features https://github.com/zed-industries/zed/assets/14981363/198eff88-47df-4bc8-a257-e3acf81fd61d ### Emoji  **Note: input emoji through IME or IMM not working yet, copy paste emoji works fine (will be fixed by #10125 )** ### Font fallback I use `Zed mono` which dose not support chinese chars to test font fallback https://github.com/zed-industries/zed/assets/14981363/c97d0847-0ac5-47e6-aa00-f3ce6d1e50a5 Release Notes: - N/A
This commit is contained in:
parent
1127b1a0de
commit
11a3d2b04b
6 changed files with 1329 additions and 8 deletions
|
@ -57,7 +57,7 @@ pub(crate) struct WindowsPlatformInner {
|
|||
background_executor: BackgroundExecutor,
|
||||
pub(crate) foreground_executor: ForegroundExecutor,
|
||||
main_receiver: flume::Receiver<Runnable>,
|
||||
text_system: Arc<CosmicTextSystem>,
|
||||
text_system: Arc<dyn PlatformTextSystem>,
|
||||
callbacks: Mutex<Callbacks>,
|
||||
pub raw_window_handles: RwLock<SmallVec<[HWND; 4]>>,
|
||||
pub(crate) dispatch_event: OwnedHandle,
|
||||
|
@ -155,7 +155,13 @@ impl WindowsPlatform {
|
|||
let dispatcher = Arc::new(WindowsDispatcher::new(main_sender, dispatch_event.to_raw()));
|
||||
let background_executor = BackgroundExecutor::new(dispatcher.clone());
|
||||
let foreground_executor = ForegroundExecutor::new(dispatcher);
|
||||
let text_system = Arc::new(CosmicTextSystem::new());
|
||||
let text_system = if let Some(direct_write) = DirectWriteTextSystem::new().log_err() {
|
||||
log::info!("Using direct write text system.");
|
||||
Arc::new(direct_write) as Arc<dyn PlatformTextSystem>
|
||||
} else {
|
||||
log::info!("Using cosmic text system.");
|
||||
Arc::new(CosmicTextSystem::new()) as Arc<dyn PlatformTextSystem>
|
||||
};
|
||||
let callbacks = Mutex::new(Callbacks::default());
|
||||
let raw_window_handles = RwLock::new(SmallVec::new());
|
||||
let settings = RefCell::new(WindowsPlatformSystemSettings::new());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue