aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_2020/context.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout_2020/context.rs')
-rw-r--r--components/layout_2020/context.rs17
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())
+ }))
+ })
+}