156 lines
4.7 KiB
HTML
156 lines
4.7 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
|
<title>Matrix testing</title>
|
|
<style type="text/css" media="screen">
|
|
div {
|
|
-webkit-box-sizing: border-box;
|
|
}
|
|
|
|
.column {
|
|
margin: 10px;
|
|
display: inline-block;
|
|
vertical-align: top;
|
|
}
|
|
.container {
|
|
position: relative;
|
|
height: 200px;
|
|
width: 200px;
|
|
margin: 10px;
|
|
background-color: silver;
|
|
border: 1px solid black;
|
|
}
|
|
|
|
.box {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
height: 60px;
|
|
width: 60px;
|
|
border: 1px dotted black;
|
|
-webkit-transform-origin: top left; /* to match SVG */
|
|
}
|
|
|
|
.final {
|
|
border: 1px solid blue;
|
|
}
|
|
</style>
|
|
|
|
<script type="text/javascript" charset="utf-8">
|
|
|
|
function doTest()
|
|
{
|
|
doCSS();
|
|
doSVG();
|
|
}
|
|
|
|
function doCSS()
|
|
{
|
|
var matrixDiv = document.getElementById('matrixed');
|
|
|
|
var firstMatrix = new WebKitCSSMatrix(document.getElementById('box1').style.webkitTransform);
|
|
var secondMatrix = new WebKitCSSMatrix(document.getElementById('box2').style.webkitTransform);
|
|
var thirdMatrix = new WebKitCSSMatrix(document.getElementById('box3').style.webkitTransform);
|
|
|
|
var finalMatrix = firstMatrix.multiply(secondMatrix);
|
|
finalMatrix = finalMatrix.multiply(thirdMatrix);
|
|
|
|
// "Flipped" behavior
|
|
// var finalMatrix = thirdMatrix.multiply(secondMatrix);
|
|
// finalMatrix = finalMatrix.multiply(firstMatrix);
|
|
|
|
matrixDiv.style.webkitTransform = finalMatrix;
|
|
}
|
|
|
|
function doSVG()
|
|
{
|
|
var matrixDiv = document.getElementById('matrix-svg');
|
|
|
|
var svgroot = document.getElementsByTagName('svg')[0];
|
|
|
|
var firstMatrix = svgroot.createSVGMatrix();
|
|
firstMatrix = firstMatrix.translate(75, 25);
|
|
var secondMatrix = svgroot.createSVGMatrix();
|
|
secondMatrix = secondMatrix.scale(2);
|
|
var thirdMatrix = svgroot.createSVGMatrix();
|
|
thirdMatrix = thirdMatrix.rotate(45);
|
|
|
|
var finalMatrix = firstMatrix.multiply(secondMatrix);
|
|
finalMatrix = finalMatrix.multiply(thirdMatrix);
|
|
|
|
var matrixString = "matrix(" + finalMatrix.a + " " + finalMatrix.b +
|
|
" " + finalMatrix.c + " " + finalMatrix.d + " " + finalMatrix.e + " "
|
|
+ finalMatrix.f + ")";
|
|
matrixDiv.setAttribute("transform", matrixString);
|
|
}
|
|
|
|
window.addEventListener('load', doTest, false)
|
|
</script>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div class="column">
|
|
<h2>SVG nested</h2>
|
|
<div class="container">
|
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
|
|
viewBox="0 0 200 200" style="width:200px; height:200px;">
|
|
<g id="group1" transform="translate(75, 25)">
|
|
<rect x="0" y="0" width="60" height="60" stroke="black" stroke-width="1px" stroke-dasharray="1 1" fill="none" />
|
|
<g id="group2" transform="scale(2)">
|
|
<rect x="0" y="0" width="60" height="60" stroke="black" stroke-dasharray="1 1" stroke-width="1px" fill="none" />
|
|
<rect id="group3" x="0" y="0" width="60" height="60" stroke="blue" fill="none" transform="rotate(45)" />
|
|
</g>
|
|
</g>
|
|
</svg>
|
|
</div>
|
|
|
|
<h2>CSS nested</h2>
|
|
<div class="container">
|
|
<div id="box1" class="box" style="-webkit-transform: translate(75px, 25px)">
|
|
<div id="box2" class="box" style="-webkit-transform: scale(2)">
|
|
<div id="box3" class="final box" style="-webkit-transform: rotate(45deg)">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="column">
|
|
<h2>SVG compound</h2>
|
|
<div class="container">
|
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
|
|
viewBox="0 0 200 200" style="width:200px; height:200px;">
|
|
<rect x="0" y="0" width="60" height="60" stroke="blue" fill="none" transform="translate(75, 25) scale(2) rotate(45)">
|
|
</rect>
|
|
</svg>
|
|
</div>
|
|
|
|
<h2>CSS compound</h2>
|
|
<div class="container">
|
|
<div class="final box" style="-webkit-transform: translate(75px, 25px) scale(2) rotate(45deg)">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="column">
|
|
<h2>SVG Matrix</h2>
|
|
<div class="container">
|
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
|
|
viewBox="0 0 200 200" style="width:200px; height:200px;">
|
|
<rect id="matrix-svg" x="0" y="0" width="60" height="60" stroke="blue" fill="none">
|
|
</rect>
|
|
</svg>
|
|
</div>
|
|
|
|
<h2>CSSMatrix</h2>
|
|
<div class="container">
|
|
<div id="matrixed" class="final box">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|