mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
layout: Implement basic overflow: scroll
functionality.
Known issues: * Display list optimization can sometimes optimize out elements that should be shown. This affects the Enyo demo. * The `overflow: scroll` container doesn't clip the inner layer properly when borders, border radius, etc. are present. * `overflow-x: scroll` and `overflow-y: scroll` don't work individually; elements are scrolled all at once. * Scrolling only works on absolutely-positioned elements.
This commit is contained in:
parent
fc13dd1169
commit
df4acbac04
8 changed files with 221 additions and 72 deletions
|
@ -629,6 +629,7 @@ impl<Window: WindowMethods> IOCompositor<Window> {
|
|||
transform: Matrix4::identity(),
|
||||
perspective: Matrix4::identity(),
|
||||
establishes_3d_context: true,
|
||||
scrolls_overflow_area: false,
|
||||
};
|
||||
|
||||
let root_layer = CompositorData::new_layer(pipeline.id,
|
||||
|
@ -740,10 +741,21 @@ impl<Window: WindowMethods> IOCompositor<Window> {
|
|||
|
||||
if let Some(parent_layer) = self.find_layer_with_pipeline_and_layer_id(pipeline_id,
|
||||
parent_id) {
|
||||
let wants_scroll_events = if layer_properties.scrolls_overflow_area {
|
||||
WantsScrollEventsFlag::WantsScrollEvents
|
||||
} else {
|
||||
WantsScrollEventsFlag::DoesntWantScrollEvents
|
||||
};
|
||||
|
||||
let new_layer = CompositorData::new_layer(pipeline_id,
|
||||
layer_properties,
|
||||
WantsScrollEventsFlag::DoesntWantScrollEvents,
|
||||
wants_scroll_events,
|
||||
parent_layer.tile_size);
|
||||
|
||||
if layer_properties.scrolls_overflow_area {
|
||||
*new_layer.masks_to_bounds.borrow_mut() = true
|
||||
}
|
||||
|
||||
parent_layer.add_child(new_layer);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue