mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Add border radius to overflow scrollable frame (#35293)
Signed-off-by: longvatrong111 <longvatrong111@gmail.com>
This commit is contained in:
parent
1e5db41afd
commit
01eeb3e809
5 changed files with 38 additions and 16 deletions
|
@ -181,19 +181,40 @@ impl DisplayList {
|
|||
self.wr.pop_reference_frame();
|
||||
}
|
||||
|
||||
fn clip_scroll_frame(
|
||||
&mut self,
|
||||
parent_scroll_node_id: &ScrollTreeNodeId,
|
||||
parent_clip_id: &ClipChainId,
|
||||
clip_rect: LayoutRect,
|
||||
fragment_builder: BuilderForBoxFragment,
|
||||
) -> ClipChainId {
|
||||
let radii = fragment_builder.border_radius;
|
||||
|
||||
let new_clip_id = if radii.is_zero() {
|
||||
self.wr
|
||||
.define_clip_rect(parent_scroll_node_id.spatial_id, clip_rect)
|
||||
} else {
|
||||
self.wr.define_clip_rounded_rect(
|
||||
parent_scroll_node_id.spatial_id,
|
||||
webrender_api::ComplexClipRegion {
|
||||
rect: clip_rect,
|
||||
radii,
|
||||
mode: webrender_api::ClipMode::Clip,
|
||||
},
|
||||
)
|
||||
};
|
||||
|
||||
self.define_clip_chain(*parent_clip_id, [new_clip_id])
|
||||
}
|
||||
|
||||
fn define_scroll_frame(
|
||||
&mut self,
|
||||
parent_scroll_node_id: &ScrollTreeNodeId,
|
||||
parent_clip_chain_id: &wr::ClipChainId,
|
||||
external_id: wr::ExternalScrollId,
|
||||
content_rect: LayoutRect,
|
||||
clip_rect: LayoutRect,
|
||||
scroll_sensitivity: ScrollSensitivity,
|
||||
) -> (ScrollTreeNodeId, wr::ClipChainId) {
|
||||
let new_clip_id = self
|
||||
.wr
|
||||
.define_clip_rect(parent_scroll_node_id.spatial_id, clip_rect);
|
||||
let new_clip_chain_id = self.define_clip_chain(*parent_clip_chain_id, [new_clip_id]);
|
||||
) -> ScrollTreeNodeId {
|
||||
let spatial_tree_item_key = self.get_next_spatial_tree_item_key();
|
||||
|
||||
let new_spatial_id = self.wr.define_scroll_frame(
|
||||
|
@ -207,7 +228,7 @@ impl DisplayList {
|
|||
spatial_tree_item_key,
|
||||
);
|
||||
|
||||
let new_scroll_node_id = self.compositor_info.scroll_tree.add_scroll_tree_node(
|
||||
self.compositor_info.scroll_tree.add_scroll_tree_node(
|
||||
Some(parent_scroll_node_id),
|
||||
new_spatial_id,
|
||||
Some(ScrollableNodeInfo {
|
||||
|
@ -216,8 +237,7 @@ impl DisplayList {
|
|||
scroll_sensitivity,
|
||||
offset: LayoutVector2D::zero(),
|
||||
}),
|
||||
);
|
||||
(new_scroll_node_id, new_clip_chain_id)
|
||||
)
|
||||
}
|
||||
|
||||
fn define_sticky_frame(
|
||||
|
@ -1394,9 +1414,15 @@ impl BoxFragment {
|
|||
.to_webrender();
|
||||
let content_rect = self.scrollable_overflow().to_webrender();
|
||||
|
||||
let (scroll_tree_node_id, clip_chain_id) = display_list.define_scroll_frame(
|
||||
let clip_chain_id = display_list.clip_scroll_frame(
|
||||
parent_scroll_node_id,
|
||||
parent_clip_id,
|
||||
scroll_frame_rect,
|
||||
BuilderForBoxFragment::new(self, containing_block_rect, false, false),
|
||||
);
|
||||
|
||||
let scroll_tree_node_id = display_list.define_scroll_frame(
|
||||
parent_scroll_node_id,
|
||||
external_id,
|
||||
content_rect,
|
||||
scroll_frame_rect,
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[inner-border-non-renderable.html]
|
||||
expected: FAIL
|
2
tests/wpt/meta/css/css-overflow/overflow-clip-rounded-table.html.ini
vendored
Normal file
2
tests/wpt/meta/css/css-overflow/overflow-clip-rounded-table.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
[overflow-clip-rounded-table.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[backdrop-filter-opacity-rounded-clip.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[border_radius_clipping_contents_a.html]
|
||||
expected: FAIL
|
Loading…
Add table
Add a link
Reference in a new issue