Modified: 
openoffice/branches/capstone2013/main/xmloff/source/text/XMLTextFrameContext.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/branches/capstone2013/main/xmloff/source/text/XMLTextFrameContext.cxx?rev=1538719&r1=1538718&r2=1538719&view=diff
==============================================================================
--- 
openoffice/branches/capstone2013/main/xmloff/source/text/XMLTextFrameContext.cxx
 (original)
+++ 
openoffice/branches/capstone2013/main/xmloff/source/text/XMLTextFrameContext.cxx
 Mon Nov  4 19:00:37 2013
@@ -19,10 +19,9 @@
  * 
  *************************************************************/
 
-
-
 // MARKER(update_precomp.py): autogen include statement, do not remove
 #include "precompiled_xmloff.hxx"
+
 #include <tools/debug.hxx>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/text/TextContentAnchorType.hpp>
@@ -52,15 +51,16 @@
 #include <xmloff/XMLEventsImportContext.hxx>
 #include "XMLImageMapContext.hxx"
 #include "XMLTextFrameContext.hxx"
-
 #include "XMLTextListBlockContext.hxx"
 #include "XMLTextListItemContext.hxx"
 #include <xmloff/attrlist.hxx>
 #include <comphelper/stl_types.hxx>
-
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
 #include <map>
 
-
 using ::rtl::OUString;
 using ::rtl::OUStringBuffer;
 
