mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Auto merge of #17712 - mrobinson:overflow-scroll-clip, r=emilio
Fix the size and position of overflow:scroll clip The clip for overflow:scroll clip was not including the space for padding, which could lead to some content being clipped when it shouldn't. This changes fixes that issue. A test is skipped because this fix also stops hiding a failure due to mispositioned text. Fixes #16576. <!-- Please describe your changes on the following line: --> --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #16576 (github issue number if applicable). <!-- Either: --> - [x] There are tests for these changes OR - [ ] These changes do not require tests because _____ <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/17712) <!-- Reviewable:end -->
This commit is contained in:
commit
14d5e4cc55
6 changed files with 102 additions and 3 deletions
|
@ -633,6 +633,18 @@ fn build_border_radius_for_inner_rect(outer_rect: &Rect<Au>,
|
|||
radii
|
||||
}
|
||||
|
||||
fn build_inner_border_box_for_border_rect(border_box: &Rect<Au>,
|
||||
style: &ServoComputedValues)
|
||||
-> Rect<Au> {
|
||||
let border_widths = style.logical_border_width().to_physical(style.writing_mode);
|
||||
let mut inner_border_box = *border_box;
|
||||
inner_border_box.origin.x += border_widths.left;
|
||||
inner_border_box.origin.y += border_widths.top;
|
||||
inner_border_box.size.width -= border_widths.right + border_widths.left;
|
||||
inner_border_box.size.height -= border_widths.bottom + border_widths.top;
|
||||
inner_border_box
|
||||
}
|
||||
|
||||
fn convert_gradient_stops(gradient_items: &[GradientItem],
|
||||
total_length: Au) -> Vec<GradientStop> {
|
||||
// Determine the position of each stop per CSS-IMAGES § 3.4.
|
||||
|
@ -2524,10 +2536,11 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
|
|||
root_type = ScrollRootType::Clip;
|
||||
}
|
||||
|
||||
let mut clip = ClippingRegion::from_rect(&content_box);
|
||||
let clip_rect = build_inner_border_box_for_border_rect(&border_box, &self.fragment.style);
|
||||
let mut clip = ClippingRegion::from_rect(&clip_rect);
|
||||
let radii = build_border_radius_for_inner_rect(&border_box, &self.fragment.style);
|
||||
if !radii.is_square() {
|
||||
clip.intersect_with_rounded_rect(&content_box, &radii)
|
||||
clip.intersect_with_rounded_rect(&clip_rect, &radii)
|
||||
}
|
||||
|
||||
let parent_id = self.scroll_root_id(state.layout_context.id);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue