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 )