@@ -234,113 +234,130 @@ public:
 TYPEINIT1( XMLTextFrameContourContext_Impl, SvXMLImportContext );
 
 XMLTextFrameContourContext_Impl::XMLTextFrameContourContext_Impl(
-               SvXMLImport& rImport,
-               sal_uInt16 nPrfx, const OUString& rLName,
-               const Reference< XAttributeList > & xAttrList,
-               const Reference < XPropertySet >& rPropSet,
-           sal_Bool bPath ) :
-       SvXMLImportContext( rImport, nPrfx, rLName ),
-       xPropSet( rPropSet )
-{
-       OUString sD, sPoints, sViewBox;
-       sal_Bool bPixelWidth = sal_False, bPixelHeight = sal_False;
-       sal_Bool bAuto = sal_False;
-       sal_Int32 nWidth = 0;
-       sal_Int32 nHeight = 0;
+        SvXMLImport& rImport,
+        sal_uInt16 nPrfx, const OUString& rLName,
+        const Reference< XAttributeList > & xAttrList,
+        const Reference < XPropertySet >& rPropSet,
+        sal_Bool bPath ) :
+    SvXMLImportContext( rImport, nPrfx, rLName ),
+    xPropSet( rPropSet )
+{
+    OUString sD, sPoints, sViewBox;
+    sal_Bool bPixelWidth = sal_False, bPixelHeight = sal_False;
+    sal_Bool bAuto = sal_False;
+    sal_Int32 nWidth = 0;
+    sal_Int32 nHeight = 0;
 
-       const SvXMLTokenMap& rTokenMap =
-               GetImport().GetTextImport()->GetTextContourAttrTokenMap();
+    const SvXMLTokenMap& rTokenMap =
+        GetImport().GetTextImport()->GetTextContourAttrTokenMap();
 
-       sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-       for( sal_Int16 i=0; i < nAttrCount; i++ )
-       {
-               const OUString& rAttrName = xAttrList->getNameByIndex( i );
-               const OUString& rValue = xAttrList->getValueByIndex( i );
+    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
+    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    {
+        const OUString& rAttrName = xAttrList->getNameByIndex( i );
+        const OUString& rValue = xAttrList->getValueByIndex( i );
 
-               OUString aLocalName;
-               sal_uInt16 nPrefix =
-                       GetImport().GetNamespaceMap().GetKeyByAttrName( 
rAttrName,
-                                                                               
                                        &aLocalName );
-               switch( rTokenMap.Get( nPrefix, aLocalName ) )
-               {
-               case XML_TOK_TEXT_CONTOUR_VIEWBOX:
-                       sViewBox = rValue;
-                       break;
-               case XML_TOK_TEXT_CONTOUR_D:
-                       if( bPath )
-                               sD = rValue;
-                       break;
-               case XML_TOK_TEXT_CONTOUR_POINTS:
-                       if( !bPath )
-                               sPoints = rValue;
-                       break;
-               case XML_TOK_TEXT_CONTOUR_WIDTH:
-                       if( 
GetImport().GetMM100UnitConverter().convertMeasurePx( nWidth,
-                                                                               
                                                          rValue) )
-                               bPixelWidth = sal_True;
-                       else
-                               
GetImport().GetMM100UnitConverter().convertMeasure( nWidth,
-                                                                               
                                                rValue);
-                       break;
-               case XML_TOK_TEXT_CONTOUR_HEIGHT:
-                       if( 
GetImport().GetMM100UnitConverter().convertMeasurePx( nHeight,
-                                                                               
                                                rValue) )
-                               bPixelHeight = sal_True;
-                       else
-                               
GetImport().GetMM100UnitConverter().convertMeasure( nHeight,
-                                                                               
                                                        rValue);
-                       break;
-               case XML_TOK_TEXT_CONTOUR_AUTO:
-                       bAuto = IsXMLToken(rValue, XML_TRUE);
-                       break;
-               }
-       }
+        OUString aLocalName;
+        sal_uInt16 nPrefix =
+            GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
+                                                            &aLocalName );
+        switch( rTokenMap.Get( nPrefix, aLocalName ) )
+        {
+        case XML_TOK_TEXT_CONTOUR_VIEWBOX:
+            sViewBox = rValue;
+            break;
+        case XML_TOK_TEXT_CONTOUR_D:
+            if( bPath )
+                sD = rValue;
+            break;
+        case XML_TOK_TEXT_CONTOUR_POINTS:
+            if( !bPath )
+                sPoints = rValue;
+            break;
+        case XML_TOK_TEXT_CONTOUR_WIDTH:
+            if( GetImport().GetMM100UnitConverter().convertMeasurePx( nWidth,
+                                                                      rValue) )
+                bPixelWidth = sal_True;
+            else
+                GetImport().GetMM100UnitConverter().convertMeasure( nWidth,
+                                                                rValue);
+            break;
+        case XML_TOK_TEXT_CONTOUR_HEIGHT:
+            if( GetImport().GetMM100UnitConverter().convertMeasurePx( nHeight,
+                                                                rValue) )
+                bPixelHeight = sal_True;
+            else
+                GetImport().GetMM100UnitConverter().convertMeasure( nHeight,
+                                                                    rValue);
+            break;
+        case XML_TOK_TEXT_CONTOUR_AUTO:
+            bAuto = IsXMLToken(rValue, XML_TRUE);
+            break;
+        }
+    }
 
