gfx: Simplify complex clipping regions as we construct them.

This allows WebRender to correctly render complex clipping regions that
can be reduced to single rounded rectangles. WebRender still can't
render rounded rectangles with arbitrary intersections yet, but this
allows it to handle many more cases.

Closes servo/webrender#241.
This commit is contained in:
Patrick Walton 2016-03-31 19:35:04 -07:00
parent 7518c4de93
commit 22a1c112d5
4 changed files with 116 additions and 1 deletions

View file

@ -836,6 +836,18 @@
"url": "/_mozilla/css/border_radius_elliptical_a.html"
}
],
"css/border_radius_in_border_radius_a.html": [
{
"path": "css/border_radius_in_border_radius_a.html",
"references": [
[
"/_mozilla/css/border_radius_in_border_radius_ref.html",
"=="
]
],
"url": "/_mozilla/css/border_radius_in_border_radius_a.html"
}
],
"css/border_radius_overlapping_a.html": [
{
"path": "css/border_radius_overlapping_a.html",
@ -7246,6 +7258,18 @@
"url": "/_mozilla/css/border_radius_elliptical_a.html"
}
],
"css/border_radius_in_border_radius_a.html": [
{
"path": "css/border_radius_in_border_radius_a.html",
"references": [
[
"/_mozilla/css/border_radius_in_border_radius_ref.html",
"=="
]
],
"url": "/_mozilla/css/border_radius_in_border_radius_a.html"
}
],
"css/border_radius_overlapping_a.html": [
{
"path": "css/border_radius_overlapping_a.html",

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel="match" href="border_radius_in_border_radius_ref.html">
<style>
html, body {
margin: 0;
padding: 0;
}
.green {
overflow: hidden;
border-radius: 50px;
background: green;
padding: 50px;
width: 100px;
}
.red {
background: red;
border-radius: 50%;
width: 100px;
height: 100px
}
</style>
<div class="green"><div class="red"></div></div>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<meta charset="utf-8">
<style>
html, body {
margin: 0;
padding: 0;
}
.green {
position: absolute;
border-radius: 50px;
background: green;
padding: 50px;
width: 100px;
height: 100px;
}
.red {
position: absolute;
top: 50px;
left: 50px;
width: 100px;
height: 100px;
background: red;
border-radius: 50%;
}
</style>
<div class="green"></div><div class="red"></div>