mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
servo: Merge #10717 - layout: Implement support for overflow: scroll
in WebRender (from pcwalton:wr-overflow-scroll); r=glennw
Requires a WebRender upgrade. r? @glennw Source-Repo: https://github.com/servo/servo Source-Revision: 64b0dafde8f65ef4aceeb85436c547a1581c619f
This commit is contained in:
parent
8391ee712f
commit
9d60fb7977
@ -1294,8 +1294,9 @@ impl FragmentDisplayListBuilding for Fragment {
|
||||
scroll_policy: ScrollPolicy,
|
||||
mode: StackingContextCreationMode)
|
||||
-> Box<StackingContext> {
|
||||
let use_webrender = opts::get().use_webrender;
|
||||
let border_box = match mode {
|
||||
StackingContextCreationMode::InnerScrollWrapper => {
|
||||
StackingContextCreationMode::InnerScrollWrapper if !use_webrender => {
|
||||
Rect::new(Point2D::zero(), base_flow.overflow.scroll.size)
|
||||
}
|
||||
_ => {
|
||||
@ -1308,9 +1309,12 @@ impl FragmentDisplayListBuilding for Fragment {
|
||||
}
|
||||
};
|
||||
let overflow = match mode {
|
||||
StackingContextCreationMode::InnerScrollWrapper => {
|
||||
StackingContextCreationMode::InnerScrollWrapper if !use_webrender => {
|
||||
Rect::new(Point2D::zero(), base_flow.overflow.paint.size)
|
||||
}
|
||||
StackingContextCreationMode::InnerScrollWrapper if use_webrender => {
|
||||
Rect::new(Point2D::zero(), base_flow.overflow.scroll.size)
|
||||
}
|
||||
StackingContextCreationMode::OuterScrollWrapper => {
|
||||
Rect::new(Point2D::zero(), border_box.size)
|
||||
}
|
||||
|
@ -949,8 +949,8 @@ impl LayoutThread {
|
||||
let pipeline_id = self.id.to_webrender();
|
||||
|
||||
// TODO(gw) For now only create a root scrolling layer!
|
||||
let root_scroll_layer_id = webrender_traits::ScrollLayerId::new(pipeline_id, 0);
|
||||
let mut frame_builder = WebRenderFrameBuilder::new(pipeline_id);
|
||||
let root_scroll_layer_id = frame_builder.next_scroll_layer_id();
|
||||
let sc_id = rw_data.display_list.as_ref().unwrap().convert_to_webrender(
|
||||
&mut self.webrender_api.as_mut().unwrap(),
|
||||
pipeline_id,
|
||||
|
@ -268,11 +268,16 @@ impl WebRenderStackingContextConverter for StackingContext {
|
||||
}
|
||||
|
||||
if child.context_type == StackingContextType::Real {
|
||||
let scroll_layer_id_for_children = if self.scrolls_overflow_area {
|
||||
scroll_layer_id
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let stacking_context_id = child.convert_to_webrender(traversal,
|
||||
api,
|
||||
pipeline_id,
|
||||
epoch,
|
||||
None,
|
||||
scroll_layer_id_for_children,
|
||||
scroll_policy,
|
||||
frame_builder);
|
||||
builder.push_stacking_context(stacking_context_id);
|
||||
@ -299,7 +304,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
||||
api: &mut webrender_traits::RenderApi,
|
||||
pipeline_id: webrender_traits::PipelineId,
|
||||
epoch: webrender_traits::Epoch,
|
||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
mut scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
mut scroll_policy: ScrollPolicy,
|
||||
frame_builder: &mut WebRenderFrameBuilder)
|
||||
-> webrender_traits::StackingContextId {
|
||||
@ -324,7 +329,13 @@ impl WebRenderStackingContextConverter for StackingContext {
|
||||
self.blend_mode.to_blend_mode(),
|
||||
self.filters.to_filter_ops(),
|
||||
&mut frame_builder.auxiliary_lists_builder);
|
||||
|
||||
let mut builder = webrender_traits::DisplayListBuilder::new();
|
||||
|
||||
if self.scrolls_overflow_area {
|
||||
scroll_layer_id = Some(frame_builder.next_scroll_layer_id());
|
||||
}
|
||||
|
||||
self.convert_children_to_webrender(traversal,
|
||||
api,
|
||||
pipeline_id,
|
||||
@ -502,7 +513,8 @@ pub struct WebRenderFrameBuilder {
|
||||
pub stacking_contexts: Vec<(StackingContextId, webrender_traits::StackingContext)>,
|
||||
pub display_lists: Vec<(DisplayListId, webrender_traits::BuiltDisplayList)>,
|
||||
pub auxiliary_lists_builder: AuxiliaryListsBuilder,
|
||||
pub root_pipeline_id: PipelineId
|
||||
pub root_pipeline_id: PipelineId,
|
||||
pub next_scroll_layer_id: usize,
|
||||
}
|
||||
|
||||
impl WebRenderFrameBuilder {
|
||||
@ -512,6 +524,7 @@ impl WebRenderFrameBuilder {
|
||||
display_lists: vec![],
|
||||
auxiliary_lists_builder: AuxiliaryListsBuilder::new(),
|
||||
root_pipeline_id: root_pipeline_id,
|
||||
next_scroll_layer_id: 0,
|
||||
}
|
||||
}
|
||||
|
||||
@ -538,5 +551,12 @@ impl WebRenderFrameBuilder {
|
||||
self.display_lists.push((id, display_list));
|
||||
id
|
||||
}
|
||||
|
||||
pub fn next_scroll_layer_id(&mut self) -> webrender_traits::ScrollLayerId {
|
||||
let scroll_layer_id = self.next_scroll_layer_id;
|
||||
self.next_scroll_layer_id += 1;
|
||||
webrender_traits::ScrollLayerId::new(self.root_pipeline_id, scroll_layer_id)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
4
servo/components/servo/Cargo.lock
generated
4
servo/components/servo/Cargo.lock
generated
@ -2320,7 +2320,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "webrender"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/servo/webrender#46dd3f0ffe2e3a650171fd651b522ed072ccf799"
|
||||
source = "git+https://github.com/servo/webrender#8d778dac5398cadd093136bc9cf0afbbb61a2b52"
|
||||
dependencies = [
|
||||
"app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -2343,7 +2343,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "webrender_traits"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/servo/webrender_traits#69125172bcea93fd79be48d846eae63d50ddc8ea"
|
||||
source = "git+https://github.com/servo/webrender_traits#d1a3bb53f87891bbba8576d05260caee147dc5d8"
|
||||
dependencies = [
|
||||
"app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
4
servo/ports/cef/Cargo.lock
generated
4
servo/ports/cef/Cargo.lock
generated
@ -2195,7 +2195,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "webrender"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/servo/webrender#46dd3f0ffe2e3a650171fd651b522ed072ccf799"
|
||||
source = "git+https://github.com/servo/webrender#8d778dac5398cadd093136bc9cf0afbbb61a2b52"
|
||||
dependencies = [
|
||||
"app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -2218,7 +2218,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "webrender_traits"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/servo/webrender_traits#69125172bcea93fd79be48d846eae63d50ddc8ea"
|
||||
source = "git+https://github.com/servo/webrender_traits#d1a3bb53f87891bbba8576d05260caee147dc5d8"
|
||||
dependencies = [
|
||||
"app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
4
servo/ports/gonk/Cargo.lock
generated
4
servo/ports/gonk/Cargo.lock
generated
@ -2145,7 +2145,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "webrender"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/servo/webrender#46dd3f0ffe2e3a650171fd651b522ed072ccf799"
|
||||
source = "git+https://github.com/servo/webrender#8d778dac5398cadd093136bc9cf0afbbb61a2b52"
|
||||
dependencies = [
|
||||
"app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -2168,7 +2168,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "webrender_traits"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/servo/webrender_traits#69125172bcea93fd79be48d846eae63d50ddc8ea"
|
||||
source = "git+https://github.com/servo/webrender_traits#d1a3bb53f87891bbba8576d05260caee147dc5d8"
|
||||
dependencies = [
|
||||
"app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
Loading…
Reference in New Issue
Block a user