-       OUString sContourPolyPolygon(
-                       RTL_CONSTASCII_USTRINGPARAM("ContourPolyPolygon") );
-       Reference < XPropertySetInfo > xPropSetInfo =
-               rPropSet->getPropertySetInfo();
-       if( xPropSetInfo->hasPropertyByName(
-                                                                               
                        sContourPolyPolygon ) &&
-               nWidth > 0 && nHeight > 0 && bPixelWidth == bPixelHeight &&
-               (bPath ? sD : sPoints).getLength() )
-       {
-               awt::Point aPoint( 0,  0 );
-               awt::Size aSize( nWidth, nHeight );
-               SdXMLImExViewBox aViewBox( sViewBox,
-                                                                  
GetImport().GetMM100UnitConverter());
-               Any aAny;
-               if( bPath )
-               {
-                       SdXMLImExSvgDElement aPoints( sD, aViewBox, aPoint, 
aSize,
-                                                                               
  GetImport().GetMM100UnitConverter() );
-                       aAny <<= aPoints.GetPointSequenceSequence();
-               }
-               else
-               {
-                       SdXMLImExPointsElement aPoints( sPoints, aViewBox, 
aPoint, aSize,
-                                                                               
GetImport().GetMM100UnitConverter() );
-                       aAny <<= aPoints.GetPointSequenceSequence();
-               }
+    OUString 
sContourPolyPolygon(RTL_CONSTASCII_USTRINGPARAM("ContourPolyPolygon"));
+    Reference < XPropertySetInfo > xPropSetInfo = 
rPropSet->getPropertySetInfo();
 
-               OUString sIsPixelContour(
-                               RTL_CONSTASCII_USTRINGPARAM("IsPixelContour") );
-               xPropSet->setPropertyValue( sContourPolyPolygon, aAny );
+    if(xPropSetInfo->hasPropertyByName(sContourPolyPolygon) && nWidth > 0 && 
nHeight > 0 && bPixelWidth == bPixelHeight && (bPath ? sD : 
sPoints).getLength())
+    {
+        const SdXMLImExViewBox aViewBox( sViewBox, 
GetImport().GetMM100UnitConverter());
+        basegfx::B2DPolyPolygon aPolyPolygon;
+        Any aAny;
 
-               if( xPropSetInfo->hasPropertyByName( sIsPixelContour ) )
-               {
-                       aAny.setValue( &bPixelWidth, ::getBooleanCppuType() );
-                       xPropSet->setPropertyValue( sIsPixelContour, aAny );
-               }
+        if( bPath )
+        {
+            basegfx::tools::importFromSvgD(aPolyPolygon, sD, true, 0);
+        }
+        else
+        {
+            basegfx::B2DPolygon aPolygon;
 
-               OUString sIsAutomaticContour(
-                               
RTL_CONSTASCII_USTRINGPARAM("IsAutomaticContour") );
-               if( xPropSetInfo->hasPropertyByName( sIsAutomaticContour ) )
-               {
-                       aAny.setValue( &bAuto, ::getBooleanCppuType() );
-                       xPropSet->setPropertyValue( sIsAutomaticContour, aAny );
-               }
-       }
+            if(basegfx::tools::importFromSvgPoints(aPolygon, sPoints))
+            {
+                aPolyPolygon = basegfx::B2DPolyPolygon(aPolygon);
+            }
+        }
+
+        if(aPolyPolygon.count())
+        {
+            const basegfx::B2DRange aSourceRange(
+                aViewBox.GetX(), aViewBox.GetY(), 
+                aViewBox.GetX() + aViewBox.GetWidth(), aViewBox.GetY() + 
aViewBox.GetHeight());
+            const basegfx::B2DRange aTargetRange(
+                0.0, 0.0, 
+                nWidth, nHeight);
+
+            if(!aSourceRange.equal(aTargetRange))
+            {
+                aPolyPolygon.transform(
+                    basegfx::tools::createSourceRangeTargetRangeTransform(
+                        aSourceRange,
+                        aTargetRange));
+            }
+
+            com::sun::star::drawing::PointSequenceSequence 
aPointSequenceSequence;
+            
basegfx::tools::B2DPolyPolygonToUnoPointSequenceSequence(aPolyPolygon, 
aPointSequenceSequence);
+            aAny <<= aPointSequenceSequence;
+            xPropSet->setPropertyValue( sContourPolyPolygon, aAny );
+        }
+
+        const OUString 
sIsPixelContour(RTL_CONSTASCII_USTRINGPARAM("IsPixelContour"));
+
+        if( xPropSetInfo->hasPropertyByName( sIsPixelContour ) )
+        {
+            aAny.setValue( &bPixelWidth, ::getBooleanCppuType() );
+            xPropSet->setPropertyValue( sIsPixelContour, aAny );
+        }
+
+        const OUString 
sIsAutomaticContour(RTL_CONSTASCII_USTRINGPARAM("IsAutomaticContour") );
+
+        if( xPropSetInfo->hasPropertyByName( sIsAutomaticContour ) )
+        {
+            aAny.setValue( &bAuto, ::getBooleanCppuType() );
+            xPropSet->setPropertyValue( sIsAutomaticContour, aAny );
+        }
+    }
 }
 
 XMLTextFrameContourContext_Impl::~XMLTextFrameContourContext_Impl()

