mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
WebRender no longer needs StackingLevel information
Since the display list is already sorted before it is passed to WebRender, we don't need to pass the stacking level information any longer. Update webrender, webrender_traits, and gleam.
This commit is contained in:
parent
6edcad206d
commit
72e267953c
4 changed files with 57 additions and 102 deletions
|
@ -12,7 +12,7 @@ use azure::azure_hl::Color;
|
|||
use euclid::num::Zero;
|
||||
use euclid::{Point2D, Rect, Size2D};
|
||||
use gfx::display_list::{BorderRadii, BoxShadowClipMode, ClippingRegion};
|
||||
use gfx::display_list::{DisplayItem, DisplayList, DisplayListEntry, DisplayListSection};
|
||||
use gfx::display_list::{DisplayItem, DisplayList};
|
||||
use gfx::display_list::{DisplayListTraversal, GradientStop, StackingContext, StackingContextType};
|
||||
use gfx_traits::ScrollPolicy;
|
||||
use msg::constellation_msg::ConvertPipelineIdToWebRender;
|
||||
|
@ -42,8 +42,6 @@ trait WebRenderStackingContextConverter {
|
|||
builder: &mut webrender_traits::DisplayListBuilder,
|
||||
frame_builder: &mut WebRenderFrameBuilder,
|
||||
force_positioned_stacking_level: bool);
|
||||
|
||||
fn web_render_stacking_level(&self) -> webrender_traits::StackingLevel;
|
||||
}
|
||||
|
||||
pub trait WebRenderDisplayListConverter {
|
||||
|
@ -58,28 +56,10 @@ pub trait WebRenderDisplayListConverter {
|
|||
|
||||
trait WebRenderDisplayItemConverter {
|
||||
fn convert_to_webrender(&self,
|
||||
level: webrender_traits::StackingLevel,
|
||||
builder: &mut webrender_traits::DisplayListBuilder,
|
||||
frame_builder: &mut WebRenderFrameBuilder);
|
||||
}
|
||||
|
||||
trait WebRenderDisplayListEntryConverter {
|
||||
fn web_render_stacking_level(&self) -> webrender_traits::StackingLevel;
|
||||
}
|
||||
|
||||
impl WebRenderDisplayListEntryConverter for DisplayListEntry {
|
||||
fn web_render_stacking_level(&self) -> webrender_traits::StackingLevel {
|
||||
match self.section {
|
||||
DisplayListSection::BackgroundAndBorders =>
|
||||
webrender_traits::StackingLevel::BackgroundAndBorders,
|
||||
DisplayListSection::BlockBackgroundsAndBorders =>
|
||||
webrender_traits::StackingLevel::BlockBackgroundAndBorders,
|
||||
DisplayListSection::Content => webrender_traits::StackingLevel::Content,
|
||||
DisplayListSection::Outlines => webrender_traits::StackingLevel::Outlines,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
trait ToBorderStyle {
|
||||
fn to_border_style(&self) -> webrender_traits::BorderStyle;
|
||||
}
|
||||
|
@ -281,17 +261,12 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
scroll_policy: ScrollPolicy,
|
||||
builder: &mut webrender_traits::DisplayListBuilder,
|
||||
frame_builder: &mut WebRenderFrameBuilder,
|
||||
force_positioned_stacking_level: bool) {
|
||||
_force_positioned_stacking_level: bool) {
|
||||
for child in self.children.iter() {
|
||||
while let Some(item) = traversal.advance(self) {
|
||||
let stacking_level = if force_positioned_stacking_level {
|
||||
webrender_traits::StackingLevel::PositionedContent
|
||||
} else {
|
||||
item.web_render_stacking_level()
|
||||
};
|
||||
item.item.convert_to_webrender(stacking_level, builder, frame_builder);
|
||||
|
||||
item.item.convert_to_webrender(builder, frame_builder);
|
||||
}
|
||||
|
||||
if child.context_type == StackingContextType::Real {
|
||||
let stacking_context_id = child.convert_to_webrender(traversal,
|
||||
api,
|
||||
|
@ -300,8 +275,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
None,
|
||||
scroll_policy,
|
||||
frame_builder);
|
||||
builder.push_stacking_context(child.web_render_stacking_level(),
|
||||
stacking_context_id);
|
||||
builder.push_stacking_context(stacking_context_id);
|
||||
} else {
|
||||
child.convert_children_to_webrender(traversal,
|
||||
api,
|
||||
|
@ -316,9 +290,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
}
|
||||
|
||||
while let Some(item) = traversal.advance(self) {
|
||||
item.item.convert_to_webrender(webrender_traits::StackingLevel::PositionedContent,
|
||||
builder,
|
||||
frame_builder);
|
||||
item.item.convert_to_webrender(builder, frame_builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -365,14 +337,6 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
frame_builder.add_display_list(api, builder.finalize(), &mut sc);
|
||||
frame_builder.add_stacking_context(api, pipeline_id, sc)
|
||||
}
|
||||
|
||||
fn web_render_stacking_level(&self) -> webrender_traits::StackingLevel {
|
||||
match self.context_type {
|
||||
StackingContextType::Real | StackingContextType::PseudoPositioned =>
|
||||
webrender_traits::StackingLevel::PositionedContent,
|
||||
StackingContextType::PseudoFloat => webrender_traits::StackingLevel::Floats,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl WebRenderDisplayListConverter for DisplayList {
|
||||
|
@ -401,15 +365,13 @@ impl WebRenderDisplayListConverter for DisplayList {
|
|||
|
||||
impl WebRenderDisplayItemConverter for DisplayItem {
|
||||
fn convert_to_webrender(&self,
|
||||
level: webrender_traits::StackingLevel,
|
||||
builder: &mut webrender_traits::DisplayListBuilder,
|
||||
frame_builder: &mut WebRenderFrameBuilder) {
|
||||
match *self {
|
||||
DisplayItem::SolidColorClass(ref item) => {
|
||||
let color = item.color.to_colorf();
|
||||
if color.a > 0.0 {
|
||||
builder.push_rect(level,
|
||||
item.base.bounds.to_rectf(),
|
||||
builder.push_rect(item.base.bounds.to_rectf(),
|
||||
item.base.clip.to_clip_region(frame_builder),
|
||||
color);
|
||||
}
|
||||
|
@ -433,8 +395,7 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
}
|
||||
|
||||
if glyphs.len() > 0 {
|
||||
builder.push_text(level,
|
||||
item.base.bounds.to_rectf(),
|
||||
builder.push_text(item.base.bounds.to_rectf(),
|
||||
item.base.clip.to_clip_region(frame_builder),
|
||||
glyphs,
|
||||
item.text_run.font_key.expect("Font not added to webrender!"),
|
||||
|
@ -448,8 +409,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) {
|
||||
builder.push_image(level,
|
||||
item.base.bounds.to_rectf(),
|
||||
builder.push_image(item.base.bounds.to_rectf(),
|
||||
item.base.clip.to_clip_region(frame_builder),
|
||||
item.stretch_size.to_sizef(),
|
||||
item.image_rendering.to_image_rendering(),
|
||||
|
@ -458,8 +418,7 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
}
|
||||
}
|
||||
DisplayItem::WebGLClass(ref item) => {
|
||||
builder.push_webgl_canvas(level,
|
||||
item.base.bounds.to_rectf(),
|
||||
builder.push_webgl_canvas(item.base.bounds.to_rectf(),
|
||||
item.base.clip.to_clip_region(frame_builder),
|
||||
item.context_id);
|
||||
}
|
||||
|
@ -486,8 +445,7 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
style: item.style.bottom.to_border_style(),
|
||||
};
|
||||
let radius = item.radius.to_border_radius();
|
||||
builder.push_border(level,
|
||||
rect,
|
||||
builder.push_border(rect,
|
||||
item.base.clip.to_clip_region(frame_builder),
|
||||
left,
|
||||
top,
|
||||
|
@ -503,8 +461,7 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
for stop in &item.stops {
|
||||
stops.push(stop.to_gradient_stop());
|
||||
}
|
||||
builder.push_gradient(level,
|
||||
rect,
|
||||
builder.push_gradient(rect,
|
||||
item.base.clip.to_clip_region(frame_builder),
|
||||
start_point,
|
||||
end_point,
|
||||
|
@ -520,8 +477,7 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
DisplayItem::BoxShadowClass(ref item) => {
|
||||
let rect = item.base.bounds.to_rectf();
|
||||
let box_bounds = item.box_bounds.to_rectf();
|
||||
builder.push_box_shadow(level,
|
||||
rect,
|
||||
builder.push_box_shadow(rect,
|
||||
item.base.clip.to_clip_region(frame_builder),
|
||||
box_bounds,
|
||||
item.offset.to_pointf(),
|
||||
|
@ -534,8 +490,7 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
DisplayItem::IframeClass(ref item) => {
|
||||
let rect = item.base.bounds.to_rectf();
|
||||
let pipeline_id = item.iframe.to_webrender();
|
||||
builder.push_iframe(level,
|
||||
rect,
|
||||
builder.push_iframe(rect,
|
||||
item.base.clip.to_clip_region(frame_builder),
|
||||
pipeline_id);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue