summaryrefslogtreecommitdiff
path: root/basegfx/source/polygon
diff options
context:
space:
mode:
Diffstat (limited to 'basegfx/source/polygon')
-rw-r--r--basegfx/source/polygon/b2dpolygon.cxx106
-rw-r--r--basegfx/source/polygon/b2dpolygontools.cxx3
-rw-r--r--basegfx/source/polygon/b2dpolypolygon.cxx52
-rw-r--r--basegfx/source/polygon/b2dsvgpolypolygon.cxx51
-rw-r--r--basegfx/source/polygon/b3dgeometry.cxx59
5 files changed, 164 insertions, 107 deletions
diff --git a/basegfx/source/polygon/b2dpolygon.cxx b/basegfx/source/polygon/b2dpolygon.cxx
index 48d00ddcec7d..0aeaec5c1b95 100644
--- a/basegfx/source/polygon/b2dpolygon.cxx
+++ b/basegfx/source/polygon/b2dpolygon.cxx
@@ -43,38 +43,24 @@
//////////////////////////////////////////////////////////////////////////////
-class CoordinateData2D
+struct CoordinateData2D : public basegfx::B2DPoint
{
- basegfx::B2DPoint maPoint;
-
public:
- CoordinateData2D()
- : maPoint()
- {}
+ CoordinateData2D() {}
explicit CoordinateData2D(const basegfx::B2DPoint& rData)
- : maPoint(rData)
+ : B2DPoint(rData)
{}
- const basegfx::B2DPoint& getCoordinate() const
+ CoordinateData2D& operator=(const basegfx::B2DPoint& rData)
{
- return maPoint;
- }
-
- void setCoordinate(const basegfx::B2DPoint& rValue)
- {
- if(rValue != maPoint)
- maPoint = rValue;
- }
-
- bool operator==(const CoordinateData2D& rData ) const
- {
- return (maPoint == rData.getCoordinate());
+ B2DPoint::operator=(rData);
+ return *this;
}
void transform(const basegfx::B2DHomMatrix& rMatrix)
{
- maPoint *= rMatrix;
+ *this *= rMatrix;
}
};
@@ -114,12 +100,12 @@ public:
const basegfx::B2DPoint& getCoordinate(sal_uInt32 nIndex) const
{
- return maVector[nIndex].getCoordinate();
+ return maVector[nIndex];
}
void setCoordinate(sal_uInt32 nIndex, const basegfx::B2DPoint& rValue)
{
- maVector[nIndex].setCoordinate(rValue);
+ maVector[nIndex] = rValue;
}
void reserve(sal_uInt32 nCount)
@@ -230,6 +216,38 @@ public:
aStart->transform(rMatrix);
}
}
+
+ const basegfx::B2DPoint* begin() const
+ {
+ if(maVector.empty())
+ return 0;
+ else
+ return &maVector.front();
+ }
+
+ const basegfx::B2DPoint* end() const
+ {
+ if(maVector.empty())
+ return 0;
+ else
+ return (&maVector.back())+1;
+ }
+
+ basegfx::B2DPoint* begin()
+ {
+ if(maVector.empty())
+ return 0;
+ else
+ return &maVector.front();
+ }
+
+ basegfx::B2DPoint* end()
+ {
+ if(maVector.empty())
+ return 0;
+ else
+ return (&maVector.back())+1;
+ }
};
//////////////////////////////////////////////////////////////////////////////
@@ -1151,6 +1169,28 @@ public:
maPoints.transform(rMatrix);
}
}
+
+ const basegfx::B2DPoint* begin() const
+ {
+ return maPoints.begin();
+ }
+
+ const basegfx::B2DPoint* end() const
+ {
+ return maPoints.end();
+ }
+
+ basegfx::B2DPoint* begin()
+ {
+ mpBufferedData.reset();
+ return maPoints.begin();
+ }
+
+ basegfx::B2DPoint* end()
+ {
+ mpBufferedData.reset();
+ return maPoints.end();
+ }
};
//////////////////////////////////////////////////////////////////////////////
@@ -1588,6 +1628,26 @@ namespace basegfx
mpPolygon->transform(rMatrix);
}
}
+
+ const B2DPoint* B2DPolygon::begin() const
+ {
+ return mpPolygon->begin();
+ }
+
+ const B2DPoint* B2DPolygon::end() const
+ {
+ return mpPolygon->end();
+ }
+
+ B2DPoint* B2DPolygon::begin()
+ {
+ return mpPolygon->begin();
+ }
+
+ B2DPoint* B2DPolygon::end()
+ {
+ return mpPolygon->end();
+ }
} // end of namespace basegfx
//////////////////////////////////////////////////////////////////////////////
diff --git a/basegfx/source/polygon/b2dpolygontools.cxx b/basegfx/source/polygon/b2dpolygontools.cxx
index d62462b8c097..2999b20a2a6c 100644
--- a/basegfx/source/polygon/b2dpolygontools.cxx
+++ b/basegfx/source/polygon/b2dpolygontools.cxx
@@ -2330,7 +2330,8 @@ namespace basegfx
// polygon must be closed to resemble a rect, and contain
// at least four points.
if( !rPoly.isClosed() ||
- rPoly.count() < 4 )
+ rPoly.count() < 4 ||
+ rPoly.areControlPointsUsed() )
{
return false;
}
diff --git a/basegfx/source/polygon/b2dpolypolygon.cxx b/basegfx/source/polygon/b2dpolypolygon.cxx
index 6467e7120c03..2acc1a31a369 100644
--- a/basegfx/source/polygon/b2dpolypolygon.cxx
+++ b/basegfx/source/polygon/b2dpolypolygon.cxx
@@ -166,6 +166,38 @@ public:
maPolygons.end(),
std::mem_fun_ref( &basegfx::B2DPolygon::makeUnique ));
}
+
+ const basegfx::B2DPolygon* begin() const
+ {
+ if(maPolygons.empty())
+ return 0;
+ else
+ return &maPolygons.front();
+ }
+
+ const basegfx::B2DPolygon* end() const
+ {
+ if(maPolygons.empty())
+ return 0;
+ else
+ return (&maPolygons.back())+1;
+ }
+
+ basegfx::B2DPolygon* begin()
+ {
+ if(maPolygons.empty())
+ return 0;
+ else
+ return &maPolygons.front();
+ }
+
+ basegfx::B2DPolygon* end()
+ {
+ if(maPolygons.empty())
+ return 0;
+ else
+ return &(maPolygons.back())+1;
+ }
};
//////////////////////////////////////////////////////////////////////////////
@@ -378,6 +410,26 @@ namespace basegfx
mpPolyPolygon->transform(rMatrix);
}
}
+
+ const B2DPolygon* B2DPolyPolygon::begin() const
+ {
+ return mpPolyPolygon->begin();
+ }
+
+ const B2DPolygon* B2DPolyPolygon::end() const
+ {
+ return mpPolyPolygon->end();
+ }
+
+ B2DPolygon* B2DPolyPolygon::begin()
+ {
+ return mpPolyPolygon->begin();
+ }
+
+ B2DPolygon* B2DPolyPolygon::end()
+ {
+ return mpPolyPolygon->end();
+ }
} // end of namespace basegfx
// eof
diff --git a/basegfx/source/polygon/b2dsvgpolypolygon.cxx b/basegfx/source/polygon/b2dsvgpolypolygon.cxx
index e38ec3809fb1..e6633d9188a6 100644
--- a/basegfx/source/polygon/b2dsvgpolypolygon.cxx
+++ b/basegfx/source/polygon/b2dsvgpolypolygon.cxx
@@ -68,10 +68,8 @@ namespace basegfx
}
}
- inline bool lcl_isOnNumberChar(const ::rtl::OUString& rStr, const sal_Int32 nPos, bool bSignAllowed = true)
+ inline bool lcl_isOnNumberChar(const sal_Unicode aChar, bool bSignAllowed = true)
{
- const sal_Unicode aChar(rStr[nPos]);
-
const bool bPredicate( (sal_Unicode('0') <= aChar && sal_Unicode('9') >= aChar)
|| (bSignAllowed && sal_Unicode('+') == aChar)
|| (bSignAllowed && sal_Unicode('-') == aChar) );
@@ -79,6 +77,12 @@ namespace basegfx
return bPredicate;
}
+ inline bool lcl_isOnNumberChar(const ::rtl::OUString& rStr, const sal_Int32 nPos, bool bSignAllowed = true)
+ {
+ return lcl_isOnNumberChar(rStr[nPos],
+ bSignAllowed);
+ }
+
bool lcl_getDoubleChar(double& o_fRetval,
sal_Int32& io_rPos,
const ::rtl::OUString& rStr,
@@ -234,16 +238,16 @@ namespace basegfx
lcl_skipSpacesAndCommas(io_rPos, rStr, nLen);
}
- void lcl_putNumberChar( ::rtl::OUString& rStr,
- double fValue )
+ void lcl_putNumberChar( ::rtl::OUStringBuffer& rStr,
+ double fValue )
{
- rStr += ::rtl::OUString::valueOf( fValue );
+ rStr.append( fValue );
}
- void lcl_putNumberCharWithSpace( ::rtl::OUString& rStr,
- double fValue,
- double fOldValue,
- bool bUseRelativeCoordinates )
+ void lcl_putNumberCharWithSpace( ::rtl::OUStringBuffer& rStr,
+ double fValue,
+ double fOldValue,
+ bool bUseRelativeCoordinates )
{
if( bUseRelativeCoordinates )
fValue -= fOldValue;
@@ -251,11 +255,10 @@ namespace basegfx
const sal_Int32 aLen( rStr.getLength() );
if(aLen)
{
- if( lcl_isOnNumberChar(rStr, aLen - 1, false) &&
+ if( lcl_isOnNumberChar(rStr.charAt(aLen - 1), false) &&
fValue >= 0.0 )
{
- rStr += ::rtl::OUString::valueOf(
- sal_Unicode(' ') );
+ rStr.append( sal_Unicode(' ') );
}
}
@@ -879,7 +882,7 @@ namespace basegfx
bool bDetectQuadraticBeziers)
{
const sal_uInt32 nCount(rPolyPolygon.count());
- ::rtl::OUString aResult;
+ ::rtl::OUStringBuffer aResult;
B2DPoint aCurrentSVGPosition(0.0, 0.0); // SVG assumes (0,0) as the initial current point
for(sal_uInt32 i(0); i < nCount; i++)
@@ -896,7 +899,7 @@ namespace basegfx
// handle polygon start point
B2DPoint aEdgeStart(aPolygon.getB2DPoint(0));
- aResult += ::rtl::OUString::valueOf(lcl_getCommand('M', 'm', bUseRelativeCoordinates));
+ aResult.append(lcl_getCommand('M', 'm', bUseRelativeCoordinates));
lcl_putNumberCharWithSpace(aResult, aEdgeStart.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
lcl_putNumberCharWithSpace(aResult, aEdgeStart.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
aLastSVGCommand = lcl_getCommand('L', 'l', bUseRelativeCoordinates);
@@ -957,7 +960,7 @@ namespace basegfx
if(aLastSVGCommand != aCommand)
{
- aResult += ::rtl::OUString::valueOf(aCommand);
+ aResult.append(aCommand);
aLastSVGCommand = aCommand;
}
@@ -972,7 +975,7 @@ namespace basegfx
if(aLastSVGCommand != aCommand)
{
- aResult += ::rtl::OUString::valueOf(aCommand);
+ aResult.append(aCommand);
aLastSVGCommand = aCommand;
}
@@ -993,7 +996,7 @@ namespace basegfx
if(aLastSVGCommand != aCommand)
{
- aResult += ::rtl::OUString::valueOf(aCommand);
+ aResult.append(aCommand);
aLastSVGCommand = aCommand;
}
@@ -1010,7 +1013,7 @@ namespace basegfx
if(aLastSVGCommand != aCommand)
{
- aResult += ::rtl::OUString::valueOf(aCommand);
+ aResult.append(aCommand);
aLastSVGCommand = aCommand;
}
@@ -1049,7 +1052,7 @@ namespace basegfx
if(aLastSVGCommand != aCommand)
{
- aResult += ::rtl::OUString::valueOf(aCommand);
+ aResult.append(aCommand);
aLastSVGCommand = aCommand;
}
@@ -1063,7 +1066,7 @@ namespace basegfx
if(aLastSVGCommand != aCommand)
{
- aResult += ::rtl::OUString::valueOf(aCommand);
+ aResult.append(aCommand);
aLastSVGCommand = aCommand;
}
@@ -1077,7 +1080,7 @@ namespace basegfx
if(aLastSVGCommand != aCommand)
{
- aResult += ::rtl::OUString::valueOf(aCommand);
+ aResult.append(aCommand);
aLastSVGCommand = aCommand;
}
@@ -1095,12 +1098,12 @@ namespace basegfx
// close path if closed poly (Z and z are equivalent here, but looks nicer when case is matched)
if(aPolygon.isClosed())
{
- aResult += ::rtl::OUString::valueOf(lcl_getCommand('Z', 'z', bUseRelativeCoordinates));
+ aResult.append(lcl_getCommand('Z', 'z', bUseRelativeCoordinates));
}
}
}
- return aResult;
+ return aResult.makeStringAndClear();
}
}
}
diff --git a/basegfx/source/polygon/b3dgeometry.cxx b/basegfx/source/polygon/b3dgeometry.cxx
deleted file mode 100644
index 38b93b931f53..000000000000
--- a/basegfx/source/polygon/b3dgeometry.cxx
+++ /dev/null
@@ -1,59 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: b3dgeometry.cxx,v $
- *
- * $Revision: 1.2 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include <osl/diagnose.h>
-#include <basegfx/polygon/b3dgeometry.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace basegfx
-{
- B3DGeometry::B3DGeometry()
- : mbUnifiedVectorValid(false)
- {
- }
-
- B3DGeometry::~B3DGeometry()
- {
- }
-
- bool B3DGeometry::operator==(const B3DGeometry& rGeometry) const
- {
- return (maPolyPolygon == maPolyPolygon
- && maPolygonTo3D == maPolygonTo3D
- && maPolyNormal == maPolyNormal
- && maPolyTexture == maPolyTexture
- }
-
-} // end of namespace basegfx
-
-//////////////////////////////////////////////////////////////////////////////
-// eof