Modified: openoffice/branches/capstone2013/main/xmloff/source/text/txtparae.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/branches/capstone2013/main/xmloff/source/text/txtparae.cxx?rev=1538719&r1=1538718&r2=1538719&view=diff
==============================================================================
--- openoffice/branches/capstone2013/main/xmloff/source/text/txtparae.cxx 
(original)
+++ openoffice/branches/capstone2013/main/xmloff/source/text/txtparae.cxx Mon 
Nov  4 19:00:37 2013
@@ -19,8 +19,6 @@
  * 
  *************************************************************/
 
-
-
 // MARKER(update_precomp.py): autogen include statement, do not remove
 #include "precompiled_xmloff.hxx"
 #include "unointerfacetouniqueidentifiermapper.hxx"
@@ -32,11 +30,9 @@
 #include <svl/svarray.hxx>
 #include <rtl/ustrbuf.hxx>
 #include <sal/types.h>
-
 #include <vector>
 #include <list>
 #include <hash_map>
-
 #include <com/sun/star/lang/XServiceInfo.hpp>
 #include <com/sun/star/container/XEnumerationAccess.hpp>
 #include <com/sun/star/container/XEnumeration.hpp>
@@ -70,15 +66,12 @@
 #include <com/sun/star/document/XEmbeddedObjectSupplier.hpp>
 #include <com/sun/star/document/XEventsSupplier.hpp>
 #include <com/sun/star/document/XRedlinesSupplier.hpp>
-
 #include <com/sun/star/text/XBookmarksSupplier.hpp>
 #include <com/sun/star/text/XFormField.hpp>
-
 #include <com/sun/star/text/XTextSection.hpp>
 #include <com/sun/star/text/SectionFileLink.hpp>
 #include <com/sun/star/drawing/XShape.hpp>
 #include <com/sun/star/text/XTextShapesSupplier.hpp>
-
 #include <com/sun/star/style/XAutoStylesSupplier.hpp>
 #include <com/sun/star/style/XAutoStyleFamily.hpp>
 #include <com/sun/star/text/XTextFieldsSupplier.hpp>
@@ -112,11 +105,11 @@
 #include <xmloff/formlayerexport.hxx>
 #include "XMLTextCharStyleNamesElementExport.hxx"
 #include <comphelper/stlunosequence.hxx>
-
-// --> OD 2008-04-25 #refactorlists#
 #include <txtlists.hxx>
-// <--
 #include <com/sun/star/rdf/XMetadatable.hpp>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
 
 using ::rtl::OUString;
 using ::rtl::OUStringBuffer;
