Skip to content

Commit

Permalink
Changes for separate reference frame PR (#2756)
Browse files Browse the repository at this point in the history
  • Loading branch information
mrobinson authored and gw3583 committed Jun 19, 2018
1 parent 823f3e2 commit 01c0e2a
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions components/layout/display_list/webrender_helpers.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -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) => {
Expand Down

0 comments on commit 01c0e2a

Please sign in to comment.