summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Cecchetti <marco.cecchetti@collabora.com>2016-01-13 17:27:56 +0100
committerMarco Cecchetti <marco.cecchetti@collabora.com>2016-01-13 17:40:01 +0100
commitd8c69d313b717c5dcf158e8a9d1a9c8497ab8a68 (patch)
tree6d19a892ac2fdf19afe548a9745494d0e3c2bf5b
parent86a1be7c4742828c706842eb87cc2091edaafb79 (diff)
svg export: simultaneous move and zoom issue - fixedcp-5.0-17
Simultaneaous move and zoom of shapes did not work properly. Fixed. Change-Id: I445733c5ad3734966f6f5c08a5e5c798852cf74e
-rw-r--r--filter/source/svg/presentation_engine.js124
1 files changed, 44 insertions, 80 deletions
diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js
index 46946a01b38c..09bf1960b95a 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -8788,7 +8788,6 @@ AnimatedElement.prototype.initElement = function()
this.nCenterY = this.nBaseCenterY;
this.nScaleFactorX = 1.0;
this.nScaleFactorY = 1.0;
- this.setCTM();
// add a transform attribute of type matrix
this.aActiveElement.setAttribute( 'transform', makeMatrixString( 1, 0, 0, 1, 0, 0 ) );
@@ -9077,117 +9076,82 @@ AnimatedElement.prototype.getHeight = function()
return this.nScaleFactorY * this.getBaseBBox().height;
};
-AnimatedElement.prototype.setCTM = function()
-{
-
- this.aICTM.e = this.getBaseCenterX();
- this.aICTM.f = this.getBaseCenterY();
-
- this.aCTM.e = -this.aICTM.e;
- this.aCTM.f = -this.aICTM.f;
-};
-
AnimatedElement.prototype.updateTransformAttribute = function()
{
+ //this.aActiveElement.setAttribute( 'transform', matrixToString( this.aTMatrix ) );
this.aTransformAttrList = this.aActiveElement.transform.baseVal;
this.aTransformAttr = this.aTransformAttrList.getItem( 0 );
this.aTransformAttr.setMatrix( this.aTMatrix );
};
-AnimatedElement.prototype.setX = function( nXNewPos )
+AnimatedElement.prototype.setX = function( nNewCenterX )
{
+ if( nNewCenterX === this.nCenterX ) return;
+
this.aTransformAttrList = this.aActiveElement.transform.baseVal;
this.aTransformAttr = this.aTransformAttrList.getItem( 0 );
- this.aTransformAttr.matrix.e += ( nXNewPos - this.getX() );
- this.nCenterX = nXNewPos;
+ this.aTMatrix = this.aTransformAttr.matrix.translate( nNewCenterX - this.nCenterX, 0 );
+ this.aTransformAttr.setMatrix( this.aTMatrix );
+ this.nCenterX = nNewCenterX;
};
-AnimatedElement.prototype.setY = function( nYNewPos )
+AnimatedElement.prototype.setY = function( nNewCenterY )
{
+ if( nNewCenterY === this.nCenterY ) return;
+
this.aTransformAttrList = this.aActiveElement.transform.baseVal;
this.aTransformAttr = this.aTransformAttrList.getItem( 0 );
- this.aTransformAttr.matrix.f += ( nYNewPos - this.getY() );
- this.nCenterY = nYNewPos;
+ this.aTMatrix = this.aTransformAttr.matrix.translate( 0, nNewCenterY - this.nCenterY );
+ this.aTransformAttr.setMatrix( this.aTMatrix );
+ this.nCenterY = nNewCenterY;
};
AnimatedElement.prototype.setWidth = function( nNewWidth )
{
- var nBaseWidth = this.getBaseBBox().width;
- if( nBaseWidth <= 0 )
- return;
-
- this.nScaleFactorX = nNewWidth / nBaseWidth;
- this.implScale();
-};
-
-AnimatedElement.prototype.setHeight = function( nNewHeight )
-{
- var nBaseHeight = this.getBaseBBox().height;
- if( nBaseHeight <= 0 )
- return;
-
- this.nScaleFactorY = nNewHeight / nBaseHeight;
- this.implScale();
-};
-
-AnimatedElement.prototype.implScale = function( )
-{
- this.aTMatrix = document.documentElement.createSVGMatrix();
- this.aTMatrix.a = this.nScaleFactorX;
- this.aTMatrix.d = this.nScaleFactorY;
- this.aTMatrix = this.aICTM.multiply( this.aTMatrix.multiply( this.aCTM ) );
-
- var nDeltaX = this.getX() - this.getBaseCenterX();
- var nDeltaY = this.getY() - this.getBaseCenterY();
- this.aTMatrix = this.aTMatrix.translate( nDeltaX, nDeltaY );
- this.updateTransformAttribute();
-};
-
-AnimatedElement.prototype.setWidth2 = function( nNewWidth )
-{
+ ANIMDBG.print( 'AnimatedElement.setWidth: nNewWidth = ' + nNewWidth );
if( nNewWidth < 0 )
- log( 'AnimatedElement(' + this.getId() + ').setWidth: negative width!' );
- if( nNewWidth < 0.001 )
- nNewWidth = 0.001;
+ {
+ log('AnimatedElement(' + this.getId() + ').setWidth: negative height!');
+ nNewWidth = 0;
+ }
- this.setCTM();
+ var nBaseWidth = this.getBaseBBox().width;
+ var nScaleFactorX = nNewWidth / nBaseWidth;
- var nCurWidth = this.getWidth();
- if( nCurWidth <= 0 )
- nCurWidth = 0.001;
+ if( nScaleFactorX < 1e-5 ) nScaleFactorX = 1e-5;
+ if( nScaleFactorX == this.nScaleFactorX ) return;
- var nScaleFactor = nNewWidth / nCurWidth;
- if( nScaleFactor < 1e-5 )
- nScaleFactor = 1e-5;
- this.aTMatrix = document.documentElement.createSVGMatrix();
- this.aTMatrix.a = nScaleFactor;
- this.aTMatrix = this.aICTM.multiply( this.aTMatrix.multiply( this.aCTM ) );
+ this.aTMatrix = document.documentElement.createSVGMatrix()
+ .translate( this.nCenterX, this.nCenterY )
+ .scaleNonUniform( nScaleFactorX, this.nScaleFactorY )
+ .translate( -this.nBaseCenterX, -this.nBaseCenterY );
this.updateTransformAttribute();
+
+ this.nScaleFactorX = nScaleFactorX;
};
-AnimatedElement.prototype.setHeight2 = function( nNewHeight )
+AnimatedElement.prototype.setHeight = function( nNewHeight )
{
- ANIMDBG.print( 'AnimatedElement.setHeight: nNewHeight = ' + nNewHeight );
+ ANIMDBG.print( 'AnimatedElement.setWidth: nNewHeight = ' + nNewHeight );
if( nNewHeight < 0 )
- log( 'AnimatedElement(' + this.getId() + ').setWidth: negative height!' );
- if( nNewHeight < 0.001 )
- nNewHeight = 0.001;
+ {
+ log('AnimatedElement(' + this.getId() + ').setWidth: negative height!');
+ nNewHeight = 0;
+ }
- this.setCTM();
+ var nBaseHeight = this.getBaseBBox().height;
+ var nScaleFactorY = nNewHeight / nBaseHeight;
- var nCurHeight = this.getHeight();
- ANIMDBG.print( 'AnimatedElement.setHeight: nCurHeight = ' + nCurHeight );
- if( nCurHeight <= 0 )
- nCurHeight = 0.001;
+ if( nScaleFactorY < 1e-5 ) nScaleFactorY = 1e-5;
+ if( nScaleFactorY == this.nScaleFactorY ) return;
- var nScaleFactor = nNewHeight / nCurHeight;
- ANIMDBG.print( 'AnimatedElement.setHeight: nScaleFactor = ' + nScaleFactor );
- if( nScaleFactor < 1e-5 )
- nScaleFactor = 1e-5;
- this.aTMatrix = document.documentElement.createSVGMatrix();
- this.aTMatrix.d = nScaleFactor;
- this.aTMatrix = this.aICTM.multiply( this.aTMatrix.multiply( this.aCTM ) );
+ this.aTMatrix = document.documentElement.createSVGMatrix()
+ .translate( this.nCenterX, this.nCenterY )
+ .scaleNonUniform( this.nScaleFactorX, nScaleFactorY )
+ .translate( -this.nBaseCenterX, -this.nBaseCenterY );
this.updateTransformAttribute();
+
+ this.nScaleFactorY = nScaleFactorY;
};
AnimatedElement.prototype.getOpacity = function()