diff --git a/src/ol/dom/dom.js b/src/ol/dom/dom.js index abfc17e4a1..7fc85d93aa 100644 --- a/src/ol/dom/dom.js +++ b/src/ol/dom/dom.js @@ -33,20 +33,47 @@ ol.dom.setTransform = function(element, value) { /** * @param {Element} element Element. * @param {goog.vec.Mat4.AnyType} transform Matrix. + * @param {number=} opt_precision Precision. */ -ol.dom.transformElement2D = function(element, transform) { +ol.dom.transformElement2D = function(element, transform, opt_precision) { // using matrix() causes gaps in Chrome and Firefox on Mac OS X, so prefer // matrix3d() + var i; if (ol.dom.BrowserFeature.CAN_USE_CSS_TRANSFORM3D) { - ol.dom.setTransform(element, 'matrix3d(' + transform.join(',') + ')'); + var value3D; + if (goog.isDef(opt_precision)) { + /** @type {Array.} */ + var strings3D = new Array(16); + for (i = 0; i < 16; ++i) { + strings3D[i] = transform[i].toFixed(opt_precision); + } + value3D = strings3D.join(','); + } else { + value3D = transform.join(','); + } + ol.dom.setTransform(element, 'matrix3d(' + value3D + ')'); } else if (ol.dom.BrowserFeature.CAN_USE_CSS_TRANSFORM) { - ol.dom.setTransform(element, 'matrix(' + - goog.vec.Mat4.getElement(transform, 0, 0) + ',' + - goog.vec.Mat4.getElement(transform, 1, 0) + ',' + - goog.vec.Mat4.getElement(transform, 0, 1) + ',' + - goog.vec.Mat4.getElement(transform, 1, 1) + ',' + - goog.vec.Mat4.getElement(transform, 0, 3) + ',' + - goog.vec.Mat4.getElement(transform, 1, 3) + ')'); + /** @type {Array.} */ + var transform2D = [ + goog.vec.Mat4.getElement(transform, 0, 0), + goog.vec.Mat4.getElement(transform, 1, 0), + goog.vec.Mat4.getElement(transform, 0, 1), + goog.vec.Mat4.getElement(transform, 1, 1), + goog.vec.Mat4.getElement(transform, 0, 3), + goog.vec.Mat4.getElement(transform, 1, 3) + ]; + var value2D; + if (goog.isDef(opt_precision)) { + /** @type {Array.} */ + var strings2D = new Array(6); + for (i = 0; i < 6; ++i) { + strings2D[i] = transform2D[i].toFixed(opt_precision); + } + value2D = strings2D.join(','); + } else { + value2D = transform2D.join(','); + } + ol.dom.setTransform(element, 'matrix(' + value2D + ')'); } else if (ol.dom.BrowserFeature.CAN_USE_MATRIX_FILTER) { // http://msdn.microsoft.com/en-us/library/ms533014%28VS.85,loband%29.aspx goog.asserts.assert(false); // FIXME