use std::collections::HashMap; use std::marker::Send; use std::sync::atomic::AtomicUsize; use std::sync::{atomic, Arc, Mutex}; use std::{mem, ptr}; use winapi::ctypes::c_void; use winapi::shared::basetsd::{UINT32, UINT64}; use winapi::shared::guiddef::REFIID; use winapi::shared::minwindef::ULONG; use winapi::shared::winerror::{E_FAIL, E_INVALIDARG, E_NOTIMPL, S_OK}; use winapi::um::dwrite::IDWriteFontFile; use winapi::um::dwrite::{IDWriteFontFileLoader, IDWriteFontFileLoaderVtbl}; use winapi::um::dwrite::{IDWriteFontFileStream, IDWriteFontFileStreamVtbl}; use winapi::um::unknwnbase::{IUnknown, IUnknownVtbl}; use winapi::um::winnt::HRESULT; use wio::com::ComPtr;
letmut font_file: *mut IDWriteFontFile = ptr::null_mut();
{ let loader = FONT_FILE_LOADER.lock().unwrap(); let hr = (*DWriteFactory()).CreateCustomFontFileReference(
mem::transmute(&key),
mem::size_of::<usize>() as UINT32,
loader.0.as_raw(),
&mut font_file,
);
assert!(hr == S_OK);
} let font_file = ComPtr::from_raw(font_file);
(font_file, font_file_stream, key)
}
}
fn unregister_font_data(key: usize) { letmut map = FONT_FILE_STREAM_MAP.lock().unwrap(); if map.remove(&key).is_none() {
panic!("unregister_font_data: trying to unregister key that is no longer registered");
}
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-20)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.