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/01/13 18:29:16 UTC
svn commit: r1231198 - in /incubator/ooo/trunk/main:
drawinglayer/inc/drawinglayer/processor2d/contourextractor2d.hxx
drawinglayer/source/processor2d/contourextractor2d.cxx
svgio/source/svgreader/svgclippathnode.cxx svx/source/svdraw/svdobj.cxx
Author: alg
Date: Fri Jan 13 17:29:15 2012
New Revision: 1231198
URL: http://svn.apache.org/viewvc?rev=1231198&view=rev
Log:
#118730# Changed SvgClipPathNode to use MaskPrimitive2D for primitive representation instead of TransparencePrimitive2D
Modified:
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/processor2d/contourextractor2d.hxx
incubator/ooo/trunk/main/drawinglayer/source/processor2d/contourextractor2d.cxx
incubator/ooo/trunk/main/svgio/source/svgreader/svgclippathnode.cxx
incubator/ooo/trunk/main/svx/source/svdraw/svdobj.cxx
Modified: incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/processor2d/contourextractor2d.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/processor2d/contourextractor2d.hxx?rev=1231198&r1=1231197&r2=1231198&view=diff
==============================================================================
--- incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/processor2d/contourextractor2d.hxx (original)
+++ incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/processor2d/contourextractor2d.hxx Fri Jan 13 17:29:15 2012
@@ -46,11 +46,16 @@ namespace drawinglayer
/// the extracted contour
basegfx::B2DPolyPolygonVector maExtractedContour;
+ /// bitfield
+ bool mbExtractFillOnly : 1;
+
/// tooling methods
void processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate);
public:
- ContourExtractor2D(const geometry::ViewInformation2D& rViewInformation);
+ ContourExtractor2D(
+ const geometry::ViewInformation2D& rViewInformation,
+ bool bExtractFillOnly);
virtual ~ContourExtractor2D();
const basegfx::B2DPolyPolygonVector& getExtractedContour() const { return maExtractedContour; }
Modified: incubator/ooo/trunk/main/drawinglayer/source/processor2d/contourextractor2d.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/drawinglayer/source/processor2d/contourextractor2d.cxx?rev=1231198&r1=1231197&r2=1231198&view=diff
==============================================================================
--- incubator/ooo/trunk/main/drawinglayer/source/processor2d/contourextractor2d.cxx (original)
+++ incubator/ooo/trunk/main/drawinglayer/source/processor2d/contourextractor2d.cxx Fri Jan 13 17:29:15 2012
@@ -46,9 +46,12 @@ namespace drawinglayer
{
namespace processor2d
{
- ContourExtractor2D::ContourExtractor2D(const geometry::ViewInformation2D& rViewInformation)
+ ContourExtractor2D::ContourExtractor2D(
+ const geometry::ViewInformation2D& rViewInformation,
+ bool bExtractFillOnly)
: BaseProcessor2D(rViewInformation),
- maExtractedContour()
+ maExtractedContour(),
+ mbExtractFillOnly(bExtractFillOnly)
{
}
@@ -62,19 +65,22 @@ namespace drawinglayer
{
case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D :
{
- // extract hairline in world coordinates
- const primitive2d::PolygonHairlinePrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate));
- basegfx::B2DPolygon aLocalPolygon(rPolygonCandidate.getB2DPolygon());
- aLocalPolygon.transform(getViewInformation2D().getObjectTransformation());
-
- if(aLocalPolygon.isClosed())
+ if(!mbExtractFillOnly)
{
- // line polygons need to be represented as open polygons to differentiate them
- // from filled polygons
- basegfx::tools::openWithGeometryChange(aLocalPolygon);
- }
+ // extract hairline in world coordinates
+ const primitive2d::PolygonHairlinePrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate));
+ basegfx::B2DPolygon aLocalPolygon(rPolygonCandidate.getB2DPolygon());
+ aLocalPolygon.transform(getViewInformation2D().getObjectTransformation());
+
+ if(aLocalPolygon.isClosed())
+ {
+ // line polygons need to be represented as open polygons to differentiate them
+ // from filled polygons
+ basegfx::tools::openWithGeometryChange(aLocalPolygon);
+ }
- maExtractedContour.push_back(basegfx::B2DPolyPolygon(aLocalPolygon));
+ maExtractedContour.push_back(basegfx::B2DPolyPolygon(aLocalPolygon));
+ }
break;
}
case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D :
Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgclippathnode.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgclippathnode.cxx?rev=1231198&r1=1231197&r2=1231198&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgclippathnode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgclippathnode.cxx Fri Jan 13 17:29:15 2012
@@ -24,9 +24,11 @@
#include <svgio/svgreader/svgclippathnode.hxx>
#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx>
+#include <drawinglayer/primitive2d/maskprimitive2d.hxx>
#include <basegfx/matrix/b2dhommatrixtools.hxx>
#include <drawinglayer/geometry/viewinformation2d.hxx>
+#include <drawinglayer/processor2d/contourextractor2d.hxx>
+#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
//////////////////////////////////////////////////////////////////////////////
@@ -133,39 +135,58 @@ namespace svgio
{
if(rContent.hasElements())
{
+ const drawinglayer::geometry::ViewInformation2D aViewInformation2D;
drawinglayer::primitive2d::Primitive2DSequence aClipTarget;
+ basegfx::B2DPolyPolygon aClipPolyPolygon;
// get clipPath definition as primitives
decomposeSvgNode(aClipTarget, true);
if(aClipTarget.hasElements())
{
+ // extract filled plygons as base for a mask PolyPolygon
+ drawinglayer::processor2d::ContourExtractor2D aExtractor(aViewInformation2D, true);
+
+ aExtractor.process(aClipTarget);
+
+ const basegfx::B2DPolyPolygonVector& rResult(aExtractor.getExtractedContour());
+ const sal_uInt32 nSize(rResult.size());
+
+ if(nSize > 1)
+ {
+ // merge to single clipPolyPolygon
+ aClipPolyPolygon = basegfx::tools::mergeToSinglePolyPolygon(rResult);
+ }
+ else
+ {
+ aClipPolyPolygon = rResult[0];
+ }
+ }
+
+ if(aClipPolyPolygon.count())
+ {
if(objectBoundingBox == getClipPathUnits())
{
- // clip is object-relative, embed in content transformation
+ // clip is object-relative, transform using content transformation
const basegfx::B2DRange aContentRange(
drawinglayer::primitive2d::getB2DRangeFromPrimitive2DSequence(
rContent,
- drawinglayer::geometry::ViewInformation2D()));
-
- const drawinglayer::primitive2d::Primitive2DReference xTransform(
- new drawinglayer::primitive2d::TransformPrimitive2D(
- basegfx::tools::createScaleTranslateB2DHomMatrix(
- aContentRange.getRange(),
- aContentRange.getMinimum()),
- aClipTarget));
+ aViewInformation2D));
- aClipTarget = drawinglayer::primitive2d::Primitive2DSequence(&xTransform, 1);
+ aClipPolyPolygon.transform(
+ basegfx::tools::createScaleTranslateB2DHomMatrix(
+ aContentRange.getRange(),
+ aContentRange.getMinimum()));
}
- // redefine target. Use TransparencePrimitive2D with created clip
+ // redefine target. Use MaskPrimitive2D with created clip
// geometry. Using the automatically set mbIsClipPathContent at
// SvgStyleAttributes the clip definition is without fill, stroke,
- // and strokeWidth and forced to black, thus being 100% opaque
+ // and strokeWidth and forced to black
const drawinglayer::primitive2d::Primitive2DReference xEmbedTransparence(
- new drawinglayer::primitive2d::TransparencePrimitive2D(
- rContent,
- aClipTarget));
+ new drawinglayer::primitive2d::MaskPrimitive2D(
+ aClipPolyPolygon,
+ rContent));
rContent = drawinglayer::primitive2d::Primitive2DSequence(&xEmbedTransparence, 1);
}
Modified: incubator/ooo/trunk/main/svx/source/svdraw/svdobj.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/svdraw/svdobj.cxx?rev=1231198&r1=1231197&r2=1231198&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/source/svdraw/svdobj.cxx (original)
+++ incubator/ooo/trunk/main/svx/source/svdraw/svdobj.cxx Fri Jan 13 17:29:15 2012
@@ -1200,8 +1200,8 @@ basegfx::B2DPolyPolygon SdrObject::TakeC
// use neutral ViewInformation
const drawinglayer::geometry::ViewInformation2D aViewInformation2D;
- // create extractor, process and get result
- drawinglayer::processor2d::ContourExtractor2D aExtractor(aViewInformation2D);
+ // create extractor, process and get result (with hairlines as opened polygons)
+ drawinglayer::processor2d::ContourExtractor2D aExtractor(aViewInformation2D, false);
aExtractor.process(xSequence);
const basegfx::B2DPolyPolygonVector& rResult(aExtractor.getExtractedContour());
const sal_uInt32 nSize(rResult.size());