First step towards 3d transforms.

* Add parser support for 3d transforms.
 * Change ComputedMatrix to a representation that suits interpolation.
 * Switch stacking contexts to use 4x4 matrices.

The transforms themselves are still converted to 2d and handled by azure for now, but this is a small standalone part that can be landed now to make it easier to review.
This commit is contained in:
Glenn Watson 2015-05-29 08:31:05 +10:00
parent 09f2977cc9
commit f47ba6fd33
12 changed files with 530 additions and 186 deletions

View file

@ -312,6 +312,7 @@ flaky_cpu == linebreak_simple_a.html linebreak_simple_b.html
== text_transform_lowercase_a.html text_transform_lowercase_ref.html
== text_transform_none_a.html text_transform_none_ref.html
== text_transform_uppercase_a.html text_transform_uppercase_ref.html
== transform_3d.html transform_3d_ref.html
== transform_simple_a.html transform_simple_ref.html
== transform_stacking_context_a.html transform_stacking_context_ref.html
== upper_id_attr.html upper_id_attr_ref.html

127
tests/ref/transform_3d.html Normal file
View file

@ -0,0 +1,127 @@
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#div_t3d_1 {
position: absolute;
background-color: red;
top: 10px;
left: 10px;
width: 40px;
height: 40px;
}
#div_t3d_2 {
position: absolute;
background-color: green;
top: 10px;
left: 10px;
width: 20px;
height: 20px;
transform: translate3d(50%, 50%, 0);
}
#div_t3d_3 {
position: absolute;
background-color: red;
top: 10px;
left: 60px;
width: 40px;
height: 40px;
}
#div_t3d_4 {
position: absolute;
background-color: green;
top: 10px;
left: 10px;
width: 20px;
height: 20px;
transform: translate3d(-5px, 10px, 0);
}
#div_s3d_1 {
position: absolute;
background-color: red;
top: 10px;
left: 110px;
width: 40px;
height: 40px;
}
#div_s3d_2 {
position: absolute;
background-color: green;
top: 10px;
left: 10px;
width: 20px;
height: 20px;
transform: scale3d(0.5, 2, 1);
}
#div_r3d_1 {
position: absolute;
background-color: red;
top: 60px;
left: 10px;
width: 40px;
height: 40px;
}
#div_r3d_2 {
position: absolute;
background-color: green;
top: 10px;
left: 10px;
width: 10px;
height: 20px;
transform: rotateZ(90deg);
}
#div_r3d_3 {
position: absolute;
background-color: red;
top: 60px;
left: 60px;
width: 40px;
height: 40px;
}
#div_r3d_4 {
position: absolute;
background-color: green;
top: 10px;
left: 10px;
width: 10px;
height: 20px;
transform: rotate3d(0, 0, 1, 90deg);
}
</style>
</head>
<body>
<div id="div_t3d_1">
<div id="div_t3d_2">
</div>
</div>
<div id="div_t3d_3">
<div id="div_t3d_4">
</div>
</div>
<div id="div_s3d_1">
<div id="div_s3d_2">
</div>
</div>
<div id="div_r3d_1">
<div id="div_r3d_2">
</div>
</div>
<div id="div_r3d_3">
<div id="div_r3d_4">
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,122 @@
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#div_t3d_1 {
position: absolute;
background-color: red;
top: 10px;
left: 10px;
width: 40px;
height: 40px;
}
#div_t3d_2 {
position: absolute;
background-color: green;
top: 20px;
left: 20px;
width: 20px;
height: 20px;
}
#div_t3d_3 {
position: absolute;
background-color: red;
top: 10px;
left: 60px;
width: 40px;
height: 40px;
}
#div_t3d_4 {
position: absolute;
background-color: green;
top: 20px;
left: 5px;
width: 20px;
height: 20px;
}
#div_s3d_1 {
position: absolute;
background-color: red;
top: 10px;
left: 110px;
width: 40px;
height: 40px;
}
#div_s3d_2 {
position: absolute;
background-color: green;
top: 0;
left: 15px;
width: 10px;
height: 40px;
}
#div_r3d_1 {
position: absolute;
background-color: red;
top: 60px;
left: 10px;
width: 40px;
height: 40px;
}
#div_r3d_2 {
position: absolute;
background-color: green;
top: 15px;
left: 5px;
width: 20px;
height: 10px;
}
#div_r3d_3 {
position: absolute;
background-color: red;
top: 60px;
left: 60px;
width: 40px;
height: 40px;
}
#div_r3d_4 {
position: absolute;
background-color: green;
top: 15px;
left: 5px;
width: 20px;
height: 10px;
}
</style>
</head>
<body>
<div id="div_t3d_1">
<div id="div_t3d_2">
</div>
</div>
<div id="div_t3d_3">
<div id="div_t3d_4">
</div>
</div>
<div id="div_s3d_1">
<div id="div_s3d_2">
</div>
</div>
<div id="div_r3d_1">
<div id="div_r3d_2">
</div>
</div>
<div id="div_r3d_3">
<div id="div_r3d_4">
</div>
</div>
</body>
</html>