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