--- a/gfx/webrender_bindings/src/bindings.rs
+++ b/gfx/webrender_bindings/src/bindings.rs
@@ -1062,20 +1062,26 @@ pub extern "C" fn wr_dp_begin(state: &mu
width: u32,
height: u32) {
assert!(unsafe { !is_in_render_thread() });
state.frame_builder.dl_builder.data.clear();
let bounds = LayoutRect::new(LayoutPoint::new(0.0, 0.0),
LayoutSize::new(width as f32, height as f32));
+ let prim_info = LayoutPrimitiveInfo {
+ rect: bounds,
+ local_clip: None,
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_stacking_context(webrender_api::ScrollPolicy::Scrollable,
- bounds,
+ .push_stacking_context(&prim_info,
+ webrender_api::ScrollPolicy::Scrollable,
None,
TransformStyle::Flat,
None,
MixBlendMode::Normal,
Vec::new());
}
#[no_mangle]
@@ -1130,20 +1136,27 @@ pub extern "C" fn wr_dp_push_stacking_co
_ => Some(PropertyBinding::Binding(PropertyBindingKey::new(animation_id))),
};
let perspective_ref = unsafe { perspective.as_ref() };
let perspective = match perspective_ref {
Some(perspective) => Some(perspective.clone()),
None => None,
};
+
+ let prim_info = LayoutPrimitiveInfo {
+ rect: bounds,
+ local_clip: None,
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_stacking_context(webrender_api::ScrollPolicy::Scrollable,
- bounds,
+ .push_stacking_context(&prim_info,
+ webrender_api::ScrollPolicy::Scrollable,
transform_binding,
transform_style,
perspective,
mix_blend_mode,
filters);
}
#[no_mangle]
@@ -1248,45 +1261,61 @@ pub extern "C" fn wr_dp_pop_clip_and_scr
}
#[no_mangle]
pub extern "C" fn wr_dp_push_iframe(state: &mut WrState,
rect: LayoutRect,
pipeline_id: WrPipelineId) {
assert!(unsafe { is_in_main_thread() });
- state.frame_builder.dl_builder.push_iframe(rect, None, pipeline_id);
+ let prim_info = LayoutPrimitiveInfo {
+ rect: rect,
+ local_clip: None,
+ is_backface_visible: true,
+ };
+
+ state.frame_builder.dl_builder.push_iframe(&prim_info, pipeline_id);
}
#[no_mangle]
pub extern "C" fn wr_dp_push_rect(state: &mut WrState,
rect: LayoutRect,
clip: LayoutRect,
color: ColorF) {
assert!(unsafe { !is_in_render_thread() });
- state.frame_builder.dl_builder.push_rect(rect,
- Some(LocalClip::Rect(clip)),
+ let prim_info = LayoutPrimitiveInfo {
+ rect: rect,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
+ state.frame_builder.dl_builder.push_rect(&prim_info,
color);
}
#[no_mangle]
pub extern "C" fn wr_dp_push_image(state: &mut WrState,
bounds: LayoutRect,
clip: LayoutRect,
stretch_size: LayoutSize,
tile_spacing: LayoutSize,
image_rendering: ImageRendering,
key: WrImageKey) {
assert!(unsafe { is_in_main_thread() || is_in_compositor_thread() });
+ let prim_info = LayoutPrimitiveInfo {
+ rect: bounds,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_image(bounds,
- Some(LocalClip::Rect(clip)),
+ .push_image(&prim_info,
stretch_size,
tile_spacing,
image_rendering,
key);
}
/// Push a 3 planar yuv image.
#[no_mangle]
@@ -1295,59 +1324,74 @@ pub extern "C" fn wr_dp_push_yuv_planar_
clip: LayoutRect,
image_key_0: WrImageKey,
image_key_1: WrImageKey,
image_key_2: WrImageKey,
color_space: WrYuvColorSpace,
image_rendering: ImageRendering) {
assert!(unsafe { is_in_main_thread() || is_in_compositor_thread() });
+ let prim_info = LayoutPrimitiveInfo {
+ rect: bounds,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_yuv_image(bounds,
- Some(LocalClip::Rect(clip.into())),
+ .push_yuv_image(&prim_info,
YuvData::PlanarYCbCr(image_key_0, image_key_1, image_key_2),
color_space,
image_rendering);
}
/// Push a 2 planar NV12 image.
#[no_mangle]
pub extern "C" fn wr_dp_push_yuv_NV12_image(state: &mut WrState,
bounds: LayoutRect,
clip: LayoutRect,
image_key_0: WrImageKey,
image_key_1: WrImageKey,
color_space: WrYuvColorSpace,
image_rendering: ImageRendering) {
assert!(unsafe { is_in_main_thread() || is_in_compositor_thread() });
+ let prim_info = LayoutPrimitiveInfo {
+ rect: bounds,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_yuv_image(bounds,
- Some(LocalClip::Rect(clip.into())),
+ .push_yuv_image(&prim_info,
YuvData::NV12(image_key_0, image_key_1),
color_space,
image_rendering);
}
/// Push a yuv interleaved image.
#[no_mangle]
pub extern "C" fn wr_dp_push_yuv_interleaved_image(state: &mut WrState,
bounds: LayoutRect,
clip: LayoutRect,
image_key_0: WrImageKey,
color_space: WrYuvColorSpace,
image_rendering: ImageRendering) {
assert!(unsafe { is_in_main_thread() || is_in_compositor_thread() });
+ let prim_info = LayoutPrimitiveInfo {
+ rect: bounds,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_yuv_image(bounds,
- Some(LocalClip::Rect(clip.into())),
+ .push_yuv_image(&prim_info,
YuvData::InterleavedYCbCr(image_key_0),
color_space,
image_rendering);
}
#[no_mangle]
pub extern "C" fn wr_dp_push_text(state: &mut WrState,
bounds: LayoutRect,
@@ -1356,34 +1400,45 @@ pub extern "C" fn wr_dp_push_text(state:
font_key: WrFontInstanceKey,
glyphs: *const GlyphInstance,
glyph_count: u32,
glyph_options: *const GlyphOptions) {
assert!(unsafe { is_in_main_thread() });
let glyph_slice = make_slice(glyphs, glyph_count as usize);
+ let prim_info = LayoutPrimitiveInfo {
+ rect: bounds,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_text(bounds,
- Some(LocalClip::Rect(clip.into())),
+ .push_text(&prim_info,
&glyph_slice,
font_key,
color,
unsafe { glyph_options.as_ref().cloned() });
}
#[no_mangle]
pub extern "C" fn wr_dp_push_text_shadow(state: &mut WrState,
bounds: LayoutRect,
clip: LayoutRect,
shadow: TextShadow) {
assert!(unsafe { is_in_main_thread() });
- state.frame_builder.dl_builder.push_text_shadow(bounds, Some(LocalClip::Rect(clip.into())), shadow.into());
+ let prim_info = LayoutPrimitiveInfo {
+ rect: bounds,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
+ state.frame_builder.dl_builder.push_text_shadow(&prim_info, shadow.into());
}
#[no_mangle]
pub extern "C" fn wr_dp_pop_text_shadow(state: &mut WrState) {
assert!(unsafe { is_in_main_thread() });
state.frame_builder.dl_builder.pop_text_shadow();
}
@@ -1395,19 +1450,25 @@ pub extern "C" fn wr_dp_push_line(state:
start: f32,
end: f32,
orientation: LineOrientation,
width: f32,
color: ColorF,
style: LineStyle) {
assert!(unsafe { is_in_main_thread() });
+ let prim_info = LayoutPrimitiveInfo {
+ rect: LayoutRect::zero(),
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_line(Some(LocalClip::Rect(clip.into())),
+ .push_line(&prim_info,
baseline,
start,
end,
orientation,
width,
color,
style);
@@ -1427,20 +1488,25 @@ pub extern "C" fn wr_dp_push_border(stat
let border_details = BorderDetails::Normal(NormalBorder {
left: left.into(),
right: right.into(),
top: top.into(),
bottom: bottom.into(),
radius: radius.into(),
});
+ let prim_info = LayoutPrimitiveInfo {
+ rect: rect,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_border(rect,
- Some(LocalClip::Rect(clip.into())),
+ .push_border(&prim_info,
widths,
border_details);
}
#[no_mangle]
pub extern "C" fn wr_dp_push_border_image(state: &mut WrState,
rect: LayoutRect,
clip: LayoutRect,
@@ -1455,20 +1521,25 @@ pub extern "C" fn wr_dp_push_border_imag
BorderDetails::Image(ImageBorder {
image_key: image,
patch: patch.into(),
fill: false,
outset: outset.into(),
repeat_horizontal: repeat_horizontal.into(),
repeat_vertical: repeat_vertical.into(),
});
+ let prim_info = LayoutPrimitiveInfo {
+ rect: rect,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_border(rect.into(),
- Some(LocalClip::Rect(clip.into())),
+ .push_border(&prim_info,
widths.into(),
border_details);
}
#[no_mangle]
pub extern "C" fn wr_dp_push_border_gradient(state: &mut WrState,
rect: LayoutRect,
clip: LayoutRect,
@@ -1489,20 +1560,25 @@ pub extern "C" fn wr_dp_push_border_grad
state.frame_builder
.dl_builder
.create_gradient(start_point.into(),
end_point.into(),
stops_vector,
extend_mode.into()),
outset: outset.into(),
});
+ let prim_info = LayoutPrimitiveInfo {
+ rect: rect,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_border(rect.into(),
- Some(LocalClip::Rect(clip.into())),
+ .push_border(&prim_info,
widths.into(),
border_details);
}
#[no_mangle]
pub extern "C" fn wr_dp_push_border_radial_gradient(state: &mut WrState,
rect: LayoutRect,
clip: LayoutRect,
@@ -1524,20 +1600,25 @@ pub extern "C" fn wr_dp_push_border_radi
state.frame_builder
.dl_builder
.create_radial_gradient(center.into(),
radius.into(),
stops_vector,
extend_mode.into()),
outset: outset.into(),
});
+ let prim_info = LayoutPrimitiveInfo {
+ rect: rect,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_border(rect.into(),
- Some(LocalClip::Rect(clip.into())),
+ .push_border(&prim_info,
widths.into(),
border_details);
}
#[no_mangle]
pub extern "C" fn wr_dp_push_linear_gradient(state: &mut WrState,
rect: LayoutRect,
clip: LayoutRect,
@@ -1554,20 +1635,25 @@ pub extern "C" fn wr_dp_push_linear_grad
let stops_vector = stops_slice.to_owned();
let gradient = state.frame_builder
.dl_builder
.create_gradient(start_point.into(),
end_point.into(),
stops_vector,
extend_mode.into());
+ let prim_info = LayoutPrimitiveInfo {
+ rect: rect,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_gradient(rect.into(),
- Some(LocalClip::Rect(clip.into())),
+ .push_gradient(&prim_info,
gradient,
tile_size.into(),
tile_spacing.into());
}
#[no_mangle]
pub extern "C" fn wr_dp_push_radial_gradient(state: &mut WrState,
rect: LayoutRect,
@@ -1585,20 +1671,25 @@ pub extern "C" fn wr_dp_push_radial_grad
let stops_vector = stops_slice.to_owned();
let gradient = state.frame_builder
.dl_builder
.create_radial_gradient(center.into(),
radius.into(),
stops_vector,
extend_mode.into());
+ let prim_info = LayoutPrimitiveInfo {
+ rect: rect,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_radial_gradient(rect,
- Some(LocalClip::Rect(clip.into())),
+ .push_radial_gradient(&prim_info,
gradient,
tile_size,
tile_spacing);
}
#[no_mangle]
pub extern "C" fn wr_dp_push_box_shadow(state: &mut WrState,
rect: LayoutRect,
@@ -1607,20 +1698,25 @@ pub extern "C" fn wr_dp_push_box_shadow(
offset: LayoutVector2D,
color: ColorF,
blur_radius: f32,
spread_radius: f32,
border_radius: f32,
clip_mode: BoxShadowClipMode) {
assert!(unsafe { is_in_main_thread() });
+ let prim_info = LayoutPrimitiveInfo {
+ rect: rect,
+ local_clip: Some(LocalClip::Rect(clip.into())),
+ is_backface_visible: true,
+ };
+
state.frame_builder
.dl_builder
- .push_box_shadow(rect,
- Some(LocalClip::Rect(clip.into())),
+ .push_box_shadow(&prim_info,
box_bounds,
offset,
color,
blur_radius,
spread_radius,
border_radius,
clip_mode);
}