@@ -2873,119 +2866,102 @@ void XMLTextParagraphExport::_exportText
 }
 
 void XMLTextParagraphExport::exportContour(
-               const Reference < XPropertySet > & rPropSet,
-               const Reference < XPropertySetInfo > & rPropSetInfo )
+    const Reference < XPropertySet > & rPropSet,
+    const Reference < XPropertySetInfo > & rPropSetInfo )
 {
-       if( !rPropSetInfo->hasPropertyByName( sContourPolyPolygon ) )
-               return;
+    if( !rPropSetInfo->hasPropertyByName( sContourPolyPolygon ) )
+    {
+        return;
+    }
 
-       PointSequenceSequence aSourcePolyPolygon;
-       rPropSet->getPropertyValue( sContourPolyPolygon ) >>= 
aSourcePolyPolygon;
+    PointSequenceSequence aSourcePolyPolygon;
+    rPropSet->getPropertyValue( sContourPolyPolygon ) >>= aSourcePolyPolygon;
+    const basegfx::B2DPolyPolygon aPolyPolygon(
+        basegfx::tools::UnoPointSequenceSequenceToB2DPolyPolygon(
+            aSourcePolyPolygon));
+    const sal_uInt32 nPolygonCount(aPolyPolygon.count());
 
-       if( !aSourcePolyPolygon.getLength() )
-               return;
+    if(!nPolygonCount)
+    {
+        return;
+    }
 
-       awt::Point aPoint( 0, 0 );
-       awt::Size aSize( 0, 0 );
-       sal_Int32 nPolygons = aSourcePolyPolygon.getLength();
-       const PointSequence *pPolygons = aSourcePolyPolygon.getConstArray();
-       while( nPolygons-- )
-       {
-               sal_Int32 nPoints = pPolygons->getLength();
-               const awt::Point *pPoints = pPolygons->getConstArray();
-               while( nPoints-- )
-               {
-                       if( aSize.Width < pPoints->X )
-                               aSize.Width = pPoints->X;
-                       if( aSize.Height < pPoints->Y )
-                               aSize.Height = pPoints->Y;
-                       pPoints++;
-               }
-               pPolygons++;
-       }
+    const basegfx::B2DRange aPolyPolygonRange(aPolyPolygon.getB2DRange());
+    bool bPixel(false);
 
-       sal_Bool bPixel = sal_False;
-       if( rPropSetInfo->hasPropertyByName( sIsPixelContour ) )
-       {
-               bPixel = *(sal_Bool *)rPropSet->getPropertyValue( 
sIsPixelContour ).getValue();
-       }
+    if( rPropSetInfo->hasPropertyByName( sIsPixelContour ) )
+    {
+        bPixel = *(sal_Bool *)rPropSet->getPropertyValue( sIsPixelContour 
).getValue();
+    }
 
-       // svg: width
-       OUStringBuffer aStringBuffer( 10 );
-       if( bPixel )
-               
GetExport().GetMM100UnitConverter().convertMeasurePx(aStringBuffer, 
aSize.Width);
-       else
-               
GetExport().GetMM100UnitConverter().convertMeasure(aStringBuffer, aSize.Width);
-       GetExport().AddAttribute( XML_NAMESPACE_SVG, XML_WIDTH,
-                                                         
aStringBuffer.makeStringAndClear() );
-
-       // svg: height
-       if( bPixel )
-               
GetExport().GetMM100UnitConverter().convertMeasurePx(aStringBuffer, 
aSize.Height);
-       else
-               
GetExport().GetMM100UnitConverter().convertMeasure(aStringBuffer, aSize.Height);
-       GetExport().AddAttribute( XML_NAMESPACE_SVG, XML_HEIGHT,
-                                                         
aStringBuffer.makeStringAndClear() );
-
-       // svg:viewbox
-       SdXMLImExViewBox aViewBox(0, 0, aSize.Width, aSize.Height);
-       GetExport().AddAttribute(XML_NAMESPACE_SVG, XML_VIEWBOX,
-                               aViewBox.GetExportString());
-
-       sal_Int32 nOuterCnt( aSourcePolyPolygon.getLength() );
-
-       enum XMLTokenEnum eElem = XML_TOKEN_INVALID;
-       if( 1L == nOuterCnt )
-       {
-               // simple polygon shape, can be written as svg:points sequence
-               /*const*/ PointSequence* pSequence =
-                                                       
(PointSequence*)aSourcePolyPolygon.getConstArray();
-
-               SdXMLImExPointsElement aPoints( pSequence, aViewBox, aPoint, 
aSize );
-
-               // write point array
-               GetExport().AddAttribute( XML_NAMESPACE_DRAW, XML_POINTS,
-                                                                         
aPoints.GetExportString());
-               eElem = XML_CONTOUR_POLYGON;
-       }
-       else
-       {
-               // polypolygon, needs to be written as a svg:path sequence
-               /*const*/ PointSequence* pOuterSequence =
-                                               
(PointSequence*)aSourcePolyPolygon.getConstArray();
-               if(pOuterSequence)
-               {
-                       // prepare svx:d element export
-                       SdXMLImExSvgDElement aSvgDElement( aViewBox );
+    // svg: width
+    OUStringBuffer aStringBuffer( 10 );
 
-                       for(sal_Int32 a(0L); a < nOuterCnt; a++)
-                       {
-                               /*const*/ PointSequence* pSequence = 
pOuterSequence++;
-                               if(pSequence)
-                               {
-                                       aSvgDElement.AddPolygon(pSequence, 0L, 
aPoint,
-                                               aSize, sal_True );
-                               }
-                       }
+    if(bPixel)
+    {
+        GetExport().GetMM100UnitConverter().convertMeasurePx(aStringBuffer, 
basegfx::fround(aPolyPolygonRange.getWidth()));
+    }
+    else
+    {
+        GetExport().GetMM100UnitConverter().convertMeasure(aStringBuffer, 
basegfx::fround(aPolyPolygonRange.getWidth()));
+    }
 
-                       // write point array
-                       GetExport().AddAttribute( XML_NAMESPACE_SVG, XML_D,
-                                                                         
aSvgDElement.GetExportString());
-                       eElem = XML_CONTOUR_PATH;
-               }
-       }
+    GetExport().AddAttribute(XML_NAMESPACE_SVG, XML_WIDTH, 
aStringBuffer.makeStringAndClear());
 
-       if( rPropSetInfo->hasPropertyByName( sIsAutomaticContour ) )
-       {
+    // svg: height
+    if(bPixel)
+    {
+        GetExport().GetMM100UnitConverter().convertMeasurePx(aStringBuffer, 
basegfx::fround(aPolyPolygonRange.getHeight()));
+    }
+    else
+    {
+        GetExport().GetMM100UnitConverter().convertMeasure(aStringBuffer, 
basegfx::fround(aPolyPolygonRange.getHeight()));
+    }
+
+    GetExport().AddAttribute(XML_NAMESPACE_SVG, XML_HEIGHT, 
aStringBuffer.makeStringAndClear());
+
+    // svg:viewbox
+    SdXMLImExViewBox aViewBox(0.0, 0.0, aPolyPolygonRange.getWidth(), 
aPolyPolygonRange.getHeight());
+    GetExport().AddAttribute(XML_NAMESPACE_SVG, XML_VIEWBOX, 
aViewBox.GetExportString());
+    enum XMLTokenEnum eElem = XML_TOKEN_INVALID;
+
+    if(1 == nPolygonCount )
+    {
+        // simple polygon shape, can be written as svg:points sequence
+        const ::rtl::OUString aPointString(
+            basegfx::tools::exportToSvgPoints(
+                aPolyPolygon.getB2DPolygon(0)));
+
+        // write point array
+        GetExport().AddAttribute(XML_NAMESPACE_DRAW, XML_POINTS, aPointString);
+        eElem = XML_CONTOUR_POLYGON;
+    }
+    else
+    {
+        // polypolygon, needs to be written as a svg:path sequence
+        const ::rtl::OUString aPolygonString(
+            basegfx::tools::exportToSvgD(
+                aPolyPolygon,
+                true,           // bUseRelativeCoordinates
+                false,          // bDetectQuadraticBeziers: not used in old, 
but maybe activated now
+                true));         // bHandleRelativeNextPointCompatible
+
+        // write point array
+        GetExport().AddAttribute( XML_NAMESPACE_SVG, XML_D, aPolygonString);
+        eElem = XML_CONTOUR_PATH;
+    }
+
+    if( rPropSetInfo->hasPropertyByName( sIsAutomaticContour ) )
+    {
         sal_Bool bTmp = *(sal_Bool *)rPropSet->getPropertyValue(
                                             sIsAutomaticContour ).getValue();
         GetExport().AddAttribute( XML_NAMESPACE_DRAW,
                       XML_RECREATE_ON_EDIT, bTmp ? XML_TRUE : XML_FALSE );
-       }
+    }
 
-       // write object now
-       SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_DRAW, eElem,
-                                                         sal_True, sal_True );
+    // write object now
+    SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_DRAW, eElem,
+                              sal_True, sal_True );
 }
 
 void XMLTextParagraphExport::_exportTextGraphic(


Reply via email to