diff options
Diffstat (limited to 'components/layout_2020/context.rs')
-rw-r--r-- | components/layout_2020/context.rs | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/components/layout_2020/context.rs b/components/layout_2020/context.rs index 0e96797f4d7..5bde114ca57 100644 --- a/components/layout_2020/context.rs +++ b/components/layout_2020/context.rs @@ -3,7 +3,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use gfx::font_cache_thread::FontCacheThread; +use gfx::font_context::FontContext; use msg::constellation_msg::PipelineId; +use std::cell::{RefCell, RefMut}; use std::sync::Mutex; use style::context::SharedStyleContext; @@ -19,3 +21,18 @@ impl<'a> LayoutContext<'a> { &self.style_context } } + +pub(crate) type LayoutFontContext = FontContext<FontCacheThread>; + +thread_local!(static FONT_CONTEXT: RefCell<Option<LayoutFontContext>> = RefCell::new(None)); + +pub(crate) fn with_thread_local_font_context<F, R>(layout_context: &LayoutContext, f: F) -> R +where + F: FnOnce(&mut LayoutFontContext) -> R, +{ + FONT_CONTEXT.with(|font_context| { + f(font_context.borrow_mut().get_or_insert_with(|| { + FontContext::new(layout_context.font_cache_thread.lock().unwrap().clone()) + })) + }) +} |