| <!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> |