mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Split layout/background.rs file
Have background, border and gradient modules for calculation functions. Use shorter names for functions that are qualified by the module name like `border::radii`. Use push_item and push_iter to add items to WebRender.
This commit is contained in:
parent
2304f02123
commit
2ff330a5c9
7 changed files with 577 additions and 658 deletions
|
@ -11,7 +11,7 @@ use display_list::items::{ClipScrollNode, ClipScrollNodeIndex, ClipScrollNodeTyp
|
|||
use display_list::items::{DisplayItem, DisplayList, StackingContextType};
|
||||
use msg::constellation_msg::PipelineId;
|
||||
use webrender_api::{self, ClipAndScrollInfo, ClipId, DisplayListBuilder, RasterSpace};
|
||||
use webrender_api::LayoutPoint;
|
||||
use webrender_api::{LayoutPoint, SpecificDisplayItem};
|
||||
|
||||
pub trait WebRenderDisplayListConverter {
|
||||
fn convert_to_webrender(&self, pipeline_id: PipelineId) -> DisplayListBuilder;
|
||||
|
@ -104,94 +104,28 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
|
||||
match *self {
|
||||
DisplayItem::Rectangle(ref item) => {
|
||||
builder.push_rect(&self.prim_info(), item.item.color);
|
||||
builder.push_item(SpecificDisplayItem::Rectangle(item.item), &self.prim_info());
|
||||
},
|
||||
DisplayItem::Text(ref item) => {
|
||||
builder.push_text(
|
||||
&self.prim_info(),
|
||||
&item.data,
|
||||
item.item.font_key,
|
||||
item.item.color,
|
||||
item.item.glyph_options,
|
||||
);
|
||||
builder.push_item(SpecificDisplayItem::Text(item.item), &self.prim_info());
|
||||
builder.push_iter(item.data.iter());
|
||||
},
|
||||
DisplayItem::Image(ref item) => {
|
||||
builder.push_image(
|
||||
&self.prim_info(),
|
||||
item.item.stretch_size,
|
||||
item.item.tile_spacing,
|
||||
item.item.image_rendering,
|
||||
item.item.alpha_type,
|
||||
item.item.image_key,
|
||||
item.item.color,
|
||||
);
|
||||
builder.push_item(SpecificDisplayItem::Image(item.item), &self.prim_info());
|
||||
},
|
||||
DisplayItem::Border(ref item) => {
|
||||
if item.data.is_empty() {
|
||||
builder.push_border(&self.prim_info(), item.item.widths, item.item.details);
|
||||
} else {
|
||||
let mut details = item.item.details.clone();
|
||||
match &mut details {
|
||||
webrender_api::BorderDetails::NinePatch(
|
||||
webrender_api::NinePatchBorder {
|
||||
source:
|
||||
webrender_api::NinePatchBorderSource::Gradient(ref mut gradient),
|
||||
..
|
||||
},
|
||||
) => {
|
||||
*gradient = builder.create_gradient(
|
||||
gradient.start_point,
|
||||
gradient.end_point,
|
||||
item.data.clone(),
|
||||
gradient.extend_mode,
|
||||
);
|
||||
},
|
||||
webrender_api::BorderDetails::NinePatch(
|
||||
webrender_api::NinePatchBorder {
|
||||
source:
|
||||
webrender_api::NinePatchBorderSource::RadialGradient(gradient),
|
||||
..
|
||||
},
|
||||
) => {
|
||||
*gradient = builder.create_radial_gradient(
|
||||
gradient.center,
|
||||
gradient.radius,
|
||||
item.data.clone(),
|
||||
gradient.extend_mode,
|
||||
)
|
||||
},
|
||||
_ => unreachable!(),
|
||||
}
|
||||
builder.push_border(&self.prim_info(), item.item.widths, details);
|
||||
if !item.data.is_empty() {
|
||||
builder.push_iter(item.data.iter());
|
||||
}
|
||||
builder.push_item(SpecificDisplayItem::Border(item.item), &self.prim_info());
|
||||
},
|
||||
DisplayItem::Gradient(ref item) => {
|
||||
let gradient = builder.create_gradient(
|
||||
item.item.gradient.start_point,
|
||||
item.item.gradient.end_point,
|
||||
item.data.clone(),
|
||||
item.item.gradient.extend_mode,
|
||||
);
|
||||
builder.push_gradient(
|
||||
&self.prim_info(),
|
||||
gradient,
|
||||
item.item.tile_size,
|
||||
item.item.tile_spacing,
|
||||
);
|
||||
builder.push_iter(item.data.iter());
|
||||
builder.push_item(SpecificDisplayItem::Gradient(item.item), &self.prim_info());
|
||||
},
|
||||
DisplayItem::RadialGradient(ref item) => {
|
||||
let gradient = builder.create_radial_gradient(
|
||||
item.item.gradient.center,
|
||||
item.item.gradient.radius,
|
||||
item.data.clone(),
|
||||
item.item.gradient.extend_mode,
|
||||
);
|
||||
builder.push_radial_gradient(
|
||||
&self.prim_info(),
|
||||
gradient,
|
||||
item.item.tile_size,
|
||||
item.item.tile_spacing,
|
||||
);
|
||||
builder.push_iter(item.data.iter());
|
||||
builder.push_item(SpecificDisplayItem::RadialGradient(item.item), &self.prim_info());
|
||||
},
|
||||
DisplayItem::Line(ref item) => {
|
||||
builder.push_line(
|
||||
|
@ -204,16 +138,7 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
);
|
||||
},
|
||||
DisplayItem::BoxShadow(ref item) => {
|
||||
builder.push_box_shadow(
|
||||
&self.prim_info(),
|
||||
item.item.box_bounds,
|
||||
item.item.offset,
|
||||
item.item.color,
|
||||
item.item.blur_radius,
|
||||
item.item.spread_radius,
|
||||
item.item.border_radius,
|
||||
item.item.clip_mode,
|
||||
);
|
||||
builder.push_item(SpecificDisplayItem::BoxShadow(item.item), &self.prim_info());
|
||||
},
|
||||
DisplayItem::PushTextShadow(ref item) => {
|
||||
builder.push_shadow(&self.prim_info(), item.shadow);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue