You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2012/11/20 15:38:16 UTC

svn commit: r1411685 - in /incubator/ooo/trunk/main/svx: inc/svx/svdoashp.hxx source/svdraw/svdoashp.cxx source/unodraw/unoshap2.cxx

Author: alg
Date: Tue Nov 20 14:38:15 2012
New Revision: 1411685

URL: http://svn.apache.org/viewvc?rev=1411685&view=rev
Log:
When TRSetBaseGeometry at SdrObjCustomShape gives negative scales (mirrorings) use these to actually apply mirroring as intended to the shapes. This is always valid and a preparation for aw080 where the mirroring will be part of the objects transformstion

Modified:
    incubator/ooo/trunk/main/svx/inc/svx/svdoashp.hxx
    incubator/ooo/trunk/main/svx/source/svdraw/svdoashp.cxx
    incubator/ooo/trunk/main/svx/source/unodraw/unoshap2.cxx

Modified: incubator/ooo/trunk/main/svx/inc/svx/svdoashp.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/inc/svx/svdoashp.hxx?rev=1411685&r1=1411684&r2=1411685&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/inc/svx/svdoashp.hxx (original)
+++ incubator/ooo/trunk/main/svx/inc/svx/svdoashp.hxx Tue Nov 20 14:38:15 2012
@@ -135,6 +135,8 @@ protected:
 	String		aName;
 
 public:
+    bool bPurposeFlipX;
+    bool bPurposeFlipY;
 
 	sal_Bool UseNoFillStyle() const;
 

Modified: incubator/ooo/trunk/main/svx/source/svdraw/svdoashp.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/svdraw/svdoashp.cxx?rev=1411685&r1=1411684&r2=1411685&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/source/svdraw/svdoashp.cxx (original)
+++ incubator/ooo/trunk/main/svx/source/svdraw/svdoashp.cxx Tue Nov 20 14:38:15 2012
@@ -3273,12 +3273,41 @@ void SdrObjCustomShape::TRSetBaseGeometr
 
 	// #i75086# Old DrawingLayer (GeoStat and geometry) does not support holding negative scalings
 	// in X and Y which equal a 180 degree rotation. Recognize it and react accordingly
-	if(basegfx::fTools::less(aScale.getX(), 0.0) && basegfx::fTools::less(aScale.getY(), 0.0))
+    const bool bMirrorX(basegfx::fTools::less(aScale.getX(), 0.0));
+    const bool bMirrorY(basegfx::fTools::less(aScale.getY(), 0.0));
+
+	if(bMirrorX && bMirrorY)
 	{
 		aScale.setX(fabs(aScale.getX()));
 		aScale.setY(fabs(aScale.getY()));
 		fRotate = fmod(fRotate + F_PI, F_2PI);
 	}
+    else if(bMirrorX || bMirrorY)
+    {
+        basegfx::B2DHomMatrix aNew;
+
+        // create pre-multiplied matrix without mirroring
+        aNew.translate(-0.5, -0.5);
+        aNew.scale(bMirrorX ? -1.0 : 1.0, bMirrorY ? -1.0 : 1.0);
+        aNew.translate(0.5, 0.5);
+        aNew = rMatrix * aNew;
+
+        // decompose to get corrected, mirror-free values
+        aNew.decompose(aScale, aTranslate, fRotate, fShearX);
+
+        // apply mirroring to CustomShapeGeometry
+        if((bool)IsMirroredX() != bMirrorX)
+        {
+            SetMirroredX(bMirrorX);
+            bPurposeFlipX = !bPurposeFlipX;
+        }
+
+        if((bool)IsMirroredY() != bMirrorY)
+        {
+            SetMirroredY(bMirrorY);
+            bPurposeFlipY = !bPurposeFlipY;
+        }
+    }
 
 	// reset object shear and rotations
 	aGeo.nDrehWink = 0;

Modified: incubator/ooo/trunk/main/svx/source/unodraw/unoshap2.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/unodraw/unoshap2.cxx?rev=1411685&r1=1411684&r2=1411685&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/source/unodraw/unoshap2.cxx (original)
+++ incubator/ooo/trunk/main/svx/source/unodraw/unoshap2.cxx Tue Nov 20 14:38:15 2012
@@ -2098,6 +2098,7 @@ void SAL_CALL SvxCustomShape::setPropert
 	{
 		bMirroredX = ( ((SdrObjCustomShape*)pObject)->IsMirroredX() );
 		bMirroredY = ( ((SdrObjCustomShape*)pObject)->IsMirroredY() );
+        ((SdrObjCustomShape*)pObject)->bPurposeFlipX = ((SdrObjCustomShape*)pObject)->bPurposeFlipY = false;
 	}
 
 	SvxShape::setPropertyValue( aPropertyName, aValue );
@@ -2126,7 +2127,8 @@ void SAL_CALL SvxCustomShape::setPropert
 			pObject->NbcMirror( aTop, aBottom );
 			// NbcMirroring is flipping the current mirror state,
 			// so we have to set the correct state again
-			((SdrObjCustomShape*)pObject)->SetMirroredX( bMirroredX ? sal_False : sal_True );
+            if(((SdrObjCustomShape*)pObject)->bPurposeFlipX)
+    			((SdrObjCustomShape*)pObject)->SetMirroredX( bMirroredX ? sal_False : sal_True );
 		}
 		if ( bNeedsMirrorY )
 		{
@@ -2135,7 +2137,8 @@ void SAL_CALL SvxCustomShape::setPropert
 			pObject->NbcMirror( aLeft, aRight );
 			// NbcMirroring is flipping the current mirror state,
 			// so we have to set the correct state again
-			((SdrObjCustomShape*)pObject)->SetMirroredY( bMirroredY ? sal_False : sal_True );
+            if(((SdrObjCustomShape*)pObject)->bPurposeFlipY)
+    			((SdrObjCustomShape*)pObject)->SetMirroredY( bMirroredY ? sal_False : sal_True );
 		}
 
 		if( pListCopy )