diff options
Diffstat (limited to 'components/layout/fragment.rs')
-rw-r--r-- | components/layout/fragment.rs | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs index 046838f4ade..30178d50aca 100644 --- a/components/layout/fragment.rs +++ b/components/layout/fragment.rs @@ -8,7 +8,7 @@ use app_units::Au; use canvas_traits::CanvasMsg; -use context::{LayoutContext, SharedLayoutContext}; +use context::{LayoutContext, with_thread_local_font_context}; use euclid::{Matrix4D, Point2D, Radians, Rect, Size2D}; use floats::ClearType; use flow::{self, ImmutableFlowUtils}; @@ -368,10 +368,10 @@ impl ImageFragmentInfo { /// FIXME(pcwalton): The fact that image fragments store the cache in the fragment makes little /// sense to me. pub fn new(url: Option<ServoUrl>, - shared_layout_context: &SharedLayoutContext) + layout_context: &LayoutContext) -> ImageFragmentInfo { let image_or_metadata = url.and_then(|url| { - shared_layout_context.get_or_request_image_or_meta(url, UsePlaceholder::Yes) + layout_context.get_or_request_image_or_meta(url, UsePlaceholder::Yes) }); let (image, metadata) = match image_or_metadata { @@ -786,8 +786,9 @@ impl Fragment { SpecificFragmentInfo::UnscannedText( box UnscannedTextFragmentInfo::new(text_overflow_string, None))); unscanned_ellipsis_fragments.push_back(ellipsis_fragment); - let ellipsis_fragments = TextRunScanner::new().scan_for_runs(&mut layout_context.font_context(), - unscanned_ellipsis_fragments); + let ellipsis_fragments = with_thread_local_font_context(layout_context, |font_context| { + TextRunScanner::new().scan_for_runs(font_context, unscanned_ellipsis_fragments) + }); debug_assert!(ellipsis_fragments.len() == 1); ellipsis_fragment = ellipsis_fragments.fragments.into_iter().next().unwrap(); ellipsis_fragment.flags |= IS_ELLIPSIS; @@ -2111,8 +2112,9 @@ impl Fragment { return InlineMetrics::new(Au(0), Au(0), Au(0)); } // See CSS 2.1 § 10.8.1. - let font_metrics = text::font_metrics_for_style(&mut layout_context.font_context(), - self.style.clone_font()); + let font_metrics = with_thread_local_font_context(layout_context, |font_context| { + text::font_metrics_for_style(font_context, self.style.clone_font()) + }); let line_height = text::line_height_from_style(&*self.style, &font_metrics); InlineMetrics::from_font_metrics(&info.run.font_metrics, line_height) } @@ -2194,9 +2196,9 @@ impl Fragment { match style.get_box().vertical_align { vertical_align::T::baseline => {} vertical_align::T::middle => { - let font_metrics = - text::font_metrics_for_style(&mut layout_context.font_context(), - style.clone_font()); + let font_metrics = with_thread_local_font_context(layout_context, |font_context| { + text::font_metrics_for_style(font_context, self.style.clone_font()) + }); offset += (content_inline_metrics.ascent - content_inline_metrics.space_below_baseline - font_metrics.x_height).scale_by(0.5) |