Eliminate ScrollRootId

Just use WebRender's ClipId directly. This will allow us to create and
use ReferenceFrames in the future, if we need to do that. It will also
make it easier to have Servo responsible for creating the root
scrolling area, which will allow removing some old hacks in the future.
This commit is contained in:
Martin Robinson 2017-04-19 14:45:47 +02:00
parent 7919e591a4
commit d150cc9f95
24 changed files with 226 additions and 281 deletions

View file

@ -11,7 +11,6 @@ use app_units::Au;
use euclid::{Point2D, Rect, SideOffsets2D, Size2D};
use gfx::display_list::{BorderDetails, BorderRadii, BoxShadowClipMode, ClippingRegion};
use gfx::display_list::{DisplayItem, DisplayList, DisplayListTraversal, StackingContextType};
use gfx_traits::ScrollRootId;
use msg::constellation_msg::PipelineId;
use style::computed_values::{image_rendering, mix_blend_mode};
use style::computed_values::filter::{self, Filter};
@ -25,7 +24,7 @@ pub trait WebRenderDisplayListConverter {
trait WebRenderDisplayItemConverter {
fn convert_to_webrender(&self,
builder: &mut DisplayListBuilder,
current_scroll_root_id: &mut ScrollRootId);
current_scroll_root_id: &mut ClipId);
}
trait ToBorderStyle {
@ -217,8 +216,8 @@ impl WebRenderDisplayListConverter for DisplayList {
let webrender_pipeline_id = pipeline_id.to_webrender();
let mut builder = DisplayListBuilder::new(webrender_pipeline_id);
let mut current_scroll_root_id = ScrollRootId::root();
builder.push_clip_id(current_scroll_root_id.convert_to_webrender(webrender_pipeline_id));
let mut current_scroll_root_id = ClipId::root_scroll_node(webrender_pipeline_id);
builder.push_clip_id(current_scroll_root_id);
for item in traversal {
item.convert_to_webrender(&mut builder, &mut current_scroll_root_id);
@ -230,12 +229,11 @@ impl WebRenderDisplayListConverter for DisplayList {
impl WebRenderDisplayItemConverter for DisplayItem {
fn convert_to_webrender(&self,
builder: &mut DisplayListBuilder,
current_scroll_root_id: &mut ScrollRootId) {
current_scroll_root_id: &mut ClipId) {
let scroll_root_id = self.base().scroll_root_id;
if scroll_root_id != *current_scroll_root_id {
let pipeline_id = builder.pipeline_id;
builder.pop_clip_id();
builder.push_clip_id(scroll_root_id.convert_to_webrender(pipeline_id));
builder.push_clip_id(scroll_root_id);
*current_scroll_root_id = scroll_root_id;
}
@ -425,10 +423,9 @@ impl WebRenderDisplayItemConverter for DisplayItem {
}
DisplayItem::PopStackingContext(_) => builder.pop_stacking_context(),
DisplayItem::PushScrollRoot(ref item) => {
let pipeline_id = builder.pipeline_id;
builder.push_clip_id(item.scroll_root.parent_id.convert_to_webrender(pipeline_id));
builder.push_clip_id(item.scroll_root.parent_id);
let our_id = item.scroll_root.id.convert_to_webrender(pipeline_id);
let our_id = item.scroll_root.id;
let clip = item.scroll_root.clip.to_clip_region(builder);
let content_rect = item.scroll_root.content_rect.to_rectf();
let webrender_id = builder.define_clip(content_rect, clip, Some(our_id));
@ -440,16 +437,3 @@ impl WebRenderDisplayItemConverter for DisplayItem {
}
}
}
trait WebRenderScrollRootIdConverter {
fn convert_to_webrender(&self, pipeline_id: webrender_traits::PipelineId) -> ClipId;
}
impl WebRenderScrollRootIdConverter for ScrollRootId {
fn convert_to_webrender(&self, pipeline_id: webrender_traits::PipelineId) -> ClipId {
if *self == ScrollRootId::root() {
ClipId::root_scroll_node(pipeline_id)
} else {
ClipId::new(self.0 as u64, pipeline_id)
}
}
}