You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by wa...@apache.org on 2012/06/20 08:54:58 UTC
svn commit: r1351947 -
/incubator/ooo/trunk/main/svx/source/customshapes/EnhancedCustomShape2d.cxx
Author: wangzcdl
Date: Wed Jun 20 06:54:57 2012
New Revision: 1351947
URL: http://svn.apache.org/viewvc?rev=1351947&view=rev
Log:
for #119974#
Modified:
incubator/ooo/trunk/main/svx/source/customshapes/EnhancedCustomShape2d.cxx
Modified: incubator/ooo/trunk/main/svx/source/customshapes/EnhancedCustomShape2d.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/customshapes/EnhancedCustomShape2d.cxx?rev=1351947&r1=1351946&r2=1351947&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/source/customshapes/EnhancedCustomShape2d.cxx (original)
+++ incubator/ooo/trunk/main/svx/source/customshapes/EnhancedCustomShape2d.cxx Wed Jun 20 06:54:57 2012
@@ -1511,10 +1511,78 @@ void EnhancedCustomShape2d::CreateSubPat
for ( sal_uInt16 i = 0; ( i < nPntCount ) && ( ( rSrcPt + 2 ) < nCoordSize ); i++ )
{
// create a circle
- Point _aCenter( GetPoint( seqCoordinates[ rSrcPt ], sal_True, sal_True ) );
+ Point _aCenter;
double fWidth, fHeight;
- GetParameter( fWidth, seqCoordinates[ rSrcPt + 1 ].First, sal_True, sal_False );
- GetParameter( fHeight, seqCoordinates[ rSrcPt + 1 ].Second, sal_False, sal_True );
+ MSO_SPT eSpType = mso_sptEllipse;
+ const mso_CustomShape* pDefCustomShape = GetCustomShapeContent( eSpType );
+ sal_Bool bIsDefaultViewBox = sal_False;
+ sal_Bool bIsDefaultPath = sal_False;
+ sal_Bool bIsMSEllipse = sal_False;
+
+ if( ( nCoordWidth == pDefCustomShape->nCoordWidth )
+ && ( nCoordHeight == pDefCustomShape->nCoordHeight ) )
+ bIsDefaultViewBox = sal_True;
+ sal_Int32 j, nCount = pDefCustomShape->nVertices;//==3
+ com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeParameterPair> seqCoordinates1, seqCoordinates2;
+
+ seqCoordinates1.realloc( nCount );
+ for ( j = 0; j < nCount; j++ )
+ {
+ seqCoordinates1[j] = seqCoordinates[ rSrcPt + j];
+ }
+
+ seqCoordinates2.realloc( nCount );
+ for ( j = 0; j < nCount; j++ )
+ {
+ EnhancedCustomShape2d::SetEnhancedCustomShapeParameter( seqCoordinates2[ j ].First, pDefCustomShape->pVertices[ j ].nValA );
+ EnhancedCustomShape2d::SetEnhancedCustomShapeParameter( seqCoordinates2[ j ].Second, pDefCustomShape->pVertices[ j ].nValB );
+ }
+ if(seqCoordinates1 == seqCoordinates2)
+ bIsDefaultPath = sal_True;
+
+ const rtl::OUString sType( RTL_CONSTASCII_USTRINGPARAM ( "Type" ) );
+ rtl::OUString sShpType;
+ SdrCustomShapeGeometryItem& rGeometryItem = (SdrCustomShapeGeometryItem&)(const SdrCustomShapeGeometryItem&)pCustomShapeObj->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY );
+ Any* pAny = rGeometryItem.GetPropertyValueByName( sType );
+ if ( pAny )
+ *pAny >>= sShpType;
+ if( sShpType.getLength() > 3 &&
+ sShpType.matchAsciiL( RTL_CONSTASCII_STRINGPARAM( "mso" ))){
+ bIsMSEllipse = sal_True;
+ }
+ if( (! bIsDefaultPath && ! bIsDefaultViewBox) || (bIsDefaultViewBox && bIsMSEllipse) /*&& (nGeneratorVersion == SfxObjectShell::Sym_L2)*/ )
+ {
+ _aCenter = GetPoint( seqCoordinates[ rSrcPt ], sal_True, sal_True );
+ GetParameter( fWidth, seqCoordinates[ rSrcPt + 1 ].First, sal_True, sal_False );
+ GetParameter( fHeight, seqCoordinates[ rSrcPt + 1 ].Second, sal_False, sal_True );
+ fWidth /= 2;
+ fHeight /= 2;
+ }else if( bIsDefaultPath && !bIsDefaultViewBox /*&& (nGeneratorVersion == SfxObjectShell::Sym_L2)*/ )
+ {
+ _aCenter.X() = nCoordWidth/2 * fXScale;
+ _aCenter.Y() = nCoordHeight/2 * fYScale;
+ fWidth = nCoordWidth/2;
+ fHeight = nCoordHeight/2;
+
+ const rtl::OUString sViewBox( RTL_CONSTASCII_USTRINGPARAM ( "ViewBox" ) );
+ const Any* pViewBox = ((SdrCustomShapeGeometryItem&)rGeometryItem).GetPropertyValueByName( sViewBox );
+ com::sun::star::awt::Rectangle aViewBox;
+ if ( pViewBox && (*pViewBox >>= aViewBox ) )
+ {
+ aViewBox.Width = pDefCustomShape->nCoordWidth;
+ aViewBox.Height = pDefCustomShape->nCoordHeight;
+ }
+ com::sun::star::beans::PropertyValue aPropVal;
+ aPropVal.Name = sViewBox;
+ aPropVal.Value <<= aViewBox;
+ rGeometryItem.SetPropertyValue( aPropVal );
+ pCustomShapeObj->SetMergedItem( rGeometryItem );
+ }else{
+ _aCenter = GetPoint( seqCoordinates[ rSrcPt ], sal_True, sal_True );
+ GetParameter( fWidth, seqCoordinates[ rSrcPt + 1 ].First, sal_True, sal_False );
+ GetParameter( fHeight, seqCoordinates[ rSrcPt + 1 ].Second, sal_False, sal_True );
+ }
+
fWidth *= fXScale;
fHeight*= fYScale;
Point aP( (sal_Int32)( _aCenter.X() - fWidth ), (sal_Int32)( _aCenter.Y() - fHeight ) );