From 01c0e2aba0ccf032cc9ff2788b9874af354418ae Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Wed, 30 May 2018 18:17:02 +0200 Subject: [PATCH] Changes for separate reference frame PR (#2756) --- .../layout/display_list/webrender_helpers.rs | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/components/layout/display_list/webrender_helpers.rs b/components/layout/display_list/webrender_helpers.rs index 2e805f35a41f..a6070ecb61d8 100644 --- a/components/layout/display_list/webrender_helpers.rs +++ b/components/layout/display_list/webrender_helpers.rs @@ -11,6 +11,7 @@ use display_list::items::{BorderDetails, ClipScrollNode, ClipScrollNodeIndex, Cl use display_list::items::{DisplayItem, DisplayList, StackingContextType}; use msg::constellation_msg::PipelineId; use webrender_api::{self, ClipAndScrollInfo, ClipId, DisplayListBuilder, GlyphRasterSpace}; +use webrender_api::LayoutPoint; pub trait WebRenderDisplayListConverter { fn convert_to_webrender(&self, pipeline_id: PipelineId) -> DisplayListBuilder; @@ -218,23 +219,32 @@ impl WebRenderDisplayItemConverter for DisplayItem { let stacking_context = &item.stacking_context; debug_assert_eq!(stacking_context.context_type, StackingContextType::Real); - let reference_frame_clip_id = builder.push_stacking_context( - &webrender_api::LayoutPrimitiveInfo::new(stacking_context.bounds), + let mut info = webrender_api::LayoutPrimitiveInfo::new(stacking_context.bounds); + if let Some(frame_index) = stacking_context.established_reference_frame { + debug_assert!( + stacking_context.transform.is_some() || + stacking_context.perspective.is_some() + ); + + let clip_id = builder.push_reference_frame( + &info.clone(), + stacking_context.transform.map(Into::into), + stacking_context.perspective, + ); + clip_ids[frame_index.to_index()] = Some(clip_id); + + info.rect.origin = LayoutPoint::zero(); + info.clip_rect.origin = LayoutPoint::zero(); + } + + builder.push_stacking_context( + &info, None, - stacking_context.transform.map(Into::into), stacking_context.transform_style, - stacking_context.perspective, stacking_context.mix_blend_mode, stacking_context.filters.clone(), GlyphRasterSpace::Screen, ); - - match (reference_frame_clip_id, stacking_context.established_reference_frame) { - (Some(webrender_id), Some(frame_index)) => - clip_ids[frame_index.to_index()] = Some(webrender_id), - (None, None) => {}, - _ => warn!("Mismatch between reference frame establishment!"), - } }, DisplayItem::PopStackingContext(_) => builder.pop_stacking_context(), DisplayItem::DefineClipScrollNode(ref item) => {