|
From: <mar...@us...> - 2011-04-26 18:03:21
|
Revision: 21077
http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21077&view=rev
Author: marcputs
Date: 2011-04-26 18:03:14 +0000 (Tue, 26 Apr 2011)
Log Message:
-----------
First approach to OO-transformations. High experimental. No API-docs yet.
Modified Paths:
--------------
trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/MTransform.js
Added Paths:
-----------
trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/
trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Matrix.js
trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Rotate.js
trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Scale.js
trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Skew.js
trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/TransformGroup.js
trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Transformation.js
trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Translate.js
trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/__init__.js
Modified: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/MTransform.js
===================================================================
--- trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/MTransform.js 2011-04-26 16:30:09 UTC (rev 21076)
+++ trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/MTransform.js 2011-04-26 18:03:14 UTC (rev 21077)
@@ -14,43 +14,8 @@
************************************************************************ */
/**
- * Set a list of transform definitions, which are applied in the order provided.
+ * Set a (list of) transformations, which are applied in the order provided.
*
- * The available types of transform definitions include:
- *
- * <ul>
- * <li><em>matrix(a, b, c, d, e, f)</em>,
- * which specifies a transformation in the form of a transformation matrix of
- * six values. It is equivalent to applying the transformation
- * matrix [a b c d e f].
- * </li>
- *
- * <li><em>translate(tx, [ty])</em>,
- * which specifies a translation by tx and ty. If ty is not provided,
- * it is assumed to be zero.
- * </li>
- *
- * <li><em>scale(sx, [sy])</em>,
- * which specifies a scale operation by sx and sy. If sy is not provided,
- * it is assumed to be equal to sx.
- * </li>
- *
- * <li><em>rotate(rotate-angle, cx, cy)</em>,
- * which specifies a rotation by rotate-angle degrees about a given point.
- * If optional parameters cx and cy are not supplied, the rotate is about the
- * origin of the current user coordinate system. If optional parameters
- * cx, cy are supplied, the rotate is about the point (cx, cy).
- * </li>
- *
- * <li><em>skewX(skew-angle)</em>,
- * which specifies a skew transformation along the x-axis.
- * </li>
- *
- * <li><em>skewY(skew-angle)</em>,
- * which specifies a skew transformation along the y-axis.
- * </li>
- * </ul>
- *
* More info:
* <ul>
* <li>http://www.w3.org/TR/SVG/coords.html#TransformAttribute</li>
@@ -75,22 +40,71 @@
transform : {
nullable: true,
init: null,
- apply: "_applyTransform",
- check: "String",
+ check: function(value) {
+ return qx.lang.Type.isString(value) ||
+ value instanceof svg.coords.transform.Transformation;
+ },
+ apply: "__applyTransform",
event: "changeTransform"
+ },
+
+ transformMode : {
+ nullable: false,
+ init: "normal",
+ check: ["normal", "matrix"],
+ apply: "__applyTransformMode"
}
},
members :
{
- //applies transform
- _applyTransform: function(value, old) {
- if (null == value) {
+ //applies transform property
+ __applyTransform: function(value, old) {
+
+ this.__setTransformAttribute(value, this.getTransformMode());
+
+ if (value instanceof svg.coords.transform.Transformation) {
+ value.addListener("change", this.__changeListener, this);
+ }
+
+ if (old instanceof svg.coords.transform.Transformation) {
+ old.removeListener("change", this.__changeListener, this);
+ }
+
+ },
+
+ //applies transformMode property
+ __applyTransformMode: function(value, old) {
+ this.__setTransformAttribute(this.getTransform(), value);
+ },
+
+ //sets the transform attribute, either directly to the value
+ //or the derived value from an Transform
+ __setTransformAttribute : function(value, transformMode) {
+ if (null === value) {
this.removeAttribute("transform");
- } else {
- this.setAttribute("transform", value);
+ return;
}
+
+ if (value instanceof svg.coords.transform.Transformation) {
+ switch (transformMode) {
+ case "normal":
+ this.setAttribute("transform", value.toString());
+ return;
+ case "matrix":
+ this.setAttribute("transform", value.toMatrixString());
+ return;
+ default:
+ qx.core.Assert.fail("Default case should be unreachable!", false);
+ }
+ }
+ this.setAttribute("transform", value);
+ },
+
+ __changeListener: function() {
+ this.__setTransformAttribute(this.getTransform(), this.getTransformMode());
}
+
}
});
\ No newline at end of file
Added: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Matrix.js
===================================================================
--- trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Matrix.js (rev 0)
+++ trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Matrix.js 2011-04-26 18:03:14 UTC (rev 21077)
@@ -0,0 +1,33 @@
+qx.Class.define("svg.coords.transform.Matrix",
+{
+ extend : svg.coords.transform.Transformation,
+
+ properties :
+ {
+ matrix : {
+ nullable: false,
+ deferredInit: true,
+ apply: "_applyProperty"
+ }
+ },
+
+ construct : function(matrix) {
+ this.initMatrix(matrix);
+ },
+
+ members :
+ {
+ _composeString : function() {
+ return this.toMatrixString();
+ },
+
+ _composeMatrix : function() {
+ return this.getMatrix();
+ },
+
+ _applyProperty : function() {
+ this._invalidateCache();
+ this.fireEvent("change");
+ }
+ }
+});
\ No newline at end of file
Property changes on: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Matrix.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Rotate.js
===================================================================
--- trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Rotate.js (rev 0)
+++ trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Rotate.js 2011-04-26 18:03:14 UTC (rev 21077)
@@ -0,0 +1,79 @@
+qx.Class.define("svg.coords.transform.Rotate",
+{
+ extend : svg.coords.transform.Transformation,
+
+ properties :
+ {
+ /**
+ * Rotation angle (in degrees)
+ *
+ * @type Number
+ */
+ angle : {
+ nullable: false,
+ deferredInit: true,
+ check: "Number",
+ apply: "_applyProperty"
+ },
+
+ cx : {
+ nullable: false,
+ deferredInit: true,
+ check: "Number",
+ apply: "_applyProperty"
+ },
+
+ cy : {
+ nullable: false,
+ deferredInit: true,
+ check: "Number",
+ apply: "_applyProperty"
+ }
+ },
+
+ construct : function(svg, angle, cx, cy) {
+ this.base(arguments, svg);
+ this.initAngle(angle);
+ this.initCx(cx || 0);
+ this.initCy(cy || 0);
+ },
+
+ members :
+ {
+ _composeString : function() {
+ var str = "rotate(" + this.getAngle();
+
+ if ((0 !== this.getCx()) || (0 !== this.getCy())) {
+ str += "," + this.getCx() + "," + this.getCy();
+ }
+ return str + ")";
+ },
+
+ _composeMatrix : function() {
+
+ //get angle in rad
+ var r = this.getAngle() / 180 * Math.PI;
+
+ qx.core.Assert.assertEquals(this.getCx(), 0, "Matrix rotate around point other than origin is not supported (yet).");
+ qx.core.Assert.assertEquals(this.getCy() || 0, 0, "Matrix rotate around point other than origin is not supported (yet).");
+
+ //create matrix object
+ var matrix = this.getSvg().createMatrix();
+
+ //set rotation matrix
+ matrix.a = Math.cos(r).toFixed(10);
+ matrix.b = Math.sin(r).toFixed(10);
+ matrix.c = -1 * Math.sin(r).toFixed(10);
+ matrix.d = Math.cos(r).toFixed(10);
+ matrix.e = 0;
+ matrix.f = 0;
+
+ return matrix;
+ },
+
+ _applyProperty : function() {
+ this._invalidateCache();
+ this.fireEvent("change");
+ }
+ }
+});
\ No newline at end of file
Property changes on: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Rotate.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Scale.js
===================================================================
--- trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Scale.js (rev 0)
+++ trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Scale.js 2011-04-26 18:03:14 UTC (rev 21077)
@@ -0,0 +1,63 @@
+qx.Class.define("svg.coords.transform.Scale",
+{
+ extend : svg.coords.transform.Transformation,
+
+ properties :
+ {
+ xFactor : {
+ nullable: false,
+ deferredInit: true,
+ check: "Number",
+ apply: "_applyProperty"
+ },
+
+ /**
+ * Specifies the y-scale factor. If set to null, it will
+ * be equal to the x-scale factor.
+ *
+ * @type {Number}
+ */
+ yFactor : {
+ nullable: true,
+ deferredInit: true,
+ check: "Number",
+ apply: "_applyProperty"
+ }
+ },
+
+ construct : function(svg, xFactor, yFactor) {
+ this.base(arguments, svg);
+ this.initXFactor(xFactor || 0);
+ this.initYFactor(yFactor || null);
+ },
+
+ members :
+ {
+ _composeString : function() {
+ var str = "scale(" + this.getXFactor();
+ str += null !== this.getYFactor() ? "," + this.getYFactor() : "";
+ return str + ")";
+ },
+
+ _composeMatrix : function() {
+
+ //create matrix object
+ var matrix = this.getSvg().createMatrix();
+
+ //set scale matrix
+ matrix.a = this.getXFactor();
+ matrix.b = 0;
+ matrix.c = 0;
+ matrix.d = this.getYFactor() || this.getXFactor();
+ matrix.e = 0;
+ matrix.f = 0;
+
+ return matrix;
+ },
+
+ _applyProperty : function() {
+ this._invalidateCache();
+ this.fireEvent("change");
+ }
+ }
+});
\ No newline at end of file
Property changes on: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Scale.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Skew.js
===================================================================
--- trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Skew.js (rev 0)
+++ trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Skew.js 2011-04-26 18:03:14 UTC (rev 21077)
@@ -0,0 +1,79 @@
+qx.Class.define("svg.coords.transform.Skew",
+{
+ extend : svg.coords.transform.Transformation,
+
+ properties :
+ {
+ angle : {
+ nullable: false,
+ deferredInit: true,
+ check: "Number",
+ apply: "_applyProperty"
+ },
+
+ mode : {
+ nullable: false,
+ deferredInit: true,
+ check: ["x", "y"],
+ apply: "_applyProperty"
+ }
+ },
+
+ construct : function(svg, angle, mode) {
+ this.base(arguments, svg);
+ this.initAngle(angle);
+ this.initMode(mode || "x");
+ },
+
+ members :
+ {
+ _composeString : function() {
+
+ switch (this.getMode()) {
+ case "x":
+ return "skewX(" + this.getAngle() + ")";
+ case "y":
+ return "skewY(" + this.getAngle() + ")";
+ default:
+ qx.core.Assert.fail("Default statement should be unreachable.", true);
+ }
+ },
+
+ _composeMatrix : function() {
+
+ //get angle in rad
+ var r = this.getAngle() * Math.PI / 180;
+
+ //create matrix object
+ var matrix = this.getSvg().createMatrix();
+
+ switch (this.getMode()) {
+ case "x":
+ matrix.a = 1;
+ matrix.b = 0;
+ matrix.c = Math.tan(r);
+ matrix.d = 1;
+ matrix.e = 0;
+ matrix.f = 0;
+ break;
+ case "y":
+ matrix.a = 1;
+ matrix.b = Math.tan(r);
+ matrix.c = 0;
+ matrix.d = 1;
+ matrix.e = 0;
+ matrix.f = 0;
+ break;
+ default:
+ qx.core.Assert.fail("Default statement should be unreachable.", true);
+ }
+
+ return matrix;
+ },
+
+ _applyProperty : function() {
+ this._invalidateCache();
+ this.fireEvent("change");
+ }
+ }
+});
\ No newline at end of file
Property changes on: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Skew.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/TransformGroup.js
===================================================================
--- trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/TransformGroup.js (rev 0)
+++ trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/TransformGroup.js 2011-04-26 18:03:14 UTC (rev 21077)
@@ -0,0 +1,174 @@
+qx.Class.define("svg.coords.transform.TransformGroup",
+{
+ extend : svg.coords.transform.Transformation,
+
+ construct : function(svg, matrixMode) {
+ this.base(arguments, svg);
+ this.initMatrixMode(matrixMode || "expand");
+ this.__array = new qx.data.Array();
+ this.__array.addListener("change", this.__onArrayChange, this);
+ },
+
+ properties :
+ {
+ matrixMode : {
+ nullable: false,
+ deferredInit: true,
+ check: ["expand", "concat"],
+ apply: "_onPropertyChange"
+ }
+ },
+
+ members :
+ {
+ __array : null,
+
+ __onArrayChange : function(event) {
+ this._invalidateCache();
+ this.fireEvent("change");
+ },
+
+ __onPropertyChange : function(value, old) {
+ this._invalidateCache();
+ this.fireEvent("change");
+ },
+
+ _composeString : function() {
+ var str = "";
+
+ for (var i=0,j=this.__array.getLength(); i<j; i++) {
+ str += this.__array.getItem(i).toString() + " ";
+ }
+ return qx.lang.String.trim(str);
+ },
+
+ _composeMatrix : function() {
+ //get matrix object (initialized to the identity matrix)
+ var mx = this.getSvg().createMatrix();
+
+ //multiply matrix by each transformation in this group
+ for (var i=0,j=this.__array.getLength(); i<j; i++) {
+ mx = mx.multiply(this.__array.getItem(i).toMatrix());
+ }
+
+ //return concatenated matrix
+ return mx;
+ },
+
+ /**
+ * Returns the transformation as a matrix string. Depending on the value of
+ * the {@link #matrixMode} property, one of the following is returned:
+ *
+ * <ul>
+ * <li>
+ * *expand* - returns a list of matrix transformations, for example:
+ * _matrix(a1,b1,c1,d1,e1,f1) matrix(a2,b2,c2,d2,e2,f2)_
+ * </li>
+ * <li>
+ * *concat* - returns a single matrix transformation, which is the
+ * concatenation of all transformations in the TranformGroup.
+ * </li>
+ * </ul>
+ *
+ * @return {String}
+ */
+ toMatrixString : function() {
+
+ switch (this.getMatrixMode())
+ {
+ case "expand":
+ var str = "";
+ for (var i=0,j=this.__array.getLength(); i<j; i++) {
+ str += this.__array.getItem(i).toMatrixString() + " ";
+ };
+ this._asMatrixString = str;
+ this._cachedMatrixString = true;
+ return qx.lang.String.trim(str);
+
+ case "concat":
+ var mx = this.toMatrix();
+ this._asMatrixString = "matrix("+ mx.a+","+mx.b+","+mx.c+","+mx.d+","+mx.e+","+mx.f+")";
+ this._cachedMatrixString = true;
+ return this._asMatrixString;
+
+ default:
+ qx.core.Assert.fail("Default statement should be unreachable.", true);
+ }
+
+ },
+
+ /* *****************************************************
+ * Wrappers for qx.data.Array
+ ***************************************************** */
+
+ contains : function(item) {
+ return this.__array.contains(item);
+ },
+
+ getItem : function(index) {
+ return this.__array.getItem(index);
+ },
+
+ getLength : function() {
+ return this.__array.getLength();
+ },
+
+ indexOf : function(item) {
+ return this.__array.indexOf(item);
+ },
+
+ insertAfter : function(after, item) {
+ this.__array.insertAfter(after, item);
+ },
+
+ insertAt : function(index, item) {
+ this.__array.insertAt(index, item);
+ },
+
+ insertBefore : function(before, item) {
+ this.__array.insertBefore(before, item);
+ },
+
+ pop : function() {
+ return this.__array.pop();
+ },
+
+ push : function(varargs) {
+ this.__array.push.apply(this.__array, arguments);
+ },
+
+ remove : function(item) {
+ return this.__array.remove(item);
+ },
+
+ removeAll : function() {
+ return this.__array.removeAll();
+ },
+
+ removeAt : function(index) {
+ return this.__array.removeAt(index);
+ },
+
+ reverse : function() {
+ this.__array.reverse();
+ },
+
+ setItem : function(index, item) {
+ this.__array.setItem(index, item);
+ },
+
+ shift : function() {
+ return this.__array.shift();
+ },
+
+ unshift : function() {
+ return this.__array.unshift.apply(this.__array, arguments);
+ }
+
+ },
+
+ destruct : function() {
+ this._disposeObjects("__array");
+ }
+
+});
\ No newline at end of file
Property changes on: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/TransformGroup.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Transformation.js
===================================================================
--- trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Transformation.js (rev 0)
+++ trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Transformation.js 2011-04-26 18:03:14 UTC (rev 21077)
@@ -0,0 +1,108 @@
+qx.Class.define("svg.coords.transform.Transformation",
+{
+ extend : qx.core.Object,
+
+ type : "abstract",
+
+ events :
+ {
+ change : "qx.event.type.Event"
+ },
+
+ construct : function(svg)
+ {
+ this.__svg = svg || null;
+ },
+
+ members :
+ {
+ _asString : null,
+ _asMatrix : null,
+ _asMatrixString : null,
+ _cachedString : false,
+ _cachedMatrix : false,
+ _cachedMatrixString : false,
+ __svg : null,
+
+ /**
+ *
+ * @param {svg.struct.Svg}
+ * Svg element
+ */
+ setSvg : function(svg) {
+ this.__svg = svg;
+ },
+
+ getSvg : function() {
+ if (qx.core.Environment.get("qx.debug")) {
+ qx.core.Assert.assertNotNull(this.__svg, "Operation requires that the transformation has access to an SVG object.");
+ }
+
+ return this.__svg;
+ },
+
+ /**
+ * Creates a string that describes the transformation.
+ * This string can be used in the _transform_ attribute
+ * of elements.
+ *
+ * @return {String}
+ */
+ toString : function() {
+ if (!this._cachedString) {
+ this._asString = this._composeString();
+ this._cachedString = true;
+ }
+ return this._asString;
+ },
+
+ /**
+ * Creates the SVG matrix that describes this transformation.
+ *
+ * @return {SVGMatrix}
+ */
+ toMatrix : function() {
+ if (!this.__cachedMatrix) {
+ this._asMatrix = this._composeMatrix();
+ this._cachedMatrix = true;
+ }
+ return this._asMatrix;
+ },
+
+ /**
+ * Creates a string that describes the transformation.
+ * The string will use the Matrix notation, i.e. <code>matrix(a,b,c,d,e,f)</code>.
+ *
+ * @return {String}
+ */
+ toMatrixString : function() {
+
+ if (!this.__cachedMatrixString) {
+ var mx = this.toMatrix();
+ this._asMatrixString = "matrix("+ mx.a+","+mx.b+","+mx.c+","+mx.d+","+mx.e+","+mx.f+")";
+ this._cachedMatrixString = true;
+ }
+ return this._asMatrixString;
+ },
+
+ _invalidateCache : function() {
+ this._cachedString = false;
+ this._cachedMatrix = false;
+ this._cachedMatrixString = false;
+ },
+
+ /**
+ * @abstract
+ */
+ _composeString : function() {
+ qx.core.Assert.fail("_composeString must be overridden in child classes.", true);
+ },
+
+ /**
+ * @abstract
+ */
+ _composeMatrix : function() {
+ qx.core.Assert.fail("_composeMatrix must be overridden in child classes.", true);
+ }
+ }
+});
\ No newline at end of file
Property changes on: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Transformation.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Translate.js
===================================================================
--- trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Translate.js (rev 0)
+++ trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Translate.js 2011-04-26 18:03:14 UTC (rev 21077)
@@ -0,0 +1,55 @@
+qx.Class.define("svg.coords.transform.Translate",
+{
+ extend : svg.coords.transform.Transformation,
+
+ properties :
+ {
+ tx : {
+ nullable: false,
+ deferredInit: true,
+ check: "Number",
+ apply: "_applyProperty"
+ },
+
+ ty : {
+ nullable: false,
+ deferredInit: true,
+ check: "Number",
+ apply: "_applyProperty"
+ }
+ },
+
+ construct : function(svg, tx, ty) {
+ this.base(arguments, svg);
+ this.initTx(tx || 0);
+ this.initTy(ty || 0);
+ },
+
+ members :
+ {
+ _composeString : function() {
+ return "translate(" + this.getTx() + "," + this.getTy() + ")";
+ },
+
+ _composeMatrix : function() {
+
+ //create matrix object
+ var matrix = this.getSvg().createMatrix();
+
+ //create translation matrix
+ matrix.a = 1;
+ matrix.b = 0;
+ matrix.c = 0;
+ matrix.d = 1;
+ matrix.e = this.getTx();
+ matrix.f = this.getTy();
+
+ return matrix;
+ },
+
+ _applyProperty : function() {
+ this._invalidateCache();
+ this.fireEvent("change");
+ }
+ }
+});
\ No newline at end of file
Property changes on: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/Translate.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/__init__.js
===================================================================
--- trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/__init__.js (rev 0)
+++ trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/__init__.js 2011-04-26 18:03:14 UTC (rev 21077)
@@ -0,0 +1,5 @@
+/**
+ * Object-Oriented approach to transformations.
+ *
+ * WORK IN PROGRESS
+ */
Property changes on: trunk/qooxdoo-contrib/SVG/trunk/source/class/svg/coords/transform/__init__.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|