fune/testing/web-platform/tests/css/css-overflow/scrollbar-gutter-002-ref.html
Ting-Yu Lin f6eb41c0f0 Bug 1715112 Part 1 - Implement the rendering of scrollbar-gutter. r=emilio
Here are the ideas of the implementation.

1) When creating ScrollReflowInput, we compute and store the size of the
scrollbar-gutter in `mScrollbarGutterSizes.

2) Provide a ScrollReflowInput::ScrollbarGutter() API that returns the space
occupied by scrollbar gutters or scrollbars, and use it in ReflowScrolledFrame()
and TryLayout().

-----

For test changes:

- The existing scrollbar-gutter changes all assume classic scrollbars that can
create scrollbar gutters, so they won't pass on Android which uses overlay
scrollbars.

- Add scrollbar-gutter-002.html to test when the scrollbar and gutter
are both shown. The reference of this uses padding to simulate
scrollbar-gutter, so it's OK if the platform uses overlay scrollbars.
The next patch will add more variants.

- scrollbar-gutter-dynamic-001.html was never run. Fixed it by adding
`<link rel="match">`.

Differential Revision: https://phabricator.services.mozilla.com/D132664
2021-12-16 01:01:45 +00:00

73 lines
2.4 KiB
HTML

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<title>CSS Overflow Reference: test scrollbar-gutter with horizontal left to right content</title>
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
<style>
.line {
display: flex;
}
.container {
writing-mode: horizontal-tb;
direction: ltr;
box-sizing: border-box;
block-size: 200px;
inline-size: 200px;
margin: 10px;
background: deepskyblue;
resize: both;
}
.content {
inline-size: 100%;
block-size: 200%;
background: lightsalmon;
}
</style>
<div class="line">
<div class="container" style="overflow-y: auto">
<div class="content"></div>
</div>
<div class="container" style="overflow-y: scroll" id="container_scroll_stable">
<div class="content" id="content_scroll_stable"></div>
</div>
<div class="container" style="overflow-y: hidden" id="container_hidden_stable">
<div class="content"></div>
</div>
</div>
<div class="line">
<div class="container" style="overflow-y: auto;" id="container_auto_stable_both_edges">
<div class="content"></div>
</div>
<div class="container" style="overflow-y: scroll" id="container_scroll_stable_both_edges">
<div class="content"></div>
</div>
<div class="container" style="overflow-y: hidden;" id="container_hidden_stable_both_edges">
<div class="content"></div>
</div>
</div>
<script>
let container_scroll_stable = document.getElementById("container_scroll_stable");
let content_scroll_stable = document.getElementById("content_scroll_stable");
let vScrollbarWidth = (container_scroll_stable.offsetWidth - content_scroll_stable.offsetWidth);
let vScrollbarWidthStr = vScrollbarWidth + "px";
// Simulate scrollbar-gutter via padding on containers.
document.getElementById("container_hidden_stable").style.paddingInlineEnd = vScrollbarWidthStr;
document.getElementById("container_auto_stable_both_edges").style.paddingInlineStart = vScrollbarWidthStr;
document.getElementById("container_scroll_stable_both_edges").style.paddingInlineStart = vScrollbarWidthStr;
document.getElementById("container_hidden_stable_both_edges").style.paddingInlineStart = vScrollbarWidthStr;
document.getElementById("container_hidden_stable_both_edges").style.paddingInlineEnd = vScrollbarWidthStr;
</script>
</html>