diff --git a/Cargo.lock b/Cargo.lock index 9e00ee76e970..8651eb459284 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3193,7 +3193,7 @@ dependencies = [ [[package]] name = "webrender" version = "0.36.0" -source = "git+https://github.com/servo/webrender#d126ebae1ad960f95791c747537c88181106173f" +source = "git+https://github.com/servo/webrender#964df2fa00f330daf4f233669e37133f93113792" dependencies = [ "app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 1.0.0-alpha6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3222,9 +3222,10 @@ dependencies = [ [[package]] name = "webrender_traits" version = "0.36.0" -source = "git+https://github.com/servo/webrender#d126ebae1ad960f95791c747537c88181106173f" +source = "git+https://github.com/servo/webrender#964df2fa00f330daf4f233669e37133f93113792" dependencies = [ "app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bincode 1.0.0-alpha6 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/components/layout/webrender_helpers.rs b/components/layout/webrender_helpers.rs index 70479d438379..aceebd8a19d0 100644 --- a/components/layout/webrender_helpers.rs +++ b/components/layout/webrender_helpers.rs @@ -15,7 +15,8 @@ use msg::constellation_msg::PipelineId; use style::computed_values::{image_rendering, mix_blend_mode}; use style::computed_values::filter::{self, Filter}; use style::values::computed::BorderStyle; -use webrender_traits::{self, DisplayListBuilder, ExtendMode, LayoutTransform, ClipId}; +use webrender_traits::{self, DisplayListBuilder, ExtendMode}; +use webrender_traits::{LayoutTransform, ClipId, ClipRegionToken}; pub trait WebRenderDisplayListConverter { fn convert_to_webrender(&self, pipeline_id: PipelineId) -> DisplayListBuilder; @@ -114,18 +115,18 @@ impl ToRectF for Rect { } trait ToClipRegion { - fn to_clip_region(&self, builder: &mut DisplayListBuilder) -> webrender_traits::ClipRegion; + fn push_clip_region(&self, builder: &mut DisplayListBuilder) -> ClipRegionToken; } impl ToClipRegion for ClippingRegion { - fn to_clip_region(&self, builder: &mut DisplayListBuilder) -> webrender_traits::ClipRegion { - builder.new_clip_region(&self.main.to_rectf(), + fn push_clip_region(&self, builder: &mut DisplayListBuilder) -> ClipRegionToken { + builder.push_clip_region(&self.main.to_rectf(), self.complex.iter().map(|complex_clipping_region| { webrender_traits::ComplexClipRegion::new( complex_clipping_region.rect.to_rectf(), complex_clipping_region.radii.to_border_radius(), ) - }).collect(), + }), None) } } @@ -241,7 +242,7 @@ impl WebRenderDisplayItemConverter for DisplayItem { DisplayItem::SolidColor(ref item) => { let color = item.color; if color.a > 0.0 { - let clip = item.base.clip.to_clip_region(builder); + let clip = item.base.clip.push_clip_region(builder); builder.push_rect(item.base.bounds.to_rectf(), clip, color); } } @@ -272,7 +273,7 @@ impl WebRenderDisplayItemConverter for DisplayItem { } if glyphs.len() > 0 { - let clip = item.base.clip.to_clip_region(builder); + let clip = item.base.clip.push_clip_region(builder); builder.push_text(item.base.bounds.to_rectf(), clip, &glyphs, @@ -287,7 +288,7 @@ impl WebRenderDisplayItemConverter for DisplayItem { if let Some(id) = item.webrender_image.key { if item.stretch_size.width > Au(0) && item.stretch_size.height > Au(0) { - let clip = item.base.clip.to_clip_region(builder); + let clip = item.base.clip.push_clip_region(builder); builder.push_image(item.base.bounds.to_rectf(), clip, item.stretch_size.to_sizef(), @@ -298,13 +299,13 @@ impl WebRenderDisplayItemConverter for DisplayItem { } } DisplayItem::WebGL(ref item) => { - let clip = item.base.clip.to_clip_region(builder); + let clip = item.base.clip.push_clip_region(builder); builder.push_webgl_canvas(item.base.bounds.to_rectf(), clip, item.context_id); } DisplayItem::Border(ref item) => { let rect = item.base.bounds.to_rectf(); let widths = item.border_widths.to_border_widths(); - let clip = item.base.clip.to_clip_region(builder); + let clip = item.base.clip.push_clip_region(builder); let details = match item.details { BorderDetails::Normal(ref border) => { @@ -369,7 +370,7 @@ impl WebRenderDisplayItemConverter for DisplayItem { let rect = item.base.bounds.to_rectf(); let start_point = item.gradient.start_point.to_pointf(); let end_point = item.gradient.end_point.to_pointf(); - let clip = item.base.clip.to_clip_region(builder); + let clip = item.base.clip.push_clip_region(builder); let extend_mode = if item.gradient.repeating { ExtendMode::Repeat } else { @@ -389,7 +390,7 @@ impl WebRenderDisplayItemConverter for DisplayItem { let rect = item.base.bounds.to_rectf(); let center = item.gradient.center.to_pointf(); let radius = item.gradient.radius.to_sizef(); - let clip = item.base.clip.to_clip_region(builder); + let clip = item.base.clip.push_clip_region(builder); let extend_mode = if item.gradient.repeating { ExtendMode::Repeat } else { @@ -411,7 +412,7 @@ impl WebRenderDisplayItemConverter for DisplayItem { DisplayItem::BoxShadow(ref item) => { let rect = item.base.bounds.to_rectf(); let box_bounds = item.box_bounds.to_rectf(); - let clip = item.base.clip.to_clip_region(builder); + let clip = item.base.clip.push_clip_region(builder); builder.push_box_shadow(rect, clip, box_bounds, @@ -425,7 +426,7 @@ impl WebRenderDisplayItemConverter for DisplayItem { DisplayItem::Iframe(ref item) => { let rect = item.base.bounds.to_rectf(); let pipeline_id = item.iframe.to_webrender(); - let clip = item.base.clip.to_clip_region(builder); + let clip = item.base.clip.push_clip_region(builder); builder.push_iframe(rect, clip, pipeline_id); } DisplayItem::PushStackingContext(ref item) => { @@ -452,7 +453,7 @@ impl WebRenderDisplayItemConverter for DisplayItem { builder.push_clip_id(item.scroll_root.parent_id); let our_id = item.scroll_root.id; - let clip = item.scroll_root.clip.to_clip_region(builder); + let clip = item.scroll_root.clip.push_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)); debug_assert!(our_id == webrender_id);