mirror of
https://github.com/servo/servo.git
synced 2025-06-24 17:14:33 +01:00
auto merge of #3634 : mrobinson/servo/scrolling-doc, r=jdm
This commit is contained in:
commit
96fae78f94
1 changed files with 57 additions and 0 deletions
57
components/compositing/scrolling.md
Normal file
57
components/compositing/scrolling.md
Normal file
|
@ -0,0 +1,57 @@
|
|||
Scrolling
|
||||
=========
|
||||
|
||||
Scrolling is implemented by the compositor. Compositor layers that opt in to
|
||||
scroll events via the `wants_scroll_events` flag can scroll their contents.
|
||||
These will be referred "scrolling roots." Scrolling roots serve as a viewport
|
||||
into their content, which is stored in descendant layers. In order for
|
||||
scrolling roots to be able to scroll their content, they need to be smaller
|
||||
than that content. If the content was smaller than the scrolling root, it would
|
||||
not be able to move around inside the scrolling root. Imagine a browser window
|
||||
that is larger than the content that it contains. The size of each layer is
|
||||
defined by the window size (the root layer) or the block size for iframes and
|
||||
elements with `overflow:scroll`.
|
||||
|
||||
Since the compositor allows layers to exist independently of their parents,
|
||||
child layers can overflow or fail to intersect their parents completely. To
|
||||
prevent this, scrolling roots use the `masks_to_bounds` flag, which is a signal
|
||||
to the compositor that it should not paint the parts of descendant layers that
|
||||
lie outside the boundaries of the scrolling root.
|
||||
|
||||
Below is an ASCII art diagram showing a scrolling root with three content
|
||||
layers (a, b, and c), scrolled down a few ticks. `masks_to_bounds` has not been
|
||||
applied in the diagram.
|
||||
|
||||
<pre>
|
||||
+-----------------------+
|
||||
| |
|
||||
=========================
|
||||
| | scrolling
|
||||
| <-------------+root
|
||||
| |
|
||||
| +-------+ |
|
||||
=========================
|
||||
| | b | |
|
||||
++-------+ +--^----+ |
|
||||
|| | | |
|
||||
|| | | | content
|
||||
|| c <---------+---------+layers
|
||||
|+-------+ / |
|
||||
| a < |
|
||||
| |
|
||||
+-----------------------+
|
||||
</pre>
|
||||
|
||||
Everything above and below the set of `====` bars would be hidden by
|
||||
`masks_to_bounds`, so the composited scene will just be the viewport defined by
|
||||
the scrolling root with the content layers a and b visible.
|
||||
|
||||
<pre>
|
||||
=========================
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| +-------+ |
|
||||
=========================
|
||||
</pre>
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue