summaryrefslogtreecommitdiff
path: root/drawinglayer/source/primitive2d
diff options
context:
space:
mode:
Diffstat (limited to 'drawinglayer/source/primitive2d')
-rw-r--r--drawinglayer/source/primitive2d/animatedprimitive2d.cxx227
-rw-r--r--drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx119
-rw-r--r--drawinglayer/source/primitive2d/baseprimitive2d.cxx281
-rw-r--r--drawinglayer/source/primitive2d/bitmapprimitive2d.cxx84
-rw-r--r--drawinglayer/source/primitive2d/borderlineprimitive2d.cxx342
-rw-r--r--drawinglayer/source/primitive2d/chartprimitive2d.cxx85
-rw-r--r--drawinglayer/source/primitive2d/clippedborderlineprimitive2d.cxx81
-rw-r--r--drawinglayer/source/primitive2d/controlprimitive2d.cxx386
-rw-r--r--drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx119
-rw-r--r--drawinglayer/source/primitive2d/discreteshadowprimitive2d.cxx339
-rw-r--r--drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx171
-rw-r--r--drawinglayer/source/primitive2d/epsprimitive2d.cxx106
-rw-r--r--drawinglayer/source/primitive2d/fillbitmapprimitive2d.cxx145
-rw-r--r--drawinglayer/source/primitive2d/fillgradientprimitive2d.cxx301
-rw-r--r--drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx164
-rw-r--r--drawinglayer/source/primitive2d/graphicprimitive2d.cxx502
-rw-r--r--drawinglayer/source/primitive2d/gridprimitive2d.cxx323
-rw-r--r--drawinglayer/source/primitive2d/groupprimitive2d.cxx82
-rw-r--r--drawinglayer/source/primitive2d/helplineprimitive2d.cxx225
-rw-r--r--drawinglayer/source/primitive2d/hiddengeometryprimitive2d.cxx72
-rw-r--r--drawinglayer/source/primitive2d/invertprimitive2d.cxx60
-rw-r--r--drawinglayer/source/primitive2d/markerarrayprimitive2d.cxx160
-rw-r--r--drawinglayer/source/primitive2d/maskprimitive2d.cxx79
-rw-r--r--drawinglayer/source/primitive2d/mediaprimitive2d.cxx166
-rw-r--r--drawinglayer/source/primitive2d/metafileprimitive2d.cxx3287
-rw-r--r--drawinglayer/source/primitive2d/modifiedcolorprimitive2d.cxx74
-rw-r--r--drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx186
-rw-r--r--drawinglayer/source/primitive2d/pointarrayprimitive2d.cxx96
-rw-r--r--drawinglayer/source/primitive2d/polygonprimitive2d.cxx642
-rw-r--r--drawinglayer/source/primitive2d/polypolygonprimitive2d.cxx575
-rw-r--r--drawinglayer/source/primitive2d/primitivetools2d.cxx173
-rw-r--r--drawinglayer/source/primitive2d/rendergraphicprimitive2d.cxx92
-rw-r--r--drawinglayer/source/primitive2d/sceneprimitive2d.cxx483
-rw-r--r--drawinglayer/source/primitive2d/sdrdecompositiontools2d.cxx127
-rw-r--r--drawinglayer/source/primitive2d/shadowprimitive2d.cxx109
-rw-r--r--drawinglayer/source/primitive2d/structuretagprimitive2d.cxx62
-rw-r--r--drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx610
-rw-r--r--drawinglayer/source/primitive2d/texteffectprimitive2d.cxx242
-rw-r--r--drawinglayer/source/primitive2d/textenumsprimitive2d.cxx124
-rw-r--r--drawinglayer/source/primitive2d/texthierarchyprimitive2d.cxx161
-rw-r--r--drawinglayer/source/primitive2d/textlayoutdevice.cxx503
-rw-r--r--drawinglayer/source/primitive2d/textlineprimitive2d.cxx312
-rw-r--r--drawinglayer/source/primitive2d/textprimitive2d.cxx348
-rw-r--r--drawinglayer/source/primitive2d/textstrikeoutprimitive2d.cxx289
-rw-r--r--drawinglayer/source/primitive2d/transformprimitive2d.cxx82
-rw-r--r--drawinglayer/source/primitive2d/transparenceprimitive2d.cxx75
-rw-r--r--drawinglayer/source/primitive2d/unifiedtransparenceprimitive2d.cxx133
-rw-r--r--drawinglayer/source/primitive2d/wallpaperprimitive2d.cxx272
-rw-r--r--drawinglayer/source/primitive2d/wrongspellprimitive2d.cxx125
49 files changed, 0 insertions, 13801 deletions
diff --git a/drawinglayer/source/primitive2d/animatedprimitive2d.cxx b/drawinglayer/source/primitive2d/animatedprimitive2d.cxx
deleted file mode 100644
index 75544c0079..0000000000
--- a/drawinglayer/source/primitive2d/animatedprimitive2d.cxx
+++ /dev/null
@@ -1,227 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/animatedprimitive2d.hxx>
-#include <drawinglayer/animation/animationtiming.hxx>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- AnimatedSwitchPrimitive2D::AnimatedSwitchPrimitive2D(
- const animation::AnimationEntry& rAnimationEntry,
- const Primitive2DSequence& rChildren,
- bool bIsTextAnimation)
- : GroupPrimitive2D(rChildren),
- mpAnimationEntry(0),
- mbIsTextAnimation(bIsTextAnimation)
- {
- // clone given animation description
- mpAnimationEntry = rAnimationEntry.clone();
- }
-
- AnimatedSwitchPrimitive2D::~AnimatedSwitchPrimitive2D()
- {
- // delete cloned animation description
- delete mpAnimationEntry;
- }
-
- bool AnimatedSwitchPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(GroupPrimitive2D::operator==(rPrimitive))
- {
- const AnimatedSwitchPrimitive2D& rCompare = static_cast< const AnimatedSwitchPrimitive2D& >(rPrimitive);
-
- return (getAnimationEntry() == rCompare.getAnimationEntry());
- }
-
- return false;
- }
-
- Primitive2DSequence AnimatedSwitchPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- if(getChildren().hasElements())
- {
- const double fState(getAnimationEntry().getStateAtTime(rViewInformation.getViewTime()));
- const sal_uInt32 nLen(getChildren().getLength());
- sal_uInt32 nIndex(basegfx::fround(fState * (double)nLen));
-
- if(nIndex >= nLen)
- {
- nIndex = nLen - 1L;
- }
-
- const Primitive2DReference xRef(getChildren()[nIndex], uno::UNO_QUERY_THROW);
- return Primitive2DSequence(&xRef, 1L);
- }
-
- return Primitive2DSequence();
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(AnimatedSwitchPrimitive2D, PRIMITIVE2D_ID_ANIMATEDSWITCHPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- AnimatedBlinkPrimitive2D::AnimatedBlinkPrimitive2D(
- const animation::AnimationEntry& rAnimationEntry,
- const Primitive2DSequence& rChildren,
- bool bIsTextAnimation)
- : AnimatedSwitchPrimitive2D(rAnimationEntry, rChildren, bIsTextAnimation)
- {
- }
-
- Primitive2DSequence AnimatedBlinkPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- if(getChildren().hasElements())
- {
- const double fState(getAnimationEntry().getStateAtTime(rViewInformation.getViewTime()));
-
- if(fState < 0.5)
- {
- return getChildren();
- }
- }
-
- return Primitive2DSequence();
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(AnimatedBlinkPrimitive2D, PRIMITIVE2D_ID_ANIMATEDBLINKPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- AnimatedInterpolatePrimitive2D::AnimatedInterpolatePrimitive2D(
- const std::vector< basegfx::B2DHomMatrix >& rmMatrixStack,
- const animation::AnimationEntry& rAnimationEntry,
- const Primitive2DSequence& rChildren,
- bool bIsTextAnimation)
- : AnimatedSwitchPrimitive2D(rAnimationEntry, rChildren, bIsTextAnimation),
- maMatrixStack()
- {
- // copy matrices to locally pre-decomposed matrix stack
- const sal_uInt32 nCount(rmMatrixStack.size());
- maMatrixStack.reserve(nCount);
-
- for(sal_uInt32 a(0L); a < nCount; a++)
- {
- maMatrixStack.push_back(basegfx::tools::B2DHomMatrixBufferedDecompose(rmMatrixStack[a]));
- }
- }
-
- Primitive2DSequence AnimatedInterpolatePrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- const sal_uInt32 nSize(maMatrixStack.size());
-
- if(nSize)
- {
- double fState(getAnimationEntry().getStateAtTime(rViewInformation.getViewTime()));
-
- if(fState < 0.0)
- {
- fState = 0.0;
- }
- else if(fState > 1.0)
- {
- fState = 1.0;
- }
-
- const double fIndex(fState * (double)(nSize - 1L));
- const sal_uInt32 nIndA(sal_uInt32(floor(fIndex)));
- const double fOffset(fIndex - (double)nIndA);
- basegfx::B2DHomMatrix aTargetTransform;
- std::vector< basegfx::tools::B2DHomMatrixBufferedDecompose >::const_iterator aMatA(maMatrixStack.begin() + nIndA);
-
- if(basegfx::fTools::equalZero(fOffset))
- {
- // use matrix from nIndA directly
- aTargetTransform = aMatA->getB2DHomMatrix();
- }
- else
- {
- // interpolate. Get involved buffered decomposed matrices
- const sal_uInt32 nIndB((nIndA + 1L) % nSize);
- std::vector< basegfx::tools::B2DHomMatrixBufferedDecompose >::const_iterator aMatB(maMatrixStack.begin() + nIndB);
-
- // interpolate for fOffset [0.0 .. 1.0[
- const basegfx::B2DVector aScale(basegfx::interpolate(aMatA->getScale(), aMatB->getScale(), fOffset));
- const basegfx::B2DVector aTranslate(basegfx::interpolate(aMatA->getTranslate(), aMatB->getTranslate(), fOffset));
- const double fRotate(((aMatB->getRotate() - aMatA->getRotate()) * fOffset) + aMatA->getRotate());
- const double fShearX(((aMatB->getShearX() - aMatA->getShearX()) * fOffset) + aMatA->getShearX());
-
- // build matrix for state
- aTargetTransform = basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix(
- aScale, fShearX, fRotate, aTranslate);
- }
-
- // create new transform primitive reference, return new sequence
- const Primitive2DReference xRef(new TransformPrimitive2D(aTargetTransform, getChildren()));
- return Primitive2DSequence(&xRef, 1L);
- }
- else
- {
- return getChildren();
- }
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(AnimatedInterpolatePrimitive2D, PRIMITIVE2D_ID_ANIMATEDINTERPOLATEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx b/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx
deleted file mode 100644
index fd73f52ccf..0000000000
--- a/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx
+++ /dev/null
@@ -1,119 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence BackgroundColorPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- if(!rViewInformation.getViewport().isEmpty())
- {
- const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(rViewInformation.getViewport()));
- const Primitive2DReference xRef(new PolyPolygonColorPrimitive2D(basegfx::B2DPolyPolygon(aOutline), getBColor()));
- return Primitive2DSequence(&xRef, 1L);
- }
- else
- {
- return Primitive2DSequence();
- }
- }
-
- BackgroundColorPrimitive2D::BackgroundColorPrimitive2D(
- const basegfx::BColor& rBColor)
- : BufferedDecompositionPrimitive2D(),
- maBColor(rBColor),
- maLastViewport()
- {
- }
-
- bool BackgroundColorPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const BackgroundColorPrimitive2D& rCompare = (BackgroundColorPrimitive2D&)rPrimitive;
-
- return (getBColor() == rCompare.getBColor());
- }
-
- return false;
- }
-
- basegfx::B2DRange BackgroundColorPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- // always as big as the view
- return rViewInformation.getViewport();
- }
-
- Primitive2DSequence BackgroundColorPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- if(getBuffered2DDecomposition().hasElements() && (maLastViewport != rViewInformation.getViewport()))
- {
- // conditions of last local decomposition have changed, delete
- const_cast< BackgroundColorPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- // remember ViewRange
- const_cast< BackgroundColorPrimitive2D* >(this)->maLastViewport = rViewInformation.getViewport();
- }
-
- // use parent implementation
- return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(BackgroundColorPrimitive2D, PRIMITIVE2D_ID_BACKGROUNDCOLORPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/baseprimitive2d.cxx b/drawinglayer/source/primitive2d/baseprimitive2d.cxx
deleted file mode 100644
index f655fec229..0000000000
--- a/drawinglayer/source/primitive2d/baseprimitive2d.cxx
+++ /dev/null
@@ -1,281 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- BasePrimitive2D::BasePrimitive2D()
- : BasePrimitive2DImplBase(m_aMutex)
- {
- }
-
- BasePrimitive2D::~BasePrimitive2D()
- {
- }
-
- bool BasePrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const
- {
- return (getPrimitive2DID() == rPrimitive.getPrimitive2DID());
- }
-
- basegfx::B2DRange BasePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- return getB2DRangeFromPrimitive2DSequence(get2DDecomposition(rViewInformation), rViewInformation);
- }
-
- Primitive2DSequence BasePrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- return Primitive2DSequence();
- }
-
- Primitive2DSequence SAL_CALL BasePrimitive2D::getDecomposition( const uno::Sequence< beans::PropertyValue >& rViewParameters ) throw ( uno::RuntimeException )
- {
- const geometry::ViewInformation2D aViewInformation(rViewParameters);
- return get2DDecomposition(aViewInformation);
- }
-
- com::sun::star::geometry::RealRectangle2D SAL_CALL BasePrimitive2D::getRange( const uno::Sequence< beans::PropertyValue >& rViewParameters ) throw ( uno::RuntimeException )
- {
- const geometry::ViewInformation2D aViewInformation(rViewParameters);
- return basegfx::unotools::rectangle2DFromB2DRectangle(getB2DRange(aViewInformation));
- }
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence BufferedDecompositionPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- return Primitive2DSequence();
- }
-
- BufferedDecompositionPrimitive2D::BufferedDecompositionPrimitive2D()
- : BasePrimitive2D(),
- maBuffered2DDecomposition()
- {
- }
-
- Primitive2DSequence BufferedDecompositionPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- const Primitive2DSequence aNewSequence(create2DDecomposition(rViewInformation));
- const_cast< BufferedDecompositionPrimitive2D* >(this)->setBuffered2DDecomposition(aNewSequence);
- }
-
- return getBuffered2DDecomposition();
- }
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// tooling
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- // get B2DRange from a given Primitive2DReference
- basegfx::B2DRange getB2DRangeFromPrimitive2DReference(const Primitive2DReference& rCandidate, const geometry::ViewInformation2D& aViewInformation)
- {
- basegfx::B2DRange aRetval;
-
- if(rCandidate.is())
- {
- // try to get C++ implementation base
- const BasePrimitive2D* pCandidate(dynamic_cast< BasePrimitive2D* >(rCandidate.get()));
-
- if(pCandidate)
- {
- // use it if possible
- aRetval.expand(pCandidate->getB2DRange(aViewInformation));
- }
- else
- {
- // use UNO API call instead
- const uno::Sequence< beans::PropertyValue >& rViewParameters(aViewInformation.getViewInformationSequence());
- aRetval.expand(basegfx::unotools::b2DRectangleFromRealRectangle2D(rCandidate->getRange(rViewParameters)));
- }
- }
-
- return aRetval;
- }
-
- // get B2DRange from a given Primitive2DSequence
- basegfx::B2DRange getB2DRangeFromPrimitive2DSequence(const Primitive2DSequence& rCandidate, const geometry::ViewInformation2D& aViewInformation)
- {
- basegfx::B2DRange aRetval;
-
- if(rCandidate.hasElements())
- {
- const sal_Int32 nCount(rCandidate.getLength());
-
- for(sal_Int32 a(0L); a < nCount; a++)
- {
- aRetval.expand(getB2DRangeFromPrimitive2DReference(rCandidate[a], aViewInformation));
- }
- }
-
- return aRetval;
- }
-
- bool arePrimitive2DReferencesEqual(const Primitive2DReference& rxA, const Primitive2DReference& rxB)
- {
- const sal_Bool bAIs(rxA.is());
-
- if(bAIs != rxB.is())
- {
- return false;
- }
-
- if(!bAIs)
- {
- return true;
- }
-
- const BasePrimitive2D* pA(dynamic_cast< const BasePrimitive2D* >(rxA.get()));
- const BasePrimitive2D* pB(dynamic_cast< const BasePrimitive2D* >(rxB.get()));
- const bool bAEqualZero(pA == 0L);
-
- if(bAEqualZero != (pB == 0L))
- {
- return false;
- }
-
- if(bAEqualZero)
- {
- return false;
- }
-
- return (pA->operator==(*pB));
- }
-
- bool arePrimitive2DSequencesEqual(const Primitive2DSequence& rA, const Primitive2DSequence& rB)
- {
- const sal_Bool bAHasElements(rA.hasElements());
-
- if(bAHasElements != rB.hasElements())
- {
- return false;
- }
-
- if(!bAHasElements)
- {
- return true;
- }
-
- const sal_Int32 nCount(rA.getLength());
-
- if(nCount != rB.getLength())
- {
- return false;
- }
-
- for(sal_Int32 a(0L); a < nCount; a++)
- {
- if(!arePrimitive2DReferencesEqual(rA[a], rB[a]))
- {
- return false;
- }
- }
-
- return true;
- }
-
- // concatenate sequence
- void appendPrimitive2DSequenceToPrimitive2DSequence(Primitive2DSequence& rDest, const Primitive2DSequence& rSource)
- {
- if(rSource.hasElements())
- {
- if(rDest.hasElements())
- {
- const sal_Int32 nSourceCount(rSource.getLength());
- const sal_Int32 nDestCount(rDest.getLength());
- const sal_Int32 nTargetCount(nSourceCount + nDestCount);
- sal_Int32 nInsertPos(nDestCount);
-
- rDest.realloc(nTargetCount);
-
- for(sal_Int32 a(0L); a < nSourceCount; a++)
- {
- if(rSource[a].is())
- {
- rDest[nInsertPos++] = rSource[a];
- }
- }
-
- if(nInsertPos != nTargetCount)
- {
- rDest.realloc(nInsertPos);
- }
- }
- else
- {
- rDest = rSource;
- }
- }
- }
-
- // concatenate single Primitive2D
- void appendPrimitive2DReferenceToPrimitive2DSequence(Primitive2DSequence& rDest, const Primitive2DReference& rSource)
- {
- if(rSource.is())
- {
- const sal_Int32 nDestCount(rDest.getLength());
- rDest.realloc(nDestCount + 1L);
- rDest[nDestCount] = rSource;
- }
- }
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/bitmapprimitive2d.cxx b/drawinglayer/source/primitive2d/bitmapprimitive2d.cxx
deleted file mode 100644
index 3efbd0de02..0000000000
--- a/drawinglayer/source/primitive2d/bitmapprimitive2d.cxx
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- BitmapPrimitive2D::BitmapPrimitive2D(
- const BitmapEx& rBitmapEx,
- const basegfx::B2DHomMatrix& rTransform)
- : BasePrimitive2D(),
- maBitmapEx(rBitmapEx),
- maTransform(rTransform)
- {
- }
-
- bool BitmapPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BasePrimitive2D::operator==(rPrimitive))
- {
- const BitmapPrimitive2D& rCompare = (BitmapPrimitive2D&)rPrimitive;
-
- return (getBitmapEx() == rCompare.getBitmapEx()
- && getTransform() == rCompare.getTransform());
- }
-
- return false;
- }
-
- basegfx::B2DRange BitmapPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0);
- aRetval.transform(maTransform);
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(BitmapPrimitive2D, PRIMITIVE2D_ID_BITMAPPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/borderlineprimitive2d.cxx b/drawinglayer/source/primitive2d/borderlineprimitive2d.cxx
deleted file mode 100644
index 33df59c9f2..0000000000
--- a/drawinglayer/source/primitive2d/borderlineprimitive2d.cxx
+++ /dev/null
@@ -1,342 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/borderlineprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygonclipper.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <svtools/borderhelper.hxx>
-#include <numeric>
-#include <algorithm>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- basegfx::B2DPolyPolygon BorderLinePrimitive2D::getClipPolygon( ) const
- {
- basegfx::B2DPolygon clipPolygon;
-
- // Get the vectors
- basegfx::B2DVector aVector( getEnd() - getStart() );
- aVector.normalize();
- const basegfx::B2DVector aPerpendicular(basegfx::getPerpendicular(aVector));
-
- // Get the points
- const basegfx::B2DVector aLeftOff(aPerpendicular * (-0.5 * (getWidth())));
- const basegfx::B2DVector aRightOff(aPerpendicular * (0.5 * (getWidth())));
-
- const basegfx::B2DVector aSLVector( aLeftOff - ( getExtendLeftStart() * aVector ) );
- clipPolygon.append( basegfx::B2DPoint( getStart() + aSLVector * 2.0 ) );
-
- clipPolygon.append( getStart( ) );
-
- const basegfx::B2DVector aSRVector( aRightOff - ( getExtendRightStart() * aVector ) );
- clipPolygon.append( basegfx::B2DPoint( getStart() + aSRVector * 2.0 ) );
-
- const basegfx::B2DVector aERVector( aRightOff + ( getExtendRightEnd() * aVector ) );
- clipPolygon.append( basegfx::B2DPoint( getEnd() + aERVector * 2.0 ) );
-
- clipPolygon.append( getEnd( ) );
-
- const basegfx::B2DVector aELVector( aLeftOff + ( getExtendLeftEnd() * aVector ) );
- clipPolygon.append( basegfx::B2DPoint( getEnd() + aELVector * 2.0 ) );
-
- clipPolygon.setClosed( true );
-
- return basegfx::B2DPolyPolygon( clipPolygon );
- }
-
- Primitive2DSequence BorderLinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- Primitive2DSequence xRetval;
-
- if(!getStart().equal(getEnd()) && ( isInsideUsed() || isOutsideUsed() ) )
- {
- // get data and vectors
- const double fWidth(getWidth());
- basegfx::B2DVector aVector(getEnd() - getStart());
- aVector.normalize();
- const basegfx::B2DVector aPerpendicular(basegfx::getPerpendicular(aVector));
-
- const basegfx::B2DPolyPolygon& aClipRegion = getClipPolygon( );
-
- if(isOutsideUsed() && isInsideUsed())
- {
- const double fExt = getWidth( ); // Extend a lot: it'll be clipped after
-
- // both used, double line definition. Create left and right offset
- xRetval.realloc(2);
- sal_uInt32 nInsert(0);
-
- basegfx::B2DPolygon aGap;
-
- {
- // create geometry for left
- const basegfx::B2DVector aLeftOff(aPerpendicular * (0.5 * (getCorrectedLeftWidth() - fWidth + 1)));
- const basegfx::B2DPoint aTmpStart(getStart() + aLeftOff - ( fExt * aVector));
- const basegfx::B2DPoint aTmpEnd(getEnd() + aLeftOff + ( fExt * aVector));
- basegfx::B2DPolygon aLeft;
-
- if(leftIsHairline())
- {
- // create hairline primitive
- aLeft.append(aTmpStart);
- aLeft.append(aTmpEnd);
-
- xRetval[nInsert++] = Primitive2DReference(new PolygonHairlinePrimitive2D(
- aLeft,
- getRGBColorLeft()));
-
- aGap.append( getStart() - getExtendLeftStart() * aVector );
- aGap.append( getEnd() + getExtendLeftEnd() * aVector );
- }
- else
- {
- // create filled polygon primitive. Already tried to create thick lines
- // with the correct LineWidth, but this leads to problems when no AA
- // is available and fat line special case reductions between 0.5 < x < 2.5 line widths
- // are executed due to the FilledPolygon-do-not-paint-their-bottom-and-right-lines.
- const basegfx::B2DVector aLineWidthOffset((getCorrectedLeftWidth() * 0.5) * aPerpendicular);
-
- aLeft.append(aTmpStart + aLineWidthOffset);
- aLeft.append(aTmpEnd + aLineWidthOffset);
- aLeft.append(aTmpEnd - aLineWidthOffset);
- aLeft.append(aTmpStart - aLineWidthOffset);
- aLeft.setClosed(true);
-
- basegfx::B2DPolyPolygon aClipped = basegfx::tools::clipPolygonOnPolyPolygon(
- aLeft, aClipRegion, true, false );
-
- aGap.append( aTmpStart + aLineWidthOffset );
- aGap.append( aTmpEnd + aLineWidthOffset );
-
- xRetval[nInsert++] = Primitive2DReference(new PolyPolygonColorPrimitive2D(
- aClipped, getRGBColorLeft()));
- }
- }
-
- {
- // create geometry for right
- const basegfx::B2DVector aRightOff(aPerpendicular * (0.5 * (fWidth - getCorrectedRightWidth() + 1)));
- const basegfx::B2DPoint aTmpStart(getStart() + aRightOff - ( fExt * aVector));
- const basegfx::B2DPoint aTmpEnd(getEnd() + aRightOff + ( fExt * aVector));
- basegfx::B2DPolygon aRight;
-
- if(rightIsHairline())
- {
- // create hairline primitive
- aRight.append(aTmpStart);
- aRight.append(aTmpEnd);
-
- xRetval[nInsert++] = Primitive2DReference(new PolygonHairlinePrimitive2D(
- aRight,
- getRGBColorRight()));
-
- aGap.append( getStart() - getExtendRightStart() * aVector );
- aGap.append( getEnd() + getExtendRightEnd() * aVector );
- }
- else
- {
- // create filled polygon primitive
- const basegfx::B2DVector aLineWidthOffset((getCorrectedRightWidth() * 0.5) * aPerpendicular);
-
- aRight.append(aTmpStart + aLineWidthOffset);
- aRight.append(aTmpEnd + aLineWidthOffset);
- aRight.append(aTmpEnd - aLineWidthOffset);
- aRight.append(aTmpStart - aLineWidthOffset);
- aRight.setClosed(true);
-
- basegfx::B2DPolyPolygon aClipped = basegfx::tools::clipPolygonOnPolyPolygon(
- aRight, aClipRegion, true, false );
-
- xRetval[nInsert++] = Primitive2DReference(new PolyPolygonColorPrimitive2D(
- aClipped, getRGBColorRight()));
-
- aGap.append( aTmpEnd - aLineWidthOffset );
- aGap.append( aTmpStart - aLineWidthOffset );
- }
- }
-
- if (hasGapColor() && aGap.count() == 4)
- {
- xRetval.realloc( xRetval.getLength() + 1 );
- // create geometry for filled gap
- aGap.setClosed( true );
-
- basegfx::B2DPolyPolygon aClipped = basegfx::tools::clipPolygonOnPolyPolygon(
- aGap, aClipRegion, true, false );
-
- xRetval[nInsert++] = Primitive2DReference( new PolyPolygonColorPrimitive2D(
- aClipped, getRGBColorGap() ) );
- }
- }
- else
- {
- // single line, create geometry
- basegfx::B2DPolygon aPolygon;
- const double fExt = getWidth( ); // Extend a lot: it'll be clipped after
- const basegfx::B2DPoint aTmpStart(getStart() - (fExt * aVector));
- const basegfx::B2DPoint aTmpEnd(getEnd() + (fExt * aVector));
- xRetval.realloc(1);
-
- // Get which is the line to show
- bool bIsHairline = leftIsHairline();
- double nWidth = getCorrectedLeftWidth();
- basegfx::BColor aColor = getRGBColorLeft();
- if ( basegfx::fTools::equal( 0.0, mfLeftWidth ) )
- {
- bIsHairline = rightIsHairline();
- nWidth = getCorrectedRightWidth();
- aColor = getRGBColorRight();
- }
-
- if(bIsHairline)
- {
- // create hairline primitive
- aPolygon.append( getStart() );
- aPolygon.append( getEnd() );
-
- xRetval[0] = Primitive2DReference(new PolygonHairlinePrimitive2D(
- aPolygon,
- aColor));
- }
- else
- {
- // create filled polygon primitive
- const basegfx::B2DVector aLineWidthOffset(((nWidth + 1) * 0.5) * aPerpendicular);
-
- aPolygon.append( aTmpStart );
- aPolygon.append( aTmpEnd );
-
- basegfx::B2DPolyPolygon aDashed = svtools::ApplyLineDashing(
- aPolygon, getStyle(), MAP_100TH_MM );
- for (sal_uInt32 i = 0; i < aDashed.count(); i++ )
- {
- basegfx::B2DPolygon aDash = aDashed.getB2DPolygon( i );
- basegfx::B2DPoint aDashStart = aDash.getB2DPoint( 0 );
- basegfx::B2DPoint aDashEnd = aDash.getB2DPoint( aDash.count() - 1 );
-
- basegfx::B2DPolygon aDashPolygon;
- aDashPolygon.append( aDashStart + aLineWidthOffset );
- aDashPolygon.append( aDashEnd + aLineWidthOffset );
- aDashPolygon.append( aDashEnd - aLineWidthOffset );
- aDashPolygon.append( aDashStart - aLineWidthOffset );
- aDashPolygon.setClosed( true );
-
- basegfx::B2DPolyPolygon aClipped = basegfx::tools::clipPolygonOnPolyPolygon(
- aDashPolygon, aClipRegion, true, false );
-
- if ( aClipped.count() )
- aDashed.setB2DPolygon( i, aClipped.getB2DPolygon( 0 ) );
- }
-
- xRetval[0] = Primitive2DReference(new PolyPolygonColorPrimitive2D(
- basegfx::B2DPolyPolygon( aDashed ), aColor));
- }
- }
- }
-
- return xRetval;
- }
-
- BorderLinePrimitive2D::BorderLinePrimitive2D(
- const basegfx::B2DPoint& rStart,
- const basegfx::B2DPoint& rEnd,
- double fLeftWidth,
- double fDistance,
- double fRightWidth,
- double fExtendLeftStart,
- double fExtendLeftEnd,
- double fExtendRightStart,
- double fExtendRightEnd,
- const basegfx::BColor& rRGBColorRight,
- const basegfx::BColor& rRGBColorLeft,
- const basegfx::BColor& rRGBColorGap,
- bool bHasGapColor,
- const short nStyle)
- : BufferedDecompositionPrimitive2D(),
- maStart(rStart),
- maEnd(rEnd),
- mfLeftWidth(fLeftWidth),
- mfDistance(fDistance),
- mfRightWidth(fRightWidth),
- mfExtendLeftStart(fExtendLeftStart),
- mfExtendLeftEnd(fExtendLeftEnd),
- mfExtendRightStart(fExtendRightStart),
- mfExtendRightEnd(fExtendRightEnd),
- maRGBColorRight(rRGBColorRight),
- maRGBColorLeft(rRGBColorLeft),
- maRGBColorGap(rRGBColorGap),
- mbHasGapColor(bHasGapColor),
- mnStyle(nStyle)
- {
- }
-
- bool BorderLinePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const BorderLinePrimitive2D& rCompare = (BorderLinePrimitive2D&)rPrimitive;
-
- return (getStart() == rCompare.getStart()
- && getEnd() == rCompare.getEnd()
- && getLeftWidth() == rCompare.getLeftWidth()
- && getDistance() == rCompare.getDistance()
- && getRightWidth() == rCompare.getRightWidth()
- && getExtendLeftStart() == rCompare.getExtendLeftStart()
- && getExtendLeftEnd() == rCompare.getExtendLeftEnd()
- && getExtendRightStart() == rCompare.getExtendRightStart()
- && getExtendRightEnd() == rCompare.getExtendRightEnd()
- && getRGBColorRight() == rCompare.getRGBColorRight()
- && getRGBColorLeft() == rCompare.getRGBColorLeft()
- && getRGBColorGap() == rCompare.getRGBColorGap()
- && hasGapColor() == rCompare.hasGapColor()
- && getStyle() == rCompare.getStyle());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(BorderLinePrimitive2D, PRIMITIVE2D_ID_BORDERLINEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/chartprimitive2d.cxx b/drawinglayer/source/primitive2d/chartprimitive2d.cxx
deleted file mode 100644
index 23957295df..0000000000
--- a/drawinglayer/source/primitive2d/chartprimitive2d.cxx
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/chartprimitive2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- ChartPrimitive2D::ChartPrimitive2D(
- const uno::Reference< frame::XModel >& rxChartModel,
- const basegfx::B2DHomMatrix& rTransformation,
- const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren),
- mxChartModel(rxChartModel),
- maTransformation(rTransformation)
- {
- }
-
- bool ChartPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(GroupPrimitive2D::operator==(rPrimitive))
- {
- const ChartPrimitive2D& rCompare = static_cast< const ChartPrimitive2D& >(rPrimitive);
-
- return (getChartModel() == rCompare.getChartModel()
- && getTransformation() == rCompare.getTransformation());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(ChartPrimitive2D, PRIMITIVE2D_ID_CHARTPRIMITIVE2D)
-
- basegfx::B2DRange ChartPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0);
- aRetval.transform(getTransformation());
- return aRetval;
- }
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/clippedborderlineprimitive2d.cxx b/drawinglayer/source/primitive2d/clippedborderlineprimitive2d.cxx
deleted file mode 100644
index b97e90f2a0..0000000000
--- a/drawinglayer/source/primitive2d/clippedborderlineprimitive2d.cxx
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * Version: MPL 1.1 / GPLv3+ / LGPLv3+
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Initial Developer of the Original Code is
- * [ Novell Inc. ]
- * Portions created by the Initial Developer are Copyright (C) 2010 the
- * Initial Developer. All Rights Reserved.
- *
- * Contributor(s): Cédric Bosdonnat <cbosdonnat@novell.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
- * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
- * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
- * instead of those above.
- */
-
-#include <drawinglayer/primitive2d/clippedborderlineprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- basegfx::B2DPolyPolygon ClippedBorderLinePrimitive2D::getClipPolygon( ) const
- {
- basegfx::B2DPolyPolygon aPolyPolygon;
- aPolyPolygon.append( maIntersection );
- return aPolyPolygon;
- }
-
- ClippedBorderLinePrimitive2D::ClippedBorderLinePrimitive2D(
- const basegfx::B2DPoint& rStart,
- const basegfx::B2DPoint& rEnd,
- double fLeftWidth,
- double fDistance,
- double fRightWidth,
- const basegfx::B2DPolygon& rIntersection,
- const basegfx::BColor& rRGBColorRight,
- const basegfx::BColor& rRGBColorLeft,
- const basegfx::BColor& rRGBColorGap,
- bool bHasGapColor,
- const short nStyle)
- : BorderLinePrimitive2D( rStart, rEnd, fLeftWidth,fDistance, fRightWidth,
- 0.0, 0.0, 0.0, 0.0, rRGBColorRight, rRGBColorLeft,
- rRGBColorGap, bHasGapColor, nStyle),
- maIntersection( rIntersection )
- {
- }
-
- bool ClippedBorderLinePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BorderLinePrimitive2D::operator==(rPrimitive))
- {
- const ClippedBorderLinePrimitive2D& rCompare = (ClippedBorderLinePrimitive2D&)rPrimitive;
-
- return maIntersection == rCompare.maIntersection;
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(ClippedBorderLinePrimitive2D, PRIMITIVE2D_ID_CLIPPEDBORDERLINEPRIMITIVE2D)
-
-
- } // namespace primitive2d
-} // namespace drawinglayer
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/controlprimitive2d.cxx b/drawinglayer/source/primitive2d/controlprimitive2d.cxx
deleted file mode 100644
index 483f797a1e..0000000000
--- a/drawinglayer/source/primitive2d/controlprimitive2d.cxx
+++ /dev/null
@@ -1,386 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/controlprimitive2d.hxx>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/awt/XWindow2.hpp>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <vcl/virdev.hxx>
-#include <vcl/svapp.hxx>
-#include <com/sun/star/awt/PosSize.hpp>
-#include <vcl/bitmapex.hxx>
-#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-#include <tools/diagnose_ex.h>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <svtools/optionsdrawinglayer.hxx>
-#include <toolkit/awt/vclxwindow.hxx>
-#include <vcl/window.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- void ControlPrimitive2D::createXControl()
- {
- if(!mxXControl.is() && getControlModel().is())
- {
- uno::Reference< beans::XPropertySet > xSet(getControlModel(), uno::UNO_QUERY);
-
- if(xSet.is())
- {
- uno::Any aValue(xSet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultControl"))));
- rtl::OUString aUnoControlTypeName;
-
- if(aValue >>= aUnoControlTypeName)
- {
- if(aUnoControlTypeName.getLength())
- {
- uno::Reference< lang::XMultiServiceFactory > xFactory( comphelper::getProcessServiceFactory() );
-
- if(xFactory.is())
- {
- uno::Reference< awt::XControl > xXControl(xFactory->createInstance(aUnoControlTypeName), uno::UNO_QUERY);
-
- if(xXControl.is())
- {
- xXControl->setModel(getControlModel());
-
- // remember XControl
- mxXControl = xXControl;
- }
- }
- }
- }
- }
- }
- }
-
- Primitive2DReference ControlPrimitive2D::createBitmapDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- Primitive2DReference xRetval;
- const uno::Reference< awt::XControl >& rXControl(getXControl());
-
- if(rXControl.is())
- {
- uno::Reference< awt::XWindow > xControlWindow(rXControl, uno::UNO_QUERY);
-
- if(xControlWindow.is())
- {
- // get decomposition to get size
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
- getTransform().decompose(aScale, aTranslate, fRotate, fShearX);
-
- // get absolute discrete size (no mirror or rotate here)
- aScale = basegfx::absolute(aScale);
- basegfx::B2DVector aDiscreteSize(rViewInformation.getObjectToViewTransformation() * aScale);
-
- // limit to a maximum square size, e.g. 300x150 pixels (45000)
- const SvtOptionsDrawinglayer aDrawinglayerOpt;
- const double fDiscreteMax(aDrawinglayerOpt.GetQuadraticFormControlRenderLimit());
- const double fDiscreteQuadratic(aDiscreteSize.getX() * aDiscreteSize.getY());
- const bool bScaleUsed(fDiscreteQuadratic > fDiscreteMax);
- double fFactor(1.0);
-
- if(bScaleUsed)
- {
- // get factor and adapt to scaled size
- fFactor = sqrt(fDiscreteMax / fDiscreteQuadratic);
- aDiscreteSize *= fFactor;
- }
-
- // go to integer
- const sal_Int32 nSizeX(basegfx::fround(aDiscreteSize.getX()));
- const sal_Int32 nSizeY(basegfx::fround(aDiscreteSize.getY()));
-
- if(nSizeX > 0 && nSizeY > 0)
- {
- // prepare VirtualDevice
- VirtualDevice aVirtualDevice(*Application::GetDefaultDevice());
- const Size aSizePixel(nSizeX, nSizeY);
- aVirtualDevice.SetOutputSizePixel(aSizePixel);
-
- // set size at control
- xControlWindow->setPosSize(0, 0, nSizeX, nSizeY, awt::PosSize::POSSIZE);
-
- // get graphics and view
- uno::Reference< awt::XGraphics > xGraphics(aVirtualDevice.CreateUnoGraphics());
- uno::Reference< awt::XView > xControlView(rXControl, uno::UNO_QUERY);
-
- if(xGraphics.is() && xControlView.is())
- {
- // link graphics and view
- xControlView->setGraphics(xGraphics);
-
- { // #i93162# For painting the control setting a Zoom (using setZoom() at the xControlView)
- // is needed to define the font size. Normally this is done in
- // ViewObjectContactOfUnoControl::createPrimitive2DSequence by using positionControlForPaint().
- // For some reason the difference between MAP_TWIPS and MAP_100TH_MM still plays
- // a role there so that for Draw/Impress/Calc (the MAP_100TH_MM users) i need to set a zoom
- // here, too. The factor includes the needed scale, but is calculated by pure comparisons. It
- // is somehow related to the twips/100thmm relationship.
- bool bUserIs100thmm(false);
- const uno::Reference< awt::XControl > xControl(xControlView, uno::UNO_QUERY);
-
- if(xControl.is())
- {
- uno::Reference< awt::XWindowPeer > xWindowPeer(xControl->getPeer());
-
- if(xWindowPeer.is())
- {
- VCLXWindow* pVCLXWindow = VCLXWindow::GetImplementation(xWindowPeer);
-
- if(pVCLXWindow)
- {
- Window* pWindow = pVCLXWindow->GetWindow();
-
- if(pWindow)
- {
- pWindow = pWindow->GetParent();
-
- if(pWindow)
- {
- if(MAP_100TH_MM == pWindow->GetMapMode().GetMapUnit())
- {
- bUserIs100thmm = true;
- }
- }
- }
- }
- }
- }
-
- if(bUserIs100thmm)
- {
- // calc screen zoom for text display. fFactor is already added indirectly in aDiscreteSize
- basegfx::B2DVector aScreenZoom(
- basegfx::fTools::equalZero(aScale.getX()) ? 1.0 : aDiscreteSize.getX() / aScale.getX(),
- basegfx::fTools::equalZero(aScale.getY()) ? 1.0 : aDiscreteSize.getY() / aScale.getY());
- static double fZoomScale(28.0); // do not ask for this constant factor, but it gets the zoom right
- aScreenZoom *= fZoomScale;
-
- // set zoom at control view for text scaling
- xControlView->setZoom((float)aScreenZoom.getX(), (float)aScreenZoom.getY());
- }
- }
-
- try
- {
- // try to paint it to VirtualDevice
- xControlView->draw(0, 0);
-
- // get bitmap
- const Bitmap aContent(aVirtualDevice.GetBitmap(Point(), aSizePixel));
-
- // to avoid scaling, use the Bitmap pixel size as primitive size
- const Size aBitmapSize(aContent.GetSizePixel());
- basegfx::B2DVector aBitmapSizeLogic(
- rViewInformation.getInverseObjectToViewTransformation() *
- basegfx::B2DVector(aBitmapSize.getWidth() - 1, aBitmapSize.getHeight() - 1));
-
- if(bScaleUsed)
- {
- // if scaled adapt to scaled size
- aBitmapSizeLogic /= fFactor;
- }
-
- // short form for scale and translate transformation
- const basegfx::B2DHomMatrix aBitmapTransform(basegfx::tools::createScaleTranslateB2DHomMatrix(
- aBitmapSizeLogic.getX(), aBitmapSizeLogic.getY(), aTranslate.getX(), aTranslate.getY()));
-
- // create primitive
- xRetval = new BitmapPrimitive2D(BitmapEx(aContent), aBitmapTransform);
- }
- catch( const uno::Exception& )
- {
- DBG_UNHANDLED_EXCEPTION();
- }
- }
- }
- }
- }
-
- return xRetval;
- }
-
- Primitive2DReference ControlPrimitive2D::createPlaceholderDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // create a gray placeholder hairline polygon in object size
- basegfx::B2DRange aObjectRange(0.0, 0.0, 1.0, 1.0);
- aObjectRange.transform(getTransform());
- const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aObjectRange));
- const basegfx::BColor aGrayTone(0xc0 / 255.0, 0xc0 / 255.0, 0xc0 / 255.0);
-
- // The replacement object may also get a text like 'empty group' here later
- Primitive2DReference xRetval(new PolygonHairlinePrimitive2D(aOutline, aGrayTone));
-
- return xRetval;
- }
-
- Primitive2DSequence ControlPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- // try to create a bitmap decomposition. If that fails for some reason,
- // at least create a replacement decomposition.
- Primitive2DReference xReference(createBitmapDecomposition(rViewInformation));
-
- if(!xReference.is())
- {
- xReference = createPlaceholderDecomposition(rViewInformation);
- }
-
- return Primitive2DSequence(&xReference, 1L);
- }
-
- ControlPrimitive2D::ControlPrimitive2D(
- const basegfx::B2DHomMatrix& rTransform,
- const uno::Reference< awt::XControlModel >& rxControlModel)
- : BufferedDecompositionPrimitive2D(),
- maTransform(rTransform),
- mxControlModel(rxControlModel),
- mxXControl(),
- maLastViewScaling()
- {
- }
-
- ControlPrimitive2D::ControlPrimitive2D(
- const basegfx::B2DHomMatrix& rTransform,
- const uno::Reference< awt::XControlModel >& rxControlModel,
- const uno::Reference< awt::XControl >& rxXControl)
- : BufferedDecompositionPrimitive2D(),
- maTransform(rTransform),
- mxControlModel(rxControlModel),
- mxXControl(rxXControl),
- maLastViewScaling()
- {
- }
-
- const uno::Reference< awt::XControl >& ControlPrimitive2D::getXControl() const
- {
- if(!mxXControl.is())
- {
- const_cast< ControlPrimitive2D* >(this)->createXControl();
- }
-
- return mxXControl;
- }
-
- bool ControlPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- // use base class compare operator
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const ControlPrimitive2D& rCompare = (ControlPrimitive2D&)rPrimitive;
-
- if(getTransform() == rCompare.getTransform())
- {
- // check if ControlModel references both are/are not
- bool bRetval(getControlModel().is() == rCompare.getControlModel().is());
-
- if(bRetval && getControlModel().is())
- {
- // both exist, check for equality
- bRetval = (getControlModel() == rCompare.getControlModel());
- }
-
- if(bRetval)
- {
- // check if XControl references both are/are not
- bRetval = (getXControl().is() == rCompare.getXControl().is());
- }
-
- if(bRetval && getXControl().is())
- {
- // both exist, check for equality
- bRetval = (getXControl() == rCompare.getXControl());
- }
-
- return bRetval;
- }
- }
-
- return false;
- }
-
- basegfx::B2DRange ControlPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // simply derivate from unit range
- basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0);
- aRetval.transform(getTransform());
- return aRetval;
- }
-
- Primitive2DSequence ControlPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- // this primitive is view-dependent related to the scaling. If scaling has changed,
- // destroy existing decomposition. To detect change, use size of unit size in view coordinates
- ::osl::MutexGuard aGuard( m_aMutex );
- const basegfx::B2DVector aNewScaling(rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0));
-
- if(getBuffered2DDecomposition().hasElements())
- {
- if(!maLastViewScaling.equal(aNewScaling))
- {
- // conditions of last local decomposition have changed, delete
- const_cast< ControlPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
- }
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- // remember ViewTransformation
- const_cast< ControlPrimitive2D* >(this)->maLastViewScaling = aNewScaling;
- }
-
- // use parent implementation
- return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(ControlPrimitive2D, PRIMITIVE2D_ID_CONTROLPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx b/drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx
deleted file mode 100644
index a00a1e47f9..0000000000
--- a/drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx
+++ /dev/null
@@ -1,119 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/discretebitmapprimitive2d.hxx>
-#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence DiscreteBitmapPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // use getViewTransformation() and getObjectTransformation() from
- // ObjectAndViewTransformationDependentPrimitive2D to create a BitmapPrimitive2D
- // with the correct mapping
- Primitive2DSequence xRetval;
-
- if(!getBitmapEx().IsEmpty())
- {
- // get discrete size
- const Size& rSizePixel = getBitmapEx().GetSizePixel();
- const basegfx::B2DVector aDiscreteSize(rSizePixel.Width(), rSizePixel.Height());
-
- // get inverse ViewTransformation
- basegfx::B2DHomMatrix aInverseViewTransformation(getViewTransformation());
- aInverseViewTransformation.invert();
-
- // get size and position in world coordinates
- const basegfx::B2DVector aWorldSize(aInverseViewTransformation * aDiscreteSize);
- const basegfx::B2DPoint aWorldTopLeft(getObjectTransformation() * getTopLeft());
-
- // build object matrix in world coordinates so that the top-left
- // position remains, but eventual transformations (e.g. rotations)
- // in the ObjectToView stack remain and get correctly applied
- basegfx::B2DHomMatrix aObjectTransform;
-
- aObjectTransform.set(0, 0, aWorldSize.getX());
- aObjectTransform.set(1, 1, aWorldSize.getY());
- aObjectTransform.set(0, 2, aWorldTopLeft.getX());
- aObjectTransform.set(1, 2, aWorldTopLeft.getY());
-
- // get inverse ObjectTransformation
- basegfx::B2DHomMatrix aInverseObjectTransformation(getObjectTransformation());
- aInverseObjectTransformation.invert();
-
- // transform to object coordinate system
- aObjectTransform = aInverseObjectTransformation * aObjectTransform;
-
- // create BitmapPrimitive2D with now object-local coordinate data
- const Primitive2DReference xRef(new BitmapPrimitive2D(getBitmapEx(), aObjectTransform));
- xRetval = Primitive2DSequence(&xRef, 1);
- }
-
- return xRetval;
- }
-
- DiscreteBitmapPrimitive2D::DiscreteBitmapPrimitive2D(
- const BitmapEx& rBitmapEx,
- const basegfx::B2DPoint& rTopLeft)
- : ObjectAndViewTransformationDependentPrimitive2D(),
- maBitmapEx(rBitmapEx),
- maTopLeft(rTopLeft)
- {
- }
-
- bool DiscreteBitmapPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(ObjectAndViewTransformationDependentPrimitive2D::operator==(rPrimitive))
- {
- const DiscreteBitmapPrimitive2D& rCompare = (DiscreteBitmapPrimitive2D&)rPrimitive;
-
- return (getBitmapEx() == rCompare.getBitmapEx()
- && getTopLeft() == rCompare.getTopLeft());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(DiscreteBitmapPrimitive2D, PRIMITIVE2D_ID_DISCRETEBITMAPPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/discreteshadowprimitive2d.cxx b/drawinglayer/source/primitive2d/discreteshadowprimitive2d.cxx
deleted file mode 100644
index 17578b5e52..0000000000
--- a/drawinglayer/source/primitive2d/discreteshadowprimitive2d.cxx
+++ /dev/null
@@ -1,339 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/discreteshadowprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- DiscreteShadow::DiscreteShadow(const BitmapEx& rBitmapEx)
- : maBitmapEx(rBitmapEx),
- maTopLeft(),
- maTop(),
- maTopRight(),
- maRight(),
- maBottomRight(),
- maBottom(),
- maBottomLeft(),
- maLeft()
- {
- const Size& rBitmapSize = getBitmapEx().GetSizePixel();
-
- if(rBitmapSize.Width() != rBitmapSize.Height() || rBitmapSize.Width() < 7)
- {
- OSL_ENSURE(false, "DiscreteShadowPrimitive2D: wrong bitmap format (!)");
- maBitmapEx = BitmapEx();
- }
- }
-
- const BitmapEx& DiscreteShadow::getTopLeft() const
- {
- if(maTopLeft.IsEmpty())
- {
- const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2);
- const_cast< DiscreteShadow* >(this)->maTopLeft = getBitmapEx();
- const_cast< DiscreteShadow* >(this)->maTopLeft.Crop(
- Rectangle(Point(0,0),Size(nQuarter*2+1,nQuarter*2+1)));
- }
-
- return maTopLeft;
- }
-
- const BitmapEx& DiscreteShadow::getTop() const
- {
- if(maTop.IsEmpty())
- {
- const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2);
- const_cast< DiscreteShadow* >(this)->maTop = getBitmapEx();
- const_cast< DiscreteShadow* >(this)->maTop.Crop(
- Rectangle(Point(nQuarter*2+1,0),Size(1,nQuarter+1)));
- }
-
- return maTop;
- }
-
- const BitmapEx& DiscreteShadow::getTopRight() const
- {
- if(maTopRight.IsEmpty())
- {
- const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2);
- const_cast< DiscreteShadow* >(this)->maTopRight = getBitmapEx();
- const_cast< DiscreteShadow* >(this)->maTopRight.Crop(
- Rectangle(Point(nQuarter*2+2,0),Size(nQuarter*2+1,nQuarter*2+1)));
- }
-
- return maTopRight;
- }
-
- const BitmapEx& DiscreteShadow::getRight() const
- {
- if(maRight.IsEmpty())
- {
- const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2);
- const_cast< DiscreteShadow* >(this)->maRight = getBitmapEx();
- const_cast< DiscreteShadow* >(this)->maRight.Crop(
- Rectangle(Point(nQuarter*3+2,nQuarter*2+1),Size(nQuarter+1,1)));
- }
-
- return maRight;
- }
-
- const BitmapEx& DiscreteShadow::getBottomRight() const
- {
- if(maBottomRight.IsEmpty())
- {
- const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2);
- const_cast< DiscreteShadow* >(this)->maBottomRight = getBitmapEx();
- const_cast< DiscreteShadow* >(this)->maBottomRight.Crop(
- Rectangle(Point(nQuarter*2+2,nQuarter*2+2),Size(nQuarter*2+1,nQuarter*2+1)));
- }
-
- return maBottomRight;
- }
-
- const BitmapEx& DiscreteShadow::getBottom() const
- {
- if(maBottom.IsEmpty())
- {
- const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2);
- const_cast< DiscreteShadow* >(this)->maBottom = getBitmapEx();
- const_cast< DiscreteShadow* >(this)->maBottom.Crop(
- Rectangle(Point(nQuarter*2+1,nQuarter*3+2),Size(1,nQuarter+1)));
- }
-
- return maBottom;
- }
-
- const BitmapEx& DiscreteShadow::getBottomLeft() const
- {
- if(maBottomLeft.IsEmpty())
- {
- const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2);
- const_cast< DiscreteShadow* >(this)->maBottomLeft = getBitmapEx();
- const_cast< DiscreteShadow* >(this)->maBottomLeft.Crop(
- Rectangle(Point(0,nQuarter*2+2),Size(nQuarter*2+1,nQuarter*2+1)));
- }
-
- return maBottomLeft;
- }
-
- const BitmapEx& DiscreteShadow::getLeft() const
- {
- if(maLeft.IsEmpty())
- {
- const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2);
- const_cast< DiscreteShadow* >(this)->maLeft = getBitmapEx();
- const_cast< DiscreteShadow* >(this)->maLeft.Crop(
- Rectangle(Point(0,nQuarter*2+1),Size(nQuarter+1,1)));
- }
-
- return maLeft;
- }
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence DiscreteShadowPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- Primitive2DSequence xRetval;
-
- if(!getDiscreteShadow().getBitmapEx().IsEmpty())
- {
- const sal_Int32 nQuarter((getDiscreteShadow().getBitmapEx().GetSizePixel().Width() - 3) >> 2);
- const basegfx::B2DVector aScale(getTransform() * basegfx::B2DVector(1.0, 1.0));
- const double fSingleX(getDiscreteUnit() / aScale.getX());
- const double fSingleY(getDiscreteUnit() / aScale.getY());
- const double fBorderX(fSingleX * nQuarter);
- const double fBorderY(fSingleY * nQuarter);
- const double fBigLenX((fBorderX * 2.0) + fSingleX);
- const double fBigLenY((fBorderY * 2.0) + fSingleY);
-
- xRetval.realloc(8);
-
- // TopLeft
- xRetval[0] = Primitive2DReference(
- new BitmapPrimitive2D(
- getDiscreteShadow().getTopLeft(),
- basegfx::tools::createScaleTranslateB2DHomMatrix(
- fBigLenX,
- fBigLenY,
- -fBorderX,
- -fBorderY)));
-
- // Top
- xRetval[1] = Primitive2DReference(
- new BitmapPrimitive2D(
- getDiscreteShadow().getTop(),
- basegfx::tools::createScaleTranslateB2DHomMatrix(
- 1.0 - (2.0 * fBorderX) - fSingleX,
- fBorderY + fSingleY,
- fBorderX + fSingleX,
- -fBorderY)));
-
- // TopRight
- xRetval[2] = Primitive2DReference(
- new BitmapPrimitive2D(
- getDiscreteShadow().getTopRight(),
- basegfx::tools::createScaleTranslateB2DHomMatrix(
- fBigLenX,
- fBigLenY,
- 1.0 - fBorderX,
- -fBorderY)));
-
- // Right
- xRetval[3] = Primitive2DReference(
- new BitmapPrimitive2D(
- getDiscreteShadow().getRight(),
- basegfx::tools::createScaleTranslateB2DHomMatrix(
- fBorderX + fSingleX,
- 1.0 - (2.0 * fBorderY) - fSingleY,
- 1.0,
- fBorderY + fSingleY)));
-
- // BottomRight
- xRetval[4] = Primitive2DReference(
- new BitmapPrimitive2D(
- getDiscreteShadow().getBottomRight(),
- basegfx::tools::createScaleTranslateB2DHomMatrix(
- fBigLenX,
- fBigLenY,
- 1.0 - fBorderX,
- 1.0 - fBorderY)));
-
- // Bottom
- xRetval[5] = Primitive2DReference(
- new BitmapPrimitive2D(
- getDiscreteShadow().getBottom(),
- basegfx::tools::createScaleTranslateB2DHomMatrix(
- 1.0 - (2.0 * fBorderX) - fSingleX,
- fBorderY + fSingleY,
- fBorderX + fSingleX,
- 1.0)));
-
- // BottomLeft
- xRetval[6] = Primitive2DReference(
- new BitmapPrimitive2D(
- getDiscreteShadow().getBottomLeft(),
- basegfx::tools::createScaleTranslateB2DHomMatrix(
- fBigLenX,
- fBigLenY,
- -fBorderX,
- 1.0 - fBorderY)));
-
- // Left
- xRetval[7] = Primitive2DReference(
- new BitmapPrimitive2D(
- getDiscreteShadow().getLeft(),
- basegfx::tools::createScaleTranslateB2DHomMatrix(
- fBorderX + fSingleX,
- 1.0 - (2.0 * fBorderY) - fSingleY,
- -fBorderX,
- fBorderY + fSingleY)));
-
- // put all in object transformation to get to target positions
- const Primitive2DReference xTransformed(
- new TransformPrimitive2D(
- getTransform(),
- xRetval));
-
- xRetval = Primitive2DSequence(&xTransformed, 1);
- }
-
- return xRetval;
- }
-
- DiscreteShadowPrimitive2D::DiscreteShadowPrimitive2D(
- const basegfx::B2DHomMatrix& rTransform,
- const DiscreteShadow& rDiscreteShadow)
- : DiscreteMetricDependentPrimitive2D(),
- maTransform(rTransform),
- maDiscreteShadow(rDiscreteShadow)
- {
- }
-
- bool DiscreteShadowPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(DiscreteMetricDependentPrimitive2D::operator==(rPrimitive))
- {
- const DiscreteShadowPrimitive2D& rCompare = (DiscreteShadowPrimitive2D&)rPrimitive;
-
- return (getTransform() == rCompare.getTransform()
- && getDiscreteShadow() == rCompare.getDiscreteShadow());
- }
-
- return false;
- }
-
- basegfx::B2DRange DiscreteShadowPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- if(getDiscreteShadow().getBitmapEx().IsEmpty())
- {
- // no graphics without valid bitmap definition
- return basegfx::B2DRange();
- }
- else
- {
- // prepare normal objectrange
- basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0);
- aRetval.transform(getTransform());
-
- // extract discrete shadow size and grow
- const basegfx::B2DVector aScale(rViewInformation.getViewTransformation() * basegfx::B2DVector(1.0, 1.0));
- const sal_Int32 nQuarter((getDiscreteShadow().getBitmapEx().GetSizePixel().Width() - 3) >> 2);
- const double fGrowX((1.0 / aScale.getX()) * nQuarter);
- const double fGrowY((1.0 / aScale.getY()) * nQuarter);
- aRetval.grow(std::max(fGrowX, fGrowY));
-
- return aRetval;
- }
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(DiscreteShadowPrimitive2D, PRIMITIVE2D_ID_DISCRETESHADOWPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
diff --git a/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx b/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx
deleted file mode 100644
index e2e2b3bd21..0000000000
--- a/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx
+++ /dev/null
@@ -1,171 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/embedded3dprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/color/bcolor.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/geometry/viewinformation3d.hxx>
-#include <drawinglayer/processor3d/shadow3dextractor.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- bool Embedded3DPrimitive2D::impGetShadow3D(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- osl::MutexGuard aGuard( m_aMutex );
-
- // create on demand
- if(!mbShadow3DChecked && getChildren3D().hasElements())
- {
- // create shadow extraction processor
- processor3d::Shadow3DExtractingProcessor aShadowProcessor(
- getViewInformation3D(),
- getObjectTransformation(),
- getLightNormal(),
- getShadowSlant(),
- getScene3DRange());
-
- // process local primitives
- aShadowProcessor.process(getChildren3D());
-
- // fetch result and set checked flag
- const_cast< Embedded3DPrimitive2D* >(this)->maShadowPrimitives = aShadowProcessor.getPrimitive2DSequence();
- const_cast< Embedded3DPrimitive2D* >(this)->mbShadow3DChecked = true;
- }
-
- // return if there are shadow primitives
- return maShadowPrimitives.hasElements();
- }
-
- Primitive2DSequence Embedded3DPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- // use info to create a yellow 2d rectangle, similar to empty 3d scenes and/or groups
- const basegfx::B2DRange aLocal2DRange(getB2DRange(rViewInformation));
- const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aLocal2DRange));
- const basegfx::BColor aYellow(1.0, 1.0, 0.0);
- const Primitive2DReference xRef(new PolygonHairlinePrimitive2D(aOutline, aYellow));
-
- return Primitive2DSequence(&xRef, 1L);
- }
-
- Embedded3DPrimitive2D::Embedded3DPrimitive2D(
- const primitive3d::Primitive3DSequence& rxChildren3D,
- const basegfx::B2DHomMatrix& rObjectTransformation,
- const geometry::ViewInformation3D& rViewInformation3D,
- const basegfx::B3DVector& rLightNormal,
- double fShadowSlant,
- const basegfx::B3DRange& rScene3DRange)
- : BufferedDecompositionPrimitive2D(),
- mxChildren3D(rxChildren3D),
- maObjectTransformation(rObjectTransformation),
- maViewInformation3D(rViewInformation3D),
- maLightNormal(rLightNormal),
- mfShadowSlant(fShadowSlant),
- maScene3DRange(rScene3DRange),
- maShadowPrimitives(),
- maB2DRange(),
- mbShadow3DChecked(false)
- {
- maLightNormal.normalize();
- }
-
- bool Embedded3DPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const Embedded3DPrimitive2D& rCompare = static_cast< const Embedded3DPrimitive2D& >(rPrimitive);
-
- return (primitive3d::arePrimitive3DSequencesEqual(getChildren3D(), rCompare.getChildren3D())
- && getObjectTransformation() == rCompare.getObjectTransformation()
- && getViewInformation3D() == rCompare.getViewInformation3D()
- && getLightNormal() == rCompare.getLightNormal()
- && getShadowSlant() == rCompare.getShadowSlant()
- && getScene3DRange() == rCompare.getScene3DRange());
- }
-
- return false;
- }
-
- basegfx::B2DRange Embedded3DPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- if(maB2DRange.isEmpty())
- {
- // use the 3d transformation stack to create a projection of the 3D range
- basegfx::B3DRange a3DRange(primitive3d::getB3DRangeFromPrimitive3DSequence(getChildren3D(), getViewInformation3D()));
- a3DRange.transform(getViewInformation3D().getObjectToView());
-
- // create 2d range from projected 3d and transform with scene's object transformation
- basegfx::B2DRange aNewRange;
- aNewRange.expand(basegfx::B2DPoint(a3DRange.getMinX(), a3DRange.getMinY()));
- aNewRange.expand(basegfx::B2DPoint(a3DRange.getMaxX(), a3DRange.getMaxY()));
- aNewRange.transform(getObjectTransformation());
-
- // cehck for 3D shadows and their 2D projections. If those exist, they need to be
- // taken into account
- if(impGetShadow3D(rViewInformation))
- {
- const basegfx::B2DRange aShadow2DRange(getB2DRangeFromPrimitive2DSequence(maShadowPrimitives, rViewInformation));
-
- if(!aShadow2DRange.isEmpty())
- {
- aNewRange.expand(aShadow2DRange);
- }
- }
-
- // assign to buffered value
- const_cast< Embedded3DPrimitive2D* >(this)->maB2DRange = aNewRange;
- }
-
- return maB2DRange;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(Embedded3DPrimitive2D, PRIMITIVE2D_ID_EMBEDDED3DPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/epsprimitive2d.cxx b/drawinglayer/source/primitive2d/epsprimitive2d.cxx
deleted file mode 100644
index fbd0225961..0000000000
--- a/drawinglayer/source/primitive2d/epsprimitive2d.cxx
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/epsprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/primitive2d/metafileprimitive2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence EpsPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- Primitive2DSequence xRetval;
- const GDIMetaFile& rSubstituteContent = getMetaFile();
-
- if( rSubstituteContent.GetActionSize() )
- {
- // the default decomposition will use the Metafile replacement visualisation.
- // To really use the Eps data, a renderer has to know and interpret this primitive
- // directly.
- xRetval.realloc(1);
-
- xRetval[0] = Primitive2DReference(
- new MetafilePrimitive2D(
- getEpsTransform(),
- rSubstituteContent));
- }
-
- return xRetval;
- }
-
- EpsPrimitive2D::EpsPrimitive2D(
- const basegfx::B2DHomMatrix& rEpsTransform,
- const GfxLink& rGfxLink,
- const GDIMetaFile& rMetaFile)
- : BufferedDecompositionPrimitive2D(),
- maEpsTransform(rEpsTransform),
- maGfxLink(rGfxLink),
- maMetaFile(rMetaFile)
- {
- }
-
- bool EpsPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const EpsPrimitive2D& rCompare = (EpsPrimitive2D&)rPrimitive;
-
- return (getEpsTransform() == rCompare.getEpsTransform()
- && getGfxLink().IsEqual(rCompare.getGfxLink())
- && getMetaFile() == rCompare.getMetaFile());
- }
-
- return false;
- }
-
- basegfx::B2DRange EpsPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // use own implementation to quickly answer the getB2DRange question.
- basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0);
- aRetval.transform(getEpsTransform());
-
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(EpsPrimitive2D, PRIMITIVE2D_ID_EPSPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/fillbitmapprimitive2d.cxx b/drawinglayer/source/primitive2d/fillbitmapprimitive2d.cxx
deleted file mode 100644
index 8a4d70b959..0000000000
--- a/drawinglayer/source/primitive2d/fillbitmapprimitive2d.cxx
+++ /dev/null
@@ -1,145 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx>
-#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <drawinglayer/texture/texture.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence FillBitmapPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- Primitive2DSequence aRetval;
-
- if(!getFillBitmap().isDefault())
- {
- const Size aTileSizePixel(getFillBitmap().getBitmapEx().GetSizePixel());
-
- // is there a tile with some size at all?
- if(aTileSizePixel.getWidth() && aTileSizePixel.getHeight())
- {
- if(getFillBitmap().getTiling())
- {
- // get object range and create tiling matrices
- ::std::vector< basegfx::B2DHomMatrix > aMatrices;
- texture::GeoTexSvxTiled aTiling(getFillBitmap().getTopLeft(), getFillBitmap().getSize());
- aTiling.appendTransformations(aMatrices);
-
- // resize result
- aRetval.realloc(aMatrices.size());
-
- // create one primitive for each matrix
- for(sal_uInt32 a(0L); a < aMatrices.size(); a++)
- {
- basegfx::B2DHomMatrix aNewMatrix = aMatrices[a];
- aNewMatrix *= getTransformation();
-
- // create bitmap primitive and add to result
- const Primitive2DReference xRef(
- new BitmapPrimitive2D(getFillBitmap().getBitmapEx(), aNewMatrix));
-
- aRetval[a] = xRef;
- }
- }
- else
- {
- // create new object transform
- basegfx::B2DHomMatrix aObjectTransform;
- aObjectTransform.set(0L, 0L, getFillBitmap().getSize().getX());
- aObjectTransform.set(1L, 1L, getFillBitmap().getSize().getY());
- aObjectTransform.set(0L, 2L, getFillBitmap().getTopLeft().getX());
- aObjectTransform.set(1L, 2L, getFillBitmap().getTopLeft().getY());
- aObjectTransform *= getTransformation();
-
- // create bitmap primitive and add exclusive to decomposition (hand over ownership)
- const Primitive2DReference xRef(
- new BitmapPrimitive2D(getFillBitmap().getBitmapEx(), aObjectTransform));
-
- aRetval = Primitive2DSequence(&xRef, 1L);
- }
- }
- }
-
- return aRetval;
- }
-
- FillBitmapPrimitive2D::FillBitmapPrimitive2D(
- const basegfx::B2DHomMatrix& rTransformation,
- const attribute::FillBitmapAttribute& rFillBitmap)
- : BufferedDecompositionPrimitive2D(),
- maTransformation(rTransformation),
- maFillBitmap(rFillBitmap)
- {
- }
-
- bool FillBitmapPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const FillBitmapPrimitive2D& rCompare = static_cast< const FillBitmapPrimitive2D& >(rPrimitive);
-
- return (getTransformation() == rCompare.getTransformation()
- && getFillBitmap() == rCompare.getFillBitmap());
- }
-
- return false;
- }
-
- basegfx::B2DRange FillBitmapPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // return range of it
- basegfx::B2DPolygon aPolygon(basegfx::tools::createUnitPolygon());
- aPolygon.transform(getTransformation());
- return basegfx::tools::getRange(aPolygon);
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(FillBitmapPrimitive2D, PRIMITIVE2D_ID_FILLBITMAPPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/fillgradientprimitive2d.cxx b/drawinglayer/source/primitive2d/fillgradientprimitive2d.cxx
deleted file mode 100644
index b75f9a6e0d..0000000000
--- a/drawinglayer/source/primitive2d/fillgradientprimitive2d.cxx
+++ /dev/null
@@ -1,301 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/fillgradientprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <drawinglayer/texture/texture.hxx>
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- void FillGradientPrimitive2D::generateMatricesAndColors(
- std::vector< basegfx::B2DHomMatrix >& rMatrices,
- std::vector< basegfx::BColor >& rColors) const
- {
- rMatrices.clear();
- rColors.clear();
-
- // make sure steps is not too high/low
- const basegfx::BColor aStart(getFillGradient().getStartColor());
- const basegfx::BColor aEnd(getFillGradient().getEndColor());
- const sal_uInt32 nMaxSteps(sal_uInt32((aStart.getMaximumDistance(aEnd) * 127.5) + 0.5));
- sal_uInt32 nSteps(getFillGradient().getSteps());
-
- if(nSteps == 0)
- {
- nSteps = nMaxSteps;
- }
-
- if(nSteps < 2)
- {
- nSteps = 2;
- }
-
- if(nSteps > nMaxSteps)
- {
- nSteps = nMaxSteps;
- }
-
- switch(getFillGradient().getStyle())
- {
- case attribute::GRADIENTSTYLE_LINEAR:
- {
- texture::GeoTexSvxGradientLinear aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getAngle());
- aGradient.appendTransformations(rMatrices);
- aGradient.appendColors(rColors);
- break;
- }
- case attribute::GRADIENTSTYLE_AXIAL:
- {
- texture::GeoTexSvxGradientAxial aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getAngle());
- aGradient.appendTransformations(rMatrices);
- aGradient.appendColors(rColors);
- break;
- }
- case attribute::GRADIENTSTYLE_RADIAL:
- {
- texture::GeoTexSvxGradientRadial aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getOffsetX(), getFillGradient().getOffsetY());
- aGradient.appendTransformations(rMatrices);
- aGradient.appendColors(rColors);
- break;
- }
- case attribute::GRADIENTSTYLE_ELLIPTICAL:
- {
- texture::GeoTexSvxGradientElliptical aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getOffsetX(), getFillGradient().getOffsetY(), getFillGradient().getAngle());
- aGradient.appendTransformations(rMatrices);
- aGradient.appendColors(rColors);
- break;
- }
- case attribute::GRADIENTSTYLE_SQUARE:
- {
- texture::GeoTexSvxGradientSquare aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getOffsetX(), getFillGradient().getOffsetY(), getFillGradient().getAngle());
- aGradient.appendTransformations(rMatrices);
- aGradient.appendColors(rColors);
- break;
- }
- case attribute::GRADIENTSTYLE_RECT:
- {
- texture::GeoTexSvxGradientRect aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getOffsetX(), getFillGradient().getOffsetY(), getFillGradient().getAngle());
- aGradient.appendTransformations(rMatrices);
- aGradient.appendColors(rColors);
- break;
- }
- }
- }
-
- Primitive2DSequence FillGradientPrimitive2D::createOverlappingFill(
- const std::vector< basegfx::B2DHomMatrix >& rMatrices,
- const std::vector< basegfx::BColor >& rColors,
- const basegfx::B2DPolygon& rUnitPolygon) const
- {
- // prepare return value
- Primitive2DSequence aRetval(rColors.size() ? rMatrices.size() + 1 : rMatrices.size());
-
- // create solid fill with start color
- if(rColors.size())
- {
- // create primitive
- const Primitive2DReference xRef(
- new PolyPolygonColorPrimitive2D(
- basegfx::B2DPolyPolygon(basegfx::tools::createPolygonFromRect(getObjectRange())),
- rColors[0]));
- aRetval[0] = xRef;
- }
-
- // create solid fill steps
- for(sal_uInt32 a(0); a < rMatrices.size(); a++)
- {
- // create part polygon
- basegfx::B2DPolygon aNewPoly(rUnitPolygon);
- aNewPoly.transform(rMatrices[a]);
-
- // create solid fill
- const Primitive2DReference xRef(
- new PolyPolygonColorPrimitive2D(
- basegfx::B2DPolyPolygon(aNewPoly),
- rColors[a + 1]));
- aRetval[a + 1] = xRef;
- }
-
- return aRetval;
- }
-
- Primitive2DSequence FillGradientPrimitive2D::createNonOverlappingFill(
- const std::vector< basegfx::B2DHomMatrix >& rMatrices,
- const std::vector< basegfx::BColor >& rColors,
- const basegfx::B2DPolygon& rUnitPolygon) const
- {
- // prepare return value
- Primitive2DSequence aRetval;
- const sal_uInt32 nMatricesSize(rMatrices.size());
-
- if(nMatricesSize)
- {
- basegfx::B2DPolygon aOuterPoly(rUnitPolygon);
- aOuterPoly.transform(rMatrices[0]);
- basegfx::B2DPolyPolygon aCombinedPolyPoly(aOuterPoly);
- const sal_uInt32 nEntryCount(rColors.size() ? rMatrices.size() + 1 : rMatrices.size());
- sal_uInt32 nIndex(0);
-
- aRetval.realloc(nEntryCount);
-
- if(rColors.size())
- {
- basegfx::B2DRange aOuterPolyRange(aOuterPoly.getB2DRange());
- aOuterPolyRange.expand(getObjectRange());
- aCombinedPolyPoly.append(basegfx::tools::createPolygonFromRect(aOuterPolyRange));
- aRetval[nIndex++] = Primitive2DReference(new PolyPolygonColorPrimitive2D(aCombinedPolyPoly, rColors[0]));
- aCombinedPolyPoly = basegfx::B2DPolyPolygon(aOuterPoly);
- }
-
- for(sal_uInt32 a(1); a < nMatricesSize - 1; a++)
- {
- basegfx::B2DPolygon aInnerPoly(rUnitPolygon);
- aInnerPoly.transform(rMatrices[a]);
- aCombinedPolyPoly.append(aInnerPoly);
- aRetval[nIndex++] = Primitive2DReference(new PolyPolygonColorPrimitive2D(aCombinedPolyPoly, rColors[a]));
- aCombinedPolyPoly = basegfx::B2DPolyPolygon(aInnerPoly);
- }
-
- if(rColors.size())
- {
- aRetval[nIndex] = Primitive2DReference(new PolyPolygonColorPrimitive2D(
- aCombinedPolyPoly, rColors[rColors.size() - 1]));
- }
- }
-
- return aRetval;
- }
-
- Primitive2DSequence FillGradientPrimitive2D::createFill(bool bOverlapping) const
- {
- // prepare shape of the Unit Polygon
- basegfx::B2DPolygon aUnitPolygon;
-
- if(attribute::GRADIENTSTYLE_RADIAL == getFillGradient().getStyle()
- || attribute::GRADIENTSTYLE_ELLIPTICAL == getFillGradient().getStyle())
- {
- aUnitPolygon = basegfx::tools::createPolygonFromCircle(
- basegfx::B2DPoint(0,0), 1);
- }
- else if(attribute::GRADIENTSTYLE_LINEAR == maFillGradient.getStyle())
- {
- aUnitPolygon = basegfx::tools::createPolygonFromRect(basegfx::B2DRange(0, 0, 1, 1));
- }
- else
- {
- aUnitPolygon = basegfx::tools::createPolygonFromRect(basegfx::B2DRange(-1, -1, 1, 1));
- }
-
- // get the transform matrices and colors (where colors
- // will have one more entry that matrices)
- std::vector< basegfx::B2DHomMatrix > aMatrices;
- std::vector< basegfx::BColor > aColors;
- generateMatricesAndColors(aMatrices, aColors);
-
- if(bOverlapping)
- {
- return createOverlappingFill(aMatrices, aColors, aUnitPolygon);
- }
- else
- {
- return createNonOverlappingFill(aMatrices, aColors, aUnitPolygon);
- }
- }
-
- Primitive2DSequence FillGradientPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // default creates overlapping fill which works with AntiAliasing and without.
- // The non-overlapping version does not create single filled polygons, but
- // PolyPolygons where each one describes a 'ring' for the gradient such
- // that the rings will not overlap. This is useful fir the old XOR-paint
- // 'trick' of VCL which is recorded in Metafiles; so this version may be
- // used from the MetafilePrimitive2D in it's decomposition.
-
- if(!getFillGradient().isDefault())
- {
- return createFill(true);
- }
- else
- {
- return Primitive2DSequence();
- }
- }
-
- FillGradientPrimitive2D::FillGradientPrimitive2D(
- const basegfx::B2DRange& rObjectRange,
- const attribute::FillGradientAttribute& rFillGradient)
- : BufferedDecompositionPrimitive2D(),
- maObjectRange(rObjectRange),
- maFillGradient(rFillGradient)
- {
- }
-
- bool FillGradientPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const FillGradientPrimitive2D& rCompare = (FillGradientPrimitive2D&)rPrimitive;
-
- return (getObjectRange() == rCompare.getObjectRange()
- && getFillGradient() == rCompare.getFillGradient());
- }
-
- return false;
- }
-
- basegfx::B2DRange FillGradientPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // return ObjectRange
- return getObjectRange();
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(FillGradientPrimitive2D, PRIMITIVE2D_ID_FILLGRADIENTPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx b/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx
deleted file mode 100644
index 1e0e9fdff9..0000000000
--- a/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx
+++ /dev/null
@@ -1,164 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/fillhatchprimitive2d.hxx>
-#include <drawinglayer/texture/texture.hxx>
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence FillHatchPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- Primitive2DSequence aRetval;
- if(!getFillHatch().isDefault())
- {
- // create hatch
- const basegfx::BColor aHatchColor(getFillHatch().getColor());
- const double fAngle(getFillHatch().getAngle());
- ::std::vector< basegfx::B2DHomMatrix > aMatrices;
-
- // get hatch transformations
- switch(getFillHatch().getStyle())
- {
- case attribute::HATCHSTYLE_TRIPLE:
- {
- // rotated 45 degrees
- texture::GeoTexSvxHatch aHatch(getObjectRange(), getFillHatch().getDistance(), fAngle - F_PI4);
- aHatch.appendTransformations(aMatrices);
-
- // fall-through by purpose
- }
- case attribute::HATCHSTYLE_DOUBLE:
- {
- // rotated 90 degrees
- texture::GeoTexSvxHatch aHatch(getObjectRange(), getFillHatch().getDistance(), fAngle - F_PI2);
- aHatch.appendTransformations(aMatrices);
-
- // fall-through by purpose
- }
- case attribute::HATCHSTYLE_SINGLE:
- {
- // angle as given
- texture::GeoTexSvxHatch aHatch(getObjectRange(), getFillHatch().getDistance(), fAngle);
- aHatch.appendTransformations(aMatrices);
- }
- }
-
- // prepare return value
- const bool bFillBackground(getFillHatch().isFillBackground());
- aRetval.realloc(bFillBackground ? aMatrices.size() + 1L : aMatrices.size());
-
- // evtl. create filled background
- if(bFillBackground)
- {
- // create primitive for background
- const Primitive2DReference xRef(
- new PolyPolygonColorPrimitive2D(
- basegfx::B2DPolyPolygon(
- basegfx::tools::createPolygonFromRect(getObjectRange())), getBColor()));
- aRetval[0] = xRef;
- }
-
- // create primitives
- const basegfx::B2DPoint aStart(0.0, 0.0);
- const basegfx::B2DPoint aEnd(1.0, 0.0);
-
- for(sal_uInt32 a(0L); a < aMatrices.size(); a++)
- {
- const basegfx::B2DHomMatrix& rMatrix = aMatrices[a];
- basegfx::B2DPolygon aNewLine;
-
- aNewLine.append(rMatrix * aStart);
- aNewLine.append(rMatrix * aEnd);
-
- // create hairline
- const Primitive2DReference xRef(new PolygonHairlinePrimitive2D(aNewLine, aHatchColor));
- aRetval[bFillBackground ? (a + 1) : a] = xRef;
- }
- }
-
- return aRetval;
- }
-
- FillHatchPrimitive2D::FillHatchPrimitive2D(
- const basegfx::B2DRange& rObjectRange,
- const basegfx::BColor& rBColor,
- const attribute::FillHatchAttribute& rFillHatch)
- : BufferedDecompositionPrimitive2D(),
- maObjectRange(rObjectRange),
- maFillHatch(rFillHatch),
- maBColor(rBColor)
- {
- }
-
- bool FillHatchPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const FillHatchPrimitive2D& rCompare = (FillHatchPrimitive2D&)rPrimitive;
-
- return (getObjectRange() == rCompare.getObjectRange()
- && getFillHatch() == rCompare.getFillHatch()
- && getBColor() == rCompare.getBColor());
- }
-
- return false;
- }
-
- basegfx::B2DRange FillHatchPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // return ObjectRange
- return getObjectRange();
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(FillHatchPrimitive2D, PRIMITIVE2D_ID_FILLHATCHPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/graphicprimitive2d.cxx b/drawinglayer/source/primitive2d/graphicprimitive2d.cxx
deleted file mode 100644
index 55ed96d09c..0000000000
--- a/drawinglayer/source/primitive2d/graphicprimitive2d.cxx
+++ /dev/null
@@ -1,502 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/graphicprimitive2d.hxx>
-#include <drawinglayer/animation/animationtiming.hxx>
-#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-#include <drawinglayer/primitive2d/rendergraphicprimitive2d.hxx>
-#include <drawinglayer/primitive2d/animatedprimitive2d.hxx>
-#include <drawinglayer/primitive2d/metafileprimitive2d.hxx>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <drawinglayer/primitive2d/maskprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-// helper class for animated graphics
-
-#include <vcl/animate.hxx>
-#include <vcl/graph.hxx>
-#include <vcl/virdev.hxx>
-#include <vcl/svapp.hxx>
-#include <vcl/metaact.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-// includes for testing MetafilePrimitive2D::create2DDecomposition
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace
-{
- struct animationStep
- {
- BitmapEx maBitmapEx;
- sal_uInt32 mnTime;
- };
-
- class animatedBitmapExPreparator
- {
- ::Animation maAnimation;
- ::std::vector< animationStep > maSteps;
-
- sal_uInt32 generateStepTime(sal_uInt32 nIndex) const;
-
- public:
- animatedBitmapExPreparator(const Graphic& rGraphic);
-
- sal_uInt32 count() const { return maSteps.size(); }
- sal_uInt32 loopCount() const { return (sal_uInt32)maAnimation.GetLoopCount(); }
- sal_uInt32 stepTime(sal_uInt32 a) const { return maSteps[a].mnTime; }
- const BitmapEx& stepBitmapEx(sal_uInt32 a) const { return maSteps[a].maBitmapEx; }
- };
-
- sal_uInt32 animatedBitmapExPreparator::generateStepTime(sal_uInt32 nIndex) const
- {
- const AnimationBitmap& rAnimBitmap = maAnimation.Get(sal_uInt16(nIndex));
- sal_uInt32 nWaitTime(rAnimBitmap.nWait * 10);
-
- // #115934#
- // Take care of special value for MultiPage TIFFs. ATM these shall just
- // show their first page. Later we will offer some switching when object
- // is selected.
- if(ANIMATION_TIMEOUT_ON_CLICK == rAnimBitmap.nWait)
- {
- // ATM the huge value would block the timer, so
- // use a long time to show first page (whole day)
- nWaitTime = 100 * 60 * 60 * 24;
- }
-
- // Bad trap: There are animated gifs with no set WaitTime (!).
- // In that case use a default value.
- if(0L == nWaitTime)
- {
- nWaitTime = 100L;
- }
-
- return nWaitTime;
- }
-
- animatedBitmapExPreparator::animatedBitmapExPreparator(const Graphic& rGraphic)
- : maAnimation(rGraphic.GetAnimation())
- {
- OSL_ENSURE(GRAPHIC_BITMAP == rGraphic.GetType() && rGraphic.IsAnimated(), "animatedBitmapExPreparator: graphic is not animated (!)");
-
- // #128539# secure access to Animation, looks like there exist animated GIFs out there
- // with a step count of zero
- if(maAnimation.Count())
- {
- VirtualDevice aVirtualDevice(*Application::GetDefaultDevice());
- VirtualDevice aVirtualDeviceMask(*Application::GetDefaultDevice(), 1L);
-
- // Prepare VirtualDevices and their states
- aVirtualDevice.EnableMapMode(sal_False);
- aVirtualDeviceMask.EnableMapMode(sal_False);
- aVirtualDevice.SetOutputSizePixel(maAnimation.GetDisplaySizePixel());
- aVirtualDeviceMask.SetOutputSizePixel(maAnimation.GetDisplaySizePixel());
- aVirtualDevice.Erase();
- aVirtualDeviceMask.Erase();
-
- for(sal_uInt16 a(0L); a < maAnimation.Count(); a++)
- {
- animationStep aNextStep;
- aNextStep.mnTime = generateStepTime(a);
-
- // prepare step
- const AnimationBitmap& rAnimBitmap = maAnimation.Get(sal_uInt16(a));
-
- switch(rAnimBitmap.eDisposal)
- {
- case DISPOSE_NOT:
- {
- aVirtualDevice.DrawBitmapEx(rAnimBitmap.aPosPix, rAnimBitmap.aBmpEx);
- Bitmap aMask = rAnimBitmap.aBmpEx.GetMask();
-
- if(aMask.IsEmpty())
- {
- const Point aEmpty;
- const Rectangle aRect(aEmpty, aVirtualDeviceMask.GetOutputSizePixel());
- const Wallpaper aWallpaper(COL_BLACK);
- aVirtualDeviceMask.DrawWallpaper(aRect, aWallpaper);
- }
- else
- {
- BitmapEx aExpandVisibilityMask = BitmapEx(aMask, aMask);
- aVirtualDeviceMask.DrawBitmapEx(rAnimBitmap.aPosPix, aExpandVisibilityMask);
- }
-
- break;
- }
- case DISPOSE_BACK:
- {
- // #i70772# react on no mask, for primitives, too.
- const Bitmap aMask(rAnimBitmap.aBmpEx.GetMask());
- const Bitmap aContent(rAnimBitmap.aBmpEx.GetBitmap());
-
- aVirtualDeviceMask.Erase();
- aVirtualDevice.DrawBitmap(rAnimBitmap.aPosPix, aContent);
-
- if(aMask.IsEmpty())
- {
- const Rectangle aRect(rAnimBitmap.aPosPix, aContent.GetSizePixel());
- aVirtualDeviceMask.SetFillColor(COL_BLACK);
- aVirtualDeviceMask.SetLineColor();
- aVirtualDeviceMask.DrawRect(aRect);
- }
- else
- {
- aVirtualDeviceMask.DrawBitmap(rAnimBitmap.aPosPix, aMask);
- }
-
- break;
- }
- case DISPOSE_FULL:
- {
- aVirtualDevice.DrawBitmapEx(rAnimBitmap.aPosPix, rAnimBitmap.aBmpEx);
- break;
- }
- case DISPOSE_PREVIOUS :
- {
- aVirtualDevice.DrawBitmapEx(rAnimBitmap.aPosPix, rAnimBitmap.aBmpEx);
- aVirtualDeviceMask.DrawBitmap(rAnimBitmap.aPosPix, rAnimBitmap.aBmpEx.GetMask());
- break;
- }
- }
-
- // create BitmapEx
- Bitmap aMainBitmap = aVirtualDevice.GetBitmap(Point(), aVirtualDevice.GetOutputSizePixel());
- Bitmap aMaskBitmap = aVirtualDeviceMask.GetBitmap(Point(), aVirtualDeviceMask.GetOutputSizePixel());
- aNextStep.maBitmapEx = BitmapEx(aMainBitmap, aMaskBitmap);
-
- // add to vector
- maSteps.push_back(aNextStep);
- }
- }
- }
-} // end of anonymous namespace
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence GraphicPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D&
- ) const
- {
- Primitive2DSequence aRetval;
-
- if(255L != getGraphicAttr().GetTransparency())
- {
- Primitive2DReference xPrimitive;
-
- // do not apply mirroring from GraphicAttr to the Metafile by calling
- // GetTransformedGraphic, this will try to mirror the Metafile using Scale()
- // at the Metafile. This again calls Scale at the single MetaFile actions,
- // but this implementation never worked. I reworked that implementations,
- // but for security reasons i will try not to use it.
- basegfx::B2DHomMatrix aTransform(getTransform());
-
- if(getGraphicAttr().IsMirrored())
- {
- // content needs mirroring
- const bool bHMirr(getGraphicAttr().GetMirrorFlags() & BMP_MIRROR_HORZ);
- const bool bVMirr(getGraphicAttr().GetMirrorFlags() & BMP_MIRROR_VERT);
-
- // mirror by applying negative scale to the unit primitive and
- // applying the object transformation on it.
- aTransform = basegfx::tools::createScaleB2DHomMatrix(
- bHMirr ? -1.0 : 1.0,
- bVMirr ? -1.0 : 1.0);
- aTransform.translate(
- bHMirr ? 1.0 : 0.0,
- bVMirr ? 1.0 : 0.0);
- aTransform = getTransform() * aTransform;
- }
-
- // Get transformed graphic. Suppress rotation and cropping, only filtering is needed
- // here (and may be replaced later on). Cropping is handled below as mask primitive (if set).
- // Also need to suppress mirroring, it is part of the transformation now (see above).
- GraphicAttr aSuppressGraphicAttr(getGraphicAttr());
- aSuppressGraphicAttr.SetCrop(0, 0, 0, 0);
- aSuppressGraphicAttr.SetRotation(0);
- aSuppressGraphicAttr.SetMirrorFlags(0);
-
- const GraphicObject& rGraphicObject = getGraphicObject();
- const Graphic aTransformedGraphic(rGraphicObject.GetTransformedGraphic(&aSuppressGraphicAttr));
-
- switch(aTransformedGraphic.GetType())
- {
- case GRAPHIC_BITMAP :
- {
- if(aTransformedGraphic.IsAnimated())
- {
- // prepare animation data
- animatedBitmapExPreparator aData(aTransformedGraphic);
-
- if(aData.count())
- {
- // create sub-primitives for animated bitmap and the needed animation loop
- animation::AnimationEntryLoop aAnimationLoop(aData.loopCount() ? aData.loopCount() : 0xffff);
- Primitive2DSequence aBitmapPrimitives(aData.count());
-
- for(sal_uInt32 a(0L); a < aData.count(); a++)
- {
- animation::AnimationEntryFixed aTime((double)aData.stepTime(a), (double)a / (double)aData.count());
- aAnimationLoop.append(aTime);
- const Primitive2DReference xRef(new BitmapPrimitive2D(aData.stepBitmapEx(a), aTransform));
- aBitmapPrimitives[a] = xRef;
- }
-
- // prepare animation list
- animation::AnimationEntryList aAnimationList;
- aAnimationList.append(aAnimationLoop);
-
- // create and add animated switch primitive
- xPrimitive = Primitive2DReference(new AnimatedSwitchPrimitive2D(aAnimationList, aBitmapPrimitives, false));
- }
- }
- else
- {
- xPrimitive = Primitive2DReference(new BitmapPrimitive2D(aTransformedGraphic.GetBitmapEx(), aTransform));
- }
-
- break;
- }
-
- case GRAPHIC_GDIMETAFILE :
- {
- // create MetafilePrimitive2D
- const GDIMetaFile& rMetafile = aTransformedGraphic.GetGDIMetaFile();
-
- if( aTransformedGraphic.IsRenderGraphic() )
- {
- xPrimitive = Primitive2DReference(
- new RenderGraphicPrimitive2D(
- static_cast< MetaRenderGraphicAction* >(rMetafile.GetAction(0))->GetRenderGraphic(),
- aTransform));
- }
- else
- {
- xPrimitive = Primitive2DReference(
- new MetafilePrimitive2D(
- aTransform,
- rMetafile));
-
- // #i100357# find out if clipping is needed for this primitive. Unfortunately,
- // there exist Metafiles who's content is bigger than the proposed PrefSize set
- // at them. This is an error, but we need to work around this
- const Size aMetaFilePrefSize(rMetafile.GetPrefSize());
- const Size aMetaFileRealSize(
- const_cast< GDIMetaFile& >(rMetafile).GetBoundRect(
- *Application::GetDefaultDevice()).GetSize());
-
- if(aMetaFileRealSize.getWidth() > aMetaFilePrefSize.getWidth()
- || aMetaFileRealSize.getHeight() > aMetaFilePrefSize.getHeight())
- {
- // clipping needed. Embed to MaskPrimitive2D. Create childs and mask polygon
- const primitive2d::Primitive2DSequence aChildContent(&xPrimitive, 1);
- basegfx::B2DPolygon aMaskPolygon(basegfx::tools::createUnitPolygon());
- aMaskPolygon.transform(aTransform);
-
- xPrimitive = Primitive2DReference(
- new MaskPrimitive2D(
- basegfx::B2DPolyPolygon(aMaskPolygon),
- aChildContent));
- }
- }
-
- break;
- }
-
- default:
- {
- // nothing to create
- break;
- }
- }
-
- if(xPrimitive.is())
- {
- // check for cropping
- if(getGraphicAttr().IsCropped())
- {
- // decompose to get current pos and size
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
- getTransform().decompose(aScale, aTranslate, fRotate, fShearX);
-
- // create ranges. The current object range is just scale and translate
- const basegfx::B2DRange aCurrent(
- aTranslate.getX(), aTranslate.getY(),
- aTranslate.getX() + aScale.getX(), aTranslate.getY() + aScale.getY());
-
- // calculate scalings between real image size and logic object size. This
- // is necessary since the crop values are relative to original bitmap size
- double fFactorX(1.0);
- double fFactorY(1.0);
-
- {
- const MapMode aMapMode100thmm(MAP_100TH_MM);
- Size aBitmapSize(rGraphicObject.GetPrefSize());
-
- // #i95968# better support PrefMapMode; special for MAP_PIXEL was missing
- if(MAP_PIXEL == rGraphicObject.GetPrefMapMode().GetMapUnit())
- {
- aBitmapSize = Application::GetDefaultDevice()->PixelToLogic(aBitmapSize, aMapMode100thmm);
- }
- else
- {
- aBitmapSize = Application::GetDefaultDevice()->LogicToLogic(aBitmapSize, rGraphicObject.GetPrefMapMode(), aMapMode100thmm);
- }
-
- const double fDivX(aBitmapSize.Width() - getGraphicAttr().GetLeftCrop() - getGraphicAttr().GetRightCrop());
- const double fDivY(aBitmapSize.Height() - getGraphicAttr().GetTopCrop() - getGraphicAttr().GetBottomCrop());
-
- if(!basegfx::fTools::equalZero(fDivX))
- {
- fFactorX = aScale.getX() / fDivX;
- }
-
- if(!basegfx::fTools::equalZero(fDivY))
- {
- fFactorY = aScale.getY() / fDivY;
- }
- }
-
- // Create cropped range, describes the bounds of the original graphic
- basegfx::B2DRange aCropped;
- aCropped.expand(aCurrent.getMinimum() - basegfx::B2DPoint(getGraphicAttr().GetLeftCrop() * fFactorX, getGraphicAttr().GetTopCrop() * fFactorY));
- aCropped.expand(aCurrent.getMaximum() + basegfx::B2DPoint(getGraphicAttr().GetRightCrop() * fFactorX, getGraphicAttr().GetBottomCrop() * fFactorY));
-
- if(aCropped.isEmpty())
- {
- // nothing to add since cropped bitmap is completely empty
- // xPrimitive will not be used
- }
- else
- {
- // build new object transformation for transform primitive which contains xPrimitive
- basegfx::B2DHomMatrix aNewObjectTransform(getTransform());
- aNewObjectTransform.invert();
- aNewObjectTransform = basegfx::tools::createScaleTranslateB2DHomMatrix(
- aCropped.getWidth(), aCropped.getHeight(),
- aCropped.getMinX() - aCurrent.getMinX(), aCropped.getMinY() - aCurrent.getMinY())
- * aNewObjectTransform;
-
- // add shear, rotate and translate using combined matrix to speedup
- const basegfx::B2DHomMatrix aCombinedMatrix(basegfx::tools::createShearXRotateTranslateB2DHomMatrix(
- fShearX, fRotate, aTranslate.getX(), aTranslate.getY()));
- aNewObjectTransform = aCombinedMatrix * aNewObjectTransform;
-
- // prepare TransformPrimitive2D with xPrimitive
- const Primitive2DReference xTransformPrimitive(new TransformPrimitive2D(aNewObjectTransform, Primitive2DSequence(&xPrimitive, 1L)));
-
- if(aCurrent.isInside(aCropped))
- {
- // cropped just got smaller, no need to really use a mask. Add to destination directly
- appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, xTransformPrimitive);
- }
- else
- {
- // cropped got bigger, mask it with original object's bounds
- basegfx::B2DPolyPolygon aMaskPolyPolygon(basegfx::tools::createUnitPolygon());
- aMaskPolyPolygon.transform(getTransform());
-
- // create maskPrimitive with aMaskPolyPolygon and aMaskContentVector
- const Primitive2DReference xRefB(new MaskPrimitive2D(aMaskPolyPolygon, Primitive2DSequence(&xTransformPrimitive, 1L)));
- appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, xRefB);
- }
- }
- }
- else
- {
- // add to decomposition
- appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, xPrimitive);
- }
- }
- }
-
- return aRetval;
- }
-
- GraphicPrimitive2D::GraphicPrimitive2D(
- const basegfx::B2DHomMatrix& rTransform,
- const GraphicObject& rGraphicObject,
- const GraphicAttr& rGraphicAttr)
- : BufferedDecompositionPrimitive2D(),
- maTransform(rTransform),
- maGraphicObject(rGraphicObject),
- maGraphicAttr(rGraphicAttr)
- {
- }
-
- GraphicPrimitive2D::GraphicPrimitive2D(
- const basegfx::B2DHomMatrix& rTransform,
- const GraphicObject& rGraphicObject)
- : BufferedDecompositionPrimitive2D(),
- maTransform(rTransform),
- maGraphicObject(rGraphicObject),
- maGraphicAttr()
- {
- }
-
- bool GraphicPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const GraphicPrimitive2D& rCompare = (GraphicPrimitive2D&)rPrimitive;
-
- return (getTransform() == rCompare.getTransform()
- && getGraphicObject() == rCompare.getGraphicObject()
- && getGraphicAttr() == rCompare.getGraphicAttr());
- }
-
- return false;
- }
-
- basegfx::B2DRange GraphicPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0);
- aRetval.transform(getTransform());
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(GraphicPrimitive2D, PRIMITIVE2D_ID_GRAPHICPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/gridprimitive2d.cxx b/drawinglayer/source/primitive2d/gridprimitive2d.cxx
deleted file mode 100644
index 6c0fd1948a..0000000000
--- a/drawinglayer/source/primitive2d/gridprimitive2d.cxx
+++ /dev/null
@@ -1,323 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/gridprimitive2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx>
-#include <drawinglayer/primitive2d/markerarrayprimitive2d.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence GridPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- Primitive2DSequence aRetval;
-
- if(!rViewInformation.getViewport().isEmpty() && getWidth() > 0.0 && getHeight() > 0.0)
- {
- // decompose grid matrix to get logic size
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
- getTransform().decompose(aScale, aTranslate, fRotate, fShearX);
-
- // create grid matrix which transforms from scaled logic to view
- basegfx::B2DHomMatrix aRST(basegfx::tools::createShearXRotateTranslateB2DHomMatrix(
- fShearX, fRotate, aTranslate.getX(), aTranslate.getY()));
- aRST *= rViewInformation.getObjectToViewTransformation();
-
- // get step widths
- double fStepX(getWidth());
- double fStepY(getHeight());
- const double fMinimalStep(10.0);
-
- // guarantee a step width of 10.0
- if(basegfx::fTools::less(fStepX, fMinimalStep))
- {
- fStepX = fMinimalStep;
- }
-
- if(basegfx::fTools::less(fStepY, fMinimalStep))
- {
- fStepY = fMinimalStep;
- }
-
- // get relative distances in view coordinates
- double fViewStepX((rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(fStepX, 0.0)).getLength());
- double fViewStepY((rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(0.0, fStepY)).getLength());
- double fSmallStepX(1.0), fViewSmallStepX(1.0), fSmallStepY(1.0), fViewSmallStepY(1.0);
- sal_uInt32 nSmallStepsX(0L), nSmallStepsY(0L);
-
- // setup subdivisions
- if(getSubdivisionsX())
- {
- fSmallStepX = fStepX / getSubdivisionsX();
- fViewSmallStepX = fViewStepX / getSubdivisionsX();
- }
-
- if(getSubdivisionsY())
- {
- fSmallStepY = fStepY / getSubdivisionsY();
- fViewSmallStepY = fViewStepY / getSubdivisionsY();
- }
-
- // correct step width
- while(fViewStepX < getSmallestViewDistance())
- {
- fViewStepX *= 2.0;
- fStepX *= 2.0;
- }
-
- while(fViewStepY < getSmallestViewDistance())
- {
- fViewStepY *= 2.0;
- fStepY *= 2.0;
- }
-
- // correct small step width
- if(getSubdivisionsX())
- {
- while(fViewSmallStepX < getSmallestSubdivisionViewDistance())
- {
- fViewSmallStepX *= 2.0;
- fSmallStepX *= 2.0;
- }
-
- nSmallStepsX = (sal_uInt32)(fStepX / fSmallStepX);
- }
-
- if(getSubdivisionsY())
- {
- while(fViewSmallStepY < getSmallestSubdivisionViewDistance())
- {
- fViewSmallStepY *= 2.0;
- fSmallStepY *= 2.0;
- }
-
- nSmallStepsY = (sal_uInt32)(fStepY / fSmallStepY);
- }
-
- // prepare point vectors for point and cross markers
- std::vector< basegfx::B2DPoint > aPositionsPoint;
- std::vector< basegfx::B2DPoint > aPositionsCross;
-
- for(double fX(0.0); fX < aScale.getX(); fX += fStepX)
- {
- const bool bXZero(basegfx::fTools::equalZero(fX));
-
- for(double fY(0.0); fY < aScale.getY(); fY += fStepY)
- {
- const bool bYZero(basegfx::fTools::equalZero(fY));
-
- if(!bXZero && !bYZero)
- {
- // get discrete position and test against 3x3 area surrounding it
- // since it's a cross
- const double fHalfCrossSize(3.0 * 0.5);
- const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fX, fY));
- const basegfx::B2DRange aDiscreteRangeCross(
- aViewPos.getX() - fHalfCrossSize, aViewPos.getY() - fHalfCrossSize,
- aViewPos.getX() + fHalfCrossSize, aViewPos.getY() + fHalfCrossSize);
-
- if(rViewInformation.getDiscreteViewport().overlaps(aDiscreteRangeCross))
- {
- const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos);
- aPositionsCross.push_back(aLogicPos);
- }
- }
-
- if(getSubdivisionsX() && !bYZero)
- {
- double fF(fX + fSmallStepX);
-
- for(sal_uInt32 a(1L); a < nSmallStepsX && fF < aScale.getX(); a++, fF += fSmallStepX)
- {
- const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fF, fY));
-
- if(rViewInformation.getDiscreteViewport().isInside(aViewPos))
- {
- const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos);
- aPositionsPoint.push_back(aLogicPos);
- }
- }
- }
-
- if(getSubdivisionsY() && !bXZero)
- {
- double fF(fY + fSmallStepY);
-
- for(sal_uInt32 a(1L); a < nSmallStepsY && fF < aScale.getY(); a++, fF += fSmallStepY)
- {
- const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fX, fF));
-
- if(rViewInformation.getDiscreteViewport().isInside(aViewPos))
- {
- const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos);
- aPositionsPoint.push_back(aLogicPos);
- }
- }
- }
- }
- }
-
- // prepare return value
- const sal_uInt32 nCountPoint(aPositionsPoint.size());
- const sal_uInt32 nCountCross(aPositionsCross.size());
- const sal_uInt32 nRetvalCount((nCountPoint ? 1 : 0) + (nCountCross ? 1 : 0));
- sal_uInt32 nInsertCounter(0);
-
- aRetval.realloc(nRetvalCount);
-
- // add PointArrayPrimitive2D if point markers were added
- if(nCountPoint)
- {
- aRetval[nInsertCounter++] = Primitive2DReference(new PointArrayPrimitive2D(aPositionsPoint, getBColor()));
- }
-
- // add MarkerArrayPrimitive2D if cross markers were added
- if(nCountCross)
- {
- if(!getSubdivisionsX() && !getSubdivisionsY())
- {
- // no subdivisions, so fall back to points at grid positions, no need to
- // visualize a difference between divisions and sub-divisions
- aRetval[nInsertCounter++] = Primitive2DReference(new PointArrayPrimitive2D(aPositionsCross, getBColor()));
- }
- else
- {
- aRetval[nInsertCounter++] = Primitive2DReference(new MarkerArrayPrimitive2D(aPositionsCross, getCrossMarker()));
- }
- }
- }
-
- return aRetval;
- }
-
- GridPrimitive2D::GridPrimitive2D(
- const basegfx::B2DHomMatrix& rTransform,
- double fWidth,
- double fHeight,
- double fSmallestViewDistance,
- double fSmallestSubdivisionViewDistance,
- sal_uInt32 nSubdivisionsX,
- sal_uInt32 nSubdivisionsY,
- const basegfx::BColor& rBColor,
- const BitmapEx& rCrossMarker)
- : BufferedDecompositionPrimitive2D(),
- maTransform(rTransform),
- mfWidth(fWidth),
- mfHeight(fHeight),
- mfSmallestViewDistance(fSmallestViewDistance),
- mfSmallestSubdivisionViewDistance(fSmallestSubdivisionViewDistance),
- mnSubdivisionsX(nSubdivisionsX),
- mnSubdivisionsY(nSubdivisionsY),
- maBColor(rBColor),
- maCrossMarker(rCrossMarker),
- maLastObjectToViewTransformation(),
- maLastViewport()
- {
- }
-
- bool GridPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const GridPrimitive2D& rCompare = (GridPrimitive2D&)rPrimitive;
-
- return (getTransform() == rCompare.getTransform()
- && getWidth() == rCompare.getWidth()
- && getHeight() == rCompare.getHeight()
- && getSmallestViewDistance() == rCompare.getSmallestViewDistance()
- && getSmallestSubdivisionViewDistance() == rCompare.getSmallestSubdivisionViewDistance()
- && getSubdivisionsX() == rCompare.getSubdivisionsX()
- && getSubdivisionsY() == rCompare.getSubdivisionsY()
- && getBColor() == rCompare.getBColor()
- && getCrossMarker() == rCompare.getCrossMarker());
- }
-
- return false;
- }
-
- basegfx::B2DRange GridPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- // get object's range
- basegfx::B2DRange aUnitRange(0.0, 0.0, 1.0, 1.0);
- aUnitRange.transform(getTransform());
-
- // intersect with visible part
- aUnitRange.intersect(rViewInformation.getViewport());
-
- return aUnitRange;
- }
-
- Primitive2DSequence GridPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- if(getBuffered2DDecomposition().hasElements())
- {
- if(maLastViewport != rViewInformation.getViewport() || maLastObjectToViewTransformation != rViewInformation.getObjectToViewTransformation())
- {
- // conditions of last local decomposition have changed, delete
- const_cast< GridPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
- }
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- // remember ViewRange and ViewTransformation
- const_cast< GridPrimitive2D* >(this)->maLastObjectToViewTransformation = rViewInformation.getObjectToViewTransformation();
- const_cast< GridPrimitive2D* >(this)->maLastViewport = rViewInformation.getViewport();
- }
-
- // use parent implementation
- return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(GridPrimitive2D, PRIMITIVE2D_ID_GRIDPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/groupprimitive2d.cxx b/drawinglayer/source/primitive2d/groupprimitive2d.cxx
deleted file mode 100644
index abb6989a57..0000000000
--- a/drawinglayer/source/primitive2d/groupprimitive2d.cxx
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/groupprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- GroupPrimitive2D::GroupPrimitive2D( const Primitive2DSequence& rChildren )
- : BasePrimitive2D(),
- maChildren(rChildren)
- {
- }
-
- /** The compare opertator uses the Sequence::==operator, so only checking if
- the rererences are equal. All non-equal references are interpreted as
- non-equal.
- */
- bool GroupPrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const
- {
- if(BasePrimitive2D::operator==(rPrimitive))
- {
- const GroupPrimitive2D& rCompare = static_cast< const GroupPrimitive2D& >(rPrimitive);
-
- return (arePrimitive2DSequencesEqual(getChildren(), rCompare.getChildren()));
- }
-
- return false;
- }
-
- /// default: just return children, so all renderers not supporting group will use it's content
- Primitive2DSequence GroupPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- return getChildren();
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(GroupPrimitive2D, PRIMITIVE2D_ID_GROUPPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/helplineprimitive2d.cxx b/drawinglayer/source/primitive2d/helplineprimitive2d.cxx
deleted file mode 100644
index 45559b7c1b..0000000000
--- a/drawinglayer/source/primitive2d/helplineprimitive2d.cxx
+++ /dev/null
@@ -1,225 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/helplineprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygonclipper.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence HelplinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- std::vector< BasePrimitive2D* > aTempPrimitiveTarget;
-
- if(!rViewInformation.getViewport().isEmpty() && !getDirection().equalZero())
- {
- // position to view coordinates, DashLen and DashLen in logic
- const basegfx::B2DPoint aViewPosition(rViewInformation.getObjectToViewTransformation() * getPosition());
-
- switch(getStyle())
- {
- default : // HELPLINESTYLE2D_POINT
- {
- const double fViewFixValue(15.0);
- basegfx::B2DVector aNormalizedDirection(getDirection());
- aNormalizedDirection.normalize();
- aNormalizedDirection *= fViewFixValue;
- const basegfx::B2DPoint aStartA(aViewPosition - aNormalizedDirection);
- const basegfx::B2DPoint aEndA(aViewPosition + aNormalizedDirection);
- basegfx::B2DPolygon aLineA;
- aLineA.append(aStartA);
- aLineA.append(aEndA);
- aLineA.transform(rViewInformation.getInverseObjectToViewTransformation());
- PolygonMarkerPrimitive2D* pNewA = new PolygonMarkerPrimitive2D(aLineA, getRGBColA(), getRGBColB(), getDiscreteDashLength());
- aTempPrimitiveTarget.push_back(pNewA);
-
- const basegfx::B2DVector aPerpendicularNormalizedDirection(basegfx::getPerpendicular(aNormalizedDirection));
- const basegfx::B2DPoint aStartB(aViewPosition - aPerpendicularNormalizedDirection);
- const basegfx::B2DPoint aEndB(aViewPosition + aPerpendicularNormalizedDirection);
- basegfx::B2DPolygon aLineB;
- aLineB.append(aStartB);
- aLineB.append(aEndB);
- aLineB.transform(rViewInformation.getInverseObjectToViewTransformation());
- PolygonMarkerPrimitive2D* pNewB = new PolygonMarkerPrimitive2D(aLineB, getRGBColA(), getRGBColB(), getDiscreteDashLength());
- aTempPrimitiveTarget.push_back(pNewB);
-
- break;
- }
- case HELPLINESTYLE2D_LINE :
- {
- basegfx::B2DPolygon aLine;
-
- if(basegfx::areParallel(getDirection(), basegfx::B2DVector(1.0, 0.0)))
- {
- // parallel to X-Axis, get cuts with Y-Axes
- const double fCutA((rViewInformation.getDiscreteViewport().getMinX() - aViewPosition.getX()) / getDirection().getX());
- const double fCutB((rViewInformation.getDiscreteViewport().getMaxX() - aViewPosition.getX()) / getDirection().getX());
- const basegfx::B2DPoint aPosA(aViewPosition + (fCutA * getDirection()));
- const basegfx::B2DPoint aPosB(aViewPosition + (fCutB * getDirection()));
- const bool bBothLeft(aPosA.getX() < rViewInformation.getDiscreteViewport().getMinX() && aPosB.getX() < rViewInformation.getDiscreteViewport().getMinX());
- const bool bBothRight(aPosA.getX() > rViewInformation.getDiscreteViewport().getMaxX() && aPosB.getX() < rViewInformation.getDiscreteViewport().getMaxX());
-
- if(!bBothLeft && !bBothRight)
- {
- aLine.append(aPosA);
- aLine.append(aPosB);
- }
- }
- else
- {
- // get cuts with X-Axes
- const double fCutA((rViewInformation.getDiscreteViewport().getMinY() - aViewPosition.getY()) / getDirection().getY());
- const double fCutB((rViewInformation.getDiscreteViewport().getMaxY() - aViewPosition.getY()) / getDirection().getY());
- const basegfx::B2DPoint aPosA(aViewPosition + (fCutA * getDirection()));
- const basegfx::B2DPoint aPosB(aViewPosition + (fCutB * getDirection()));
- const bool bBothAbove(aPosA.getY() < rViewInformation.getDiscreteViewport().getMinY() && aPosB.getY() < rViewInformation.getDiscreteViewport().getMinY());
- const bool bBothBelow(aPosA.getY() > rViewInformation.getDiscreteViewport().getMaxY() && aPosB.getY() < rViewInformation.getDiscreteViewport().getMaxY());
-
- if(!bBothAbove && !bBothBelow)
- {
- aLine.append(aPosA);
- aLine.append(aPosB);
- }
- }
-
- if(aLine.count())
- {
- // clip against visible area
- const basegfx::B2DPolyPolygon aResult(basegfx::tools::clipPolygonOnRange(aLine, rViewInformation.getDiscreteViewport(), true, true));
-
- for(sal_uInt32 a(0L); a < aResult.count(); a++)
- {
- basegfx::B2DPolygon aPart(aResult.getB2DPolygon(a));
- aPart.transform(rViewInformation.getInverseObjectToViewTransformation());
- PolygonMarkerPrimitive2D* pNew = new PolygonMarkerPrimitive2D(aPart, getRGBColA(), getRGBColB(), getDiscreteDashLength());
- aTempPrimitiveTarget.push_back(pNew);
- }
- }
-
- break;
- }
- }
- }
-
- // prepare return value
- Primitive2DSequence aRetval(aTempPrimitiveTarget.size());
-
- for(sal_uInt32 a(0L); a < aTempPrimitiveTarget.size(); a++)
- {
- const Primitive2DReference xRef(aTempPrimitiveTarget[a]);
- aRetval[a] = xRef;
- }
-
- return aRetval;
- }
-
- HelplinePrimitive2D::HelplinePrimitive2D(
- const basegfx::B2DPoint& rPosition,
- const basegfx::B2DVector& rDirection,
- HelplineStyle2D eStyle,
- const basegfx::BColor& rRGBColA,
- const basegfx::BColor& rRGBColB,
- double fDiscreteDashLength)
- : BufferedDecompositionPrimitive2D(),
- maPosition(rPosition),
- maDirection(rDirection),
- meStyle(eStyle),
- maRGBColA(rRGBColA),
- maRGBColB(rRGBColB),
- mfDiscreteDashLength(fDiscreteDashLength),
- maLastObjectToViewTransformation(),
- maLastViewport()
- {
- }
-
- bool HelplinePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const HelplinePrimitive2D& rCompare = (HelplinePrimitive2D&)rPrimitive;
-
- return (getPosition() == rCompare.getPosition()
- && getDirection() == rCompare.getDirection()
- && getStyle() == rCompare.getStyle()
- && getRGBColA() == rCompare.getRGBColA()
- && getRGBColB() == rCompare.getRGBColB()
- && getDiscreteDashLength() == rCompare.getDiscreteDashLength());
- }
-
- return false;
- }
-
- Primitive2DSequence HelplinePrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- if(getBuffered2DDecomposition().hasElements())
- {
- if(maLastViewport != rViewInformation.getViewport() || maLastObjectToViewTransformation != rViewInformation.getObjectToViewTransformation())
- {
- // conditions of last local decomposition have changed, delete
- const_cast< HelplinePrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
- }
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- // remember ViewRange and ViewTransformation
- const_cast< HelplinePrimitive2D* >(this)->maLastObjectToViewTransformation = rViewInformation.getObjectToViewTransformation();
- const_cast< HelplinePrimitive2D* >(this)->maLastViewport = rViewInformation.getViewport();
- }
-
- // use parent implementation
- return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(HelplinePrimitive2D, PRIMITIVE2D_ID_HELPLINEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/hiddengeometryprimitive2d.cxx b/drawinglayer/source/primitive2d/hiddengeometryprimitive2d.cxx
deleted file mode 100644
index ab9e56b2e1..0000000000
--- a/drawinglayer/source/primitive2d/hiddengeometryprimitive2d.cxx
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * The Contents of this file are made available subject to
- * the terms of GNU Lesser General Public License Version 2.1.
- *
- *
- * GNU Lesser General Public License Version 2.1
- * =============================================
- * Copyright 2005 by Sun Microsystems, Inc.
- * 901 San Antonio Road, Palo Alto, CA 94303, USA
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software Foundation.
- *
- * This library 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 for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- HiddenGeometryPrimitive2D::HiddenGeometryPrimitive2D(
- const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren)
- {
- }
-
- basegfx::B2DRange HiddenGeometryPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- return getB2DRangeFromPrimitive2DSequence(getChildren(), rViewInformation);
- }
-
- Primitive2DSequence HiddenGeometryPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- return Primitive2DSequence();
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(HiddenGeometryPrimitive2D, PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/invertprimitive2d.cxx b/drawinglayer/source/primitive2d/invertprimitive2d.cxx
deleted file mode 100644
index dc1f10fbc0..0000000000
--- a/drawinglayer/source/primitive2d/invertprimitive2d.cxx
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/invertprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- InvertPrimitive2D::InvertPrimitive2D(
- const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren)
- {
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(InvertPrimitive2D, PRIMITIVE2D_ID_INVERTPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/markerarrayprimitive2d.cxx b/drawinglayer/source/primitive2d/markerarrayprimitive2d.cxx
deleted file mode 100644
index 5aa3beebd0..0000000000
--- a/drawinglayer/source/primitive2d/markerarrayprimitive2d.cxx
+++ /dev/null
@@ -1,160 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/markerarrayprimitive2d.hxx>
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence MarkerArrayPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- Primitive2DSequence xRetval;
- const std::vector< basegfx::B2DPoint >& rPositions = getPositions();
- const sal_uInt32 nMarkerCount(rPositions.size());
-
- if(nMarkerCount && !getMarker().IsEmpty())
- {
- // get pixel size
- Size aBitmapSize(getMarker().GetSizePixel());
-
- if(aBitmapSize.Width() && aBitmapSize.Height())
- {
- // get logic half pixel size
- basegfx::B2DVector aLogicHalfSize(rViewInformation.getInverseObjectToViewTransformation() *
- basegfx::B2DVector(aBitmapSize.getWidth() - 1.0, aBitmapSize.getHeight() - 1.0));
-
- // use half size for expand
- aLogicHalfSize *= 0.5;
-
- // number of primitives is known; realloc accordingly
- xRetval.realloc(nMarkerCount);
-
- for(sal_uInt32 a(0); a < nMarkerCount; a++)
- {
- const basegfx::B2DPoint& rPosition(rPositions[a]);
- const basegfx::B2DRange aRange(rPosition - aLogicHalfSize, rPosition + aLogicHalfSize);
- basegfx::B2DHomMatrix aTransform;
-
- aTransform.set(0, 0, aRange.getWidth());
- aTransform.set(1, 1, aRange.getHeight());
- aTransform.set(0, 2, aRange.getMinX());
- aTransform.set(1, 2, aRange.getMinY());
-
- xRetval[a] = Primitive2DReference(new BitmapPrimitive2D(getMarker(), aTransform));
- }
- }
- }
-
- return xRetval;
- }
-
- MarkerArrayPrimitive2D::MarkerArrayPrimitive2D(
- const std::vector< basegfx::B2DPoint >& rPositions,
- const BitmapEx& rMarker)
- : BufferedDecompositionPrimitive2D(),
- maPositions(rPositions),
- maMarker(rMarker)
- {
- }
-
- bool MarkerArrayPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const MarkerArrayPrimitive2D& rCompare = (MarkerArrayPrimitive2D&)rPrimitive;
-
- return (getPositions() == rCompare.getPositions()
- && getMarker() == rCompare.getMarker());
- }
-
- return false;
- }
-
- basegfx::B2DRange MarkerArrayPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- basegfx::B2DRange aRetval;
-
- if(getPositions().size())
- {
- // get the basic range from the position vector
- for(std::vector< basegfx::B2DPoint >::const_iterator aIter(getPositions().begin()); aIter != getPositions().end(); aIter++)
- {
- aRetval.expand(*aIter);
- }
-
- if(!getMarker().IsEmpty())
- {
- // get pixel size
- const Size aBitmapSize(getMarker().GetSizePixel());
-
- if(aBitmapSize.Width() && aBitmapSize.Height())
- {
- // get logic half size
- basegfx::B2DVector aLogicHalfSize(rViewInformation.getInverseObjectToViewTransformation() *
- basegfx::B2DVector(aBitmapSize.getWidth(), aBitmapSize.getHeight()));
-
- // use half size for expand
- aLogicHalfSize *= 0.5;
-
- // apply aLogicHalfSize
- aRetval.expand(aRetval.getMinimum() - aLogicHalfSize);
- aRetval.expand(aRetval.getMaximum() + aLogicHalfSize);
- }
- }
- }
-
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(MarkerArrayPrimitive2D, PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/maskprimitive2d.cxx b/drawinglayer/source/primitive2d/maskprimitive2d.cxx
deleted file mode 100644
index ab1d36f3cc..0000000000
--- a/drawinglayer/source/primitive2d/maskprimitive2d.cxx
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/maskprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- MaskPrimitive2D::MaskPrimitive2D(
- const basegfx::B2DPolyPolygon& rMask,
- const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren),
- maMask(rMask)
- {
- }
-
- bool MaskPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(GroupPrimitive2D::operator==(rPrimitive))
- {
- const MaskPrimitive2D& rCompare = static_cast< const MaskPrimitive2D& >(rPrimitive);
-
- return (getMask() == rCompare.getMask());
- }
-
- return false;
- }
-
- basegfx::B2DRange MaskPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- return getMask().getB2DRange();
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(MaskPrimitive2D, PRIMITIVE2D_ID_MASKPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/mediaprimitive2d.cxx b/drawinglayer/source/primitive2d/mediaprimitive2d.cxx
deleted file mode 100644
index 4c69061e81..0000000000
--- a/drawinglayer/source/primitive2d/mediaprimitive2d.cxx
+++ /dev/null
@@ -1,166 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/mediaprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <avmedia/mediawindow.hxx>
-#include <svtools/grfmgr.hxx>
-#include <drawinglayer/primitive2d/graphicprimitive2d.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence MediaPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- Primitive2DSequence xRetval(1);
-
- // create background object
- basegfx::B2DPolygon aBackgroundPolygon(basegfx::tools::createUnitPolygon());
- aBackgroundPolygon.transform(getTransform());
- const Primitive2DReference xRefBackground(
- new PolyPolygonColorPrimitive2D(
- basegfx::B2DPolyPolygon(aBackgroundPolygon),
- getBackgroundColor()));
- xRetval[0] = xRefBackground;
-
- // try to get graphic snapshot
- const Graphic aGraphic(avmedia::MediaWindow::grabFrame(getURL(), true));
-
- if(GRAPHIC_BITMAP == aGraphic.GetType() || GRAPHIC_GDIMETAFILE == aGraphic.GetType())
- {
- const GraphicObject aGraphicObject(aGraphic);
- const GraphicAttr aGraphicAttr;
- xRetval.realloc(2);
- xRetval[0] = xRefBackground;
- xRetval[1] = Primitive2DReference(new GraphicPrimitive2D(getTransform(), aGraphicObject, aGraphicAttr));
- }
-
- if(getDiscreteBorder())
- {
- const basegfx::B2DVector aDiscreteInLogic(rViewInformation.getInverseObjectToViewTransformation() *
- basegfx::B2DVector((double)getDiscreteBorder(), (double)getDiscreteBorder()));
- const double fDiscreteSize(aDiscreteInLogic.getX() + aDiscreteInLogic.getY());
-
- basegfx::B2DRange aSourceRange(0.0, 0.0, 1.0, 1.0);
- aSourceRange.transform(getTransform());
-
- basegfx::B2DRange aDestRange(aSourceRange);
- aDestRange.grow(-0.5 * fDiscreteSize);
-
- if(basegfx::fTools::equalZero(aDestRange.getWidth()) || basegfx::fTools::equalZero(aDestRange.getHeight()))
- {
- // shrunk primitive has no content (zero size in X or Y), nothing to display. Still create
- // invisible content for HitTest and BoundRect
- const Primitive2DReference xHiddenLines(new HiddenGeometryPrimitive2D(xRetval));
-
- xRetval = Primitive2DSequence(&xHiddenLines, 1);
- }
- else
- {
- // create transformation matrix from original range to shrunk range
- basegfx::B2DHomMatrix aTransform;
- aTransform.translate(-aSourceRange.getMinX(), -aSourceRange.getMinY());
- aTransform.scale(aDestRange.getWidth() / aSourceRange.getWidth(), aDestRange.getHeight() / aSourceRange.getHeight());
- aTransform.translate(aDestRange.getMinX(), aDestRange.getMinY());
-
- // add transform primitive
- const Primitive2DReference aScaled(new TransformPrimitive2D(aTransform, xRetval));
- xRetval = Primitive2DSequence(&aScaled, 1L);
- }
- }
-
- return xRetval;
- }
-
- MediaPrimitive2D::MediaPrimitive2D(
- const basegfx::B2DHomMatrix& rTransform,
- const rtl::OUString& rURL,
- const basegfx::BColor& rBackgroundColor,
- sal_uInt32 nDiscreteBorder)
- : BufferedDecompositionPrimitive2D(),
- maTransform(rTransform),
- maURL(rURL),
- maBackgroundColor(rBackgroundColor),
- mnDiscreteBorder(nDiscreteBorder)
- {
- }
-
- bool MediaPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const MediaPrimitive2D& rCompare = (MediaPrimitive2D&)rPrimitive;
-
- return (getTransform() == rCompare.getTransform()
- && getURL() == rCompare.getURL()
- && getBackgroundColor() == rCompare.getBackgroundColor()
- && getDiscreteBorder() == rCompare.getDiscreteBorder());
- }
-
- return false;
- }
-
- basegfx::B2DRange MediaPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0);
- aRetval.transform(getTransform());
-
- if(getDiscreteBorder())
- {
- const basegfx::B2DVector aDiscreteInLogic(rViewInformation.getInverseObjectToViewTransformation() *
- basegfx::B2DVector((double)getDiscreteBorder(), (double)getDiscreteBorder()));
- const double fDiscreteSize(aDiscreteInLogic.getX() + aDiscreteInLogic.getY());
-
- aRetval.grow(-0.5 * fDiscreteSize);
- }
-
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(MediaPrimitive2D, PRIMITIVE2D_ID_MEDIAPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/metafileprimitive2d.cxx b/drawinglayer/source/primitive2d/metafileprimitive2d.cxx
deleted file mode 100644
index e7795981ea..0000000000
--- a/drawinglayer/source/primitive2d/metafileprimitive2d.cxx
+++ /dev/null
@@ -1,3287 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/metafileprimitive2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <basegfx/color/bcolor.hxx>
-#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx>
-#include <vcl/lineinfo.hxx>
-#include <drawinglayer/attribute/lineattribute.hxx>
-#include <drawinglayer/attribute/strokeattribute.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <vcl/metaact.hxx>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <drawinglayer/primitive2d/discretebitmapprimitive2d.hxx>
-#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-#include <vcl/salbtype.hxx>
-#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx>
-#include <drawinglayer/primitive2d/fillgradientprimitive2d.hxx>
-#include <vcl/svapp.hxx>
-#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx>
-#include <drawinglayer/primitive2d/fillhatchprimitive2d.hxx>
-#include <drawinglayer/primitive2d/maskprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygonclipper.hxx>
-#include <drawinglayer/primitive2d/invertprimitive2d.hxx>
-#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx>
-#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx>
-#include <drawinglayer/primitive2d/wallpaperprimitive2d.hxx>
-#include <drawinglayer/primitive2d/textprimitive2d.hxx>
-#include <drawinglayer/primitive2d/textlayoutdevice.hxx>
-#include <drawinglayer/primitive2d/textdecoratedprimitive2d.hxx>
-#include <i18npool/mslangid.hxx>
-#include <drawinglayer/primitive2d/textlineprimitive2d.hxx>
-#include <drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx>
-#include <drawinglayer/primitive2d/epsprimitive2d.hxx>
-#include <drawinglayer/primitive2d/rendergraphicprimitive2d.hxx>
-#include <numeric>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace
-{
- /** helper class for graphic context
-
- This class allows to hold a complete status of classic
- VCL OutputDevice stati. This data is needed for correct
- interpretation of the MetaFile action flow.
- */
- class PropertyHolder
- {
- private:
- /// current transformation (aka MapMode)
- basegfx::B2DHomMatrix maTransformation;
- MapUnit maMapUnit;
-
- /// current colors
- basegfx::BColor maLineColor;
- basegfx::BColor maFillColor;
- basegfx::BColor maTextColor;
- basegfx::BColor maTextFillColor;
- basegfx::BColor maTextLineColor;
- basegfx::BColor maOverlineColor;
-
- /// clipping
- basegfx::B2DPolyPolygon maClipPolyPoygon;
-
- /// font, etc.
- Font maFont;
- RasterOp maRasterOp;
- sal_uInt32 mnLayoutMode;
- LanguageType maLanguageType;
- sal_uInt16 mnPushFlags;
-
- /// bitfield
- /// contains all active markers
- bool mbLineColor : 1;
- bool mbFillColor : 1;
- bool mbTextColor : 1;
- bool mbTextFillColor : 1;
- bool mbTextLineColor : 1;
- bool mbOverlineColor : 1;
- bool mbClipPolyPolygonActive : 1;
-
- public:
- PropertyHolder()
- : maTransformation(),
- maMapUnit(MAP_100TH_MM),
- maLineColor(),
- maFillColor(),
- maTextColor(COL_BLACK),
- maTextFillColor(),
- maTextLineColor(),
- maOverlineColor(),
- maClipPolyPoygon(),
- maFont(),
- maRasterOp(ROP_OVERPAINT),
- mnLayoutMode(0),
- maLanguageType(0),
- mnPushFlags(0),
- mbLineColor(false),
- mbFillColor(false),
- mbTextColor(true),
- mbTextFillColor(false),
- mbTextLineColor(false),
- mbOverlineColor(false),
- mbClipPolyPolygonActive(false)
- {
- }
-
- ~PropertyHolder()
- {
- }
-
- /// read/write accesses
- const basegfx::B2DHomMatrix& getTransformation() const { return maTransformation; }
- void setTransformation(const basegfx::B2DHomMatrix& rNew) { if(rNew != maTransformation) maTransformation = rNew; }
-
- MapUnit getMapUnit() const { return maMapUnit; }
- void setMapUnit(MapUnit eNew) { if(eNew != maMapUnit) maMapUnit = eNew; }
-
- const basegfx::BColor& getLineColor() const { return maLineColor; }
- void setLineColor(const basegfx::BColor& rNew) { if(rNew != maLineColor) maLineColor = rNew; }
- bool getLineColorActive() const { return mbLineColor; }
- void setLineColorActive(bool bNew) { if(bNew != mbLineColor) mbLineColor = bNew; }
-
- const basegfx::BColor& getFillColor() const { return maFillColor; }
- void setFillColor(const basegfx::BColor& rNew) { if(rNew != maFillColor) maFillColor = rNew; }
- bool getFillColorActive() const { return mbFillColor; }
- void setFillColorActive(bool bNew) { if(bNew != mbFillColor) mbFillColor = bNew; }
-
- const basegfx::BColor& getTextColor() const { return maTextColor; }
- void setTextColor(const basegfx::BColor& rNew) { if(rNew != maTextColor) maTextColor = rNew; }
- bool getTextColorActive() const { return mbTextColor; }
- void setTextColorActive(bool bNew) { if(bNew != mbTextColor) mbTextColor = bNew; }
-
- const basegfx::BColor& getTextFillColor() const { return maTextFillColor; }
- void setTextFillColor(const basegfx::BColor& rNew) { if(rNew != maTextFillColor) maTextFillColor = rNew; }
- bool getTextFillColorActive() const { return mbTextFillColor; }
- void setTextFillColorActive(bool bNew) { if(bNew != mbTextFillColor) mbTextFillColor = bNew; }
-
- const basegfx::BColor& getTextLineColor() const { return maTextLineColor; }
- void setTextLineColor(const basegfx::BColor& rNew) { if(rNew != maTextLineColor) maTextLineColor = rNew; }
- bool getTextLineColorActive() const { return mbTextLineColor; }
- void setTextLineColorActive(bool bNew) { if(bNew != mbTextLineColor) mbTextLineColor = bNew; }
-
- const basegfx::BColor& getOverlineColor() const { return maOverlineColor; }
- void setOverlineColor(const basegfx::BColor& rNew) { if(rNew != maOverlineColor) maOverlineColor = rNew; }
- bool getOverlineColorActive() const { return mbOverlineColor; }
- void setOverlineColorActive(bool bNew) { if(bNew != mbOverlineColor) mbOverlineColor = bNew; }
-
- const basegfx::B2DPolyPolygon& getClipPolyPolygon() const { return maClipPolyPoygon; }
- void setClipPolyPolygon(const basegfx::B2DPolyPolygon& rNew) { if(rNew != maClipPolyPoygon) maClipPolyPoygon = rNew; }
- bool getClipPolyPolygonActive() const { return mbClipPolyPolygonActive; }
- void setClipPolyPolygonActive(bool bNew) { if(bNew != mbClipPolyPolygonActive) mbClipPolyPolygonActive = bNew; }
-
- const Font& getFont() const { return maFont; }
- void setFont(const Font& rFont) { if(rFont != maFont) maFont = rFont; }
-
- const RasterOp& getRasterOp() const { return maRasterOp; }
- void setRasterOp(const RasterOp& rRasterOp) { if(rRasterOp != maRasterOp) maRasterOp = rRasterOp; }
- bool isRasterOpInvert() const { return (ROP_XOR == maRasterOp || ROP_INVERT == maRasterOp); }
- bool isRasterOpForceBlack() const { return ROP_0 == maRasterOp; }
- bool isRasterOpActive() const { return isRasterOpInvert() || isRasterOpForceBlack(); }
-
- sal_uInt32 getLayoutMode() const { return mnLayoutMode; }
- void setLayoutMode(sal_uInt32 nNew) { if(nNew != mnLayoutMode) mnLayoutMode = nNew; }
-
- LanguageType getLanguageType() const { return maLanguageType; }
- void setLanguageType(LanguageType aNew) { if(aNew != maLanguageType) maLanguageType = aNew; }
-
- sal_uInt16 getPushFlags() const { return mnPushFlags; }
- void setPushFlags(sal_uInt16 nNew) { if(nNew != mnPushFlags) mnPushFlags = nNew; }
-
- bool getLineOrFillActive() const { return (mbLineColor || mbFillColor); }
- };
-} // end of anonymous namespace
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace
-{
- /** stack for properites
-
- This class builds a stack based on the PropertyHolder
- class. It encapsulates the pointer/new/delete usage to
- make it safe and implements the push/pop as needed by a
- VCL Metafile interpreter. The critical part here are the
- flag values VCL OutputDevice uses here; not all stuff is
- pushed and thus needs to be copied at pop.
- */
- class PropertyHolders
- {
- private:
- std::vector< PropertyHolder* > maPropertyHolders;
-
- public:
- PropertyHolders()
- {
- maPropertyHolders.push_back(new PropertyHolder());
- }
-
- sal_uInt32 size() const
- {
- return maPropertyHolders.size();
- }
-
- void PushDefault()
- {
- PropertyHolder* pNew = new PropertyHolder();
- maPropertyHolders.push_back(pNew);
- }
-
- void Push(sal_uInt16 nPushFlags)
- {
- if(nPushFlags)
- {
- OSL_ENSURE(maPropertyHolders.size(), "PropertyHolders: PUSH with no property holders (!)");
- if ( !maPropertyHolders.empty() )
- {
- PropertyHolder* pNew = new PropertyHolder(*maPropertyHolders.back());
- pNew->setPushFlags(nPushFlags);
- maPropertyHolders.push_back(pNew);
- }
- }
- }
-
- void Pop()
- {
- OSL_ENSURE(maPropertyHolders.size(), "PropertyHolders: POP with no property holders (!)");
- const sal_uInt32 nSize(maPropertyHolders.size());
-
- if(nSize)
- {
- const PropertyHolder* pTip = maPropertyHolders.back();
- const sal_uInt16 nPushFlags(pTip->getPushFlags());
-
- if(nPushFlags)
- {
- if(nSize > 1)
- {
- // copy back content for all non-set flags
- PropertyHolder* pLast = maPropertyHolders[nSize - 2];
-
- if(PUSH_ALL != nPushFlags)
- {
- if(!(nPushFlags & PUSH_LINECOLOR ))
- {
- pLast->setLineColor(pTip->getLineColor());
- pLast->setLineColorActive(pTip->getLineColorActive());
- }
- if(!(nPushFlags & PUSH_FILLCOLOR ))
- {
- pLast->setFillColor(pTip->getFillColor());
- pLast->setFillColorActive(pTip->getFillColorActive());
- }
- if(!(nPushFlags & PUSH_FONT ))
- {
- pLast->setFont(pTip->getFont());
- }
- if(!(nPushFlags & PUSH_TEXTCOLOR ))
- {
- pLast->setTextColor(pTip->getTextColor());
- pLast->setTextColorActive(pTip->getTextColorActive());
- }
- if(!(nPushFlags & PUSH_MAPMODE ))
- {
- pLast->setTransformation(pTip->getTransformation());
- pLast->setMapUnit(pTip->getMapUnit());
- }
- if(!(nPushFlags & PUSH_CLIPREGION ))
- {
- pLast->setClipPolyPolygon(pTip->getClipPolyPolygon());
- pLast->setClipPolyPolygonActive(pTip->getClipPolyPolygonActive());
- }
- if(!(nPushFlags & PUSH_RASTEROP ))
- {
- pLast->setRasterOp(pTip->getRasterOp());
- }
- if(!(nPushFlags & PUSH_TEXTFILLCOLOR ))
- {
- pLast->setTextFillColor(pTip->getTextFillColor());
- pLast->setTextFillColorActive(pTip->getTextFillColorActive());
- }
- if(!(nPushFlags & PUSH_TEXTALIGN ))
- {
- if(pLast->getFont().GetAlign() != pTip->getFont().GetAlign())
- {
- Font aFont(pLast->getFont());
- aFont.SetAlign(pTip->getFont().GetAlign());
- pLast->setFont(aFont);
- }
- }
- if(!(nPushFlags & PUSH_REFPOINT ))
- {
- // not supported
- }
- if(!(nPushFlags & PUSH_TEXTLINECOLOR ))
- {
- pLast->setTextLineColor(pTip->getTextLineColor());
- pLast->setTextLineColorActive(pTip->getTextLineColorActive());
- }
- if(!(nPushFlags & PUSH_TEXTLAYOUTMODE ))
- {
- pLast->setLayoutMode(pTip->getLayoutMode());
- }
- if(!(nPushFlags & PUSH_TEXTLANGUAGE ))
- {
- pLast->setLanguageType(pTip->getLanguageType());
- }
- if(!(nPushFlags & PUSH_OVERLINECOLOR ))
- {
- pLast->setOverlineColor(pTip->getOverlineColor());
- pLast->setOverlineColorActive(pTip->getOverlineColorActive());
- }
- }
- }
- }
-
- // execute the pop
- delete maPropertyHolders.back();
- maPropertyHolders.pop_back();
- }
- }
-
- PropertyHolder& Current()
- {
- static PropertyHolder aDummy;
- OSL_ENSURE(maPropertyHolders.size(), "PropertyHolders: CURRENT with no property holders (!)");
- return maPropertyHolders.empty() ? aDummy : *maPropertyHolders.back();
- }
-
- ~PropertyHolders()
- {
- while(!maPropertyHolders.empty())
- {
- delete maPropertyHolders.back();
- maPropertyHolders.pop_back();
- }
- }
- };
-} // end of anonymous namespace
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace
-{
- /** helper to convert a Region to a B2DPolyPolygon
- when it does not yet contain one. In the future
- this may be expanded to merge the polygons created
- from rectangles or use a special algo to directly turn
- the spans of regions to a single, already merged
- PolyPolygon.
- */
- basegfx::B2DPolyPolygon getB2DPolyPolygonFromRegion(const Region& rRegion)
- {
- basegfx::B2DPolyPolygon aRetval;
-
- if(!rRegion.IsEmpty())
- {
- Region aRegion(rRegion);
- aRetval = aRegion.GetB2DPolyPolygon();
-
- if(!aRetval.count())
- {
- RegionHandle aRegionHandle(aRegion.BeginEnumRects());
- Rectangle aRegionRectangle;
-
- while(aRegion.GetEnumRects(aRegionHandle, aRegionRectangle))
- {
- if(!aRegionRectangle.IsEmpty())
- {
- const basegfx::B2DRange aRegionRange(
- aRegionRectangle.Left(), aRegionRectangle.Top(),
- aRegionRectangle.Right(), aRegionRectangle.Bottom());
- aRetval.append(basegfx::tools::createPolygonFromRect(aRegionRange));
- }
- }
-
- aRegion.EndEnumRects(aRegionHandle);
- }
- }
-
- return aRetval;
- }
-} // end of anonymous namespace
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace
-{
- /** Helper class to buffer and hold a Primive target vector. It
- encapsulates the new/delete functionality and aloows to work
- on pointers of the implementation classes. All data will
- be converted to uno sequences of uno references when accessing the
- data.
- */
- class TargetHolder
- {
- private:
- std::vector< drawinglayer::primitive2d::BasePrimitive2D* > aTargets;
-
- public:
- TargetHolder()
- : aTargets()
- {
- }
-
- ~TargetHolder()
- {
- const sal_uInt32 nCount(aTargets.size());
-
- for(sal_uInt32 a(0); a < nCount; a++)
- {
- delete aTargets[a];
- }
- }
-
- sal_uInt32 size() const
- {
- return aTargets.size();
- }
-
- void append(drawinglayer::primitive2d::BasePrimitive2D* pCandidate)
- {
- if(pCandidate)
- {
- aTargets.push_back(pCandidate);
- }
- }
-
- drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequence(const PropertyHolder& rPropertyHolder)
- {
- const sal_uInt32 nCount(aTargets.size());
- drawinglayer::primitive2d::Primitive2DSequence xRetval(nCount);
-
- for(sal_uInt32 a(0); a < nCount; a++)
- {
- xRetval[a] = aTargets[a];
- }
-
- // All Targets were pointers, but do not need to be deleted since they
- // were converted to UNO API references now, so they stay as long as
- // referenced. Do NOT delete the C++ implementation classes here, but clear
- // the buffer to not delete them in the destructor.
- aTargets.clear();
-
- if(xRetval.hasElements() && rPropertyHolder.getClipPolyPolygonActive())
- {
- const basegfx::B2DPolyPolygon& rClipPolyPolygon = rPropertyHolder.getClipPolyPolygon();
-
- if(rClipPolyPolygon.count())
- {
- const drawinglayer::primitive2d::Primitive2DReference xMask(
- new drawinglayer::primitive2d::MaskPrimitive2D(
- rClipPolyPolygon,
- xRetval));
-
- xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xMask, 1);
- }
- }
-
- return xRetval;
- }
- };
-} // end of anonymous namespace
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace
-{
- /** Helper class which builds a stack on the TargetHolder class */
- class TargetHolders
- {
- private:
- std::vector< TargetHolder* > maTargetHolders;
-
- public:
- TargetHolders()
- {
- maTargetHolders.push_back(new TargetHolder());
- }
-
- sal_uInt32 size() const
- {
- return maTargetHolders.size();
- }
-
- void Push()
- {
- maTargetHolders.push_back(new TargetHolder());
- }
-
- void Pop()
- {
- OSL_ENSURE(maTargetHolders.size(), "TargetHolders: POP with no property holders (!)");
- if(!maTargetHolders.empty())
- {
- delete maTargetHolders.back();
- maTargetHolders.pop_back();
- }
- }
-
- TargetHolder& Current()
- {
- OSL_ENSURE(maTargetHolders.size(), "TargetHolders: CURRENT with no property holders (!)");
- return *maTargetHolders.back();
- }
-
- ~TargetHolders()
- {
- while(!maTargetHolders.empty())
- {
- delete maTargetHolders.back();
- maTargetHolders.pop_back();
- }
- }
- };
-} // end of anonymous namespace
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- /** NonOverlappingFillGradientPrimitive2D class
-
- This is a special version of the FillGradientPrimitive2D which decomposes
- to a non-overlapping geometry version of the gradient. This needs to be
- used to support the old XOR paint-'trick'.
-
- It does not need an own identifier since a renderer who wants to interpret
- it itself may do so. It just overloads the decomposition of the C++
- implementation class to do an alternative decomposition.
- */
- class NonOverlappingFillGradientPrimitive2D : public FillGradientPrimitive2D
- {
- protected:
- /// local decomposition.
- virtual Primitive2DSequence create2DDecomposition(
- const geometry::ViewInformation2D& rViewInformation) const;
-
- public:
- /// constructor
- NonOverlappingFillGradientPrimitive2D(
- const basegfx::B2DRange& rObjectRange,
- const attribute::FillGradientAttribute& rFillGradient)
- : FillGradientPrimitive2D(rObjectRange, rFillGradient)
- {
- }
- };
-
- Primitive2DSequence NonOverlappingFillGradientPrimitive2D::create2DDecomposition(
- const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- if(!getFillGradient().isDefault())
- {
- return createFill(false);
- }
- else
- {
- return Primitive2DSequence();
- }
- }
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace
-{
- /** helper to convert a MapMode to a transformation */
- basegfx::B2DHomMatrix getTransformFromMapMode(const MapMode& rMapMode)
- {
- basegfx::B2DHomMatrix aMapping;
- const Fraction aNoScale(1, 1);
- const Point& rOrigin(rMapMode.GetOrigin());
-
- if(0 != rOrigin.X() || 0 != rOrigin.Y())
- {
- aMapping.translate(rOrigin.X(), rOrigin.Y());
- }
-
- if(rMapMode.GetScaleX() != aNoScale || rMapMode.GetScaleY() != aNoScale)
- {
- aMapping.scale(
- double(rMapMode.GetScaleX()),
- double(rMapMode.GetScaleY()));
- }
-
- return aMapping;
- }
-
- /** helper to create a PointArrayPrimitive2D based on current context */
- void createPointArrayPrimitive(
- const std::vector< basegfx::B2DPoint >& rPositions,
- TargetHolder& rTarget,
- PropertyHolder& rProperties,
- basegfx::BColor aBColor)
- {
- if(!rPositions.empty())
- {
- if(rProperties.getTransformation().isIdentity())
- {
- rTarget.append(
- new drawinglayer::primitive2d::PointArrayPrimitive2D(
- rPositions,
- aBColor));
- }
- else
- {
- std::vector< basegfx::B2DPoint > aPositions(rPositions);
-
- for(sal_uInt32 a(0); a < aPositions.size(); a++)
- {
- aPositions[a] = rProperties.getTransformation() * aPositions[a];
- }
-
- rTarget.append(
- new drawinglayer::primitive2d::PointArrayPrimitive2D(
- aPositions,
- aBColor));
- }
- }
- }
-
- /** helper to create a PolygonHairlinePrimitive2D based on current context */
- void createHairlinePrimitive(
- const basegfx::B2DPolygon& rLinePolygon,
- TargetHolder& rTarget,
- PropertyHolder& rProperties)
- {
- if(rLinePolygon.count())
- {
- basegfx::B2DPolygon aLinePolygon(rLinePolygon);
- aLinePolygon.transform(rProperties.getTransformation());
- rTarget.append(
- new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(
- aLinePolygon,
- rProperties.getLineColor()));
- }
- }
-
- /** helper to create a PolyPolygonColorPrimitive2D based on current context */
- void createFillPrimitive(
- const basegfx::B2DPolyPolygon& rFillPolyPolygon,
- TargetHolder& rTarget,
- PropertyHolder& rProperties)
- {
- if(rFillPolyPolygon.count())
- {
- basegfx::B2DPolyPolygon aFillPolyPolygon(rFillPolyPolygon);
- aFillPolyPolygon.transform(rProperties.getTransformation());
- rTarget.append(
- new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D(
- aFillPolyPolygon,
- rProperties.getFillColor()));
- }
- }
-
- /** helper to create a PolygonStrokePrimitive2D based on current context */
- void createLinePrimitive(
- const basegfx::B2DPolygon& rLinePolygon,
- const LineInfo& rLineInfo,
- TargetHolder& rTarget,
- PropertyHolder& rProperties)
- {
- if(rLinePolygon.count())
- {
- const bool bDashDotUsed(LINE_DASH == rLineInfo.GetStyle());
- const bool bWidthUsed(rLineInfo.GetWidth() > 1);
-
- if(bDashDotUsed || bWidthUsed)
- {
- basegfx::B2DPolygon aLinePolygon(rLinePolygon);
- aLinePolygon.transform(rProperties.getTransformation());
- const drawinglayer::attribute::LineAttribute aLineAttribute(
- rProperties.getLineColor(),
- bWidthUsed ? rLineInfo.GetWidth() : 0.0,
- rLineInfo.GetLineJoin());
-
- if(bDashDotUsed)
- {
- ::std::vector< double > fDotDashArray;
- const double fDashLen(rLineInfo.GetDashLen());
- const double fDotLen(rLineInfo.GetDotLen());
- const double fDistance(rLineInfo.GetDistance());
-
- for(sal_uInt16 a(0); a < rLineInfo.GetDashCount(); a++)
- {
- fDotDashArray.push_back(fDashLen);
- fDotDashArray.push_back(fDistance);
- }
-
- for(sal_uInt16 b(0); b < rLineInfo.GetDotCount(); b++)
- {
- fDotDashArray.push_back(fDotLen);
- fDotDashArray.push_back(fDistance);
- }
-
- const double fAccumulated(::std::accumulate(fDotDashArray.begin(), fDotDashArray.end(), 0.0));
- const drawinglayer::attribute::StrokeAttribute aStrokeAttribute(
- fDotDashArray,
- fAccumulated);
-
- rTarget.append(
- new drawinglayer::primitive2d::PolygonStrokePrimitive2D(
- aLinePolygon,
- aLineAttribute,
- aStrokeAttribute));
- }
- else
- {
- rTarget.append(
- new drawinglayer::primitive2d::PolygonStrokePrimitive2D(
- aLinePolygon,
- aLineAttribute));
- }
- }
- else
- {
- createHairlinePrimitive(rLinePolygon, rTarget, rProperties);
- }
- }
- }
-
- /** helper to create needed line and fill primitives based on current context */
- void createHairlineAndFillPrimitive(
- const basegfx::B2DPolygon& rPolygon,
- TargetHolder& rTarget,
- PropertyHolder& rProperties)
- {
- if(rProperties.getFillColorActive())
- {
- createFillPrimitive(basegfx::B2DPolyPolygon(rPolygon), rTarget, rProperties);
- }
-
- if(rProperties.getLineColorActive())
- {
- createHairlinePrimitive(rPolygon, rTarget, rProperties);
- }
- }
-
- /** helper to create needed line and fill primitives based on current context */
- void createHairlineAndFillPrimitive(
- const basegfx::B2DPolyPolygon& rPolyPolygon,
- TargetHolder& rTarget,
- PropertyHolder& rProperties)
- {
- if(rProperties.getFillColorActive())
- {
- createFillPrimitive(rPolyPolygon, rTarget, rProperties);
- }
-
- if(rProperties.getLineColorActive())
- {
- for(sal_uInt32 a(0); a < rPolyPolygon.count(); a++)
- {
- createHairlinePrimitive(rPolyPolygon.getB2DPolygon(a), rTarget, rProperties);
- }
- }
- }
-
- /** helper to create DiscreteBitmapPrimitive2D based on current context.
- The DiscreteBitmapPrimitive2D is especially created for this usage
- since no other usage defines a bitmap visualisation based on top-left
- position and size in pixels. At the end it will create a view-dependent
- transformed embedding of a BitmapPrimitive2D.
- */
- void createBitmapExPrimitive(
- const BitmapEx& rBitmapEx,
- const Point& rPoint,
- TargetHolder& rTarget,
- PropertyHolder& rProperties)
- {
- if(!rBitmapEx.IsEmpty())
- {
- basegfx::B2DPoint aPoint(rPoint.X(), rPoint.Y());
- aPoint = rProperties.getTransformation() * aPoint;
-
- rTarget.append(
- new drawinglayer::primitive2d::DiscreteBitmapPrimitive2D(
- rBitmapEx,
- aPoint));
- }
- }
-
- /** helper to create BitmapPrimitive2D based on current context */
- void createBitmapExPrimitive(
- const BitmapEx& rBitmapEx,
- const Point& rPoint,
- const Size& rSize,
- TargetHolder& rTarget,
- PropertyHolder& rProperties)
- {
- if(!rBitmapEx.IsEmpty())
- {
- basegfx::B2DHomMatrix aObjectTransform;
-
- aObjectTransform.set(0, 0, rSize.Width());
- aObjectTransform.set(1, 1, rSize.Height());
- aObjectTransform.set(0, 2, rPoint.X());
- aObjectTransform.set(1, 2, rPoint.Y());
-
- aObjectTransform = rProperties.getTransformation() * aObjectTransform;
-
- rTarget.append(
- new drawinglayer::primitive2d::BitmapPrimitive2D(
- rBitmapEx,
- aObjectTransform));
- }
- }
-
- /** helper to create a regular BotmapEx from a MaskAction (definitions
- which use a bitmap without transparence but define one of the colors as
- transparent)
- */
- BitmapEx createMaskBmpEx(const Bitmap& rBitmap, const Color& rMaskColor)
- {
- const Color aWhite(COL_WHITE);
- BitmapPalette aBiLevelPalette(2);
-
- aBiLevelPalette[0] = aWhite;
- aBiLevelPalette[1] = rMaskColor;
-
- Bitmap aMask(rBitmap.CreateMask(aWhite));
- Bitmap aSolid(rBitmap.GetSizePixel(), 1, &aBiLevelPalette);
-
- aSolid.Erase(rMaskColor);
-
- return BitmapEx(aSolid, aMask);
- }
-
- /** helper to convert from a VCL Gradient definition to the corresponding
- data for primitive representation
- */
- drawinglayer::attribute::FillGradientAttribute createFillGradientAttribute(const Gradient& rGradient)
- {
- const Color aStartColor(rGradient.GetStartColor());
- const sal_uInt16 nStartIntens(rGradient.GetStartIntensity());
- basegfx::BColor aStart(aStartColor.getBColor());
-
- if(nStartIntens != 100)
- {
- const basegfx::BColor aBlack;
- aStart = interpolate(aBlack, aStart, (double)nStartIntens * 0.01);
- }
-
- const Color aEndColor(rGradient.GetEndColor());
- const sal_uInt16 nEndIntens(rGradient.GetEndIntensity());
- basegfx::BColor aEnd(aEndColor.getBColor());
-
- if(nEndIntens != 100)
- {
- const basegfx::BColor aBlack;
- aEnd = interpolate(aBlack, aEnd, (double)nEndIntens * 0.01);
- }
-
- drawinglayer::attribute::GradientStyle aGradientStyle(drawinglayer::attribute::GRADIENTSTYLE_RECT);
-
- switch(rGradient.GetStyle())
- {
- case GRADIENT_LINEAR :
- {
- aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_LINEAR;
- break;
- }
- case GRADIENT_AXIAL :
- {
- aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_AXIAL;
- break;
- }
- case GRADIENT_RADIAL :
- {
- aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_RADIAL;
- break;
- }
- case GRADIENT_ELLIPTICAL :
- {
- aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_ELLIPTICAL;
- break;
- }
- case GRADIENT_SQUARE :
- {
- aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_SQUARE;
- break;
- }
- default : // GRADIENT_RECT
- {
- aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_RECT;
- break;
- }
- }
-
- return drawinglayer::attribute::FillGradientAttribute(
- aGradientStyle,
- (double)rGradient.GetBorder() * 0.01,
- (double)rGradient.GetOfsX() * 0.01,
- (double)rGradient.GetOfsY() * 0.01,
- (double)rGradient.GetAngle() * F_PI1800,
- aStart,
- aEnd,
- rGradient.GetSteps());
- }
-
- /** helper to convert from a VCL Hatch definition to the corresponding
- data for primitive representation
- */
- drawinglayer::attribute::FillHatchAttribute createFillHatchAttribute(const Hatch& rHatch)
- {
- drawinglayer::attribute::HatchStyle aHatchStyle(drawinglayer::attribute::HATCHSTYLE_SINGLE);
-
- switch(rHatch.GetStyle())
- {
- default : // case HATCH_SINGLE :
- {
- aHatchStyle = drawinglayer::attribute::HATCHSTYLE_SINGLE;
- break;
- }
- case HATCH_DOUBLE :
- {
- aHatchStyle = drawinglayer::attribute::HATCHSTYLE_DOUBLE;
- break;
- }
- case HATCH_TRIPLE :
- {
- aHatchStyle = drawinglayer::attribute::HATCHSTYLE_TRIPLE;
- break;
- }
- }
-
- return drawinglayer::attribute::FillHatchAttribute(
- aHatchStyle,
- (double)rHatch.GetDistance(),
- (double)rHatch.GetAngle() * F_PI1800,
- rHatch.GetColor().getBColor(),
- false);
- }
-
- /** helper to take needed action on ClipRegion change. This method needs to be called
- on any Region change, e.g. at the obvious actions doing this, but also at pop-calls
- whcih change the Region of the current context. It takes care of creating the
- current embeddec context, set the new Region at the context and eventually prepare
- a new target for embracing new geometry to the current region
- */
- void HandleNewClipRegion(
- const basegfx::B2DPolyPolygon& rClipPolyPolygon,
- TargetHolders& rTargetHolders,
- PropertyHolders& rPropertyHolders)
- {
- const bool bNewActive(rClipPolyPolygon.count());
-
- // #i108636# The handlig of new ClipPolyPolygons was not done as good as possible
- // in the first version of this interpreter; e.g. when a ClipPolyPolygon was set
- // initially and then using a lot of push/pop actions, the pop always leads
- // to setting a 'new' ClipPolyPolygon which indeed is the return to the ClipPolyPolygon
- // of the properties next on the stack.
- //
- // This ClipPolyPolygon is identical to the current one, so there is no need to
- // create a MaskPrimitive2D containing the up-to-now created primitives, but
- // this was done before. While this does not lead to wrong primitive
- // representations of the metafile data, it creates unneccesarily expensive
- // representations. Just detecting when no really 'new' ClipPolyPolygon gets set
- // solves the problem.
-
- if(!rPropertyHolders.Current().getClipPolyPolygonActive() && !bNewActive)
- {
- // no active ClipPolyPolygon exchanged by no new one, done
- return;
- }
-
- if(rPropertyHolders.Current().getClipPolyPolygonActive() && bNewActive)
- {
- // active ClipPolyPolygon and new active ClipPolyPolygon
- if(rPropertyHolders.Current().getClipPolyPolygon() == rClipPolyPolygon)
- {
- // new is the same as old, done
- return;
- }
- }
-
- // Here the old and the new are definitively different, maybe
- // old one and/or new one is not active.
-
- // Handle deletion of old ClipPolyPolygon. The process evtl. created primitives which
- // belong to this active ClipPolyPolygon. These need to be embedded to a
- // MaskPrimitive2D accordingly.
- if(rPropertyHolders.Current().getClipPolyPolygonActive() && rTargetHolders.size() > 1)
- {
- drawinglayer::primitive2d::Primitive2DSequence aSubContent;
-
- if(rPropertyHolders.Current().getClipPolyPolygon().count()
- && rTargetHolders.Current().size())
- {
- aSubContent = rTargetHolders.Current().getPrimitive2DSequence(
- rPropertyHolders.Current());
- }
-
- rTargetHolders.Pop();
-
- if(aSubContent.hasElements())
- {
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::GroupPrimitive2D(
- aSubContent));
- }
- }
-
- // apply new settings to current properties by setting
- // the new region now
- rPropertyHolders.Current().setClipPolyPolygonActive(bNewActive);
-
- if(bNewActive)
- {
- rPropertyHolders.Current().setClipPolyPolygon(rClipPolyPolygon);
-
- // prepare new content holder for new active region
- rTargetHolders.Push();
- }
- }
-
- /** helper to handle the change of RasterOp. It takes care of encapsulating all current
- geometry to the current RasterOp (if changed) and needs to be called on any RasterOp
- change. It will also start a new geometry target to embrace to the new RasterOp if
- a changuing RasterOp is used. Currently, ROP_XOR and ROP_INVERT are supported using
- InvertPrimitive2D, and ROP_0 by using a ModifiedColorPrimitive2D to force to black paint
- */
- void HandleNewRasterOp(
- RasterOp aRasterOp,
- TargetHolders& rTargetHolders,
- PropertyHolders& rPropertyHolders)
- {
- // check if currently active
- if(rPropertyHolders.Current().isRasterOpActive() && rTargetHolders.size() > 1)
- {
- drawinglayer::primitive2d::Primitive2DSequence aSubContent;
-
- if(rTargetHolders.Current().size())
- {
- aSubContent = rTargetHolders.Current().getPrimitive2DSequence(rPropertyHolders.Current());
- }
-
- rTargetHolders.Pop();
-
- if(aSubContent.hasElements())
- {
- if(rPropertyHolders.Current().isRasterOpForceBlack())
- {
- // force content to black
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::ModifiedColorPrimitive2D(
- aSubContent,
- basegfx::BColorModifier(basegfx::BColor(0.0, 0.0, 0.0))));
- }
- else // if(rPropertyHolders.Current().isRasterOpInvert())
- {
- // invert content
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::InvertPrimitive2D(
- aSubContent));
- }
- }
- }
-
- // apply new settings
- rPropertyHolders.Current().setRasterOp(aRasterOp);
-
- // check if now active
- if(rPropertyHolders.Current().isRasterOpActive())
- {
- // prepare new content holder for new invert
- rTargetHolders.Push();
- }
- }
-
- /** helper to create needed data to emulate the VCL Wallpaper Metafile action.
- It is a quite mighty action. This helper is for simple color filled background.
- */
- drawinglayer::primitive2d::BasePrimitive2D* CreateColorWallpaper(
- const basegfx::B2DRange& rRange,
- const basegfx::BColor& rColor,
- PropertyHolder& rPropertyHolder)
- {
- basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(rRange));
- aOutline.transform(rPropertyHolder.getTransformation());
-
- return new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D(
- basegfx::B2DPolyPolygon(aOutline),
- rColor);
- }
-
- /** helper to create needed data to emulate the VCL Wallpaper Metafile action.
- It is a quite mighty action. This helper is for gradient filled background.
- */
- drawinglayer::primitive2d::BasePrimitive2D* CreateGradientWallpaper(
- const basegfx::B2DRange& rRange,
- const Gradient& rGradient,
- PropertyHolder& rPropertyHolder)
- {
- const drawinglayer::attribute::FillGradientAttribute aAttribute(createFillGradientAttribute(rGradient));
-
- if(aAttribute.getStartColor() == aAttribute.getEndColor())
- {
- // not really a gradient. Create filled rectangle
- return CreateColorWallpaper(rRange, aAttribute.getStartColor(), rPropertyHolder);
- }
- else
- {
- // really a gradient
- drawinglayer::primitive2d::BasePrimitive2D* pRetval =
- new drawinglayer::primitive2d::FillGradientPrimitive2D(
- rRange,
- aAttribute);
-
- if(!rPropertyHolder.getTransformation().isIdentity())
- {
- const drawinglayer::primitive2d::Primitive2DReference xPrim(pRetval);
- const drawinglayer::primitive2d::Primitive2DSequence xSeq(&xPrim, 1);
-
- pRetval = new drawinglayer::primitive2d::TransformPrimitive2D(
- rPropertyHolder.getTransformation(),
- xSeq);
- }
-
- return pRetval;
- }
- }
-
- /** helper to create needed data to emulate the VCL Wallpaper Metafile action.
- It is a quite mighty action. This helper decides if color and/or gradient
- background is needed for the wnated bitmap fill and then creates the needed
- WallpaperBitmapPrimitive2D. This primitive was created for this purpose and
- takes over all needed logic of orientations and tiling.
- */
- void CreateAndAppendBitmapWallpaper(
- basegfx::B2DRange aWallpaperRange,
- const Wallpaper& rWallpaper,
- TargetHolder& rTarget,
- PropertyHolder& rProperty)
- {
- const BitmapEx aBitmapEx(rWallpaper.GetBitmap());
- const WallpaperStyle eWallpaperStyle(rWallpaper.GetStyle());
-
- // if bitmap visualisation is transparent, maybe background
- // needs to be filled. Create background
- if(aBitmapEx.IsTransparent()
- || (WALLPAPER_TILE != eWallpaperStyle && WALLPAPER_SCALE != eWallpaperStyle))
- {
- if(rWallpaper.IsGradient())
- {
- rTarget.append(
- CreateGradientWallpaper(
- aWallpaperRange,
- rWallpaper.GetGradient(),
- rProperty));
- }
- else if(!rWallpaper.GetColor().GetTransparency())
- {
- rTarget.append(
- CreateColorWallpaper(
- aWallpaperRange,
- rWallpaper.GetColor().getBColor(),
- rProperty));
- }
- }
-
- // use wallpaper rect if set
- if(rWallpaper.IsRect() && !rWallpaper.GetRect().IsEmpty())
- {
- aWallpaperRange = basegfx::B2DRange(
- rWallpaper.GetRect().Left(), rWallpaper.GetRect().Top(),
- rWallpaper.GetRect().Right(), rWallpaper.GetRect().Bottom());
- }
-
- drawinglayer::primitive2d::BasePrimitive2D* pBitmapWallpaperFill =
- new drawinglayer::primitive2d::WallpaperBitmapPrimitive2D(
- aWallpaperRange,
- aBitmapEx,
- eWallpaperStyle);
-
- if(rProperty.getTransformation().isIdentity())
- {
- // add directly
- rTarget.append(pBitmapWallpaperFill);
- }
- else
- {
- // when a transformation is set, embed to it
- const drawinglayer::primitive2d::Primitive2DReference xPrim(pBitmapWallpaperFill);
-
- rTarget.append(
- new drawinglayer::primitive2d::TransformPrimitive2D(
- rProperty.getTransformation(),
- drawinglayer::primitive2d::Primitive2DSequence(&xPrim, 1)));
- }
- }
-
- /** helper to decide UnderlineAbove for text primitives */
- bool isUnderlineAbove(const Font& rFont)
- {
- if(!rFont.IsVertical())
- {
- return false;
- }
-
- if((LANGUAGE_JAPANESE == rFont.GetLanguage()) || (LANGUAGE_JAPANESE == rFont.GetCJKContextLanguage()))
- {
- // the underline is right for Japanese only
- return true;
- }
-
- return false;
- }
-
- void createFontAttributeTransformAndAlignment(
- drawinglayer::attribute::FontAttribute& rFontAttribute,
- basegfx::B2DHomMatrix& rTextTransform,
- basegfx::B2DVector& rAlignmentOffset,
- PropertyHolder& rProperty)
- {
- const Font& rFont = rProperty.getFont();
- basegfx::B2DVector aFontScaling;
-
- rFontAttribute = drawinglayer::attribute::FontAttribute(
- drawinglayer::primitive2d::getFontAttributeFromVclFont(
- aFontScaling,
- rFont,
- 0 != (rProperty.getLayoutMode() & TEXT_LAYOUT_BIDI_RTL),
- 0 != (rProperty.getLayoutMode() & TEXT_LAYOUT_BIDI_STRONG)));
-
- // add FontScaling
- rTextTransform.scale(aFontScaling.getX(), aFontScaling.getY());
-
- // take text align into account
- if(ALIGN_BASELINE != rFont.GetAlign())
- {
- drawinglayer::primitive2d::TextLayouterDevice aTextLayouterDevice;
- aTextLayouterDevice.setFont(rFont);
-
- if(ALIGN_TOP == rFont.GetAlign())
- {
- rAlignmentOffset.setY(aTextLayouterDevice.getFontAscent());
- }
- else // ALIGN_BOTTOM
- {
- rAlignmentOffset.setY(-aTextLayouterDevice.getFontDescent());
- }
-
- rTextTransform.translate(rAlignmentOffset.getX(), rAlignmentOffset.getY());
- }
-
- // add FontRotation (if used)
- if(rFont.GetOrientation())
- {
- rTextTransform.rotate(-rFont.GetOrientation() * F_PI1800);
- }
- }
-
- /** helper which takes complete care for creating the needed text primitives. It
- takes care of decorated stuff and all the geometry adaptions needed
- */
- void proccessMetaTextAction(
- const Point& rTextStartPosition,
- const XubString& rText,
- sal_uInt16 nTextStart,
- sal_uInt16 nTextLength,
- const ::std::vector< double >& rDXArray,
- TargetHolder& rTarget,
- PropertyHolder& rProperty)
- {
- drawinglayer::primitive2d::BasePrimitive2D* pResult = 0;
- const Font& rFont = rProperty.getFont();
- basegfx::B2DVector aAlignmentOffset(0.0, 0.0);
-
- if(nTextLength)
- {
- drawinglayer::attribute::FontAttribute aFontAttribute;
- basegfx::B2DHomMatrix aTextTransform;
-
- // fill parameters derived from current font
- createFontAttributeTransformAndAlignment(
- aFontAttribute,
- aTextTransform,
- aAlignmentOffset,
- rProperty);
-
- // add TextStartPosition
- aTextTransform.translate(rTextStartPosition.X(), rTextStartPosition.Y());
-
- // prepare FontColor and Locale
- const basegfx::BColor aFontColor(rProperty.getTextColor());
- const com::sun::star::lang::Locale aLocale(MsLangId::convertLanguageToLocale(rProperty.getLanguageType()));
- const bool bWordLineMode(rFont.IsWordLineMode());
-
- const bool bDecoratedIsNeeded(
- UNDERLINE_NONE != rFont.GetOverline()
- || UNDERLINE_NONE != rFont.GetUnderline()
- || STRIKEOUT_NONE != rFont.GetStrikeout()
- || EMPHASISMARK_NONE != (rFont.GetEmphasisMark() & EMPHASISMARK_STYLE)
- || RELIEF_NONE != rFont.GetRelief()
- || rFont.IsShadow()
- || bWordLineMode);
-
- if(bDecoratedIsNeeded)
- {
- // prepare overline, underline and srikeout data
- const drawinglayer::primitive2d::TextLine eFontOverline(drawinglayer::primitive2d::mapFontUnderlineToTextLine(rFont.GetOverline()));
- const drawinglayer::primitive2d::TextLine eFontUnderline(drawinglayer::primitive2d::mapFontUnderlineToTextLine(rFont.GetUnderline()));
- const drawinglayer::primitive2d::TextStrikeout eTextStrikeout(drawinglayer::primitive2d::mapFontStrikeoutToTextStrikeout(rFont.GetStrikeout()));
-
- // check UndelineAbove
- const bool bUnderlineAbove(drawinglayer::primitive2d::TEXT_LINE_NONE != eFontUnderline && isUnderlineAbove(rFont));
-
- // prepare emphasis mark data
- drawinglayer::primitive2d::TextEmphasisMark eTextEmphasisMark(drawinglayer::primitive2d::TEXT_EMPHASISMARK_NONE);
-
- switch(rFont.GetEmphasisMark() & EMPHASISMARK_STYLE)
- {
- case EMPHASISMARK_DOT : eTextEmphasisMark = drawinglayer::primitive2d::TEXT_EMPHASISMARK_DOT; break;
- case EMPHASISMARK_CIRCLE : eTextEmphasisMark = drawinglayer::primitive2d::TEXT_EMPHASISMARK_CIRCLE; break;
- case EMPHASISMARK_DISC : eTextEmphasisMark = drawinglayer::primitive2d::TEXT_EMPHASISMARK_DISC; break;
- case EMPHASISMARK_ACCENT : eTextEmphasisMark = drawinglayer::primitive2d::TEXT_EMPHASISMARK_ACCENT; break;
- }
-
- const bool bEmphasisMarkAbove(rFont.GetEmphasisMark() & EMPHASISMARK_POS_ABOVE);
- const bool bEmphasisMarkBelow(rFont.GetEmphasisMark() & EMPHASISMARK_POS_BELOW);
-
- // prepare font relief data
- drawinglayer::primitive2d::TextRelief eTextRelief(drawinglayer::primitive2d::TEXT_RELIEF_NONE);
-
- switch(rFont.GetRelief())
- {
- case RELIEF_EMBOSSED : eTextRelief = drawinglayer::primitive2d::TEXT_RELIEF_EMBOSSED; break;
- case RELIEF_ENGRAVED : eTextRelief = drawinglayer::primitive2d::TEXT_RELIEF_ENGRAVED; break;
- default : break; // RELIEF_NONE, FontRelief_FORCE_EQUAL_SIZE
- }
-
- // prepare shadow/outline data
- const bool bShadow(rFont.IsShadow());
-
- // TextDecoratedPortionPrimitive2D is needed, create one
- pResult = new drawinglayer::primitive2d::TextDecoratedPortionPrimitive2D(
-
- // attributes for TextSimplePortionPrimitive2D
- aTextTransform,
- rText,
- nTextStart,
- nTextLength,
- rDXArray,
- aFontAttribute,
- aLocale,
- aFontColor,
-
- // attributes for TextDecoratedPortionPrimitive2D
- rProperty.getOverlineColorActive() ? rProperty.getOverlineColor() : aFontColor,
- rProperty.getTextLineColorActive() ? rProperty.getTextLineColor() : aFontColor,
- eFontOverline,
- eFontUnderline,
- bUnderlineAbove,
- eTextStrikeout,
- bWordLineMode,
- eTextEmphasisMark,
- bEmphasisMarkAbove,
- bEmphasisMarkBelow,
- eTextRelief,
- bShadow);
- }
- else
- {
- // TextSimplePortionPrimitive2D is enough
- pResult = new drawinglayer::primitive2d::TextSimplePortionPrimitive2D(
- aTextTransform,
- rText,
- nTextStart,
- nTextLength,
- rDXArray,
- aFontAttribute,
- aLocale,
- aFontColor);
- }
- }
-
- if(pResult && rProperty.getTextFillColorActive())
- {
- // text background is requested, add and encapsulate both to new primitive
- drawinglayer::primitive2d::TextLayouterDevice aTextLayouterDevice;
- aTextLayouterDevice.setFont(rFont);
-
- // get text width
- double fTextWidth(0.0);
-
- if(rDXArray.empty())
- {
- fTextWidth = aTextLayouterDevice.getTextWidth(rText, nTextStart, nTextLength);
- }
- else
- {
- fTextWidth = rDXArray.back();
- }
-
- if(basegfx::fTools::more(fTextWidth, 0.0))
- {
- // build text range
- const basegfx::B2DRange aTextRange(
- 0.0, -aTextLayouterDevice.getFontAscent(),
- fTextWidth, aTextLayouterDevice.getFontDescent());
-
- // create Transform
- basegfx::B2DHomMatrix aTextTransform;
-
- aTextTransform.translate(aAlignmentOffset.getX(), aAlignmentOffset.getY());
-
- if(rFont.GetOrientation())
- {
- aTextTransform.rotate(-rFont.GetOrientation() * F_PI1800);
- }
-
- aTextTransform.translate(rTextStartPosition.X(), rTextStartPosition.Y());
-
- // prepare Primitive2DSequence, put text in foreground
- drawinglayer::primitive2d::Primitive2DSequence aSequence(2);
- aSequence[1] = drawinglayer::primitive2d::Primitive2DReference(pResult);
-
- // prepare filled polygon
- basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aTextRange));
- aOutline.transform(aTextTransform);
-
- aSequence[0] = drawinglayer::primitive2d::Primitive2DReference(
- new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D(
- basegfx::B2DPolyPolygon(aOutline),
- rProperty.getTextFillColor()));
-
- // set as group at pResult
- pResult = new drawinglayer::primitive2d::GroupPrimitive2D(aSequence);
- }
- }
-
- if(pResult)
- {
- // add created text primitive to target
- if(rProperty.getTransformation().isIdentity())
- {
- rTarget.append(pResult);
- }
- else
- {
- // when a transformation is set, embed to it
- const drawinglayer::primitive2d::Primitive2DReference aReference(pResult);
-
- rTarget.append(
- new drawinglayer::primitive2d::TransformPrimitive2D(
- rProperty.getTransformation(),
- drawinglayer::primitive2d::Primitive2DSequence(&aReference, 1)));
- }
- }
- }
-
- /** helper which takes complete care for creating the needed textLine primitives */
- void proccessMetaTextLineAction(
- const MetaTextLineAction& rAction,
- TargetHolder& rTarget,
- PropertyHolder& rProperty)
- {
- const double fLineWidth(fabs((double)rAction.GetWidth()));
-
- if(fLineWidth > 0.0)
- {
- const drawinglayer::primitive2d::TextLine aOverlineMode(drawinglayer::primitive2d::mapFontUnderlineToTextLine(rAction.GetOverline()));
- const drawinglayer::primitive2d::TextLine aUnderlineMode(drawinglayer::primitive2d::mapFontUnderlineToTextLine(rAction.GetUnderline()));
- const drawinglayer::primitive2d::TextStrikeout aTextStrikeout(drawinglayer::primitive2d::mapFontStrikeoutToTextStrikeout(rAction.GetStrikeout()));
-
- const bool bOverlineUsed(drawinglayer::primitive2d::TEXT_LINE_NONE != aOverlineMode);
- const bool bUnderlineUsed(drawinglayer::primitive2d::TEXT_LINE_NONE != aUnderlineMode);
- const bool bStrikeoutUsed(drawinglayer::primitive2d::TEXT_STRIKEOUT_NONE != aTextStrikeout);
-
- if(bUnderlineUsed || bStrikeoutUsed || bOverlineUsed)
- {
- std::vector< drawinglayer::primitive2d::BasePrimitive2D* > aTargetVector;
- basegfx::B2DVector aAlignmentOffset(0.0, 0.0);
- drawinglayer::attribute::FontAttribute aFontAttribute;
- basegfx::B2DHomMatrix aTextTransform;
-
- // fill parameters derived from current font
- createFontAttributeTransformAndAlignment(
- aFontAttribute,
- aTextTransform,
- aAlignmentOffset,
- rProperty);
-
- // add TextStartPosition
- aTextTransform.translate(rAction.GetStartPoint().X(), rAction.GetStartPoint().Y());
-
- // prepare TextLayouter (used in most cases)
- drawinglayer::primitive2d::TextLayouterDevice aTextLayouter;
- aTextLayouter.setFont(rProperty.getFont());
-
- if(bOverlineUsed)
- {
- // create primitive geometry for overline
- aTargetVector.push_back(
- new drawinglayer::primitive2d::TextLinePrimitive2D(
- aTextTransform,
- fLineWidth,
- aTextLayouter.getOverlineOffset(),
- aTextLayouter.getOverlineHeight(),
- aOverlineMode,
- rProperty.getOverlineColor()));
- }
-
- if(bUnderlineUsed)
- {
- // create primitive geometry for underline
- aTargetVector.push_back(
- new drawinglayer::primitive2d::TextLinePrimitive2D(
- aTextTransform,
- fLineWidth,
- aTextLayouter.getUnderlineOffset(),
- aTextLayouter.getUnderlineHeight(),
- aUnderlineMode,
- rProperty.getTextLineColor()));
- }
-
- if(bStrikeoutUsed)
- {
- // create primitive geometry for strikeout
- if(drawinglayer::primitive2d::TEXT_STRIKEOUT_SLASH == aTextStrikeout
- || drawinglayer::primitive2d::TEXT_STRIKEOUT_X == aTextStrikeout)
- {
- // strikeout with character
- const sal_Unicode aStrikeoutChar(
- drawinglayer::primitive2d::TEXT_STRIKEOUT_SLASH == aTextStrikeout ? '/' : 'X');
- const com::sun::star::lang::Locale aLocale(MsLangId::convertLanguageToLocale(
- rProperty.getLanguageType()));
-
- aTargetVector.push_back(
- new drawinglayer::primitive2d::TextCharacterStrikeoutPrimitive2D(
- aTextTransform,
- fLineWidth,
- rProperty.getTextColor(),
- aStrikeoutChar,
- aFontAttribute,
- aLocale));
- }
- else
- {
- // strikeout with geometry
- aTargetVector.push_back(
- new drawinglayer::primitive2d::TextGeometryStrikeoutPrimitive2D(
- aTextTransform,
- fLineWidth,
- rProperty.getTextColor(),
- aTextLayouter.getUnderlineHeight(),
- aTextLayouter.getStrikeoutOffset(),
- aTextStrikeout));
- }
- }
-
- if(!aTargetVector.empty())
- {
- // add created text primitive to target
- if(rProperty.getTransformation().isIdentity())
- {
- for(sal_uInt32 a(0); a < aTargetVector.size(); a++)
- {
- rTarget.append(aTargetVector[a]);
- }
- }
- else
- {
- // when a transformation is set, embed to it
- drawinglayer::primitive2d::Primitive2DSequence xTargets(aTargetVector.size());
-
- for(sal_uInt32 a(0); a < aTargetVector.size(); a++)
- {
- xTargets[a] = drawinglayer::primitive2d::Primitive2DReference(aTargetVector[a]);
- }
-
- rTarget.append(
- new drawinglayer::primitive2d::TransformPrimitive2D(
- rProperty.getTransformation(),
- xTargets));
- }
- }
- }
- }
-
- }
-
- /** This is the main interpreter method. It is designed to handle the given Metafile
- completely inside the given context and target. It may use and modify the context and
- target. This design allows to call itself recursively wich adapted contexts and
- targets as e.g. needed for the META_FLOATTRANSPARENT_ACTION where the content is expressed
- as a metafile as sub-content.
-
- This interpreter is as free of VCL functionality as possible. It uses VCL data classes
- (else reading the data would not be possible), but e.g. does NOT use a local OutputDevice
- as most other MetaFile interpreters/exporters do to hold and work with the current context.
- This is necessary to be able to get away from the strong internal VCL-binding.
-
- It tries to combine e.g. pixel and/or point actions and to stitch together single line primitives
- where possible (which is not trivial with the possible line geometry definitions).
-
- It tries to handle clipping no longer as Regions and spans of Rectangles, but as PolyPolygon
- ClipRegions with (where possible) high precision by using the best possible data quality
- from the Region. The Region is unavoidable as data container, but nowadays allows the transport
- of Polygon-based clip regions. Where this is not used, a Polygon is constructed from the
- Region ranges. All primitive clipping uses the MaskPrimitive2D with Polygon-based clipping.
-
- I have marked the single MetaActions with:
-
- SIMPLE, DONE:
- Simple, e.g nothing to do or value setting in the context
-
- CHECKED, WORKS WELL:
- Thoroughly tested with extra written test code which created a replacement
- Metafile just to test this action in various combinations
-
- NEEDS IMPLEMENTATION:
- Not implemented and asserted, but also no usage found, neither in own Metafile
- creations, nor in EMF/WMF imports (checked with a whole bunch of critical EMF/WMF
- bugdocs)
-
- For more commens, see the single action implementations.
- */
- void interpretMetafile(
- const GDIMetaFile& rMetaFile,
- TargetHolders& rTargetHolders,
- PropertyHolders& rPropertyHolders,
- const drawinglayer::geometry::ViewInformation2D& rViewInformation)
- {
- const size_t nCount(rMetaFile.GetActionSize());
-
- for(size_t nAction(0); nAction < nCount; nAction++)
- {
- MetaAction* pAction = rMetaFile.GetAction(nAction);
-
- switch(pAction->GetType())
- {
- case META_NULL_ACTION :
- {
- /** SIMPLE, DONE */
- break;
- }
- case META_PIXEL_ACTION :
- {
- /** CHECKED, WORKS WELL */
- std::vector< basegfx::B2DPoint > aPositions;
- Color aLastColor(COL_BLACK);
-
- while(META_PIXEL_ACTION == pAction->GetType() && nAction < nCount)
- {
- const MetaPixelAction* pA = (const MetaPixelAction*)pAction;
-
- if(pA->GetColor() != aLastColor)
- {
- if(!aPositions.empty())
- {
- createPointArrayPrimitive(aPositions, rTargetHolders.Current(), rPropertyHolders.Current(), aLastColor.getBColor());
- aPositions.clear();
- }
-
- aLastColor = pA->GetColor();
- }
-
- const Point& rPoint = pA->GetPoint();
- aPositions.push_back(basegfx::B2DPoint(rPoint.X(), rPoint.Y()));
- nAction++; if(nAction < nCount) pAction = rMetaFile.GetAction(nAction);
- }
-
- nAction--;
-
- if(!aPositions.empty())
- {
- createPointArrayPrimitive(aPositions, rTargetHolders.Current(), rPropertyHolders.Current(), aLastColor.getBColor());
- }
-
- break;
- }
- case META_POINT_ACTION :
- {
- /** CHECKED, WORKS WELL */
- if(rPropertyHolders.Current().getLineColorActive())
- {
- std::vector< basegfx::B2DPoint > aPositions;
-
- while(META_POINT_ACTION == pAction->GetType() && nAction < nCount)
- {
- const MetaPointAction* pA = (const MetaPointAction*)pAction;
- const Point& rPoint = pA->GetPoint();
- aPositions.push_back(basegfx::B2DPoint(rPoint.X(), rPoint.Y()));
- nAction++; if(nAction < nCount) pAction = rMetaFile.GetAction(nAction);
- }
-
- nAction--;
-
- if(!aPositions.empty())
- {
- createPointArrayPrimitive(aPositions, rTargetHolders.Current(), rPropertyHolders.Current(), rPropertyHolders.Current().getLineColor());
- }
- }
-
- break;
- }
- case META_LINE_ACTION :
- {
- /** CHECKED, WORKS WELL */
- if(rPropertyHolders.Current().getLineColorActive())
- {
- basegfx::B2DPolygon aLinePolygon;
- LineInfo aLineInfo;
-
- while(META_LINE_ACTION == pAction->GetType() && nAction < nCount)
- {
- const MetaLineAction* pA = (const MetaLineAction*)pAction;
- const Point& rStartPoint = pA->GetStartPoint();
- const Point& rEndPoint = pA->GetEndPoint();
- const basegfx::B2DPoint aStart(rStartPoint.X(), rStartPoint.Y());
- const basegfx::B2DPoint aEnd(rEndPoint.X(), rEndPoint.Y());
-
- if(aLinePolygon.count())
- {
- if(pA->GetLineInfo() == aLineInfo
- && aStart == aLinePolygon.getB2DPoint(aLinePolygon.count() - 1))
- {
- aLinePolygon.append(aEnd);
- }
- else
- {
- aLineInfo.SetLineJoin(basegfx::B2DLINEJOIN_NONE); // It were lines; force to NONE
- createLinePrimitive(aLinePolygon, aLineInfo, rTargetHolders.Current(), rPropertyHolders.Current());
- aLinePolygon.clear();
- aLineInfo = pA->GetLineInfo();
- aLinePolygon.append(aStart);
- aLinePolygon.append(aEnd);
- }
- }
- else
- {
- aLineInfo = pA->GetLineInfo();
- aLinePolygon.append(aStart);
- aLinePolygon.append(aEnd);
- }
-
- nAction++; if(nAction < nCount) pAction = rMetaFile.GetAction(nAction);
- }
-
- nAction--;
-
- if(aLinePolygon.count())
- {
- aLineInfo.SetLineJoin(basegfx::B2DLINEJOIN_NONE); // It were lines; force to NONE
- createLinePrimitive(aLinePolygon, aLineInfo, rTargetHolders.Current(), rPropertyHolders.Current());
- }
- }
-
- break;
- }
- case META_RECT_ACTION :
- {
- /** CHECKED, WORKS WELL */
- if(rPropertyHolders.Current().getLineOrFillActive())
- {
- const MetaRectAction* pA = (const MetaRectAction*)pAction;
- const Rectangle& rRectangle = pA->GetRect();
-
- if(!rRectangle.IsEmpty())
- {
- const basegfx::B2DRange aRange(rRectangle.Left(), rRectangle.Top(), rRectangle.Right(), rRectangle.Bottom());
-
- if(!aRange.isEmpty())
- {
- const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange));
- createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current());
- }
- }
- }
-
- break;
- }
- case META_ROUNDRECT_ACTION :
- {
- /** CHECKED, WORKS WELL */
- /** The original OutputDevice::DrawRect paints nothing when nHor or nVer is zero; but just
- because the tools::Polygon operator creating the rounding does produce nonsense. I assume
- this an error and create an unrounded rectangle in that case (implicit in
- createPolygonFromRect)
- */
- if(rPropertyHolders.Current().getLineOrFillActive())
- {
- const MetaRoundRectAction* pA = (const MetaRoundRectAction*)pAction;
- const Rectangle& rRectangle = pA->GetRect();
-
- if(!rRectangle.IsEmpty())
- {
- const basegfx::B2DRange aRange(rRectangle.Left(), rRectangle.Top(), rRectangle.Right(), rRectangle.Bottom());
-
- if(!aRange.isEmpty())
- {
- const sal_uInt32 nHor(pA->GetHorzRound());
- const sal_uInt32 nVer(pA->GetVertRound());
- basegfx::B2DPolygon aOutline;
-
- if(nHor || nVer)
- {
- double fRadiusX((nHor * 2.0) / (aRange.getWidth() > 0.0 ? aRange.getWidth() : 1.0));
- double fRadiusY((nVer * 2.0) / (aRange.getHeight() > 0.0 ? aRange.getHeight() : 1.0));
- fRadiusX = std::max(0.0, std::min(1.0, fRadiusX));
- fRadiusY = std::max(0.0, std::min(1.0, fRadiusY));
-
- aOutline = basegfx::tools::createPolygonFromRect(aRange, fRadiusX, fRadiusY);
- }
- else
- {
- aOutline = basegfx::tools::createPolygonFromRect(aRange);
- }
-
- createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current());
- }
- }
- }
-
- break;
- }
- case META_ELLIPSE_ACTION :
- {
- /** CHECKED, WORKS WELL */
- if(rPropertyHolders.Current().getLineOrFillActive())
- {
- const MetaEllipseAction* pA = (const MetaEllipseAction*)pAction;
- const Rectangle& rRectangle = pA->GetRect();
-
- if(!rRectangle.IsEmpty())
- {
- const basegfx::B2DRange aRange(rRectangle.Left(), rRectangle.Top(), rRectangle.Right(), rRectangle.Bottom());
-
- if(!aRange.isEmpty())
- {
- const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromEllipse(
- aRange.getCenter(), aRange.getWidth() * 0.5, aRange.getHeight() * 0.5));
-
- createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current());
- }
- }
- }
-
- break;
- }
- case META_ARC_ACTION :
- {
- /** CHECKED, WORKS WELL */
- if(rPropertyHolders.Current().getLineColorActive())
- {
- const MetaArcAction* pA = (const MetaArcAction*)pAction;
- const Polygon aToolsPoly(pA->GetRect(), pA->GetStartPoint(), pA->GetEndPoint(), POLY_ARC);
- const basegfx::B2DPolygon aOutline(aToolsPoly.getB2DPolygon());
-
- createHairlinePrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current());
- }
-
- break;
- }
- case META_PIE_ACTION :
- {
- /** CHECKED, WORKS WELL */
- if(rPropertyHolders.Current().getLineOrFillActive())
- {
- const MetaPieAction* pA = (const MetaPieAction*)pAction;
- const Polygon aToolsPoly(pA->GetRect(), pA->GetStartPoint(), pA->GetEndPoint(), POLY_PIE);
- const basegfx::B2DPolygon aOutline(aToolsPoly.getB2DPolygon());
-
- createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current());
- }
-
- break;
- }
- case META_CHORD_ACTION :
- {
- /** CHECKED, WORKS WELL */
- if(rPropertyHolders.Current().getLineOrFillActive())
- {
- const MetaChordAction* pA = (const MetaChordAction*)pAction;
- const Polygon aToolsPoly(pA->GetRect(), pA->GetStartPoint(), pA->GetEndPoint(), POLY_CHORD);
- const basegfx::B2DPolygon aOutline(aToolsPoly.getB2DPolygon());
-
- createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current());
- }
-
- break;
- }
- case META_POLYLINE_ACTION :
- {
- /** CHECKED, WORKS WELL */
- if(rPropertyHolders.Current().getLineColorActive())
- {
- const MetaPolyLineAction* pA = (const MetaPolyLineAction*)pAction;
- createLinePrimitive(pA->GetPolygon().getB2DPolygon(), pA->GetLineInfo(), rTargetHolders.Current(), rPropertyHolders.Current());
- }
-
- break;
- }
- case META_POLYGON_ACTION :
- {
- /** CHECKED, WORKS WELL */
- if(rPropertyHolders.Current().getLineOrFillActive())
- {
- const MetaPolygonAction* pA = (const MetaPolygonAction*)pAction;
- basegfx::B2DPolygon aOutline(pA->GetPolygon().getB2DPolygon());
-
- // the metafile play interprets the polygons from MetaPolygonAction
- // always as closed and always paints an edge from last to first point,
- // so force to closed here to emulate that
- if(aOutline.count() > 1 && !aOutline.isClosed())
- {
- aOutline.setClosed(true);
- }
-
- createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current());
- }
-
- break;
- }
- case META_POLYPOLYGON_ACTION :
- {
- /** CHECKED, WORKS WELL */
- if(rPropertyHolders.Current().getLineOrFillActive())
- {
- const MetaPolyPolygonAction* pA = (const MetaPolyPolygonAction*)pAction;
- basegfx::B2DPolyPolygon aPolyPolygonOutline(pA->GetPolyPolygon().getB2DPolyPolygon());
-
- // the metafile play interprets the single polygons from MetaPolyPolygonAction
- // always as closed and always paints an edge from last to first point,
- // so force to closed here to emulate that
- for(sal_uInt32 b(0); b < aPolyPolygonOutline.count(); b++)
- {
- basegfx::B2DPolygon aPolygonOutline(aPolyPolygonOutline.getB2DPolygon(b));
-
- if(aPolygonOutline.count() > 1 && !aPolygonOutline.isClosed())
- {
- aPolygonOutline.setClosed(true);
- aPolyPolygonOutline.setB2DPolygon(b, aPolygonOutline);
- }
- }
-
- createHairlineAndFillPrimitive(aPolyPolygonOutline, rTargetHolders.Current(), rPropertyHolders.Current());
- }
-
- break;
- }
- case META_TEXT_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaTextAction* pA = (const MetaTextAction*)pAction;
- sal_uInt32 nTextLength(pA->GetLen());
- const sal_uInt32 nTextIndex(pA->GetIndex());
- const sal_uInt32 nStringLength(pA->GetText().Len());
-
- if(nTextLength + nTextIndex > nStringLength)
- {
- nTextLength = nStringLength - nTextIndex;
- }
-
- if(nTextLength && rPropertyHolders.Current().getTextColorActive())
- {
- const std::vector< double > aDXArray;
- proccessMetaTextAction(
- pA->GetPoint(),
- pA->GetText(),
- nTextIndex,
- nTextLength,
- aDXArray,
- rTargetHolders.Current(),
- rPropertyHolders.Current());
- }
-
- break;
- }
- case META_TEXTARRAY_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaTextArrayAction* pA = (const MetaTextArrayAction*)pAction;
- sal_uInt32 nTextLength(pA->GetLen());
- const sal_uInt32 nTextIndex(pA->GetIndex());
- const sal_uInt32 nStringLength(pA->GetText().Len());
-
- if(nTextLength + nTextIndex > nStringLength)
- {
- nTextLength = nTextIndex > nStringLength ? 0 : nStringLength - nTextIndex;
- }
-
- if(nTextLength && rPropertyHolders.Current().getTextColorActive())
- {
- // preapare DXArray (if used)
- std::vector< double > aDXArray;
- sal_Int32* pDXArray = pA->GetDXArray();
-
- if(pDXArray)
- {
- aDXArray.reserve(nTextLength);
-
- for(sal_uInt32 a(0); a < nTextLength; a++)
- {
- aDXArray.push_back((double)(*(pDXArray + a)));
- }
- }
-
- proccessMetaTextAction(
- pA->GetPoint(),
- pA->GetText(),
- nTextIndex,
- nTextLength,
- aDXArray,
- rTargetHolders.Current(),
- rPropertyHolders.Current());
- }
-
- break;
- }
- case META_STRETCHTEXT_ACTION :
- {
- // #i108440# StarMath uses MetaStretchTextAction, thus support is needed.
- // It looks as if it pretty never really uses a width different from
- // the default text-layout width, but it's not possible to be sure.
- // Implemented getting the DXArray and checking for scale at all. If
- // scale is more than 3.5% different, scale the DXArray before usage.
- // New status:
-
- /** CHECKED, WORKS WELL */
- const MetaStretchTextAction* pA = (const MetaStretchTextAction*)pAction;
- sal_uInt32 nTextLength(pA->GetLen());
- const sal_uInt32 nTextIndex(pA->GetIndex());
- const sal_uInt32 nStringLength(pA->GetText().Len());
-
- if(nTextLength + nTextIndex > nStringLength)
- {
- nTextLength = nStringLength - nTextIndex;
- }
-
- if(nTextLength && rPropertyHolders.Current().getTextColorActive())
- {
- drawinglayer::primitive2d::TextLayouterDevice aTextLayouterDevice;
- aTextLayouterDevice.setFont(rPropertyHolders.Current().getFont());
-
- ::std::vector< double > aTextArray(
- aTextLayouterDevice.getTextArray(
- pA->GetText(),
- nTextIndex,
- nTextLength));
-
- if(!aTextArray.empty())
- {
- const double fTextLength(aTextArray.back());
-
- if(0.0 != fTextLength && pA->GetWidth())
- {
- const double fRelative(pA->GetWidth() / fTextLength);
-
- if(fabs(fRelative - 1.0) >= 0.035)
- {
- // when derivation is more than 3,5% from default text size,
- // scale the DXArray
- for(sal_uInt32 a(0); a < aTextArray.size(); a++)
- {
- aTextArray[a] *= fRelative;
- }
- }
- }
- }
-
- proccessMetaTextAction(
- pA->GetPoint(),
- pA->GetText(),
- nTextIndex,
- nTextLength,
- aTextArray,
- rTargetHolders.Current(),
- rPropertyHolders.Current());
- }
-
- break;
- }
- case META_TEXTRECT_ACTION :
- {
- /** CHECKED, WORKS WELL */
- // OSL_FAIL("META_TEXTRECT_ACTION requested (!)");
- const MetaTextRectAction* pA = (const MetaTextRectAction*)pAction;
- const Rectangle& rRectangle = pA->GetRect();
- const sal_uInt32 nStringLength(pA->GetText().Len());
-
- if(!rRectangle.IsEmpty() && 0 != nStringLength)
- {
- // The problem with this action is that it describes unlayouted text
- // and the layout capabilities are in EditEngine/Outliner in SVX. The
- // same problem is true for VCL which internally has implementations
- // to layout text in this case. There exists even a call
- // OutputDevice::AddTextRectActions(...) to create the needed actions
- // as 'sub-content' of a Metafile. Unfortunately i do not have an
- // OutputDevice here since this interpreter tries to work without
- // VCL AFAP.
- // Since AddTextRectActions is the only way as long as we do not have
- // a simple text layouter available, i will try to add it to the
- // TextLayouterDevice isloation.
- drawinglayer::primitive2d::TextLayouterDevice aTextLayouterDevice;
- aTextLayouterDevice.setFont(rPropertyHolders.Current().getFont());
- GDIMetaFile aGDIMetaFile;
-
- aTextLayouterDevice.addTextRectActions(
- rRectangle, pA->GetText(), pA->GetStyle(), aGDIMetaFile);
-
- if(aGDIMetaFile.GetActionSize())
- {
- // cerate sub-content
- drawinglayer::primitive2d::Primitive2DSequence xSubContent;
- {
- rTargetHolders.Push();
- // #i# for sub-Mteafile contents, do start with new, default render state
- rPropertyHolders.PushDefault();
- interpretMetafile(aGDIMetaFile, rTargetHolders, rPropertyHolders, rViewInformation);
- xSubContent = rTargetHolders.Current().getPrimitive2DSequence(rPropertyHolders.Current());
- rPropertyHolders.Pop();
- rTargetHolders.Pop();
- }
-
- if(xSubContent.hasElements())
- {
- // add with transformation
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::TransformPrimitive2D(
- rPropertyHolders.Current().getTransformation(),
- xSubContent));
- }
- }
- }
-
- break;
- }
- case META_BMP_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaBmpAction* pA = (const MetaBmpAction*)pAction;
- const BitmapEx aBitmapEx(pA->GetBitmap());
-
- createBitmapExPrimitive(aBitmapEx, pA->GetPoint(), rTargetHolders.Current(), rPropertyHolders.Current());
-
- break;
- }
- case META_BMPSCALE_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaBmpScaleAction* pA = (const MetaBmpScaleAction*)pAction;
- const Bitmap aBitmapEx(pA->GetBitmap());
-
- createBitmapExPrimitive(aBitmapEx, pA->GetPoint(), pA->GetSize(), rTargetHolders.Current(), rPropertyHolders.Current());
-
- break;
- }
- case META_BMPSCALEPART_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaBmpScalePartAction* pA = (const MetaBmpScalePartAction*)pAction;
- const Bitmap& rBitmap = pA->GetBitmap();
-
- if(!rBitmap.IsEmpty())
- {
- Bitmap aCroppedBitmap(rBitmap);
- const Rectangle aCropRectangle(pA->GetSrcPoint(), pA->GetSrcSize());
-
- if(!aCropRectangle.IsEmpty())
- {
- aCroppedBitmap.Crop(aCropRectangle);
- }
-
- const BitmapEx aCroppedBitmapEx(aCroppedBitmap);
- createBitmapExPrimitive(aCroppedBitmapEx, pA->GetDestPoint(), pA->GetDestSize(), rTargetHolders.Current(), rPropertyHolders.Current());
- }
-
- break;
- }
- case META_BMPEX_ACTION :
- {
- /** CHECKED, WORKS WELL: Simply same as META_BMP_ACTION */
- const MetaBmpExAction* pA = (const MetaBmpExAction*)pAction;
- const BitmapEx& rBitmapEx = pA->GetBitmapEx();
-
- createBitmapExPrimitive(rBitmapEx, pA->GetPoint(), rTargetHolders.Current(), rPropertyHolders.Current());
-
- break;
- }
- case META_BMPEXSCALE_ACTION :
- {
- /** CHECKED, WORKS WELL: Simply same as META_BMPSCALE_ACTION */
- const MetaBmpExScaleAction* pA = (const MetaBmpExScaleAction*)pAction;
- const BitmapEx& rBitmapEx = pA->GetBitmapEx();
-
- createBitmapExPrimitive(rBitmapEx, pA->GetPoint(), pA->GetSize(), rTargetHolders.Current(), rPropertyHolders.Current());
-
- break;
- }
- case META_BMPEXSCALEPART_ACTION :
- {
- /** CHECKED, WORKS WELL: Simply same as META_BMPSCALEPART_ACTION */
- const MetaBmpExScalePartAction* pA = (const MetaBmpExScalePartAction*)pAction;
- const BitmapEx& rBitmapEx = pA->GetBitmapEx();
-
- if(!rBitmapEx.IsEmpty())
- {
- BitmapEx aCroppedBitmapEx(rBitmapEx);
- const Rectangle aCropRectangle(pA->GetSrcPoint(), pA->GetSrcSize());
-
- if(!aCropRectangle.IsEmpty())
- {
- aCroppedBitmapEx.Crop(aCropRectangle);
- }
-
- createBitmapExPrimitive(aCroppedBitmapEx, pA->GetDestPoint(), pA->GetDestSize(), rTargetHolders.Current(), rPropertyHolders.Current());
- }
-
- break;
- }
- case META_MASK_ACTION :
- {
- /** CHECKED, WORKS WELL: Simply same as META_BMP_ACTION */
- const MetaMaskAction* pA = (const MetaMaskAction*)pAction;
- const BitmapEx aBitmapEx(createMaskBmpEx(pA->GetBitmap(), pA->GetColor()));
-
- createBitmapExPrimitive(aBitmapEx, pA->GetPoint(), rTargetHolders.Current(), rPropertyHolders.Current());
-
- break;
- }
- case META_MASKSCALE_ACTION :
- {
- /** CHECKED, WORKS WELL: Simply same as META_BMPSCALE_ACTION */
- const MetaMaskScaleAction* pA = (const MetaMaskScaleAction*)pAction;
- const BitmapEx aBitmapEx(createMaskBmpEx(pA->GetBitmap(), pA->GetColor()));
-
- createBitmapExPrimitive(aBitmapEx, pA->GetPoint(), pA->GetSize(), rTargetHolders.Current(), rPropertyHolders.Current());
-
- break;
- }
- case META_MASKSCALEPART_ACTION :
- {
- /** CHECKED, WORKS WELL: Simply same as META_BMPSCALEPART_ACTION */
- const MetaMaskScalePartAction* pA = (const MetaMaskScalePartAction*)pAction;
- const Bitmap& rBitmap = pA->GetBitmap();
-
- if(!rBitmap.IsEmpty())
- {
- Bitmap aCroppedBitmap(rBitmap);
- const Rectangle aCropRectangle(pA->GetSrcPoint(), pA->GetSrcSize());
-
- if(!aCropRectangle.IsEmpty())
- {
- aCroppedBitmap.Crop(aCropRectangle);
- }
-
- const BitmapEx aCroppedBitmapEx(createMaskBmpEx(aCroppedBitmap, pA->GetColor()));
- createBitmapExPrimitive(aCroppedBitmapEx, pA->GetDestPoint(), pA->GetDestSize(), rTargetHolders.Current(), rPropertyHolders.Current());
- }
-
- break;
- }
- case META_GRADIENT_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaGradientAction* pA = (const MetaGradientAction*)pAction;
- const Rectangle& rRectangle = pA->GetRect();
-
- if(!rRectangle.IsEmpty())
- {
- basegfx::B2DRange aRange(rRectangle.Left(), rRectangle.Top(), rRectangle.Right(), rRectangle.Bottom());
-
- if(!aRange.isEmpty())
- {
- const Gradient& rGradient = pA->GetGradient();
- const drawinglayer::attribute::FillGradientAttribute aAttribute(createFillGradientAttribute(rGradient));
- basegfx::B2DPolyPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange));
-
- if(aAttribute.getStartColor() == aAttribute.getEndColor())
- {
- // not really a gradient. Create filled rectangle
- createFillPrimitive(
- aOutline,
- rTargetHolders.Current(),
- rPropertyHolders.Current());
- }
- else
- {
- // really a gradient
- aRange.transform(rPropertyHolders.Current().getTransformation());
- drawinglayer::primitive2d::Primitive2DSequence xGradient(1);
-
- if(rPropertyHolders.Current().isRasterOpInvert())
- {
- // use a special version of FillGradientPrimitive2D which creates
- // non-overlapping geometry on decomposition to makethe old XOR
- // paint 'trick' work.
- xGradient[0] = drawinglayer::primitive2d::Primitive2DReference(
- new drawinglayer::primitive2d::NonOverlappingFillGradientPrimitive2D(
- aRange,
- aAttribute));
- }
- else
- {
- xGradient[0] = drawinglayer::primitive2d::Primitive2DReference(
- new drawinglayer::primitive2d::FillGradientPrimitive2D(
- aRange,
- aAttribute));
- }
-
- // #i112300# clip against polygon representing the rectangle from
- // the action. This is implicitely done using a temp Clipping in VCL
- // when a MetaGradientAction is executed
- aOutline.transform(rPropertyHolders.Current().getTransformation());
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::MaskPrimitive2D(
- aOutline,
- xGradient));
- }
- }
- }
-
- break;
- }
- case META_HATCH_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaHatchAction* pA = (const MetaHatchAction*)pAction;
- basegfx::B2DPolyPolygon aOutline(pA->GetPolyPolygon().getB2DPolyPolygon());
-
- if(aOutline.count())
- {
- const Hatch& rHatch = pA->GetHatch();
- const drawinglayer::attribute::FillHatchAttribute aAttribute(createFillHatchAttribute(rHatch));
-
- aOutline.transform(rPropertyHolders.Current().getTransformation());
-
- const basegfx::B2DRange aObjectRange(aOutline.getB2DRange());
- const drawinglayer::primitive2d::Primitive2DReference aFillHatch(
- new drawinglayer::primitive2d::FillHatchPrimitive2D(
- aObjectRange,
- basegfx::BColor(),
- aAttribute));
-
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::MaskPrimitive2D(
- aOutline,
- drawinglayer::primitive2d::Primitive2DSequence(&aFillHatch, 1)));
- }
-
- break;
- }
- case META_WALLPAPER_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaWallpaperAction* pA = (const MetaWallpaperAction*)pAction;
- Rectangle aWallpaperRectangle(pA->GetRect());
-
- if(!aWallpaperRectangle.IsEmpty())
- {
- const Wallpaper& rWallpaper = pA->GetWallpaper();
- const WallpaperStyle eWallpaperStyle(rWallpaper.GetStyle());
- basegfx::B2DRange aWallpaperRange(
- aWallpaperRectangle.Left(), aWallpaperRectangle.Top(),
- aWallpaperRectangle.Right(), aWallpaperRectangle.Bottom());
-
- if(WALLPAPER_NULL != eWallpaperStyle)
- {
- if(rWallpaper.IsBitmap())
- {
- // create bitmap background. Caution: This
- // also will create gradient/color background(s)
- // when the bitmap is transparent or not tiled
- CreateAndAppendBitmapWallpaper(
- aWallpaperRange,
- rWallpaper,
- rTargetHolders.Current(),
- rPropertyHolders.Current());
- }
- else if(rWallpaper.IsGradient())
- {
- // create gradient background
- rTargetHolders.Current().append(
- CreateGradientWallpaper(
- aWallpaperRange,
- rWallpaper.GetGradient(),
- rPropertyHolders.Current()));
- }
- else if(!rWallpaper.GetColor().GetTransparency())
- {
- // create color background
- rTargetHolders.Current().append(
- CreateColorWallpaper(
- aWallpaperRange,
- rWallpaper.GetColor().getBColor(),
- rPropertyHolders.Current()));
- }
- }
- }
-
- break;
- }
- case META_CLIPREGION_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaClipRegionAction* pA = (const MetaClipRegionAction*)pAction;
-
- if(pA->IsClipping())
- {
- // new clipping. Get PolyPolygon and transform with current transformation
- basegfx::B2DPolyPolygon aNewClipPolyPolygon(getB2DPolyPolygonFromRegion(pA->GetRegion()));
-
- aNewClipPolyPolygon.transform(rPropertyHolders.Current().getTransformation());
- HandleNewClipRegion(aNewClipPolyPolygon, rTargetHolders, rPropertyHolders);
- }
- else
- {
- // end clipping
- const basegfx::B2DPolyPolygon aEmptyPolyPolygon;
-
- HandleNewClipRegion(aEmptyPolyPolygon, rTargetHolders, rPropertyHolders);
- }
-
- break;
- }
- case META_ISECTRECTCLIPREGION_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaISectRectClipRegionAction* pA = (const MetaISectRectClipRegionAction*)pAction;
- const Rectangle& rRectangle = pA->GetRect();
-
- if(rRectangle.IsEmpty())
- {
- // intersect with empty rectangle will always give empty
- // ClipPolyPolygon; start new clipping with empty PolyPolygon
- const basegfx::B2DPolyPolygon aEmptyPolyPolygon;
-
- HandleNewClipRegion(aEmptyPolyPolygon, rTargetHolders, rPropertyHolders);
- }
- else
- {
- // create transformed ClipRange
- basegfx::B2DRange aClipRange(
- rRectangle.Left(), rRectangle.Top(),
- rRectangle.Right(), rRectangle.Bottom());
-
- aClipRange.transform(rPropertyHolders.Current().getTransformation());
-
- if(rPropertyHolders.Current().getClipPolyPolygonActive())
- {
- if(0 == rPropertyHolders.Current().getClipPolyPolygon().count())
- {
- // nothing to do, empty active clipPolyPolygon will stay
- // empty when intersecting
- }
- else
- {
- // AND existing region and new ClipRange
- const basegfx::B2DPolyPolygon aOriginalPolyPolygon(
- rPropertyHolders.Current().getClipPolyPolygon());
- basegfx::B2DPolyPolygon aClippedPolyPolygon;
-
- if(aOriginalPolyPolygon.count())
- {
- aClippedPolyPolygon = basegfx::tools::clipPolyPolygonOnRange(
- aOriginalPolyPolygon,
- aClipRange,
- true,
- false);
- }
-
- if(aClippedPolyPolygon != aOriginalPolyPolygon)
- {
- // start new clipping with intersected region
- HandleNewClipRegion(
- aClippedPolyPolygon,
- rTargetHolders,
- rPropertyHolders);
- }
- }
- }
- else
- {
- // start new clipping with ClipRange
- const basegfx::B2DPolyPolygon aNewClipPolyPolygon(
- basegfx::tools::createPolygonFromRect(aClipRange));
-
- HandleNewClipRegion(aNewClipPolyPolygon, rTargetHolders, rPropertyHolders);
- }
- }
-
- break;
- }
- case META_ISECTREGIONCLIPREGION_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaISectRegionClipRegionAction* pA = (const MetaISectRegionClipRegionAction*)pAction;
- const Region& rNewRegion = pA->GetRegion();
-
- if(rNewRegion.IsEmpty())
- {
- // intersect with empty region will always give empty
- // region; start new clipping with empty PolyPolygon
- const basegfx::B2DPolyPolygon aEmptyPolyPolygon;
-
- HandleNewClipRegion(aEmptyPolyPolygon, rTargetHolders, rPropertyHolders);
- }
- else
- {
- // get new ClipPolyPolygon, transform it with current transformation
- basegfx::B2DPolyPolygon aNewClipPolyPolygon(getB2DPolyPolygonFromRegion(rNewRegion));
- aNewClipPolyPolygon.transform(rPropertyHolders.Current().getTransformation());
-
- if(rPropertyHolders.Current().getClipPolyPolygonActive())
- {
- if(0 == rPropertyHolders.Current().getClipPolyPolygon().count())
- {
- // nothing to do, empty active clipPolyPolygon will stay empty
- // when intersecting with any region
- }
- else
- {
- // AND existing and new region
- const basegfx::B2DPolyPolygon aOriginalPolyPolygon(
- rPropertyHolders.Current().getClipPolyPolygon());
- basegfx::B2DPolyPolygon aClippedPolyPolygon;
-
- if(aOriginalPolyPolygon.count())
- {
- aClippedPolyPolygon = basegfx::tools::clipPolyPolygonOnPolyPolygon(
- aOriginalPolyPolygon, aNewClipPolyPolygon, true, false);
- }
-
- if(aClippedPolyPolygon != aOriginalPolyPolygon)
- {
- // start new clipping with intersected ClipPolyPolygon
- HandleNewClipRegion(aClippedPolyPolygon, rTargetHolders, rPropertyHolders);
- }
- }
- }
- else
- {
- // start new clipping with new ClipPolyPolygon
- HandleNewClipRegion(aNewClipPolyPolygon, rTargetHolders, rPropertyHolders);
- }
- }
-
- break;
- }
- case META_MOVECLIPREGION_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaMoveClipRegionAction* pA = (const MetaMoveClipRegionAction*)pAction;
-
- if(rPropertyHolders.Current().getClipPolyPolygonActive())
- {
- if(0 == rPropertyHolders.Current().getClipPolyPolygon().count())
- {
- // nothing to do
- }
- else
- {
- const sal_Int32 nHor(pA->GetHorzMove());
- const sal_Int32 nVer(pA->GetVertMove());
-
- if(0 != nHor || 0 != nVer)
- {
- // prepare translation, add current transformation
- basegfx::B2DVector aVector(pA->GetHorzMove(), pA->GetVertMove());
- aVector *= rPropertyHolders.Current().getTransformation();
- basegfx::B2DHomMatrix aTransform(
- basegfx::tools::createTranslateB2DHomMatrix(aVector));
-
- // transform existing region
- basegfx::B2DPolyPolygon aClipPolyPolygon(
- rPropertyHolders.Current().getClipPolyPolygon());
-
- aClipPolyPolygon.transform(aTransform);
- HandleNewClipRegion(aClipPolyPolygon, rTargetHolders, rPropertyHolders);
- }
- }
- }
-
- break;
- }
- case META_LINECOLOR_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaLineColorAction* pA = (const MetaLineColorAction*)pAction;
- const bool bActive(pA->IsSetting());
-
- rPropertyHolders.Current().setLineColorActive(bActive);
- if(bActive)
- rPropertyHolders.Current().setLineColor(pA->GetColor().getBColor());
-
- break;
- }
- case META_FILLCOLOR_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaFillColorAction* pA = (const MetaFillColorAction*)pAction;
- const bool bActive(pA->IsSetting());
-
- rPropertyHolders.Current().setFillColorActive(bActive);
- if(bActive)
- rPropertyHolders.Current().setFillColor(pA->GetColor().getBColor());
-
- break;
- }
- case META_TEXTCOLOR_ACTION :
- {
- /** SIMPLE, DONE */
- const MetaTextColorAction* pA = (const MetaTextColorAction*)pAction;
- const bool bActivate(COL_TRANSPARENT != pA->GetColor().GetColor());
-
- rPropertyHolders.Current().setTextColorActive(bActivate);
- rPropertyHolders.Current().setTextColor(pA->GetColor().getBColor());
-
- break;
- }
- case META_TEXTFILLCOLOR_ACTION :
- {
- /** SIMPLE, DONE */
- const MetaTextFillColorAction* pA = (const MetaTextFillColorAction*)pAction;
- const bool bWithColorArgument(pA->IsSetting());
-
- if(bWithColorArgument)
- {
- // emulate OutputDevice::SetTextFillColor(...) WITH argument
- const Color& rFontFillColor = pA->GetColor();
- rPropertyHolders.Current().setTextFillColor(rFontFillColor.getBColor());
- rPropertyHolders.Current().setTextFillColorActive(COL_TRANSPARENT != rFontFillColor.GetColor());
- }
- else
- {
- // emulate SetFillColor() <- NO argument (!)
- rPropertyHolders.Current().setTextFillColorActive(false);
- }
-
- break;
- }
- case META_TEXTALIGN_ACTION :
- {
- /** SIMPLE, DONE */
- const MetaTextAlignAction* pA = (const MetaTextAlignAction*)pAction;
- const TextAlign aNewTextAlign = pA->GetTextAlign();
-
- // TextAlign is applied to the current font (as in
- // OutputDevice::SetTextAlign which would be used when
- // playing the Metafile)
- if(rPropertyHolders.Current().getFont().GetAlign() != aNewTextAlign)
- {
- Font aNewFont(rPropertyHolders.Current().getFont());
- aNewFont.SetAlign(aNewTextAlign);
- rPropertyHolders.Current().setFont(aNewFont);
- }
-
- break;
- }
- case META_MAPMODE_ACTION :
- {
- /** CHECKED, WORKS WELL */
- // the most necessary MapMode to be interpreted is MAP_RELATIVE,
- // but also the others may occur. Even not yet supported ones
- // may need to be added here later
- const MetaMapModeAction* pA = (const MetaMapModeAction*)pAction;
- const MapMode& rMapMode = pA->GetMapMode();
- basegfx::B2DHomMatrix aMapping;
-
- if(MAP_RELATIVE == rMapMode.GetMapUnit())
- {
- aMapping = getTransformFromMapMode(rMapMode);
- }
- else
- {
- switch(rMapMode.GetMapUnit())
- {
- case MAP_100TH_MM :
- {
- if(MAP_TWIP == rPropertyHolders.Current().getMapUnit())
- {
- // MAP_TWIP -> MAP_100TH_MM
- const double fTwipTo100thMm(127.0 / 72.0);
- aMapping.scale(fTwipTo100thMm, fTwipTo100thMm);
- }
- break;
- }
- case MAP_TWIP :
- {
- if(MAP_100TH_MM == rPropertyHolders.Current().getMapUnit())
- {
- // MAP_100TH_MM -> MAP_TWIP
- const double f100thMmToTwip(72.0 / 127.0);
- aMapping.scale(f100thMmToTwip, f100thMmToTwip);
- }
- break;
- }
- default :
- {
- OSL_FAIL("interpretMetafile: META_MAPMODE_ACTION with unsupported MapUnit (!)");
- break;
- }
- }
-
- aMapping = getTransformFromMapMode(rMapMode) * aMapping;
- rPropertyHolders.Current().setMapUnit(rMapMode.GetMapUnit());
- }
-
- if(!aMapping.isIdentity())
- {
- aMapping = aMapping * rPropertyHolders.Current().getTransformation();
- rPropertyHolders.Current().setTransformation(aMapping);
- }
-
- break;
- }
- case META_FONT_ACTION :
- {
- /** SIMPLE, DONE */
- const MetaFontAction* pA = (const MetaFontAction*)pAction;
- rPropertyHolders.Current().setFont(pA->GetFont());
- Size aFontSize(pA->GetFont().GetSize());
-
- if(0 == aFontSize.Height())
- {
- // this should not happen but i got Metafiles where this was the
- // case. A height needs to be guessed (similar to OutputDevice::ImplNewFont())
- Font aCorrectedFont(pA->GetFont());
-
- // guess 16 pixel (as in VCL)
- aFontSize = Size(0, 16);
-
- // convert to target MapUnit if not pixels
- aFontSize = Application::GetDefaultDevice()->LogicToLogic(
- aFontSize, MAP_PIXEL, rPropertyHolders.Current().getMapUnit());
-
- aCorrectedFont.SetSize(aFontSize);
- rPropertyHolders.Current().setFont(aCorrectedFont);
- }
-
- // older Metafiles have no META_TEXTCOLOR_ACTION which defines
- // the FontColor now, so use the Font's color when not transparent
- const Color& rFontColor = pA->GetFont().GetColor();
- const bool bActivate(COL_TRANSPARENT != rFontColor.GetColor());
-
- if(bActivate)
- {
- rPropertyHolders.Current().setTextColor(rFontColor.getBColor());
- }
-
- // caution: do NOT decativate here on transparet, see
- // OutputDevice::SetFont(..) for more info
- // rPropertyHolders.Current().setTextColorActive(bActivate);
-
- // for fill color emulate a MetaTextFillColorAction with !transparent as bool,
- // see OutputDevice::SetFont(..) the if(mpMetaFile) case
- if(bActivate)
- {
- const Color& rFontFillColor = pA->GetFont().GetFillColor();
- rPropertyHolders.Current().setTextFillColor(rFontFillColor.getBColor());
- rPropertyHolders.Current().setTextFillColorActive(COL_TRANSPARENT != rFontFillColor.GetColor());
- }
- else
- {
- rPropertyHolders.Current().setTextFillColorActive(false);
- }
-
- break;
- }
- case META_PUSH_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaPushAction* pA = (const MetaPushAction*)pAction;
- rPropertyHolders.Push(pA->GetFlags());
-
- break;
- }
- case META_POP_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const bool bRegionMayChange(rPropertyHolders.Current().getPushFlags() & PUSH_CLIPREGION);
- const bool bRasterOpMayChange(rPropertyHolders.Current().getPushFlags() & PUSH_RASTEROP);
-
- if(bRegionMayChange && rPropertyHolders.Current().getClipPolyPolygonActive())
- {
- // end evtl. clipping
- const basegfx::B2DPolyPolygon aEmptyPolyPolygon;
-
- HandleNewClipRegion(aEmptyPolyPolygon, rTargetHolders, rPropertyHolders);
- }
-
- if(bRasterOpMayChange && rPropertyHolders.Current().isRasterOpActive())
- {
- // end evtl. RasterOp
- HandleNewRasterOp(ROP_OVERPAINT, rTargetHolders, rPropertyHolders);
- }
-
- rPropertyHolders.Pop();
-
- if(bRasterOpMayChange && rPropertyHolders.Current().isRasterOpActive())
- {
- // start evtl. RasterOp
- HandleNewRasterOp(rPropertyHolders.Current().getRasterOp(), rTargetHolders, rPropertyHolders);
- }
-
- if(bRegionMayChange && rPropertyHolders.Current().getClipPolyPolygonActive())
- {
- // start evtl. clipping
- HandleNewClipRegion(
- rPropertyHolders.Current().getClipPolyPolygon(), rTargetHolders, rPropertyHolders);
- }
-
- break;
- }
- case META_RASTEROP_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaRasterOpAction* pA = (const MetaRasterOpAction*)pAction;
- const RasterOp aRasterOp = pA->GetRasterOp();
-
- HandleNewRasterOp(aRasterOp, rTargetHolders, rPropertyHolders);
-
- break;
- }
- case META_TRANSPARENT_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaTransparentAction* pA = (const MetaTransparentAction*)pAction;
- const basegfx::B2DPolyPolygon aOutline(pA->GetPolyPolygon().getB2DPolyPolygon());
-
- if(aOutline.count())
- {
- const sal_uInt16 nTransparence(pA->GetTransparence());
-
- if(0 == nTransparence)
- {
- // not transparent
- createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current());
- }
- else if(nTransparence >= 100)
- {
- // fully or more than transparent
- }
- else
- {
- // transparent. Create new target
- rTargetHolders.Push();
-
- // create primitives there and get them
- createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current());
- const drawinglayer::primitive2d::Primitive2DSequence aSubContent(
- rTargetHolders.Current().getPrimitive2DSequence(rPropertyHolders.Current()));
-
- // back to old target
- rTargetHolders.Pop();
-
- if(aSubContent.hasElements())
- {
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::UnifiedTransparencePrimitive2D(
- aSubContent,
- nTransparence * 0.01));
- }
- }
- }
-
- break;
- }
- case META_EPS_ACTION :
- {
- /** CHECKED, WORKS WELL */
- // To support this action, i have added a EpsPrimitive2D which will
- // by default decompose to the Metafile replacement data. To support
- // this EPS on screen, the renderer visualizing this has to support
- // that primitive and visualize the Eps file (e.g. printing)
- const MetaEPSAction* pA = (const MetaEPSAction*)pAction;
- const Rectangle aRectangle(pA->GetPoint(), pA->GetSize());
-
- if(!aRectangle.IsEmpty())
- {
- // create object transform
- basegfx::B2DHomMatrix aObjectTransform;
-
- aObjectTransform.set(0, 0, aRectangle.GetWidth());
- aObjectTransform.set(1, 1, aRectangle.GetHeight());
- aObjectTransform.set(0, 2, aRectangle.Left());
- aObjectTransform.set(1, 2, aRectangle.Top());
-
- // add current transformation
- aObjectTransform = rPropertyHolders.Current().getTransformation() * aObjectTransform;
-
- // embed using EpsPrimitive
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::EpsPrimitive2D(
- aObjectTransform,
- pA->GetLink(),
- pA->GetSubstitute()));
- }
-
- break;
- }
- case META_REFPOINT_ACTION :
- {
- /** SIMPLE, DONE */
- // only used for hatch and line pattern offsets, pretty much no longer
- // supported today
- // const MetaRefPointAction* pA = (const MetaRefPointAction*)pAction;
- break;
- }
- case META_TEXTLINECOLOR_ACTION :
- {
- /** SIMPLE, DONE */
- const MetaTextLineColorAction* pA = (const MetaTextLineColorAction*)pAction;
- const bool bActive(pA->IsSetting());
-
- rPropertyHolders.Current().setTextLineColorActive(bActive);
- if(bActive)
- rPropertyHolders.Current().setTextLineColor(pA->GetColor().getBColor());
-
- break;
- }
- case META_TEXTLINE_ACTION :
- {
- /** CHECKED, WORKS WELL */
- // actually creates overline, underline and strikeouts, so
- // these should be isolated from TextDecoratedPortionPrimitive2D
- // to own primitives. Done, available now.
- //
- // This Metaaction seems not to be used (was not used in any
- // checked files). It's used in combination with the current
- // Font.
- const MetaTextLineAction* pA = (const MetaTextLineAction*)pAction;
-
- proccessMetaTextLineAction(
- *pA,
- rTargetHolders.Current(),
- rPropertyHolders.Current());
-
- break;
- }
- case META_FLOATTRANSPARENT_ACTION :
- {
- /** CHECKED, WORKS WELL */
- const MetaFloatTransparentAction* pA = (const MetaFloatTransparentAction*)pAction;
- const Rectangle aTargetRectangle(pA->GetPoint(), pA->GetSize());
-
- if(!aTargetRectangle.IsEmpty())
- {
- const GDIMetaFile& rContent = pA->GetGDIMetaFile();
-
- if(rContent.GetActionSize())
- {
- // create the sub-content with no embedding specific to the
- // sub-metafile, this seems not to be used.
- drawinglayer::primitive2d::Primitive2DSequence xSubContent;
- {
- rTargetHolders.Push();
- // #i# for sub-Mteafile contents, do start with new, default render state
- rPropertyHolders.PushDefault();
- interpretMetafile(rContent, rTargetHolders, rPropertyHolders, rViewInformation);
- xSubContent = rTargetHolders.Current().getPrimitive2DSequence(rPropertyHolders.Current());
- rPropertyHolders.Pop();
- rTargetHolders.Pop();
- }
-
- if(xSubContent.hasElements())
- {
- // check if gradient is a real gradient
- const Gradient& rGradient = pA->GetGradient();
- const drawinglayer::attribute::FillGradientAttribute aAttribute(createFillGradientAttribute(rGradient));
-
- if(aAttribute.getStartColor() == aAttribute.getEndColor())
- {
- // not really a gradient; create UnifiedTransparencePrimitive2D
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::UnifiedTransparencePrimitive2D(
- xSubContent,
- aAttribute.getStartColor().luminance()));
- }
- else
- {
- // really a gradient. Create gradient sub-content (with correct scaling)
- basegfx::B2DRange aRange(
- aTargetRectangle.Left(), aTargetRectangle.Top(),
- aTargetRectangle.Right(), aTargetRectangle.Bottom());
- aRange.transform(rPropertyHolders.Current().getTransformation());
-
- // prepare gradient for transparent content
- const drawinglayer::primitive2d::Primitive2DReference xTransparence(
- new drawinglayer::primitive2d::FillGradientPrimitive2D(
- aRange,
- aAttribute));
-
- // create transparence primitive
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::TransparencePrimitive2D(
- xSubContent,
- drawinglayer::primitive2d::Primitive2DSequence(&xTransparence, 1)));
- }
- }
- }
- }
-
- break;
- }
- case META_GRADIENTEX_ACTION :
- {
- /** SIMPLE, DONE */
- // This is only a data holder which is interpreted inside comment actions,
- // see META_COMMENT_ACTION for more info
- // const MetaGradientExAction* pA = (const MetaGradientExAction*)pAction;
- break;
- }
- case META_LAYOUTMODE_ACTION :
- {
- /** SIMPLE, DONE */
- const MetaLayoutModeAction* pA = (const MetaLayoutModeAction*)pAction;
- rPropertyHolders.Current().setLayoutMode(pA->GetLayoutMode());
- break;
- }
- case META_TEXTLANGUAGE_ACTION :
- {
- /** SIMPLE, DONE */
- const MetaTextLanguageAction* pA = (const MetaTextLanguageAction*)pAction;
- rPropertyHolders.Current().setLanguageType(pA->GetTextLanguage());
- break;
- }
- case META_OVERLINECOLOR_ACTION :
- {
- /** SIMPLE, DONE */
- const MetaOverlineColorAction* pA = (const MetaOverlineColorAction*)pAction;
- const bool bActive(pA->IsSetting());
-
- rPropertyHolders.Current().setOverlineColorActive(bActive);
- if(bActive)
- rPropertyHolders.Current().setOverlineColor(pA->GetColor().getBColor());
-
- break;
- }
- case META_RENDERGRAPHIC_ACTION :
- {
- const MetaRenderGraphicAction* pA = (const MetaRenderGraphicAction*)pAction;
- const Rectangle aRectangle(pA->GetPoint(), pA->GetSize());
-
- if(!aRectangle.IsEmpty())
- {
- // create object transform
- basegfx::B2DHomMatrix aObjectTransform;
-
- aObjectTransform.set(0, 0, aRectangle.GetWidth());
- aObjectTransform.set(1, 1, aRectangle.GetHeight());
- aObjectTransform.set(0, 2, aRectangle.Left());
- aObjectTransform.set(1, 2, aRectangle.Top());
-
- // add current transformation
- aObjectTransform = rPropertyHolders.Current().getTransformation() * aObjectTransform;
-
- // embed using EpsPrimitive
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::RenderGraphicPrimitive2D(
- pA->GetRenderGraphic(),
- aObjectTransform ) );
- }
-
- break;
- }
- case META_COMMENT_ACTION :
- {
- /** CHECKED, WORKS WELL */
- // I already implemented
- // XPATHFILL_SEQ_BEGIN, XPATHFILL_SEQ_END
- // XPATHSTROKE_SEQ_BEGIN, XPATHSTROKE_SEQ_END,
- // but opted to remove these again; it works well without them
- // and makes the code less dependent from those Metafile Add-Ons
- const MetaCommentAction* pA = (const MetaCommentAction*)pAction;
-
- if(COMPARE_EQUAL == pA->GetComment().CompareIgnoreCaseToAscii("XGRAD_SEQ_BEGIN"))
- {
- // XGRAD_SEQ_BEGIN, XGRAD_SEQ_END should be supported since the
- // pure recorded paint of the gradients uses the XOR paint functionality
- // ('trick'). This is (and will be) broblematic with AntAliasing, so it's
- // better to use this info
- const MetaGradientExAction* pMetaGradientExAction = 0;
- bool bDone(false);
- sal_uInt32 b(nAction + 1);
-
- for(; !bDone && b < nCount; b++)
- {
- pAction = rMetaFile.GetAction(b);
-
- if(META_GRADIENTEX_ACTION == pAction->GetType())
- {
- pMetaGradientExAction = (const MetaGradientExAction*)pAction;
- }
- else if(META_COMMENT_ACTION == pAction->GetType())
- {
- if(COMPARE_EQUAL == ((const MetaCommentAction*)pAction)->GetComment().CompareIgnoreCaseToAscii("XGRAD_SEQ_END"))
- {
- bDone = true;
- }
- }
- }
-
- if(bDone && pMetaGradientExAction)
- {
- // consume actions and skip forward
- nAction = b - 1;
-
- // get geometry data
- basegfx::B2DPolyPolygon aPolyPolygon(pMetaGradientExAction->GetPolyPolygon().getB2DPolyPolygon());
-
- if(aPolyPolygon.count())
- {
- // transform geometry
- aPolyPolygon.transform(rPropertyHolders.Current().getTransformation());
-
- // get and check if gradient is a real gradient
- const Gradient& rGradient = pMetaGradientExAction->GetGradient();
- const drawinglayer::attribute::FillGradientAttribute aAttribute(createFillGradientAttribute(rGradient));
-
- if(aAttribute.getStartColor() == aAttribute.getEndColor())
- {
- // not really a gradient
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D(
- aPolyPolygon,
- aAttribute.getStartColor()));
- }
- else
- {
- // really a gradient
- rTargetHolders.Current().append(
- new drawinglayer::primitive2d::PolyPolygonGradientPrimitive2D(
- aPolyPolygon,
- aAttribute));
- }
- }
- }
- }
-
- break;
- }
- default:
- {
- OSL_FAIL("Unknown MetaFile Action (!)");
- break;
- }
- }
- }
- }
-} // end of anonymous namespace
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence MetafilePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- // prepare target and porperties; each will have one default entry
- TargetHolders aTargetHolders;
- PropertyHolders aPropertyHolders;
-
- // set target MapUnit at Properties
- aPropertyHolders.Current().setMapUnit(getMetaFile().GetPrefMapMode().GetMapUnit());
-
- // interpret the Metafile
- interpretMetafile(getMetaFile(), aTargetHolders, aPropertyHolders, rViewInformation);
-
- // get the content. There should be ony one target, as in the start condition,
- // but iterating will be the right thing to do when some push/pop is not closed
- Primitive2DSequence xRetval;
-
- while(aTargetHolders.size() > 1)
- {
- appendPrimitive2DSequenceToPrimitive2DSequence(xRetval,
- aTargetHolders.Current().getPrimitive2DSequence(aPropertyHolders.Current()));
- aTargetHolders.Pop();
- }
-
- appendPrimitive2DSequenceToPrimitive2DSequence(xRetval,
- aTargetHolders.Current().getPrimitive2DSequence(aPropertyHolders.Current()));
-
- if(xRetval.hasElements())
- {
- // get target size
- const Rectangle aMtfTarget(getMetaFile().GetPrefMapMode().GetOrigin(), getMetaFile().GetPrefSize());
-
- // create transformation
- basegfx::B2DHomMatrix aAdaptedTransform;
-
- aAdaptedTransform.translate(-aMtfTarget.Left(), -aMtfTarget.Top());
- aAdaptedTransform.scale(
- aMtfTarget.getWidth() ? 1.0 / aMtfTarget.getWidth() : 1.0,
- aMtfTarget.getHeight() ? 1.0 / aMtfTarget.getHeight() : 1.0);
- aAdaptedTransform = getTransform() * aAdaptedTransform;
-
- // embed to target transformation
- const Primitive2DReference aEmbeddedTransform(
- new TransformPrimitive2D(
- aAdaptedTransform,
- xRetval));
-
- xRetval = Primitive2DSequence(&aEmbeddedTransform, 1);
- }
-
- return xRetval;
- }
-
- MetafilePrimitive2D::MetafilePrimitive2D(
- const basegfx::B2DHomMatrix& rMetaFileTransform,
- const GDIMetaFile& rMetaFile)
- : BufferedDecompositionPrimitive2D(),
- maMetaFileTransform(rMetaFileTransform),
- maMetaFile(rMetaFile)
- {
- }
-
- bool MetafilePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const MetafilePrimitive2D& rCompare = (MetafilePrimitive2D&)rPrimitive;
-
- return (getTransform() == rCompare.getTransform()
- && getMetaFile() == rCompare.getMetaFile());
- }
-
- return false;
- }
-
- basegfx::B2DRange MetafilePrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // use own implementation to quickly answer the getB2DRange question. The
- // MetafilePrimitive2D assumes that all geometry is inside of the shape. If
- // this is not the case (i have already seen some wrong Metafiles) it should
- // be embedded to a MaskPrimitive2D
- basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0);
- aRetval.transform(getTransform());
-
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(MetafilePrimitive2D, PRIMITIVE2D_ID_METAFILEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/modifiedcolorprimitive2d.cxx b/drawinglayer/source/primitive2d/modifiedcolorprimitive2d.cxx
deleted file mode 100644
index d43403be14..0000000000
--- a/drawinglayer/source/primitive2d/modifiedcolorprimitive2d.cxx
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- ModifiedColorPrimitive2D::ModifiedColorPrimitive2D(
- const Primitive2DSequence& rChildren,
- const basegfx::BColorModifier& rColorModifier)
- : GroupPrimitive2D(rChildren),
- maColorModifier(rColorModifier)
- {
- }
-
- bool ModifiedColorPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(GroupPrimitive2D::operator==(rPrimitive))
- {
- const ModifiedColorPrimitive2D& rCompare = (ModifiedColorPrimitive2D&)rPrimitive;
-
- return (getColorModifier() == rCompare.getColorModifier());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(ModifiedColorPrimitive2D, PRIMITIVE2D_ID_MODIFIEDCOLORPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx b/drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx
deleted file mode 100644
index e28f5debcb..0000000000
--- a/drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx
+++ /dev/null
@@ -1,186 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/pagepreviewprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/primitive2d/maskprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PagePreviewPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- Primitive2DSequence xRetval;
- Primitive2DSequence aContent(getPageContent());
-
- if(aContent.hasElements()
- && basegfx::fTools::more(getContentWidth(), 0.0)
- && basegfx::fTools::more(getContentHeight(), 0.0))
- {
- // the decomposed matrix will be needed
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
- getTransform().decompose(aScale, aTranslate, fRotate, fShearX);
-
- if(basegfx::fTools::more(aScale.getX(), 0.0) && basegfx::fTools::more(aScale.getY(), 0.0))
- {
- // check if content overlaps with tageted size and needs to be embedded with a
- // clipping primitive
- const basegfx::B2DRange aRealContentRange(getB2DRangeFromPrimitive2DSequence(aContent, rViewInformation));
- const basegfx::B2DRange aAllowedContentRange(0.0, 0.0, getContentWidth(), getContentHeight());
-
- if(!aAllowedContentRange.isInside(aRealContentRange))
- {
- const Primitive2DReference xReferenceA(
- new MaskPrimitive2D(
- basegfx::B2DPolyPolygon(
- basegfx::tools::createPolygonFromRect(aAllowedContentRange)), aContent));
- aContent = Primitive2DSequence(&xReferenceA, 1);
- }
-
- // create a mapping from content to object.
- basegfx::B2DHomMatrix aPageTrans;
-
- if(getKeepAspectRatio())
- {
- // #i101075# when keeping the aspect ratio is wanted, it is necessary to calculate
- // an equidistant scaling in X and Y and a corresponding translation to
- // center the output. Calculate needed scale factors
- const double fScaleX(aScale.getX() / getContentWidth());
- const double fScaleY(aScale.getY() / getContentHeight());
-
- // to keep the aspect, use the smaller scale and adapt missing size by translation
- if(fScaleX < fScaleY)
- {
- // height needs to be adapted
- const double fNeededHeight(aScale.getY() / fScaleX);
- const double fSpaceToAdd(fNeededHeight - getContentHeight());
-
- aPageTrans.translate(0.0, fSpaceToAdd * 0.5);
- aPageTrans.scale(fScaleX, aScale.getY() / fNeededHeight);
- }
- else
- {
- // width needs to be adapted
- const double fNeededWidth(aScale.getX() / fScaleY);
- const double fSpaceToAdd(fNeededWidth - getContentWidth());
-
- aPageTrans.translate(fSpaceToAdd * 0.5, 0.0);
- aPageTrans.scale(aScale.getX() / fNeededWidth, fScaleY);
- }
-
- // add the missing object transformation aspects
- const basegfx::B2DHomMatrix aCombined(basegfx::tools::createShearXRotateTranslateB2DHomMatrix(
- fShearX, fRotate, aTranslate.getX(), aTranslate.getY()));
- aPageTrans = aCombined * aPageTrans;
- }
- else
- {
- // completely scale to PageObject size. Scale to unit size.
- aPageTrans.scale(1.0/ getContentWidth(), 1.0 / getContentHeight());
-
- // apply object matrix
- aPageTrans *= getTransform();
- }
-
- // embed in necessary transformation to map from SdrPage to SdrPageObject
- const Primitive2DReference xReferenceB(new TransformPrimitive2D(aPageTrans, aContent));
- xRetval = Primitive2DSequence(&xReferenceB, 1);
- }
- }
-
- return xRetval;
- }
-
- PagePreviewPrimitive2D::PagePreviewPrimitive2D(
- const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& rxDrawPage,
- const basegfx::B2DHomMatrix& rTransform,
- double fContentWidth,
- double fContentHeight,
- const Primitive2DSequence& rPageContent,
- bool bKeepAspectRatio)
- : BufferedDecompositionPrimitive2D(),
- mxDrawPage(rxDrawPage),
- maPageContent(rPageContent),
- maTransform(rTransform),
- mfContentWidth(fContentWidth),
- mfContentHeight(fContentHeight),
- mbKeepAspectRatio(bKeepAspectRatio)
- {
- }
-
- bool PagePreviewPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BasePrimitive2D::operator==(rPrimitive))
- {
- const PagePreviewPrimitive2D& rCompare = static_cast< const PagePreviewPrimitive2D& >(rPrimitive);
-
- return (getXDrawPage() == rCompare.getXDrawPage()
- && getPageContent() == rCompare.getPageContent()
- && getTransform() == rCompare.getTransform()
- && getContentWidth() == rCompare.getContentWidth()
- && getContentHeight() == rCompare.getContentHeight()
- && getKeepAspectRatio() == rCompare.getKeepAspectRatio());
- }
-
- return false;
- }
-
- basegfx::B2DRange PagePreviewPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation`*/) const
- {
- // nothing is allowed to stick out of a PagePreviewPrimitive, thus we
- // can quickly deliver our range here
- basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0);
- aRetval.transform(getTransform());
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PagePreviewPrimitive2D, PRIMITIVE2D_ID_PAGEPREVIEWPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/pointarrayprimitive2d.cxx b/drawinglayer/source/primitive2d/pointarrayprimitive2d.cxx
deleted file mode 100644
index df508d4a63..0000000000
--- a/drawinglayer/source/primitive2d/pointarrayprimitive2d.cxx
+++ /dev/null
@@ -1,96 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- PointArrayPrimitive2D::PointArrayPrimitive2D(
- const std::vector< basegfx::B2DPoint >& rPositions,
- const basegfx::BColor& rRGBColor)
- : BasePrimitive2D(),
- maPositions(rPositions),
- maRGBColor(rRGBColor),
- maB2DRange()
- {
- }
-
- bool PointArrayPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BasePrimitive2D::operator==(rPrimitive))
- {
- const PointArrayPrimitive2D& rCompare = (PointArrayPrimitive2D&)rPrimitive;
-
- return (getPositions() == rCompare.getPositions()
- && getRGBColor() == rCompare.getRGBColor());
- }
-
- return false;
- }
-
- basegfx::B2DRange PointArrayPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- if(maB2DRange.isEmpty())
- {
- basegfx::B2DRange aNewRange;
-
- // get the basic range from the position vector
- for(std::vector< basegfx::B2DPoint >::const_iterator aIter(getPositions().begin()); aIter != getPositions().end(); aIter++)
- {
- aNewRange.expand(*aIter);
- }
-
- // assign to buffered value
- const_cast< PointArrayPrimitive2D* >(this)->maB2DRange = aNewRange;
- }
-
- return maB2DRange;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PointArrayPrimitive2D, PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/polygonprimitive2d.cxx b/drawinglayer/source/primitive2d/polygonprimitive2d.cxx
deleted file mode 100644
index 79a280f00d..0000000000
--- a/drawinglayer/source/primitive2d/polygonprimitive2d.cxx
+++ /dev/null
@@ -1,642 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <basegfx/polygon/b2dlinegeometry.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- PolygonHairlinePrimitive2D::PolygonHairlinePrimitive2D(
- const basegfx::B2DPolygon& rPolygon,
- const basegfx::BColor& rBColor)
- : BasePrimitive2D(),
- maPolygon(rPolygon),
- maBColor(rBColor)
- {
- }
-
- bool PolygonHairlinePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BasePrimitive2D::operator==(rPrimitive))
- {
- const PolygonHairlinePrimitive2D& rCompare = (PolygonHairlinePrimitive2D&)rPrimitive;
-
- return (getB2DPolygon() == rCompare.getB2DPolygon()
- && getBColor() == rCompare.getBColor());
- }
-
- return false;
- }
-
- basegfx::B2DRange PolygonHairlinePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- // this is a hairline, thus the line width is view-dependent. Get range of polygon
- // as base size
- basegfx::B2DRange aRetval(getB2DPolygon().getB2DRange());
-
- if(!aRetval.isEmpty())
- {
- // Calculate view-dependent hairline width
- const basegfx::B2DVector aDiscreteSize(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0));
- const double fDiscreteHalfLineWidth(aDiscreteSize.getLength() * 0.5);
-
- if(basegfx::fTools::more(fDiscreteHalfLineWidth, 0.0))
- {
- aRetval.grow(fDiscreteHalfLineWidth);
- }
- }
-
- // return range
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolygonHairlinePrimitive2D, PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PolygonMarkerPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- // calculate logic DashLength
- const basegfx::B2DVector aDashVector(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(getDiscreteDashLength(), 0.0));
- const double fLogicDashLength(aDashVector.getX());
-
- if(fLogicDashLength > 0.0 && !getRGBColorA().equal(getRGBColorB()))
- {
- // apply dashing; get line and gap snippets
- ::std::vector< double > aDash;
- basegfx::B2DPolyPolygon aDashedPolyPolyA;
- basegfx::B2DPolyPolygon aDashedPolyPolyB;
-
- aDash.push_back(fLogicDashLength);
- aDash.push_back(fLogicDashLength);
- basegfx::tools::applyLineDashing(getB2DPolygon(), aDash, &aDashedPolyPolyA, &aDashedPolyPolyB, 2.0 * fLogicDashLength);
-
- // prepare return value
- Primitive2DSequence aRetval(2);
-
- aRetval[0] = Primitive2DReference(new PolyPolygonHairlinePrimitive2D(aDashedPolyPolyA, getRGBColorA()));
- aRetval[1] = Primitive2DReference(new PolyPolygonHairlinePrimitive2D(aDashedPolyPolyB, getRGBColorB()));
-
- return aRetval;
- }
- else
- {
- const Primitive2DReference xRef(new PolygonHairlinePrimitive2D(getB2DPolygon(), getRGBColorA()));
- return Primitive2DSequence(&xRef, 1L);
- }
- }
-
- PolygonMarkerPrimitive2D::PolygonMarkerPrimitive2D(
- const basegfx::B2DPolygon& rPolygon,
- const basegfx::BColor& rRGBColorA,
- const basegfx::BColor& rRGBColorB,
- double fDiscreteDashLength)
- : BufferedDecompositionPrimitive2D(),
- maPolygon(rPolygon),
- maRGBColorA(rRGBColorA),
- maRGBColorB(rRGBColorB),
- mfDiscreteDashLength(fDiscreteDashLength),
- maLastInverseObjectToViewTransformation()
- {
- }
-
- bool PolygonMarkerPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const PolygonMarkerPrimitive2D& rCompare = (PolygonMarkerPrimitive2D&)rPrimitive;
-
- return (getB2DPolygon() == rCompare.getB2DPolygon()
- && getRGBColorA() == rCompare.getRGBColorA()
- && getRGBColorB() == rCompare.getRGBColorB()
- && getDiscreteDashLength() == rCompare.getDiscreteDashLength());
- }
-
- return false;
- }
-
- basegfx::B2DRange PolygonMarkerPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- // this is a hairline, thus the line width is view-dependent. Get range of polygon
- // as base size
- basegfx::B2DRange aRetval(getB2DPolygon().getB2DRange());
-
- if(!aRetval.isEmpty())
- {
- // Calculate view-dependent hairline width
- const basegfx::B2DVector aDiscreteSize(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0));
- const double fDiscreteHalfLineWidth(aDiscreteSize.getLength() * 0.5);
-
- if(basegfx::fTools::more(fDiscreteHalfLineWidth, 0.0))
- {
- aRetval.grow(fDiscreteHalfLineWidth);
- }
- }
-
- // return range
- return aRetval;
- }
-
- Primitive2DSequence PolygonMarkerPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
- bool bNeedNewDecomposition(false);
-
- if(getBuffered2DDecomposition().hasElements())
- {
- if(rViewInformation.getInverseObjectToViewTransformation() != maLastInverseObjectToViewTransformation)
- {
- bNeedNewDecomposition = true;
- }
- }
-
- if(bNeedNewDecomposition)
- {
- // conditions of last local decomposition have changed, delete
- const_cast< PolygonMarkerPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- // remember last used InverseObjectToViewTransformation
- PolygonMarkerPrimitive2D* pThat = const_cast< PolygonMarkerPrimitive2D* >(this);
- pThat->maLastInverseObjectToViewTransformation = rViewInformation.getInverseObjectToViewTransformation();
- }
-
- // use parent implementation
- return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolygonMarkerPrimitive2D, PRIMITIVE2D_ID_POLYGONMARKERPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PolygonStrokePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- if(getB2DPolygon().count())
- {
- // #i102241# try to simplify before usage
- const basegfx::B2DPolygon aB2DPolygon(basegfx::tools::simplifyCurveSegments(getB2DPolygon()));
- basegfx::B2DPolyPolygon aHairLinePolyPolygon;
-
- if(getStrokeAttribute().isDefault() || 0.0 == getStrokeAttribute().getFullDotDashLen())
- {
- // no line dashing, just copy
- aHairLinePolyPolygon.append(aB2DPolygon);
- }
- else
- {
- // apply LineStyle
- basegfx::tools::applyLineDashing(
- aB2DPolygon, getStrokeAttribute().getDotDashArray(),
- &aHairLinePolyPolygon, 0, getStrokeAttribute().getFullDotDashLen());
- }
-
- const sal_uInt32 nCount(aHairLinePolyPolygon.count());
-
- if(!getLineAttribute().isDefault() && getLineAttribute().getWidth())
- {
- // create fat line data
- const double fHalfLineWidth(getLineAttribute().getWidth() / 2.0);
- const basegfx::B2DLineJoin aLineJoin(getLineAttribute().getLineJoin());
- basegfx::B2DPolyPolygon aAreaPolyPolygon;
-
- for(sal_uInt32 a(0L); a < nCount; a++)
- {
- // New version of createAreaGeometry; now creates bezier polygons
- aAreaPolyPolygon.append(basegfx::tools::createAreaGeometry(
- aHairLinePolyPolygon.getB2DPolygon(a), fHalfLineWidth, aLineJoin));
- }
-
- // prepare return value
- Primitive2DSequence aRetval(aAreaPolyPolygon.count());
-
- // create primitive
- for(sal_uInt32 b(0L); b < aAreaPolyPolygon.count(); b++)
- {
- // put into single polyPolygon primitives to make clear that this is NOT meant
- // to be painted as a single PolyPolygon (XORed as fill rule). Alternatively, a
- // melting process may be used here one day.
- const basegfx::B2DPolyPolygon aNewPolyPolygon(aAreaPolyPolygon.getB2DPolygon(b));
- static bool bTestByUsingRandomColor(false);
- const basegfx::BColor aColor(bTestByUsingRandomColor
- ? basegfx::BColor(rand() / 32767.0, rand() / 32767.0, rand() / 32767.0)
- : getLineAttribute().getColor());
- const Primitive2DReference xRef(new PolyPolygonColorPrimitive2D(aNewPolyPolygon, aColor));
- aRetval[b] = xRef;
- }
-
- return aRetval;
- }
- else
- {
- // prepare return value
- const Primitive2DReference xRef(
- new PolyPolygonHairlinePrimitive2D(
- aHairLinePolyPolygon,
- getLineAttribute().getColor()));
-
- return Primitive2DSequence(&xRef, 1);
- }
- }
- else
- {
- return Primitive2DSequence();
- }
- }
-
- PolygonStrokePrimitive2D::PolygonStrokePrimitive2D(
- const basegfx::B2DPolygon& rPolygon,
- const attribute::LineAttribute& rLineAttribute,
- const attribute::StrokeAttribute& rStrokeAttribute)
- : BufferedDecompositionPrimitive2D(),
- maPolygon(rPolygon),
- maLineAttribute(rLineAttribute),
- maStrokeAttribute(rStrokeAttribute)
- {
- }
-
- PolygonStrokePrimitive2D::PolygonStrokePrimitive2D(
- const basegfx::B2DPolygon& rPolygon,
- const attribute::LineAttribute& rLineAttribute)
- : BufferedDecompositionPrimitive2D(),
- maPolygon(rPolygon),
- maLineAttribute(rLineAttribute),
- maStrokeAttribute()
- {
- }
-
- bool PolygonStrokePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const PolygonStrokePrimitive2D& rCompare = (PolygonStrokePrimitive2D&)rPrimitive;
-
- return (getB2DPolygon() == rCompare.getB2DPolygon()
- && getLineAttribute() == rCompare.getLineAttribute()
- && getStrokeAttribute() == rCompare.getStrokeAttribute());
- }
-
- return false;
- }
-
- basegfx::B2DRange PolygonStrokePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- basegfx::B2DRange aRetval;
-
- if(getLineAttribute().getWidth())
- {
- if(basegfx::B2DLINEJOIN_MITER == getLineAttribute().getLineJoin())
- {
- // if line is mitered, use parent call since mitered line
- // geometry may use more space than the geometry grown by half line width
- aRetval = BufferedDecompositionPrimitive2D::getB2DRange(rViewInformation);
- }
- else
- {
- // for all other B2DLINEJOIN_* get the range from the base geometry
- // and expand by half the line width
- aRetval = getB2DPolygon().getB2DRange();
- aRetval.grow(getLineAttribute().getWidth() * 0.5);
- }
- }
- else
- {
- // this is a hairline, thus the line width is view-dependent. Get range of polygon
- // as base size
- aRetval = getB2DPolygon().getB2DRange();
-
- if(!aRetval.isEmpty())
- {
- // Calculate view-dependent hairline width
- const basegfx::B2DVector aDiscreteSize(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0));
- const double fDiscreteHalfLineWidth(aDiscreteSize.getLength() * 0.5);
-
- if(basegfx::fTools::more(fDiscreteHalfLineWidth, 0.0))
- {
- aRetval.grow(fDiscreteHalfLineWidth);
- }
- }
- }
-
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolygonStrokePrimitive2D, PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PolygonWavePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- Primitive2DSequence aRetval;
-
- if(getB2DPolygon().count())
- {
- const bool bHasWidth(!basegfx::fTools::equalZero(getWaveWidth()));
- const bool bHasHeight(!basegfx::fTools::equalZero(getWaveHeight()));
-
- if(bHasWidth && bHasHeight)
- {
- // create waveline curve
- const basegfx::B2DPolygon aWaveline(basegfx::tools::createWaveline(getB2DPolygon(), getWaveWidth(), getWaveHeight()));
- const Primitive2DReference xRef(new PolygonStrokePrimitive2D(aWaveline, getLineAttribute(), getStrokeAttribute()));
- aRetval = Primitive2DSequence(&xRef, 1);
- }
- else
- {
- // flat waveline, decompose to simple line primitive
- const Primitive2DReference xRef(new PolygonStrokePrimitive2D(getB2DPolygon(), getLineAttribute(), getStrokeAttribute()));
- aRetval = Primitive2DSequence(&xRef, 1);
- }
- }
-
- return aRetval;
- }
-
- PolygonWavePrimitive2D::PolygonWavePrimitive2D(
- const basegfx::B2DPolygon& rPolygon,
- const attribute::LineAttribute& rLineAttribute,
- const attribute::StrokeAttribute& rStrokeAttribute,
- double fWaveWidth,
- double fWaveHeight)
- : PolygonStrokePrimitive2D(rPolygon, rLineAttribute, rStrokeAttribute),
- mfWaveWidth(fWaveWidth),
- mfWaveHeight(fWaveHeight)
- {
- if(mfWaveWidth < 0.0)
- {
- mfWaveWidth = 0.0;
- }
-
- if(mfWaveHeight < 0.0)
- {
- mfWaveHeight = 0.0;
- }
- }
-
- PolygonWavePrimitive2D::PolygonWavePrimitive2D(
- const basegfx::B2DPolygon& rPolygon,
- const attribute::LineAttribute& rLineAttribute,
- double fWaveWidth,
- double fWaveHeight)
- : PolygonStrokePrimitive2D(rPolygon, rLineAttribute),
- mfWaveWidth(fWaveWidth),
- mfWaveHeight(fWaveHeight)
- {
- if(mfWaveWidth < 0.0)
- {
- mfWaveWidth = 0.0;
- }
-
- if(mfWaveHeight < 0.0)
- {
- mfWaveHeight = 0.0;
- }
- }
-
- bool PolygonWavePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(PolygonStrokePrimitive2D::operator==(rPrimitive))
- {
- const PolygonWavePrimitive2D& rCompare = (PolygonWavePrimitive2D&)rPrimitive;
-
- return (getWaveWidth() == rCompare.getWaveWidth()
- && getWaveHeight() == rCompare.getWaveHeight());
- }
-
- return false;
- }
-
- basegfx::B2DRange PolygonWavePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- // get range of parent
- basegfx::B2DRange aRetval(PolygonStrokePrimitive2D::getB2DRange(rViewInformation));
-
- // if WaveHeight, grow by it
- if(basegfx::fTools::more(getWaveHeight(), 0.0))
- {
- aRetval.grow(getWaveHeight());
- }
-
- // if line width, grow by it
- if(basegfx::fTools::more(getLineAttribute().getWidth(), 0.0))
- {
- aRetval.grow(getLineAttribute().getWidth() * 0.5);
- }
-
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolygonWavePrimitive2D, PRIMITIVE2D_ID_POLYGONWAVEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PolygonStrokeArrowPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // copy local polygon, it may be changed
- basegfx::B2DPolygon aLocalPolygon(getB2DPolygon());
- aLocalPolygon.removeDoublePoints();
- basegfx::B2DPolyPolygon aArrowA;
- basegfx::B2DPolyPolygon aArrowB;
-
- if(!aLocalPolygon.isClosed() && aLocalPolygon.count() > 1)
- {
- // apply arrows
- const double fPolyLength(basegfx::tools::getLength(aLocalPolygon));
- double fStart(0.0);
- double fEnd(0.0);
-
- if(!getStart().isDefault() && getStart().isActive())
- {
- // create start arrow primitive and consume
- aArrowA = basegfx::tools::createAreaGeometryForLineStartEnd(
- aLocalPolygon, getStart().getB2DPolyPolygon(), true, getStart().getWidth(),
- fPolyLength, getStart().isCentered() ? 0.5 : 0.0, &fStart);
-
- // create some overlapping
- fStart *= 0.8;
- }
-
- if(!getEnd().isDefault() && getEnd().isActive())
- {
- // create end arrow primitive and consume
- aArrowB = basegfx::tools::createAreaGeometryForLineStartEnd(
- aLocalPolygon, getEnd().getB2DPolyPolygon(), false, getEnd().getWidth(),
- fPolyLength, getEnd().isCentered() ? 0.5 : 0.0, &fEnd);
-
- // create some overlapping
- fEnd *= 0.8;
- }
-
- if(0.0 != fStart || 0.0 != fEnd)
- {
- // build new poly, consume something from old poly
- aLocalPolygon = basegfx::tools::getSnippetAbsolute(aLocalPolygon, fStart, fPolyLength - fEnd, fPolyLength);
- }
- }
-
- // prepare return value
- Primitive2DSequence aRetval(1L + (aArrowA.count() ? 1L : 0L) + (aArrowB.count() ? 1L : 0L));
- sal_uInt32 nInd(0L);
-
- // add shaft
- const Primitive2DReference xRefShaft(new
- PolygonStrokePrimitive2D(
- aLocalPolygon, getLineAttribute(), getStrokeAttribute()));
- aRetval[nInd++] = xRefShaft;
-
- if(aArrowA.count())
- {
- const Primitive2DReference xRefA(
- new PolyPolygonColorPrimitive2D(
- aArrowA, getLineAttribute().getColor()));
- aRetval[nInd++] = xRefA;
- }
-
- if(aArrowB.count())
- {
- const Primitive2DReference xRefB(
- new PolyPolygonColorPrimitive2D(
- aArrowB, getLineAttribute().getColor()));
- aRetval[nInd++] = xRefB;
- }
-
- return aRetval;
- }
-
- PolygonStrokeArrowPrimitive2D::PolygonStrokeArrowPrimitive2D(
- const basegfx::B2DPolygon& rPolygon,
- const attribute::LineAttribute& rLineAttribute,
- const attribute::StrokeAttribute& rStrokeAttribute,
- const attribute::LineStartEndAttribute& rStart,
- const attribute::LineStartEndAttribute& rEnd)
- : PolygonStrokePrimitive2D(rPolygon, rLineAttribute, rStrokeAttribute),
- maStart(rStart),
- maEnd(rEnd)
- {
- }
-
- PolygonStrokeArrowPrimitive2D::PolygonStrokeArrowPrimitive2D(
- const basegfx::B2DPolygon& rPolygon,
- const attribute::LineAttribute& rLineAttribute,
- const attribute::LineStartEndAttribute& rStart,
- const attribute::LineStartEndAttribute& rEnd)
- : PolygonStrokePrimitive2D(rPolygon, rLineAttribute),
- maStart(rStart),
- maEnd(rEnd)
- {
- }
-
- bool PolygonStrokeArrowPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(PolygonStrokePrimitive2D::operator==(rPrimitive))
- {
- const PolygonStrokeArrowPrimitive2D& rCompare = (PolygonStrokeArrowPrimitive2D&)rPrimitive;
-
- return (getStart() == rCompare.getStart()
- && getEnd() == rCompare.getEnd());
- }
-
- return false;
- }
-
- basegfx::B2DRange PolygonStrokeArrowPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- basegfx::B2DRange aRetval;
-
- if(getStart().isActive() || getEnd().isActive())
- {
- // use decomposition when line start/end is used
- return BufferedDecompositionPrimitive2D::getB2DRange(rViewInformation);
- }
- else
- {
- // get range from parent
- return PolygonStrokePrimitive2D::getB2DRange(rViewInformation);
- }
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolygonStrokeArrowPrimitive2D, PRIMITIVE2D_ID_POLYGONSTROKEARROWPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/polypolygonprimitive2d.cxx b/drawinglayer/source/primitive2d/polypolygonprimitive2d.cxx
deleted file mode 100644
index 98966c70a3..0000000000
--- a/drawinglayer/source/primitive2d/polypolygonprimitive2d.cxx
+++ /dev/null
@@ -1,575 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/primitive2d/fillgradientprimitive2d.hxx>
-#include <drawinglayer/primitive2d/maskprimitive2d.hxx>
-#include <drawinglayer/primitive2d/fillhatchprimitive2d.hxx>
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PolyPolygonHairlinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon());
- const sal_uInt32 nCount(aPolyPolygon.count());
-
- if(nCount)
- {
- Primitive2DSequence aRetval(nCount);
-
- for(sal_uInt32 a(0L); a < nCount; a++)
- {
- aRetval[a] = Primitive2DReference(new PolygonHairlinePrimitive2D(aPolyPolygon.getB2DPolygon(a), getBColor()));
- }
-
- return aRetval;
- }
- else
- {
- return Primitive2DSequence();
- }
- }
-
- PolyPolygonHairlinePrimitive2D::PolyPolygonHairlinePrimitive2D(const basegfx::B2DPolyPolygon& rPolyPolygon, const basegfx::BColor& rBColor)
- : BufferedDecompositionPrimitive2D(),
- maPolyPolygon(rPolyPolygon),
- maBColor(rBColor)
- {
- }
-
- bool PolyPolygonHairlinePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const PolyPolygonHairlinePrimitive2D& rCompare = (PolyPolygonHairlinePrimitive2D&)rPrimitive;
-
- return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon()
- && getBColor() == rCompare.getBColor());
- }
-
- return false;
- }
-
- basegfx::B2DRange PolyPolygonHairlinePrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // return range
- return basegfx::tools::getRange(getB2DPolyPolygon());
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolyPolygonHairlinePrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONHAIRLINEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PolyPolygonMarkerPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon());
- const sal_uInt32 nCount(aPolyPolygon.count());
-
- if(nCount)
- {
- Primitive2DSequence aRetval(nCount);
-
- for(sal_uInt32 a(0L); a < nCount; a++)
- {
- aRetval[a] = Primitive2DReference(new PolygonMarkerPrimitive2D(aPolyPolygon.getB2DPolygon(a), getRGBColorA(), getRGBColorB(), getDiscreteDashLength()));
- }
-
- return aRetval;
- }
- else
- {
- return Primitive2DSequence();
- }
- }
-
- PolyPolygonMarkerPrimitive2D::PolyPolygonMarkerPrimitive2D(
- const basegfx::B2DPolyPolygon& rPolyPolygon,
- const basegfx::BColor& rRGBColorA,
- const basegfx::BColor& rRGBColorB,
- double fDiscreteDashLength)
- : BufferedDecompositionPrimitive2D(),
- maPolyPolygon(rPolyPolygon),
- maRGBColorA(rRGBColorA),
- maRGBColorB(rRGBColorB),
- mfDiscreteDashLength(fDiscreteDashLength)
- {
- }
-
- bool PolyPolygonMarkerPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const PolyPolygonMarkerPrimitive2D& rCompare = (PolyPolygonMarkerPrimitive2D&)rPrimitive;
-
- return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon()
- && getRGBColorA() == rCompare.getRGBColorA()
- && getRGBColorB() == rCompare.getRGBColorB()
- && getDiscreteDashLength() == rCompare.getDiscreteDashLength());
- }
-
- return false;
- }
-
- basegfx::B2DRange PolyPolygonMarkerPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // return range
- return basegfx::tools::getRange(getB2DPolyPolygon());
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolyPolygonMarkerPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONMARKERPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PolyPolygonStrokePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon());
- const sal_uInt32 nCount(aPolyPolygon.count());
-
- if(nCount)
- {
- Primitive2DSequence aRetval(nCount);
-
- for(sal_uInt32 a(0L); a < nCount; a++)
- {
- aRetval[a] = Primitive2DReference(
- new PolygonStrokePrimitive2D(
- aPolyPolygon.getB2DPolygon(a), getLineAttribute(), getStrokeAttribute()));
- }
-
- return aRetval;
- }
- else
- {
- return Primitive2DSequence();
- }
- }
-
- PolyPolygonStrokePrimitive2D::PolyPolygonStrokePrimitive2D(
- const basegfx::B2DPolyPolygon& rPolyPolygon,
- const attribute::LineAttribute& rLineAttribute,
- const attribute::StrokeAttribute& rStrokeAttribute)
- : BufferedDecompositionPrimitive2D(),
- maPolyPolygon(rPolyPolygon),
- maLineAttribute(rLineAttribute),
- maStrokeAttribute(rStrokeAttribute)
- {
- }
-
- PolyPolygonStrokePrimitive2D::PolyPolygonStrokePrimitive2D(
- const basegfx::B2DPolyPolygon& rPolyPolygon,
- const attribute::LineAttribute& rLineAttribute)
- : BufferedDecompositionPrimitive2D(),
- maPolyPolygon(rPolyPolygon),
- maLineAttribute(rLineAttribute),
- maStrokeAttribute()
- {
- }
-
- bool PolyPolygonStrokePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const PolyPolygonStrokePrimitive2D& rCompare = (PolyPolygonStrokePrimitive2D&)rPrimitive;
-
- return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon()
- && getLineAttribute() == rCompare.getLineAttribute()
- && getStrokeAttribute() == rCompare.getStrokeAttribute());
- }
-
- return false;
- }
-
- basegfx::B2DRange PolyPolygonStrokePrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // get range of it (subdivided)
- basegfx::B2DRange aRetval(basegfx::tools::getRange(getB2DPolyPolygon()));
-
- // if width, grow by line width
- if(getLineAttribute().getWidth())
- {
- aRetval.grow(getLineAttribute().getWidth() / 2.0);
- }
-
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolyPolygonStrokePrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONSTROKEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PolyPolygonStrokeArrowPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon());
- const sal_uInt32 nCount(aPolyPolygon.count());
-
- if(nCount)
- {
- Primitive2DSequence aRetval(nCount);
-
- for(sal_uInt32 a(0L); a < nCount; a++)
- {
- const basegfx::B2DPolygon aPolygon(aPolyPolygon.getB2DPolygon(a));
-
- if(aPolygon.isClosed())
- {
- // no need for PolygonStrokeArrowPrimitive2D when polygon is closed
- aRetval[a] = Primitive2DReference(
- new PolygonStrokePrimitive2D(aPolygon, getLineAttribute(), getStrokeAttribute()));
- }
- else
- {
- aRetval[a] = Primitive2DReference(
- new PolygonStrokeArrowPrimitive2D(aPolygon, getLineAttribute(),
- getStrokeAttribute(), getStart(), getEnd()));
- }
- }
-
- return aRetval;
- }
- else
- {
- return Primitive2DSequence();
- }
- }
-
- PolyPolygonStrokeArrowPrimitive2D::PolyPolygonStrokeArrowPrimitive2D(
- const basegfx::B2DPolyPolygon& rPolyPolygon,
- const attribute::LineAttribute& rLineAttribute,
- const attribute::StrokeAttribute& rStrokeAttribute,
- const attribute::LineStartEndAttribute& rStart,
- const attribute::LineStartEndAttribute& rEnd)
- : PolyPolygonStrokePrimitive2D(rPolyPolygon, rLineAttribute, rStrokeAttribute),
- maStart(rStart),
- maEnd(rEnd)
- {
- }
-
- PolyPolygonStrokeArrowPrimitive2D::PolyPolygonStrokeArrowPrimitive2D(
- const basegfx::B2DPolyPolygon& rPolyPolygon,
- const attribute::LineAttribute& rLineAttribute,
- const attribute::LineStartEndAttribute& rStart,
- const attribute::LineStartEndAttribute& rEnd)
- : PolyPolygonStrokePrimitive2D(rPolyPolygon, rLineAttribute),
- maStart(rStart),
- maEnd(rEnd)
- {
- }
-
- bool PolyPolygonStrokeArrowPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(PolyPolygonStrokePrimitive2D::operator==(rPrimitive))
- {
- const PolyPolygonStrokeArrowPrimitive2D& rCompare = (PolyPolygonStrokeArrowPrimitive2D&)rPrimitive;
-
- return (getStart() == rCompare.getStart()
- && getEnd() == rCompare.getEnd());
- }
-
- return false;
- }
-
- basegfx::B2DRange PolyPolygonStrokeArrowPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- basegfx::B2DRange aRetval;
-
- if(getStart().isActive() || getEnd().isActive())
- {
- // use decomposition when line start/end is used
- return BufferedDecompositionPrimitive2D::getB2DRange(rViewInformation);
- }
- else
- {
- // get range from parent
- return PolyPolygonStrokePrimitive2D::getB2DRange(rViewInformation);
- }
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolyPolygonStrokeArrowPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONSTROKEARROWPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- PolyPolygonColorPrimitive2D::PolyPolygonColorPrimitive2D(
- const basegfx::B2DPolyPolygon& rPolyPolygon,
- const basegfx::BColor& rBColor)
- : BasePrimitive2D(),
- maPolyPolygon(rPolyPolygon),
- maBColor(rBColor)
- {
- }
-
- bool PolyPolygonColorPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BasePrimitive2D::operator==(rPrimitive))
- {
- const PolyPolygonColorPrimitive2D& rCompare = (PolyPolygonColorPrimitive2D&)rPrimitive;
-
- return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon()
- && getBColor() == rCompare.getBColor());
- }
-
- return false;
- }
-
- basegfx::B2DRange PolyPolygonColorPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // return range
- return basegfx::tools::getRange(getB2DPolyPolygon());
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolyPolygonColorPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PolyPolygonGradientPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- if(!getFillGradient().isDefault())
- {
- // create SubSequence with FillGradientPrimitive2D
- const basegfx::B2DRange aPolyPolygonRange(getB2DPolyPolygon().getB2DRange());
- FillGradientPrimitive2D* pNewGradient = new FillGradientPrimitive2D(aPolyPolygonRange, getFillGradient());
- const Primitive2DReference xSubRef(pNewGradient);
- const Primitive2DSequence aSubSequence(&xSubRef, 1L);
-
- // create mask primitive
- MaskPrimitive2D* pNewMask = new MaskPrimitive2D(getB2DPolyPolygon(), aSubSequence);
- const Primitive2DReference xRef(pNewMask);
-
- return Primitive2DSequence(&xRef, 1);
- }
- else
- {
- return Primitive2DSequence();
- }
- }
-
- PolyPolygonGradientPrimitive2D::PolyPolygonGradientPrimitive2D(
- const basegfx::B2DPolyPolygon& rPolyPolygon,
- const attribute::FillGradientAttribute& rFillGradient)
- : BufferedDecompositionPrimitive2D(),
- maPolyPolygon(rPolyPolygon),
- maFillGradient(rFillGradient)
- {
- }
-
- bool PolyPolygonGradientPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const PolyPolygonGradientPrimitive2D& rCompare = (PolyPolygonGradientPrimitive2D&)rPrimitive;
-
- return (getFillGradient() == rCompare.getFillGradient());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolyPolygonGradientPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONGRADIENTPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PolyPolygonHatchPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- if(!getFillHatch().isDefault())
- {
- // create SubSequence with FillHatchPrimitive2D
- const basegfx::B2DRange aPolyPolygonRange(getB2DPolyPolygon().getB2DRange());
- FillHatchPrimitive2D* pNewHatch = new FillHatchPrimitive2D(aPolyPolygonRange, getBackgroundColor(), getFillHatch());
- const Primitive2DReference xSubRef(pNewHatch);
- const Primitive2DSequence aSubSequence(&xSubRef, 1L);
-
- // create mask primitive
- MaskPrimitive2D* pNewMask = new MaskPrimitive2D(getB2DPolyPolygon(), aSubSequence);
- const Primitive2DReference xRef(pNewMask);
-
- return Primitive2DSequence(&xRef, 1);
- }
- else
- {
- return Primitive2DSequence();
- }
- }
-
- PolyPolygonHatchPrimitive2D::PolyPolygonHatchPrimitive2D(
- const basegfx::B2DPolyPolygon& rPolyPolygon,
- const basegfx::BColor& rBackgroundColor,
- const attribute::FillHatchAttribute& rFillHatch)
- : BufferedDecompositionPrimitive2D(),
- maPolyPolygon(rPolyPolygon),
- maBackgroundColor(rBackgroundColor),
- maFillHatch(rFillHatch)
- {
- }
-
- bool PolyPolygonHatchPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const PolyPolygonHatchPrimitive2D& rCompare = (PolyPolygonHatchPrimitive2D&)rPrimitive;
-
- return (getBackgroundColor() == rCompare.getBackgroundColor()
- && getFillHatch() == rCompare.getFillHatch());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolyPolygonHatchPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONHATCHPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence PolyPolygonBitmapPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- if(!getFillBitmap().isDefault())
- {
- // create SubSequence with FillBitmapPrimitive2D
- const basegfx::B2DRange aPolyPolygonRange(getB2DPolyPolygon().getB2DRange());
- basegfx::B2DHomMatrix aNewObjectTransform;
- aNewObjectTransform.set(0, 0, aPolyPolygonRange.getWidth());
- aNewObjectTransform.set(1, 1, aPolyPolygonRange.getHeight());
- aNewObjectTransform.set(0, 2, aPolyPolygonRange.getMinX());
- aNewObjectTransform.set(1, 2, aPolyPolygonRange.getMinY());
- FillBitmapPrimitive2D* pNewBitmap = new FillBitmapPrimitive2D(aNewObjectTransform, getFillBitmap());
- const Primitive2DReference xSubRef(pNewBitmap);
- const Primitive2DSequence aSubSequence(&xSubRef, 1L);
-
- // create mask primitive
- MaskPrimitive2D* pNewMask = new MaskPrimitive2D(getB2DPolyPolygon(), aSubSequence);
- const Primitive2DReference xRef(pNewMask);
-
- return Primitive2DSequence(&xRef, 1);
- }
- else
- {
- return Primitive2DSequence();
- }
- }
-
- PolyPolygonBitmapPrimitive2D::PolyPolygonBitmapPrimitive2D(
- const basegfx::B2DPolyPolygon& rPolyPolygon,
- const attribute::FillBitmapAttribute& rFillBitmap)
- : BufferedDecompositionPrimitive2D(),
- maPolyPolygon(rPolyPolygon),
- maFillBitmap(rFillBitmap)
- {
- }
-
- bool PolyPolygonBitmapPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const PolyPolygonBitmapPrimitive2D& rCompare = (PolyPolygonBitmapPrimitive2D&)rPrimitive;
-
- return (getFillBitmap() == rCompare.getFillBitmap());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(PolyPolygonBitmapPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONBITMAPPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/primitivetools2d.cxx b/drawinglayer/source/primitive2d/primitivetools2d.cxx
deleted file mode 100644
index 03425a2ead..0000000000
--- a/drawinglayer/source/primitive2d/primitivetools2d.cxx
+++ /dev/null
@@ -1,173 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/primitivetools2d.hxx>
-#include <basegfx/vector/b2dvector.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence DiscreteMetricDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- // get the current DiscreteUnit
- const double fDiscreteUnit((rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0)).getLength());
-
- if(getBuffered2DDecomposition().hasElements() && !basegfx::fTools::equal(fDiscreteUnit, getDiscreteUnit()))
- {
- // conditions of last local decomposition have changed, delete
- const_cast< DiscreteMetricDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- // remember new valid DiscreteUnit
- const_cast< DiscreteMetricDependentPrimitive2D* >(this)->mfDiscreteUnit = fDiscreteUnit;
- }
-
- // call base implementation
- return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
- }
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence ViewportDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- // get the current Viewport
- const basegfx::B2DRange& rViewport = rViewInformation.getViewport();
-
- if(getBuffered2DDecomposition().hasElements() && !rViewport.equal(getViewport()))
- {
- // conditions of last local decomposition have changed, delete
- const_cast< ViewportDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- // remember new valid DiscreteUnit
- const_cast< ViewportDependentPrimitive2D* >(this)->maViewport = rViewport;
- }
-
- // call base implementation
- return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
- }
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence ViewTransformationDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- // get the current ViewTransformation
- const basegfx::B2DHomMatrix& rViewTransformation = rViewInformation.getViewTransformation();
-
- if(getBuffered2DDecomposition().hasElements() && rViewTransformation != getViewTransformation())
- {
- // conditions of last local decomposition have changed, delete
- const_cast< ViewTransformationDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- // remember new valid ViewTransformation
- const_cast< ViewTransformationDependentPrimitive2D* >(this)->maViewTransformation = rViewTransformation;
- }
-
- // call base implementation
- return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
- }
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence ObjectAndViewTransformationDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- // get the current ViewTransfromation
- const basegfx::B2DHomMatrix& rViewTransformation = rViewInformation.getViewTransformation();
-
- if(getBuffered2DDecomposition().hasElements() && rViewTransformation != getViewTransformation())
- {
- // conditions of last local decomposition have changed, delete
- const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
-
- // get the current ObjectTransformation
- const basegfx::B2DHomMatrix& rObjectTransformation = rViewInformation.getObjectTransformation();
-
- if(getBuffered2DDecomposition().hasElements() && rObjectTransformation != getObjectTransformation())
- {
- // conditions of last local decomposition have changed, delete
- const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- // remember new valid ViewTransformation, and ObjectTransformation
- const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->maViewTransformation = rViewTransformation;
- const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->maObjectTransformation = rObjectTransformation;
- }
-
- // call base implementation
- return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
- }
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/rendergraphicprimitive2d.cxx b/drawinglayer/source/primitive2d/rendergraphicprimitive2d.cxx
deleted file mode 100644
index c58990a420..0000000000
--- a/drawinglayer/source/primitive2d/rendergraphicprimitive2d.cxx
+++ /dev/null
@@ -1,92 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/rendergraphicprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <vcl/rendergraphicrasterizer.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- RenderGraphicPrimitive2D::RenderGraphicPrimitive2D(
- const vcl::RenderGraphic& rRenderGraphic,
- const basegfx::B2DHomMatrix& rTransform)
- : BasePrimitive2D(),
- maRenderGraphic(rRenderGraphic),
- maTransform(rTransform)
- {
- }
-
- void RenderGraphicPrimitive2D::setCurrentRasterizer() const
- {
- mapCurrentRasterizer.reset();
- }
-
- void RenderGraphicPrimitive2D::setCurrentRasterizer( const vcl::RenderGraphicRasterizer& rCurrentRasterizer ) const
- {
- mapCurrentRasterizer.reset( new vcl::RenderGraphicRasterizer( rCurrentRasterizer ) );
- }
-
- bool RenderGraphicPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BasePrimitive2D::operator==(rPrimitive))
- {
- const RenderGraphicPrimitive2D& rCompare = (RenderGraphicPrimitive2D&)rPrimitive;
-
- return (getRenderGraphic() == rCompare.getRenderGraphic()
- && getTransform() == rCompare.getTransform());
- }
-
- return false;
- }
-
- basegfx::B2DRange RenderGraphicPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0);
- aRetval.transform(maTransform);
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(RenderGraphicPrimitive2D, PRIMITIVE2D_ID_RENDERGRAPHICPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
diff --git a/drawinglayer/source/primitive2d/sceneprimitive2d.cxx b/drawinglayer/source/primitive2d/sceneprimitive2d.cxx
deleted file mode 100644
index f9959744c2..0000000000
--- a/drawinglayer/source/primitive2d/sceneprimitive2d.cxx
+++ /dev/null
@@ -1,483 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/sceneprimitive2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygonclipper.hxx>
-#include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-#include <drawinglayer/processor3d/zbufferprocessor3d.hxx>
-#include <drawinglayer/processor3d/shadow3dextractor.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <svtools/optionsdrawinglayer.hxx>
-#include <drawinglayer/processor3d/geometry2dextractor.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- bool ScenePrimitive2D::impGetShadow3D(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- // create on demand
- if(!mbShadow3DChecked && getChildren3D().hasElements())
- {
- basegfx::B3DVector aLightNormal;
- const double fShadowSlant(getSdrSceneAttribute().getShadowSlant());
- const basegfx::B3DRange aScene3DRange(primitive3d::getB3DRangeFromPrimitive3DSequence(getChildren3D(), getViewInformation3D()));
-
- if(maSdrLightingAttribute.getLightVector().size())
- {
- // get light normal from first light and normalize
- aLightNormal = maSdrLightingAttribute.getLightVector()[0].getDirection();
- aLightNormal.normalize();
- }
-
- // create shadow extraction processor
- processor3d::Shadow3DExtractingProcessor aShadowProcessor(
- getViewInformation3D(),
- getObjectTransformation(),
- aLightNormal,
- fShadowSlant,
- aScene3DRange);
-
- // process local primitives
- aShadowProcessor.process(getChildren3D());
-
- // fetch result and set checked flag
- const_cast< ScenePrimitive2D* >(this)->maShadowPrimitives = aShadowProcessor.getPrimitive2DSequence();
- const_cast< ScenePrimitive2D* >(this)->mbShadow3DChecked = true;
- }
-
- // return if there are shadow primitives
- return maShadowPrimitives.hasElements();
- }
-
- void ScenePrimitive2D::calculateDiscreteSizes(
- const geometry::ViewInformation2D& rViewInformation,
- basegfx::B2DRange& rDiscreteRange,
- basegfx::B2DRange& rVisibleDiscreteRange,
- basegfx::B2DRange& rUnitVisibleRange) const
- {
- // use unit range and transform to discrete coordinates
- rDiscreteRange = basegfx::B2DRange(0.0, 0.0, 1.0, 1.0);
- rDiscreteRange.transform(rViewInformation.getObjectToViewTransformation() * getObjectTransformation());
-
- // clip it against discrete Viewport (if set)
- rVisibleDiscreteRange = rDiscreteRange;
-
- if(!rViewInformation.getViewport().isEmpty())
- {
- rVisibleDiscreteRange.intersect(rViewInformation.getDiscreteViewport());
- }
-
- if(rVisibleDiscreteRange.isEmpty())
- {
- rUnitVisibleRange = rVisibleDiscreteRange;
- }
- else
- {
- // create UnitVisibleRange containing unit range values [0.0 .. 1.0] describing
- // the relative position of rVisibleDiscreteRange inside rDiscreteRange
- const double fDiscreteScaleFactorX(basegfx::fTools::equalZero(rDiscreteRange.getWidth()) ? 1.0 : 1.0 / rDiscreteRange.getWidth());
- const double fDiscreteScaleFactorY(basegfx::fTools::equalZero(rDiscreteRange.getHeight()) ? 1.0 : 1.0 / rDiscreteRange.getHeight());
-
- const double fMinX(basegfx::fTools::equal(rVisibleDiscreteRange.getMinX(), rDiscreteRange.getMinX())
- ? 0.0
- : (rVisibleDiscreteRange.getMinX() - rDiscreteRange.getMinX()) * fDiscreteScaleFactorX);
- const double fMinY(basegfx::fTools::equal(rVisibleDiscreteRange.getMinY(), rDiscreteRange.getMinY())
- ? 0.0
- : (rVisibleDiscreteRange.getMinY() - rDiscreteRange.getMinY()) * fDiscreteScaleFactorY);
-
- const double fMaxX(basegfx::fTools::equal(rVisibleDiscreteRange.getMaxX(), rDiscreteRange.getMaxX())
- ? 1.0
- : (rVisibleDiscreteRange.getMaxX() - rDiscreteRange.getMinX()) * fDiscreteScaleFactorX);
- const double fMaxY(basegfx::fTools::equal(rVisibleDiscreteRange.getMaxY(), rDiscreteRange.getMaxY())
- ? 1.0
- : (rVisibleDiscreteRange.getMaxY() - rDiscreteRange.getMinY()) * fDiscreteScaleFactorY);
-
- rUnitVisibleRange = basegfx::B2DRange(fMinX, fMinY, fMaxX, fMaxY);
- }
- }
-
- Primitive2DSequence ScenePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- Primitive2DSequence aRetval;
-
- // create 2D shadows from contained 3D primitives. This creates the shadow primitives on demand and tells if
- // there are some or not. Do this at start, the shadow might still be visible even when the scene is not
- if(impGetShadow3D(rViewInformation))
- {
- // test visibility
- const basegfx::B2DRange aShadow2DRange(
- getB2DRangeFromPrimitive2DSequence(maShadowPrimitives, rViewInformation));
- const basegfx::B2DRange aViewRange(
- rViewInformation.getViewport());
-
- if(aViewRange.isEmpty() || aShadow2DRange.overlaps(aViewRange))
- {
- // add extracted 2d shadows (before 3d scene creations itself)
- aRetval = maShadowPrimitives;
- }
- }
-
- // get the involved ranges (see helper method calculateDiscreteSizes for details)
- basegfx::B2DRange aDiscreteRange;
- basegfx::B2DRange aVisibleDiscreteRange;
- basegfx::B2DRange aUnitVisibleRange;
-
- calculateDiscreteSizes(rViewInformation, aDiscreteRange, aVisibleDiscreteRange, aUnitVisibleRange);
-
- if(!aVisibleDiscreteRange.isEmpty())
- {
- // test if discrete view size (pixel) maybe too big and limit it
- double fViewSizeX(aVisibleDiscreteRange.getWidth());
- double fViewSizeY(aVisibleDiscreteRange.getHeight());
- const double fViewVisibleArea(fViewSizeX * fViewSizeY);
- const SvtOptionsDrawinglayer aDrawinglayerOpt;
- const double fMaximumVisibleArea(aDrawinglayerOpt.GetQuadratic3DRenderLimit());
- double fReduceFactor(1.0);
-
- if(fViewVisibleArea > fMaximumVisibleArea)
- {
- fReduceFactor = sqrt(fMaximumVisibleArea / fViewVisibleArea);
- fViewSizeX *= fReduceFactor;
- fViewSizeY *= fReduceFactor;
- }
-
- if(rViewInformation.getReducedDisplayQuality())
- {
- // when reducing the visualisation is allowed (e.g. an OverlayObject
- // only needed for dragging), reduce resolution extra
- // to speed up dragging interactions
- const double fArea(fViewSizeX * fViewSizeY);
- double fReducedVisualisationFactor(1.0 / (sqrt(fArea) * (1.0 / 170.0)));
-
- if(fReducedVisualisationFactor > 1.0)
- {
- fReducedVisualisationFactor = 1.0;
- }
- else if(fReducedVisualisationFactor < 0.20)
- {
- fReducedVisualisationFactor = 0.20;
- }
-
- if(fReducedVisualisationFactor != 1.0)
- {
- fReduceFactor *= fReducedVisualisationFactor;
- fViewSizeX *= fReducedVisualisationFactor;
- fViewSizeY *= fReducedVisualisationFactor;
- }
- }
-
- // calculate logic render size in world coordinates for usage in renderer
- basegfx::B2DVector aLogicRenderSize(
- aDiscreteRange.getWidth() * fReduceFactor,
- aDiscreteRange.getHeight() * fReduceFactor);
- aLogicRenderSize *= rViewInformation.getInverseObjectToViewTransformation();
-
- // determine the oversample value
- static sal_uInt16 nDefaultOversampleValue(3);
- const sal_uInt16 nOversampleValue(aDrawinglayerOpt.IsAntiAliasing() ? nDefaultOversampleValue : 0);
-
- // use default 3D primitive processor to create BitmapEx for aUnitVisiblePart and process
- processor3d::ZBufferProcessor3D aZBufferProcessor3D(
- getViewInformation3D(),
- rViewInformation,
- getSdrSceneAttribute(),
- getSdrLightingAttribute(),
- aLogicRenderSize.getX(),
- aLogicRenderSize.getY(),
- aUnitVisibleRange,
- nOversampleValue);
-
- aZBufferProcessor3D.process(getChildren3D());
- aZBufferProcessor3D.finish();
-
- const_cast< ScenePrimitive2D* >(this)->maOldRenderedBitmap = aZBufferProcessor3D.getBitmapEx();
- const Size aBitmapSizePixel(maOldRenderedBitmap.GetSizePixel());
-
- if(aBitmapSizePixel.getWidth() && aBitmapSizePixel.getHeight())
- {
- // create transform for the created bitmap in discrete coordinates first.
- basegfx::B2DHomMatrix aNew2DTransform;
-
- aNew2DTransform.set(0, 0, aVisibleDiscreteRange.getWidth());
- aNew2DTransform.set(1, 1, aVisibleDiscreteRange.getHeight());
- aNew2DTransform.set(0, 2, aVisibleDiscreteRange.getMinX());
- aNew2DTransform.set(1, 2, aVisibleDiscreteRange.getMinY());
-
- // transform back to world coordinates for usage in primitive creation
- aNew2DTransform *= rViewInformation.getInverseObjectToViewTransformation();
-
- // create bitmap primitive and add
- const Primitive2DReference xRef(new BitmapPrimitive2D(maOldRenderedBitmap, aNew2DTransform));
- appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, xRef);
-
- // test: Allow to add an outline in the debugger when tests are needed
- static bool bAddOutlineToCreated3DSceneRepresentation(false);
-
- if(bAddOutlineToCreated3DSceneRepresentation)
- {
- basegfx::B2DPolygon aOutline(basegfx::tools::createUnitPolygon());
- aOutline.transform(aNew2DTransform);
- const Primitive2DReference xRef2(new PolygonHairlinePrimitive2D(aOutline, basegfx::BColor(1.0, 0.0, 0.0)));
- appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, xRef2);
- }
- }
- }
-
- return aRetval;
- }
-
- Primitive2DSequence ScenePrimitive2D::getGeometry2D() const
- {
- Primitive2DSequence aRetval;
-
- // create 2D projected geometry from 3D geometry
- if(getChildren3D().hasElements())
- {
- // create 2D geometry extraction processor
- processor3d::Geometry2DExtractingProcessor aGeometryProcessor(
- getViewInformation3D(),
- getObjectTransformation());
-
- // process local primitives
- aGeometryProcessor.process(getChildren3D());
-
- // fetch result
- aRetval = aGeometryProcessor.getPrimitive2DSequence();
- }
-
- return aRetval;
- }
-
- Primitive2DSequence ScenePrimitive2D::getShadow2D(const geometry::ViewInformation2D& rViewInformation) const
- {
- Primitive2DSequence aRetval;
-
- // create 2D shadows from contained 3D primitives
- if(impGetShadow3D(rViewInformation))
- {
- // add extracted 2d shadows (before 3d scene creations itself)
- aRetval = maShadowPrimitives;
- }
-
- return aRetval;
- }
-
- bool ScenePrimitive2D::tryToCheckLastVisualisationDirectHit(const basegfx::B2DPoint& rLogicHitPoint, bool& o_rResult) const
- {
- if(!maOldRenderedBitmap.IsEmpty() && !maOldUnitVisiblePart.isEmpty())
- {
- basegfx::B2DHomMatrix aInverseSceneTransform(getObjectTransformation());
- aInverseSceneTransform.invert();
- const basegfx::B2DPoint aRelativePoint(aInverseSceneTransform * rLogicHitPoint);
-
- if(maOldUnitVisiblePart.isInside(aRelativePoint))
- {
- // calculate coordinates relative to visualized part
- double fDivisorX(maOldUnitVisiblePart.getWidth());
- double fDivisorY(maOldUnitVisiblePart.getHeight());
-
- if(basegfx::fTools::equalZero(fDivisorX))
- {
- fDivisorX = 1.0;
- }
-
- if(basegfx::fTools::equalZero(fDivisorY))
- {
- fDivisorY = 1.0;
- }
-
- const double fRelativeX((aRelativePoint.getX() - maOldUnitVisiblePart.getMinX()) / fDivisorX);
- const double fRelativeY((aRelativePoint.getY() - maOldUnitVisiblePart.getMinY()) / fDivisorY);
-
- // combine with real BitmapSizePixel to get bitmap coordinates
- const Size aBitmapSizePixel(maOldRenderedBitmap.GetSizePixel());
- const sal_Int32 nX(basegfx::fround(fRelativeX * aBitmapSizePixel.Width()));
- const sal_Int32 nY(basegfx::fround(fRelativeY * aBitmapSizePixel.Height()));
-
- // try to get a statement about transparency in that pixel
- o_rResult = (0xff != maOldRenderedBitmap.GetTransparency(nX, nY));
- return true;
- }
- }
-
- return false;
- }
-
- ScenePrimitive2D::ScenePrimitive2D(
- const primitive3d::Primitive3DSequence& rxChildren3D,
- const attribute::SdrSceneAttribute& rSdrSceneAttribute,
- const attribute::SdrLightingAttribute& rSdrLightingAttribute,
- const basegfx::B2DHomMatrix& rObjectTransformation,
- const geometry::ViewInformation3D& rViewInformation3D)
- : BufferedDecompositionPrimitive2D(),
- mxChildren3D(rxChildren3D),
- maSdrSceneAttribute(rSdrSceneAttribute),
- maSdrLightingAttribute(rSdrLightingAttribute),
- maObjectTransformation(rObjectTransformation),
- maViewInformation3D(rViewInformation3D),
- maShadowPrimitives(),
- mbShadow3DChecked(false),
- mfOldDiscreteSizeX(0.0),
- mfOldDiscreteSizeY(0.0),
- maOldUnitVisiblePart(),
- maOldRenderedBitmap()
- {
- }
-
- bool ScenePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const ScenePrimitive2D& rCompare = (ScenePrimitive2D&)rPrimitive;
-
- return (primitive3d::arePrimitive3DSequencesEqual(getChildren3D(), rCompare.getChildren3D())
- && getSdrSceneAttribute() == rCompare.getSdrSceneAttribute()
- && getSdrLightingAttribute() == rCompare.getSdrLightingAttribute()
- && getObjectTransformation() == rCompare.getObjectTransformation()
- && getViewInformation3D() == rCompare.getViewInformation3D());
- }
-
- return false;
- }
-
- basegfx::B2DRange ScenePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- // transform unit range to discrete coordinate range
- basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0);
- aRetval.transform(rViewInformation.getObjectToViewTransformation() * getObjectTransformation());
-
- // force to discrete expanded bounds (it grows, so expanding works perfectly well)
- aRetval.expand(basegfx::B2DTuple(floor(aRetval.getMinX()), floor(aRetval.getMinY())));
- aRetval.expand(basegfx::B2DTuple(ceil(aRetval.getMaxX()), ceil(aRetval.getMaxY())));
-
- // transform back from discrete (view) to world coordinates
- aRetval.transform(rViewInformation.getInverseObjectToViewTransformation());
-
- // expand by evtl. existing shadow primitives
- if(impGetShadow3D(rViewInformation))
- {
- const basegfx::B2DRange aShadow2DRange(getB2DRangeFromPrimitive2DSequence(maShadowPrimitives, rViewInformation));
-
- if(!aShadow2DRange.isEmpty())
- {
- aRetval.expand(aShadow2DRange);
- }
- }
-
- return aRetval;
- }
-
- Primitive2DSequence ScenePrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- // get the involved ranges (see helper method calculateDiscreteSizes for details)
- basegfx::B2DRange aDiscreteRange;
- basegfx::B2DRange aUnitVisibleRange;
- bool bNeedNewDecomposition(false);
- bool bDiscreteSizesAreCalculated(false);
-
- if(getBuffered2DDecomposition().hasElements())
- {
- basegfx::B2DRange aVisibleDiscreteRange;
- calculateDiscreteSizes(rViewInformation, aDiscreteRange, aVisibleDiscreteRange, aUnitVisibleRange);
- bDiscreteSizesAreCalculated = true;
-
- // needs to be painted when the new part is not part of the last
- // decomposition
- if(!maOldUnitVisiblePart.isInside(aUnitVisibleRange))
- {
- bNeedNewDecomposition = true;
- }
-
- // display has changed and cannot be reused when resolution got bigger. It
- // can be reused when resolution got smaller, though.
- if(!bNeedNewDecomposition)
- {
- if(basegfx::fTools::more(aDiscreteRange.getWidth(), mfOldDiscreteSizeX) ||
- basegfx::fTools::more(aDiscreteRange.getHeight(), mfOldDiscreteSizeY))
- {
- bNeedNewDecomposition = true;
- }
- }
- }
-
- if(bNeedNewDecomposition)
- {
- // conditions of last local decomposition have changed, delete
- const_cast< ScenePrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- if(!bDiscreteSizesAreCalculated)
- {
- basegfx::B2DRange aVisibleDiscreteRange;
- calculateDiscreteSizes(rViewInformation, aDiscreteRange, aVisibleDiscreteRange, aUnitVisibleRange);
- }
-
- // remember last used NewDiscreteSize and NewUnitVisiblePart
- ScenePrimitive2D* pThat = const_cast< ScenePrimitive2D* >(this);
- pThat->mfOldDiscreteSizeX = aDiscreteRange.getWidth();
- pThat->mfOldDiscreteSizeY = aDiscreteRange.getHeight();
- pThat->maOldUnitVisiblePart = aUnitVisibleRange;
- }
-
- // use parent implementation
- return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(ScenePrimitive2D, PRIMITIVE2D_ID_SCENEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/sdrdecompositiontools2d.cxx b/drawinglayer/source/primitive2d/sdrdecompositiontools2d.cxx
deleted file mode 100644
index bde27c4796..0000000000
--- a/drawinglayer/source/primitive2d/sdrdecompositiontools2d.cxx
+++ /dev/null
@@ -1,127 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * The Contents of this file are made available subject to
- * the terms of GNU Lesser General Public License Version 2.1.
- *
- *
- * GNU Lesser General Public License Version 2.1
- * =============================================
- * Copyright 2005 by Sun Microsystems, Inc.
- * 901 San Antonio Road, Palo Alto, CA 94303, USA
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software Foundation.
- *
- * This library 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 for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/sdrdecompositiontools2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DReference createHiddenGeometryPrimitives2D(
- bool bFilled,
- const basegfx::B2DHomMatrix& rMatrix)
- {
- const basegfx::B2DPolygon aUnitOutline(basegfx::tools::createUnitPolygon());
-
- return createHiddenGeometryPrimitives2D(
- bFilled,
- basegfx::B2DPolyPolygon(aUnitOutline),
- rMatrix);
- }
-
- Primitive2DReference createHiddenGeometryPrimitives2D(
- bool bFilled,
- const basegfx::B2DPolyPolygon& rPolyPolygon)
- {
- return createHiddenGeometryPrimitives2D(
- bFilled,
- rPolyPolygon,
- basegfx::B2DHomMatrix());
- }
-
- Primitive2DReference createHiddenGeometryPrimitives2D(
- bool bFilled,
- const basegfx::B2DRange& rRange)
- {
- return createHiddenGeometryPrimitives2D(
- bFilled,
- rRange,
- basegfx::B2DHomMatrix());
- }
-
- Primitive2DReference createHiddenGeometryPrimitives2D(
- bool bFilled,
- const basegfx::B2DRange& rRange,
- const basegfx::B2DHomMatrix& rMatrix)
- {
- const basegfx::B2DPolyPolygon aOutline(basegfx::tools::createPolygonFromRect(rRange));
-
- return createHiddenGeometryPrimitives2D(
- bFilled,
- aOutline,
- rMatrix);
- }
-
- Primitive2DReference createHiddenGeometryPrimitives2D(
- bool bFilled,
- const basegfx::B2DPolyPolygon& rPolyPolygon,
- const basegfx::B2DHomMatrix& rMatrix)
- {
- // create fill or line primitive
- Primitive2DReference xReference;
- basegfx::B2DPolyPolygon aScaledOutline(rPolyPolygon);
- aScaledOutline.transform(rMatrix);
-
- if(bFilled)
- {
- xReference = new PolyPolygonColorPrimitive2D(
- basegfx::B2DPolyPolygon(aScaledOutline),
- basegfx::BColor(0.0, 0.0, 0.0));
- }
- else
- {
- const basegfx::BColor aGrayTone(0xc0 / 255.0, 0xc0 / 255.0, 0xc0 / 255.0);
-
- xReference = new PolyPolygonHairlinePrimitive2D(
- aScaledOutline,
- aGrayTone);
- }
-
- // create HiddenGeometryPrimitive2D
- return Primitive2DReference(
- new HiddenGeometryPrimitive2D(Primitive2DSequence(&xReference, 1)));
- }
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/shadowprimitive2d.cxx b/drawinglayer/source/primitive2d/shadowprimitive2d.cxx
deleted file mode 100644
index c0d436964e..0000000000
--- a/drawinglayer/source/primitive2d/shadowprimitive2d.cxx
+++ /dev/null
@@ -1,109 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/shadowprimitive2d.hxx>
-#include <basegfx/color/bcolormodifier.hxx>
-#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx>
-#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- ShadowPrimitive2D::ShadowPrimitive2D(
- const basegfx::B2DHomMatrix& rShadowTransform,
- const basegfx::BColor& rShadowColor,
- const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren),
- maShadowTransform(rShadowTransform),
- maShadowColor(rShadowColor)
- {
- }
-
- bool ShadowPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BasePrimitive2D::operator==(rPrimitive))
- {
- const ShadowPrimitive2D& rCompare = static_cast< const ShadowPrimitive2D& >(rPrimitive);
-
- return (getShadowTransform() == rCompare.getShadowTransform()
- && getShadowColor() == rCompare.getShadowColor());
- }
-
- return false;
- }
-
- basegfx::B2DRange ShadowPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- basegfx::B2DRange aRetval(getB2DRangeFromPrimitive2DSequence(getChildren(), rViewInformation));
- aRetval.transform(getShadowTransform());
- return aRetval;
- }
-
- Primitive2DSequence ShadowPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- Primitive2DSequence aRetval;
-
- if(getChildren().hasElements())
- {
- // create a modifiedColorPrimitive containing the shadow color and the content
- const basegfx::BColorModifier aBColorModifier(getShadowColor());
- const Primitive2DReference xRefA(new ModifiedColorPrimitive2D(getChildren(), aBColorModifier));
- const Primitive2DSequence aSequenceB(&xRefA, 1L);
-
- // build transformed primitiveVector with shadow offset and add to target
- const Primitive2DReference xRefB(new TransformPrimitive2D(getShadowTransform(), aSequenceB));
- aRetval = Primitive2DSequence(&xRefB, 1L);
- }
-
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(ShadowPrimitive2D, PRIMITIVE2D_ID_SHADOWPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/structuretagprimitive2d.cxx b/drawinglayer/source/primitive2d/structuretagprimitive2d.cxx
deleted file mode 100644
index 4e26a06e02..0000000000
--- a/drawinglayer/source/primitive2d/structuretagprimitive2d.cxx
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/structuretagprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- StructureTagPrimitive2D::StructureTagPrimitive2D(
- const vcl::PDFWriter::StructElement& rStructureElement,
- const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren),
- maStructureElement(rStructureElement)
- {
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(StructureTagPrimitive2D, PRIMITIVE2D_ID_STRUCTURETAGPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx b/drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx
deleted file mode 100644
index 6b5c4aab0f..0000000000
--- a/drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx
+++ /dev/null
@@ -1,610 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/textdecoratedprimitive2d.hxx>
-#include <drawinglayer/primitive2d/textlayoutdevice.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <drawinglayer/attribute/strokeattribute.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/i18n/WordType.hpp>
-#include <drawinglayer/primitive2d/texteffectprimitive2d.hxx>
-#include <drawinglayer/primitive2d/shadowprimitive2d.hxx>
-#include <com/sun/star/i18n/XBreakIterator.hpp>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <drawinglayer/primitive2d/textlineprimitive2d.hxx>
-#include <drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- void TextDecoratedPortionPrimitive2D::impCreateGeometryContent(
- std::vector< Primitive2DReference >& rTarget,
- basegfx::tools::B2DHomMatrixBufferedOnDemandDecompose& rDecTrans,
- const String& rText,
- xub_StrLen aTextPosition,
- xub_StrLen aTextLength,
- const ::std::vector< double >& rDXArray,
- const attribute::FontAttribute& rFontAttribute) const
- {
- // create the SimpleTextPrimitive needed in any case
- rTarget.push_back(Primitive2DReference(
- new TextSimplePortionPrimitive2D(
- rDecTrans.getB2DHomMatrix(),
- rText,
- aTextPosition,
- aTextLength,
- rDXArray,
- rFontAttribute,
- getLocale(),
- getFontColor())));
-
- // see if something else needs to be done
- const bool bOverlineUsed(TEXT_LINE_NONE != getFontOverline());
- const bool bUnderlineUsed(TEXT_LINE_NONE != getFontUnderline());
- const bool bStrikeoutUsed(TEXT_STRIKEOUT_NONE != getTextStrikeout());
-
- if(bUnderlineUsed || bStrikeoutUsed || bOverlineUsed)
- {
- // common preparations
- TextLayouterDevice aTextLayouter;
-
- // TextLayouterDevice is needed to get metrics for text decorations like
- // underline/strikeout/emphasis marks from it. For setup, the font size is needed
- aTextLayouter.setFontAttribute(
- getFontAttribute(),
- rDecTrans.getScale().getX(),
- rDecTrans.getScale().getY(),
- getLocale());
-
- // get text width
- double fTextWidth(0.0);
-
- if(rDXArray.empty())
- {
- fTextWidth = aTextLayouter.getTextWidth(rText, aTextPosition, aTextLength);
- }
- else
- {
- fTextWidth = rDXArray.back() * rDecTrans.getScale().getX();
- const double fFontScaleX(rDecTrans.getScale().getX());
-
- if(!basegfx::fTools::equal(fFontScaleX, 1.0)
- && !basegfx::fTools::equalZero(fFontScaleX))
- {
- // need to take FontScaling out of the DXArray
- fTextWidth /= fFontScaleX;
- }
- }
-
- if(bOverlineUsed)
- {
- // create primitive geometry for overline
- rTarget.push_back(Primitive2DReference(
- new TextLinePrimitive2D(
- rDecTrans.getB2DHomMatrix(),
- fTextWidth,
- aTextLayouter.getOverlineOffset(),
- aTextLayouter.getOverlineHeight(),
- getFontOverline(),
- getOverlineColor())));
- }
-
- if(bUnderlineUsed)
- {
- // create primitive geometry for underline
- rTarget.push_back(Primitive2DReference(
- new TextLinePrimitive2D(
- rDecTrans.getB2DHomMatrix(),
- fTextWidth,
- aTextLayouter.getUnderlineOffset(),
- aTextLayouter.getUnderlineHeight(),
- getFontUnderline(),
- getTextlineColor())));
- }
-
- if(bStrikeoutUsed)
- {
- // create primitive geometry for strikeout
- if(TEXT_STRIKEOUT_SLASH == getTextStrikeout() || TEXT_STRIKEOUT_X == getTextStrikeout())
- {
- // strikeout with character
- const sal_Unicode aStrikeoutChar(TEXT_STRIKEOUT_SLASH == getTextStrikeout() ? '/' : 'X');
-
- rTarget.push_back(Primitive2DReference(
- new TextCharacterStrikeoutPrimitive2D(
- rDecTrans.getB2DHomMatrix(),
- fTextWidth,
- getFontColor(),
- aStrikeoutChar,
- getFontAttribute(),
- getLocale())));
- }
- else
- {
- // strikeout with geometry
- rTarget.push_back(Primitive2DReference(
- new TextGeometryStrikeoutPrimitive2D(
- rDecTrans.getB2DHomMatrix(),
- fTextWidth,
- getFontColor(),
- aTextLayouter.getUnderlineHeight(),
- aTextLayouter.getStrikeoutOffset(),
- getTextStrikeout())));
- }
- }
- }
-
- // TODO: Handle Font Emphasis Above/Below
- }
-
- void TextDecoratedPortionPrimitive2D::impCorrectTextBoundary(::com::sun::star::i18n::Boundary& rNextWordBoundary) const
- {
- // truncate aNextWordBoundary to min/max possible values. This is necessary since the word start may be
- // before/after getTextPosition() when a long string is the content and getTextPosition()
- // is right inside a word. Same for end.
- const sal_Int32 aMinPos(static_cast< sal_Int32 >(getTextPosition()));
- const sal_Int32 aMaxPos(aMinPos + static_cast< sal_Int32 >(getTextLength()));
-
- if(rNextWordBoundary.startPos < aMinPos)
- {
- rNextWordBoundary.startPos = aMinPos;
- }
- else if(rNextWordBoundary.startPos > aMaxPos)
- {
- rNextWordBoundary.startPos = aMaxPos;
- }
-
- if(rNextWordBoundary.endPos < aMinPos)
- {
- rNextWordBoundary.endPos = aMinPos;
- }
- else if(rNextWordBoundary.endPos > aMaxPos)
- {
- rNextWordBoundary.endPos = aMaxPos;
- }
- }
-
- void TextDecoratedPortionPrimitive2D::impSplitSingleWords(
- std::vector< Primitive2DReference >& rTarget,
- basegfx::tools::B2DHomMatrixBufferedOnDemandDecompose& rDecTrans) const
- {
- // break iterator support
- // made static so it only needs to be fetched once, even with many single
- // constructed VclMetafileProcessor2D. It's still incarnated on demand,
- // but exists for OOo runtime now by purpose.
- static ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XBreakIterator > xLocalBreakIterator;
-
- if(!xLocalBreakIterator.is())
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xMSF(::comphelper::getProcessServiceFactory());
- xLocalBreakIterator.set(xMSF->createInstance(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.i18n.BreakIterator"))), ::com::sun::star::uno::UNO_QUERY);
- }
-
- if(xLocalBreakIterator.is() && getTextLength())
- {
- // init word iterator, get first word and truncate to possibilities
- ::com::sun::star::i18n::Boundary aNextWordBoundary(xLocalBreakIterator->getWordBoundary(
- getText(), getTextPosition(), getLocale(), ::com::sun::star::i18n::WordType::ANYWORD_IGNOREWHITESPACES, sal_True));
-
- if(aNextWordBoundary.endPos == getTextPosition())
- {
- // backward hit, force next word
- aNextWordBoundary = xLocalBreakIterator->getWordBoundary(
- getText(), getTextPosition() + 1, getLocale(), ::com::sun::star::i18n::WordType::ANYWORD_IGNOREWHITESPACES, sal_True);
- }
-
- impCorrectTextBoundary(aNextWordBoundary);
-
- // prepare new font attributes WITHOUT outline
- const attribute::FontAttribute aNewFontAttribute(
- getFontAttribute().getFamilyName(),
- getFontAttribute().getStyleName(),
- getFontAttribute().getWeight(),
- getFontAttribute().getSymbol(),
- getFontAttribute().getVertical(),
- getFontAttribute().getItalic(),
- getFontAttribute().getMonospaced(),
- false, // no outline anymore, handled locally
- getFontAttribute().getRTL(),
- getFontAttribute().getBiDiStrong());
-
- if(aNextWordBoundary.startPos == getTextPosition() && aNextWordBoundary.endPos == getTextLength())
- {
- // it IS only a single word, handle as one word
- impCreateGeometryContent(rTarget, rDecTrans, getText(), getTextPosition(), getTextLength(), getDXArray(), aNewFontAttribute);
- }
- else
- {
- // prepare TextLayouter
- const bool bNoDXArray(getDXArray().empty());
- TextLayouterDevice aTextLayouter;
-
- if(bNoDXArray)
- {
- // ..but only completely when no DXArray
- aTextLayouter.setFontAttribute(
- getFontAttribute(),
- rDecTrans.getScale().getX(),
- rDecTrans.getScale().getY(),
- getLocale());
- }
-
- // do iterate over single words
- while(aNextWordBoundary.startPos != aNextWordBoundary.endPos)
- {
- // prepare values for new portion
- const xub_StrLen nNewTextStart(static_cast< xub_StrLen >(aNextWordBoundary.startPos));
- const xub_StrLen nNewTextEnd(static_cast< xub_StrLen >(aNextWordBoundary.endPos));
-
- // prepare transform for the single word
- basegfx::B2DHomMatrix aNewTransform;
- ::std::vector< double > aNewDXArray;
- const bool bNewStartIsNotOldStart(nNewTextStart > getTextPosition());
-
- if(!bNoDXArray)
- {
- // prepare new DXArray for the single word
- aNewDXArray = ::std::vector< double >(
- getDXArray().begin() + static_cast< sal_uInt32 >(nNewTextStart - getTextPosition()),
- getDXArray().begin() + static_cast< sal_uInt32 >(nNewTextEnd - getTextPosition()));
- }
-
- if(bNewStartIsNotOldStart)
- {
- // needs to be moved to a new start position
- double fOffset(0.0);
-
- if(bNoDXArray)
- {
- // evaluate using TextLayouter
- fOffset = aTextLayouter.getTextWidth(getText(), getTextPosition(), nNewTextStart);
- }
- else
- {
- // get from DXArray
- const sal_uInt32 nIndex(static_cast< sal_uInt32 >(nNewTextStart - getTextPosition()));
- fOffset = getDXArray()[nIndex - 1];
- }
-
- // need offset without FontScale for building the new transformation. The
- // new transformation will be multiplied with the current text transformation
- // so FontScale would be double
- double fOffsetNoScale(fOffset);
- const double fFontScaleX(rDecTrans.getScale().getX());
-
- if(!basegfx::fTools::equal(fFontScaleX, 1.0)
- && !basegfx::fTools::equalZero(fFontScaleX))
- {
- fOffsetNoScale /= fFontScaleX;
- }
-
- // apply needed offset to transformation
- aNewTransform.translate(fOffsetNoScale, 0.0);
-
- if(!bNoDXArray)
- {
- // DXArray values need to be corrected with the offset, too. Here,
- // take the scaled offset since the DXArray is scaled
- const sal_uInt32 nArraySize(aNewDXArray.size());
-
- for(sal_uInt32 a(0); a < nArraySize; a++)
- {
- aNewDXArray[a] -= fOffset;
- }
- }
- }
-
- // add text transformation to new transformation
- aNewTransform *= rDecTrans.getB2DHomMatrix();
-
- // create geometry content for the single word. Do not forget
- // to use the new transformation
- basegfx::tools::B2DHomMatrixBufferedOnDemandDecompose aDecTrans(aNewTransform);
-
- impCreateGeometryContent(rTarget, aDecTrans, getText(), nNewTextStart,
- nNewTextEnd - nNewTextStart, aNewDXArray, aNewFontAttribute);
-
- if(aNextWordBoundary.endPos >= getTextPosition() + getTextLength())
- {
- // end reached
- aNextWordBoundary.startPos = aNextWordBoundary.endPos;
- }
- else
- {
- // get new word portion
- const sal_Int32 nLastEndPos(aNextWordBoundary.endPos);
-
- aNextWordBoundary = xLocalBreakIterator->getWordBoundary(
- getText(), aNextWordBoundary.endPos, getLocale(),
- ::com::sun::star::i18n::WordType::ANYWORD_IGNOREWHITESPACES, sal_True);
-
- if(nLastEndPos == aNextWordBoundary.endPos)
- {
- // backward hit, force next word
- aNextWordBoundary = xLocalBreakIterator->getWordBoundary(
- getText(), nLastEndPos + 1, getLocale(),
- ::com::sun::star::i18n::WordType::ANYWORD_IGNOREWHITESPACES, sal_True);
- }
-
- impCorrectTextBoundary(aNextWordBoundary);
- }
- }
- }
- }
- }
-
- Primitive2DSequence TextDecoratedPortionPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- std::vector< Primitive2DReference > aNewPrimitives;
- basegfx::tools::B2DHomMatrixBufferedOnDemandDecompose aDecTrans(getTextTransform());
- Primitive2DSequence aRetval;
-
- // create basic geometry such as SimpleTextPrimitive, Overline, Underline,
- // Strikeout, etc...
- if(getWordLineMode())
- {
- // support for single word mode
- impSplitSingleWords(aNewPrimitives, aDecTrans);
- }
- else
- {
- // prepare new font attributes WITHOUT outline
- const attribute::FontAttribute aNewFontAttribute(
- getFontAttribute().getFamilyName(),
- getFontAttribute().getStyleName(),
- getFontAttribute().getWeight(),
- getFontAttribute().getSymbol(),
- getFontAttribute().getVertical(),
- getFontAttribute().getItalic(),
- false, // no outline anymore, handled locally
- getFontAttribute().getRTL(),
- getFontAttribute().getBiDiStrong());
-
- // handle as one word
- impCreateGeometryContent(aNewPrimitives, aDecTrans, getText(), getTextPosition(), getTextLength(), getDXArray(), aNewFontAttribute);
- }
-
- // convert to Primitive2DSequence
- const sal_uInt32 nMemberCount(aNewPrimitives.size());
-
- if(nMemberCount)
- {
- aRetval.realloc(nMemberCount);
-
- for(sal_uInt32 a(0); a < nMemberCount; a++)
- {
- aRetval[a] = aNewPrimitives[a];
- }
- }
-
- // Handle Shadow, Outline and TextRelief
- if(aRetval.hasElements())
- {
- // outline AND shadow depend on NO TextRelief (see dialog)
- const bool bHasTextRelief(TEXT_RELIEF_NONE != getTextRelief());
- const bool bHasShadow(!bHasTextRelief && getShadow());
- const bool bHasOutline(!bHasTextRelief && getFontAttribute().getOutline());
-
- if(bHasShadow || bHasTextRelief || bHasOutline)
- {
- Primitive2DReference aShadow;
-
- if(bHasShadow)
- {
- // create shadow with current content (in aRetval). Text shadow
- // is constant, relative to font size, rotated with the text and has a
- // constant color.
- // shadow parameter values
- static double fFactor(1.0 / 24.0);
- const double fTextShadowOffset(aDecTrans.getScale().getY() * fFactor);
- static basegfx::BColor aShadowColor(0.3, 0.3, 0.3);
-
- // preapare shadow transform matrix
- const basegfx::B2DHomMatrix aShadowTransform(basegfx::tools::createTranslateB2DHomMatrix(
- fTextShadowOffset, fTextShadowOffset));
-
- // create shadow primitive
- aShadow = Primitive2DReference(new ShadowPrimitive2D(
- aShadowTransform,
- aShadowColor,
- aRetval));
- }
-
- if(bHasTextRelief)
- {
- // create emboss using an own helper primitive since this will
- // be view-dependent
- const basegfx::BColor aBBlack(0.0, 0.0, 0.0);
- const bool bDefaultTextColor(aBBlack == getFontColor());
- TextEffectStyle2D aTextEffectStyle2D(TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED);
-
- if(bDefaultTextColor)
- {
- if(TEXT_RELIEF_ENGRAVED == getTextRelief())
- {
- aTextEffectStyle2D = TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED_DEFAULT;
- }
- else
- {
- aTextEffectStyle2D = TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED_DEFAULT;
- }
- }
- else
- {
- if(TEXT_RELIEF_ENGRAVED == getTextRelief())
- {
- aTextEffectStyle2D = TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED;
- }
- else
- {
- aTextEffectStyle2D = TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED;
- }
- }
-
- Primitive2DReference aNewTextEffect(new TextEffectPrimitive2D(
- aRetval,
- aDecTrans.getTranslate(),
- aDecTrans.getRotate(),
- aTextEffectStyle2D));
- aRetval = Primitive2DSequence(&aNewTextEffect, 1);
- }
- else if(bHasOutline)
- {
- // create outline using an own helper primitive since this will
- // be view-dependent
- Primitive2DReference aNewTextEffect(new TextEffectPrimitive2D(
- aRetval,
- aDecTrans.getTranslate(),
- aDecTrans.getRotate(),
- TEXTEFFECTSTYLE2D_OUTLINE));
- aRetval = Primitive2DSequence(&aNewTextEffect, 1);
- }
-
- if(aShadow.is())
- {
- // put shadow in front if there is one to paint timely before
- // but placed behind content
- const Primitive2DSequence aContent(aRetval);
- aRetval = Primitive2DSequence(&aShadow, 1);
- appendPrimitive2DSequenceToPrimitive2DSequence(aRetval, aContent);
- }
- }
- }
-
- return aRetval;
- }
-
- TextDecoratedPortionPrimitive2D::TextDecoratedPortionPrimitive2D(
-
- // TextSimplePortionPrimitive2D parameters
- const basegfx::B2DHomMatrix& rNewTransform,
- const String& rText,
- xub_StrLen aTextPosition,
- xub_StrLen aTextLength,
- const ::std::vector< double >& rDXArray,
- const attribute::FontAttribute& rFontAttribute,
- const ::com::sun::star::lang::Locale& rLocale,
- const basegfx::BColor& rFontColor,
-
- // local parameters
- const basegfx::BColor& rOverlineColor,
- const basegfx::BColor& rTextlineColor,
- TextLine eFontOverline,
- TextLine eFontUnderline,
- bool bUnderlineAbove,
- TextStrikeout eTextStrikeout,
- bool bWordLineMode,
- TextEmphasisMark eTextEmphasisMark,
- bool bEmphasisMarkAbove,
- bool bEmphasisMarkBelow,
- TextRelief eTextRelief,
- bool bShadow)
- : TextSimplePortionPrimitive2D(rNewTransform, rText, aTextPosition, aTextLength, rDXArray, rFontAttribute, rLocale, rFontColor),
- maOverlineColor(rOverlineColor),
- maTextlineColor(rTextlineColor),
- meFontOverline(eFontOverline),
- meFontUnderline(eFontUnderline),
- meTextStrikeout(eTextStrikeout),
- meTextEmphasisMark(eTextEmphasisMark),
- meTextRelief(eTextRelief),
- mbUnderlineAbove(bUnderlineAbove),
- mbWordLineMode(bWordLineMode),
- mbEmphasisMarkAbove(bEmphasisMarkAbove),
- mbEmphasisMarkBelow(bEmphasisMarkBelow),
- mbShadow(bShadow)
- {
- }
-
- bool TextDecoratedPortionPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(TextSimplePortionPrimitive2D::operator==(rPrimitive))
- {
- const TextDecoratedPortionPrimitive2D& rCompare = (TextDecoratedPortionPrimitive2D&)rPrimitive;
-
- return (getOverlineColor() == rCompare.getOverlineColor()
- && getTextlineColor() == rCompare.getTextlineColor()
- && getFontOverline() == rCompare.getFontOverline()
- && getFontUnderline() == rCompare.getFontUnderline()
- && getTextStrikeout() == rCompare.getTextStrikeout()
- && getTextEmphasisMark() == rCompare.getTextEmphasisMark()
- && getTextRelief() == rCompare.getTextRelief()
- && getUnderlineAbove() == rCompare.getUnderlineAbove()
- && getWordLineMode() == rCompare.getWordLineMode()
- && getEmphasisMarkAbove() == rCompare.getEmphasisMarkAbove()
- && getEmphasisMarkBelow() == rCompare.getEmphasisMarkBelow()
- && getShadow() == rCompare.getShadow());
- }
-
- return false;
- }
-
- // #i96475#
- // Added missing implementation. Decorations may (will) stick out of the text's
- // inking area, so add them if needed
- basegfx::B2DRange TextDecoratedPortionPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- const bool bDecoratedIsNeeded(
- TEXT_LINE_NONE != getFontOverline()
- || TEXT_LINE_NONE != getFontUnderline()
- || TEXT_STRIKEOUT_NONE != getTextStrikeout()
- || TEXT_EMPHASISMARK_NONE != getTextEmphasisMark()
- || TEXT_RELIEF_NONE != getTextRelief()
- || getShadow());
-
- if(bDecoratedIsNeeded)
- {
- // decoration is used, fallback to BufferedDecompositionPrimitive2D::getB2DRange which uses
- // the own local decomposition for computation and thus creates all necessary
- // geometric objects
- return BufferedDecompositionPrimitive2D::getB2DRange(rViewInformation);
- }
- else
- {
- // no relevant decoration used, fallback to TextSimplePortionPrimitive2D::getB2DRange
- return TextSimplePortionPrimitive2D::getB2DRange(rViewInformation);
- }
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextDecoratedPortionPrimitive2D, PRIMITIVE2D_ID_TEXTDECORATEDPORTIONPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/texteffectprimitive2d.cxx b/drawinglayer/source/primitive2d/texteffectprimitive2d.cxx
deleted file mode 100644
index cf29d00e3b..0000000000
--- a/drawinglayer/source/primitive2d/texteffectprimitive2d.cxx
+++ /dev/null
@@ -1,242 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/texteffectprimitive2d.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- static double fDiscreteSize(1.1);
-
- Primitive2DSequence TextEffectPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- Primitive2DSequence aRetval;
-
- // get the distance of one discrete units from target display. Use between 1.0 and sqrt(2) to
- // have good results on rotated objects, too
- const basegfx::B2DVector aDistance(rViewInformation.getInverseObjectToViewTransformation() *
- basegfx::B2DVector(fDiscreteSize, fDiscreteSize));
- const basegfx::B2DVector aDiagonalDistance(aDistance * (1.0 / 1.44));
-
- switch(getTextEffectStyle2D())
- {
- case TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED:
- case TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED:
- case TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED_DEFAULT:
- case TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED_DEFAULT:
- {
- // prepare transform of sub-group back to (0,0) and align to X-Axis
- basegfx::B2DHomMatrix aBackTransform(basegfx::tools::createTranslateB2DHomMatrix(
- -getRotationCenter().getX(), -getRotationCenter().getY()));
- aBackTransform.rotate(-getDirection());
-
- // prepare transform of sub-group back to it's position and rotation
- basegfx::B2DHomMatrix aForwardTransform(basegfx::tools::createRotateB2DHomMatrix(getDirection()));
- aForwardTransform.translate(getRotationCenter().getX(), getRotationCenter().getY());
-
- // create transformation for one discrete unit
- const bool bEmbossed(
- TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED == getTextEffectStyle2D()
- || TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED_DEFAULT == getTextEffectStyle2D());
- const bool bDefaultTextColor(
- TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED_DEFAULT == getTextEffectStyle2D()
- || TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED_DEFAULT == getTextEffectStyle2D());
- basegfx::B2DHomMatrix aTransform(aBackTransform);
- aRetval.realloc(2);
-
- if(bEmbossed)
- {
- // to bottom-right
- aTransform.translate(aDiagonalDistance.getX(), aDiagonalDistance.getY());
- }
- else
- {
- // to top-left
- aTransform.translate(-aDiagonalDistance.getX(), -aDiagonalDistance.getY());
- }
-
- aTransform *= aForwardTransform;
-
- if(bDefaultTextColor)
- {
- // emboss/engrave in black, original forced to white
- const basegfx::BColorModifier aBColorModifierToGray(basegfx::BColor(0.0));
- const Primitive2DReference xModifiedColor(new ModifiedColorPrimitive2D(getTextContent(), aBColorModifierToGray));
- aRetval[0] = Primitive2DReference(new TransformPrimitive2D(aTransform, Primitive2DSequence(&xModifiedColor, 1)));
-
- // add original, too
- const basegfx::BColorModifier aBColorModifierToWhite(basegfx::BColor(1.0));
- aRetval[1] = Primitive2DReference(new ModifiedColorPrimitive2D(getTextContent(), aBColorModifierToWhite));
- }
- else
- {
- // emboss/engrave in gray, keep original's color
- const basegfx::BColorModifier aBColorModifierToGray(basegfx::BColor(0.75)); // 192
- const Primitive2DReference xModifiedColor(new ModifiedColorPrimitive2D(getTextContent(), aBColorModifierToGray));
- aRetval[0] = Primitive2DReference(new TransformPrimitive2D(aTransform, Primitive2DSequence(&xModifiedColor, 1)));
-
- // add original, too
- aRetval[1] = Primitive2DReference(new GroupPrimitive2D(getTextContent()));
- }
-
- break;
- }
- case TEXTEFFECTSTYLE2D_OUTLINE:
- {
- // create transform primitives in all directions
- basegfx::B2DHomMatrix aTransform;
- aRetval.realloc(9);
-
- aTransform.set(0, 2, aDistance.getX());
- aTransform.set(1, 2, 0.0);
- aRetval[0] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent()));
-
- aTransform.set(0, 2, aDiagonalDistance.getX());
- aTransform.set(1, 2, aDiagonalDistance.getY());
- aRetval[1] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent()));
-
- aTransform.set(0, 2, 0.0);
- aTransform.set(1, 2, aDistance.getY());
- aRetval[2] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent()));
-
- aTransform.set(0, 2, -aDiagonalDistance.getX());
- aTransform.set(1, 2, aDiagonalDistance.getY());
- aRetval[3] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent()));
-
- aTransform.set(0, 2, -aDistance.getX());
- aTransform.set(1, 2, 0.0);
- aRetval[4] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent()));
-
- aTransform.set(0, 2, -aDiagonalDistance.getX());
- aTransform.set(1, 2, -aDiagonalDistance.getY());
- aRetval[5] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent()));
-
- aTransform.set(0, 2, 0.0);
- aTransform.set(1, 2, -aDistance.getY());
- aRetval[6] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent()));
-
- aTransform.set(0, 2, aDiagonalDistance.getX());
- aTransform.set(1, 2, -aDiagonalDistance.getY());
- aRetval[7] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent()));
-
- // at last, place original over it, but force to white
- const basegfx::BColorModifier aBColorModifierToWhite(basegfx::BColor(1.0, 1.0, 1.0));
- aRetval[8] = Primitive2DReference(new ModifiedColorPrimitive2D(getTextContent(), aBColorModifierToWhite));
-
- break;
- }
- }
-
- return aRetval;
- }
-
- TextEffectPrimitive2D::TextEffectPrimitive2D(
- const Primitive2DSequence& rTextContent,
- const basegfx::B2DPoint& rRotationCenter,
- double fDirection,
- TextEffectStyle2D eTextEffectStyle2D)
- : BufferedDecompositionPrimitive2D(),
- maTextContent(rTextContent),
- maRotationCenter(rRotationCenter),
- mfDirection(fDirection),
- meTextEffectStyle2D(eTextEffectStyle2D)
- {
- }
-
- bool TextEffectPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BasePrimitive2D::operator==(rPrimitive))
- {
- const TextEffectPrimitive2D& rCompare = (TextEffectPrimitive2D&)rPrimitive;
-
- return (getTextContent() == rCompare.getTextContent()
- && getRotationCenter() == rCompare.getRotationCenter()
- && getDirection() == rCompare.getDirection()
- && getTextEffectStyle2D() == rCompare.getTextEffectStyle2D());
- }
-
- return false;
- }
-
- basegfx::B2DRange TextEffectPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- // get range of content and grow by used fDiscreteSize. That way it is not necessary to ask
- // the whole decomposition for it's ranges (which may be expensive with outline mode which
- // then will ask 9 times at nearly the same content. This may even be refined here using the
- // TextEffectStyle information, e.g. for TEXTEFFECTSTYLE2D_RELIEF the grow needs only to
- // be in two directions
- basegfx::B2DRange aRetval(getB2DRangeFromPrimitive2DSequence(getTextContent(), rViewInformation));
- aRetval.grow(fDiscreteSize);
-
- return aRetval;
- }
-
- Primitive2DSequence TextEffectPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- if(getBuffered2DDecomposition().hasElements())
- {
- if(maLastObjectToViewTransformation != rViewInformation.getObjectToViewTransformation())
- {
- // conditions of last local decomposition have changed, delete
- const_cast< TextEffectPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
- }
- }
-
- if(!getBuffered2DDecomposition().hasElements())
- {
- // remember ViewRange and ViewTransformation
- const_cast< TextEffectPrimitive2D* >(this)->maLastObjectToViewTransformation = rViewInformation.getObjectToViewTransformation();
- }
-
- // use parent implementation
- return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextEffectPrimitive2D, PRIMITIVE2D_ID_TEXTEFFECTPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/textenumsprimitive2d.cxx b/drawinglayer/source/primitive2d/textenumsprimitive2d.cxx
deleted file mode 100644
index 5247d4404e..0000000000
--- a/drawinglayer/source/primitive2d/textenumsprimitive2d.cxx
+++ /dev/null
@@ -1,124 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/textenumsprimitive2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- TextLine mapFontUnderlineToTextLine(FontUnderline eLineStyle)
- {
- switch(eLineStyle)
- {
- case UNDERLINE_SINGLE: return TEXT_LINE_SINGLE;
- case UNDERLINE_DOUBLE: return TEXT_LINE_DOUBLE;
- case UNDERLINE_DOTTED: return TEXT_LINE_DOTTED;
- case UNDERLINE_DASH: return TEXT_LINE_DASH;
- case UNDERLINE_LONGDASH: return TEXT_LINE_LONGDASH;
- case UNDERLINE_DASHDOT: return TEXT_LINE_DASHDOT;
- case UNDERLINE_DASHDOTDOT: return TEXT_LINE_DASHDOTDOT;
- case UNDERLINE_SMALLWAVE: return TEXT_LINE_SMALLWAVE;
- case UNDERLINE_WAVE: return TEXT_LINE_WAVE;
- case UNDERLINE_DOUBLEWAVE: return TEXT_LINE_DOUBLEWAVE;
- case UNDERLINE_BOLD: return TEXT_LINE_BOLD;
- case UNDERLINE_BOLDDOTTED: return TEXT_LINE_BOLDDOTTED;
- case UNDERLINE_BOLDDASH: return TEXT_LINE_BOLDDASH;
- case UNDERLINE_BOLDLONGDASH: return TEXT_LINE_BOLDLONGDASH;
- case UNDERLINE_BOLDDASHDOT: return TEXT_LINE_BOLDDASHDOT;
- case UNDERLINE_BOLDDASHDOTDOT: return TEXT_LINE_BOLDDASHDOTDOT;
- case UNDERLINE_BOLDWAVE: return TEXT_LINE_BOLDWAVE;
- // FontUnderline_FORCE_EQUAL_SIZE, UNDERLINE_DONTKNOW, UNDERLINE_NONE
- default: return TEXT_LINE_NONE;
- }
- }
-
- FontUnderline mapTextLineToFontUnderline(TextLine eLineStyle)
- {
- switch(eLineStyle)
- {
- default: /*TEXT_LINE_NONE*/ return UNDERLINE_NONE;
- case TEXT_LINE_SINGLE: return UNDERLINE_SINGLE;
- case TEXT_LINE_DOUBLE: return UNDERLINE_DOUBLE;
- case TEXT_LINE_DOTTED: return UNDERLINE_DOTTED;
- case TEXT_LINE_DASH: return UNDERLINE_DASH;
- case TEXT_LINE_LONGDASH: return UNDERLINE_LONGDASH;
- case TEXT_LINE_DASHDOT: return UNDERLINE_DASHDOT;
- case TEXT_LINE_DASHDOTDOT: return UNDERLINE_DASHDOTDOT;
- case TEXT_LINE_SMALLWAVE: return UNDERLINE_SMALLWAVE;
- case TEXT_LINE_WAVE: return UNDERLINE_WAVE;
- case TEXT_LINE_DOUBLEWAVE: return UNDERLINE_DOUBLEWAVE;
- case TEXT_LINE_BOLD: return UNDERLINE_BOLD;
- case TEXT_LINE_BOLDDOTTED: return UNDERLINE_BOLDDOTTED;
- case TEXT_LINE_BOLDDASH: return UNDERLINE_BOLDDASH;
- case TEXT_LINE_BOLDLONGDASH: return UNDERLINE_LONGDASH;
- case TEXT_LINE_BOLDDASHDOT: return UNDERLINE_BOLDDASHDOT;
- case TEXT_LINE_BOLDDASHDOTDOT:return UNDERLINE_BOLDDASHDOT;
- case TEXT_LINE_BOLDWAVE: return UNDERLINE_BOLDWAVE;
- }
- }
-
- TextStrikeout mapFontStrikeoutToTextStrikeout(FontStrikeout eFontStrikeout)
- {
- switch(eFontStrikeout)
- {
- case STRIKEOUT_SINGLE: return TEXT_STRIKEOUT_SINGLE;
- case STRIKEOUT_DOUBLE: return TEXT_STRIKEOUT_DOUBLE;
- case STRIKEOUT_BOLD: return TEXT_STRIKEOUT_BOLD;
- case STRIKEOUT_SLASH: return TEXT_STRIKEOUT_SLASH;
- case STRIKEOUT_X: return TEXT_STRIKEOUT_X;
- // FontStrikeout_FORCE_EQUAL_SIZE, STRIKEOUT_NONE, STRIKEOUT_DONTKNOW
- default: return TEXT_STRIKEOUT_NONE;
- }
- }
-
- FontStrikeout mapTextStrikeoutToFontStrikeout(TextStrikeout eTextStrikeout)
- {
- switch(eTextStrikeout)
- {
- default: /*case primitive2d::TEXT_STRIKEOUT_NONE*/ return STRIKEOUT_NONE;
- case TEXT_STRIKEOUT_SINGLE: return STRIKEOUT_SINGLE;
- case TEXT_STRIKEOUT_DOUBLE: return STRIKEOUT_DOUBLE;
- case TEXT_STRIKEOUT_BOLD: return STRIKEOUT_BOLD;
- case TEXT_STRIKEOUT_SLASH: return STRIKEOUT_SLASH;
- case TEXT_STRIKEOUT_X: return STRIKEOUT_X;
- }
- }
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/texthierarchyprimitive2d.cxx b/drawinglayer/source/primitive2d/texthierarchyprimitive2d.cxx
deleted file mode 100644
index 896b37252f..0000000000
--- a/drawinglayer/source/primitive2d/texthierarchyprimitive2d.cxx
+++ /dev/null
@@ -1,161 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/texthierarchyprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- TextHierarchyLinePrimitive2D::TextHierarchyLinePrimitive2D(const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren)
- {
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextHierarchyLinePrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYLINEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- TextHierarchyParagraphPrimitive2D::TextHierarchyParagraphPrimitive2D(const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren)
- {
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextHierarchyParagraphPrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYPARAGRAPHPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- TextHierarchyBulletPrimitive2D::TextHierarchyBulletPrimitive2D(const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren)
- {
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextHierarchyBulletPrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYBULLETPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- TextHierarchyBlockPrimitive2D::TextHierarchyBlockPrimitive2D(const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren)
- {
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextHierarchyBlockPrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYBLOCKPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- TextHierarchyFieldPrimitive2D::TextHierarchyFieldPrimitive2D(
- const Primitive2DSequence& rChildren,
- const FieldType& rFieldType,
- const rtl::OUString& rString)
- : GroupPrimitive2D(rChildren),
- meType(rFieldType),
- maString(rString)
- {
- }
-
- bool TextHierarchyFieldPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(GroupPrimitive2D::operator==(rPrimitive))
- {
- const TextHierarchyFieldPrimitive2D& rCompare = (TextHierarchyFieldPrimitive2D&)rPrimitive;
-
- return (getType() == rCompare.getType()
- && getString() == rCompare.getString());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextHierarchyFieldPrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYFIELDPRIMITIVE2D)
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- TextHierarchyEditPrimitive2D::TextHierarchyEditPrimitive2D(const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren)
- {
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextHierarchyEditPrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYEDITPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/textlayoutdevice.cxx b/drawinglayer/source/primitive2d/textlayoutdevice.cxx
deleted file mode 100644
index 0c37200c77..0000000000
--- a/drawinglayer/source/primitive2d/textlayoutdevice.cxx
+++ /dev/null
@@ -1,503 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/textlayoutdevice.hxx>
-#include <comphelper/processfactory.hxx>
-#include <comphelper/scoped_disposing_ptr.hxx>
-#include <vcl/timer.hxx>
-#include <vcl/virdev.hxx>
-#include <vcl/font.hxx>
-#include <vcl/metric.hxx>
-#include <i18npool/mslangid.hxx>
-#include <drawinglayer/primitive2d/textprimitive2d.hxx>
-#include <vcl/svapp.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-// VDev RevDevice provider
-
-namespace
-{
- class ImpTimedRefDev;
-
- //the scoped_timed_RefDev owns a ImpTimeRefDev and releases it on dtor
- //or disposing of the default XComponentContext which causes the underlying
- //OutputDevice to get released
- //
- //The ImpTimerRefDev itself, if the timeout ever gets hit, will call
- //reset on the scoped_timed_RefDev to release the ImpTimerRefDev early
- //if its unused for a few minutes
- class scoped_timed_RefDev : public comphelper::scoped_disposing_ptr<ImpTimedRefDev>
- {
- public:
- scoped_timed_RefDev() : comphelper::scoped_disposing_ptr<ImpTimedRefDev>((::com::sun::star::uno::Reference<com::sun::star::lang::XComponent>(::comphelper::getProcessComponentContext(), ::com::sun::star::uno::UNO_QUERY_THROW)))
- {
- }
- };
-
- class the_scoped_timed_RefDev : public rtl::Static<scoped_timed_RefDev, the_scoped_timed_RefDev> {};
-
- class ImpTimedRefDev : public Timer
- {
- scoped_timed_RefDev& mrOwnerOfMe;
- VirtualDevice* mpVirDev;
- sal_uInt32 mnUseCount;
-
- public:
- ImpTimedRefDev(scoped_timed_RefDev& rOwnerofMe);
- ~ImpTimedRefDev();
- virtual void Timeout();
-
- VirtualDevice& acquireVirtualDevice();
- void releaseVirtualDevice();
- };
-
- ImpTimedRefDev::ImpTimedRefDev(scoped_timed_RefDev& rOwnerOfMe)
- : mrOwnerOfMe(rOwnerOfMe),
- mpVirDev(0L),
- mnUseCount(0L)
- {
- SetTimeout(3L * 60L * 1000L); // three minutes
- Start();
- }
-
- ImpTimedRefDev::~ImpTimedRefDev()
- {
- OSL_ENSURE(0L == mnUseCount, "destruction of a still used ImpTimedRefDev (!)");
- delete mpVirDev;
- }
-
- void ImpTimedRefDev::Timeout()
- {
- // for obvious reasons, do not call anything after this
- mrOwnerOfMe.reset();
- }
-
- VirtualDevice& ImpTimedRefDev::acquireVirtualDevice()
- {
- if(!mpVirDev)
- {
- mpVirDev = new VirtualDevice();
- mpVirDev->SetReferenceDevice( VirtualDevice::REFDEV_MODE_MSO1 );
- }
-
- if(!mnUseCount)
- {
- Stop();
- }
-
- mnUseCount++;
-
- return *mpVirDev;
- }
-
- void ImpTimedRefDev::releaseVirtualDevice()
- {
- OSL_ENSURE(mnUseCount, "mismatch call number to releaseVirtualDevice() (!)");
- mnUseCount--;
-
- if(!mnUseCount)
- {
- Start();
- }
- }
-} // end of anonymous namespace
-
-//////////////////////////////////////////////////////////////////////////////
-// access to one global ImpTimedRefDev incarnation in namespace drawinglayer::primitive
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- // static methods here
- VirtualDevice& acquireGlobalVirtualDevice()
- {
- scoped_timed_RefDev& rStdRefDevice = the_scoped_timed_RefDev::get();
-
- if(!rStdRefDevice)
- rStdRefDevice.reset(new ImpTimedRefDev(rStdRefDevice));
-
- return rStdRefDevice->acquireVirtualDevice();
- }
-
- void releaseGlobalVirtualDevice()
- {
- scoped_timed_RefDev& rStdRefDevice = the_scoped_timed_RefDev::get();
-
- OSL_ENSURE(rStdRefDevice, "releaseGlobalVirtualDevice() without prior acquireGlobalVirtualDevice() call(!)");
- rStdRefDevice->releaseVirtualDevice();
- }
-
- TextLayouterDevice::TextLayouterDevice()
- : mrDevice(acquireGlobalVirtualDevice())
- {
- }
-
- TextLayouterDevice::~TextLayouterDevice()
- {
- releaseGlobalVirtualDevice();
- }
-
- void TextLayouterDevice::setFont(const Font& rFont)
- {
- mrDevice.SetFont( rFont );
- }
-
- void TextLayouterDevice::setFontAttribute(
- const attribute::FontAttribute& rFontAttribute,
- double fFontScaleX,
- double fFontScaleY,
- const ::com::sun::star::lang::Locale& rLocale)
- {
- setFont(getVclFontFromFontAttribute(
- rFontAttribute,
- fFontScaleX,
- fFontScaleY,
- 0.0,
- rLocale));
- }
-
- double TextLayouterDevice::getOverlineOffset() const
- {
- const ::FontMetric& rMetric = mrDevice.GetFontMetric();
- double fRet = (rMetric.GetIntLeading() / 2.0) - rMetric.GetAscent();
- return fRet;
- }
-
- double TextLayouterDevice::getUnderlineOffset() const
- {
- const ::FontMetric& rMetric = mrDevice.GetFontMetric();
- double fRet = rMetric.GetDescent() / 2.0;
- return fRet;
- }
-
- double TextLayouterDevice::getStrikeoutOffset() const
- {
- const ::FontMetric& rMetric = mrDevice.GetFontMetric();
- double fRet = (rMetric.GetAscent() - rMetric.GetIntLeading()) / 3.0;
- return fRet;
- }
-
- double TextLayouterDevice::getOverlineHeight() const
- {
- const ::FontMetric& rMetric = mrDevice.GetFontMetric();
- double fRet = rMetric.GetIntLeading() / 2.5;
- return fRet;
- }
-
- double TextLayouterDevice::getUnderlineHeight() const
- {
- const ::FontMetric& rMetric = mrDevice.GetFontMetric();
- double fRet = rMetric.GetDescent() / 4.0;
- return fRet;
- }
-
- double TextLayouterDevice::getTextHeight() const
- {
- return mrDevice.GetTextHeight();
- }
-
- double TextLayouterDevice::getTextWidth(
- const String& rText,
- sal_uInt32 nIndex,
- sal_uInt32 nLength) const
- {
- return mrDevice.GetTextWidth(rText, nIndex, nLength);
- }
-
- bool TextLayouterDevice::getTextOutlines(
- basegfx::B2DPolyPolygonVector& rB2DPolyPolyVector,
- const String& rText,
- sal_uInt32 nIndex,
- sal_uInt32 nLength,
- const ::std::vector< double >& rDXArray) const
- {
- const sal_uInt32 nDXArrayCount(rDXArray.size());
- sal_uInt32 nTextLength(nLength);
- const sal_uInt32 nStringLength(rText.Len());
-
- if(nTextLength + nIndex > nStringLength)
- {
- nTextLength = nStringLength - nIndex;
- }
-
- if(nDXArrayCount)
- {
- OSL_ENSURE(nDXArrayCount == nTextLength, "DXArray size does not correspond to text portion size (!)");
- std::vector< sal_Int32 > aIntegerDXArray(nDXArrayCount);
-
- for(sal_uInt32 a(0); a < nDXArrayCount; a++)
- {
- aIntegerDXArray[a] = basegfx::fround(rDXArray[a]);
- }
-
- return mrDevice.GetTextOutlines(
- rB2DPolyPolyVector,
- rText,
- nIndex,
- nIndex,
- nLength,
- true,
- 0,
- &(aIntegerDXArray[0]));
- }
- else
- {
- return mrDevice.GetTextOutlines(
- rB2DPolyPolyVector,
- rText,
- nIndex,
- nIndex,
- nLength,
- true,
- 0,
- 0);
- }
- }
-
- basegfx::B2DRange TextLayouterDevice::getTextBoundRect(
- const String& rText,
- sal_uInt32 nIndex,
- sal_uInt32 nLength) const
- {
- sal_uInt32 nTextLength(nLength);
- const sal_uInt32 nStringLength(rText.Len());
-
- if(nTextLength + nIndex > nStringLength)
- {
- nTextLength = nStringLength - nIndex;
- }
-
- if(nTextLength)
- {
- Rectangle aRect;
-
- mrDevice.GetTextBoundRect(
- aRect,
- rText,
- nIndex,
- nIndex,
- nLength);
-
- // #i104432#, #i102556# take empty results into account
- if(!aRect.IsEmpty())
- {
- return basegfx::B2DRange(
- aRect.Left(), aRect.Top(),
- aRect.Right(), aRect.Bottom());
- }
- }
-
- return basegfx::B2DRange();
- }
-
- double TextLayouterDevice::getFontAscent() const
- {
- const ::FontMetric& rMetric = mrDevice.GetFontMetric();
- return rMetric.GetAscent();
- }
-
- double TextLayouterDevice::getFontDescent() const
- {
- const ::FontMetric& rMetric = mrDevice.GetFontMetric();
- return rMetric.GetDescent();
- }
-
- void TextLayouterDevice::addTextRectActions(
- const Rectangle& rRectangle,
- const String& rText,
- sal_uInt16 nStyle,
- GDIMetaFile& rGDIMetaFile) const
- {
- mrDevice.AddTextRectActions(
- rRectangle, rText, nStyle, rGDIMetaFile);
- }
-
- ::std::vector< double > TextLayouterDevice::getTextArray(
- const String& rText,
- sal_uInt32 nIndex,
- sal_uInt32 nLength) const
- {
- ::std::vector< double > aRetval;
- sal_uInt32 nTextLength(nLength);
- const sal_uInt32 nStringLength(rText.Len());
-
- if(nTextLength + nIndex > nStringLength)
- {
- nTextLength = nStringLength - nIndex;
- }
-
- if(nTextLength)
- {
- aRetval.reserve(nTextLength);
- ::std::vector<sal_Int32> aArray(nTextLength);
- mrDevice.GetTextArray(rText, &aArray[0], nIndex, nLength);
- aRetval.assign(aArray.begin(), aArray.end());
- }
-
- return aRetval;
- }
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// helper methods for vcl font handling
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Font getVclFontFromFontAttribute(
- const attribute::FontAttribute& rFontAttribute,
- double fFontScaleX,
- double fFontScaleY,
- double fFontRotation,
- const ::com::sun::star::lang::Locale& rLocale)
- {
- // detect FontScaling
- const sal_uInt32 nHeight(basegfx::fround(fabs(fFontScaleY)));
- const sal_uInt32 nWidth(basegfx::fround(fabs(fFontScaleX)));
- const bool bFontIsScaled(nHeight != nWidth);
-
-#ifdef WIN32
- // for WIN32 systems, start with creating an unscaled font. If FontScaling
- // is wanted, that width needs to be adapted using FontMetric again to get a
- // width of the unscaled font
- Font aRetval(
- rFontAttribute.getFamilyName(),
- rFontAttribute.getStyleName(),
- Size(0, nHeight));
-#else
- // for non-WIN32 systems things are easier since these accept a Font creation
- // with initially nWidth != nHeight for FontScaling. Despite that, use zero for
- // FontWidth when no scaling is used to explicitely have that zero when e.g. the
- // Font would be recorded in a MetaFile (The MetaFile FontAction WILL record a
- // set FontWidth; import that in a WIN32 system, and trouble is there)
- Font aRetval(
- rFontAttribute.getFamilyName(),
- rFontAttribute.getStyleName(),
- Size(bFontIsScaled ? nWidth : 0, nHeight));
-#endif
- // define various other FontAttribute
- aRetval.SetAlign(ALIGN_BASELINE);
- aRetval.SetCharSet(rFontAttribute.getSymbol() ? RTL_TEXTENCODING_SYMBOL : RTL_TEXTENCODING_UNICODE);
- aRetval.SetVertical(rFontAttribute.getVertical() ? sal_True : sal_False);
- aRetval.SetWeight(static_cast<FontWeight>(rFontAttribute.getWeight()));
- aRetval.SetItalic(rFontAttribute.getItalic() ? ITALIC_NORMAL : ITALIC_NONE);
- aRetval.SetOutline(rFontAttribute.getOutline());
- aRetval.SetPitch(rFontAttribute.getMonospaced() ? PITCH_FIXED : PITCH_VARIABLE);
- aRetval.SetLanguage(MsLangId::convertLocaleToLanguage(rLocale));
-
-#ifdef WIN32
- // for WIN32 systems, correct the FontWidth if FontScaling is used
- if(bFontIsScaled && nHeight > 0)
- {
- const FontMetric aUnscaledFontMetric(Application::GetDefaultDevice()->GetFontMetric(aRetval));
-
- if(aUnscaledFontMetric.GetWidth() > 0)
- {
- const double fScaleFactor((double)nWidth / (double)nHeight);
- const sal_uInt32 nScaledWidth(basegfx::fround((double)aUnscaledFontMetric.GetWidth() * fScaleFactor));
- aRetval.SetWidth(nScaledWidth);
- }
- }
-#endif
- // handle FontRotation (if defined)
- if(!basegfx::fTools::equalZero(fFontRotation))
- {
- sal_Int16 aRotate10th((sal_Int16)(fFontRotation * (-1800.0/F_PI)));
- aRetval.SetOrientation(aRotate10th % 3600);
- }
-
- return aRetval;
- }
-
- attribute::FontAttribute getFontAttributeFromVclFont(
- basegfx::B2DVector& o_rSize,
- const Font& rFont,
- bool bRTL,
- bool bBiDiStrong)
- {
- const attribute::FontAttribute aRetval(
- rFont.GetName(),
- rFont.GetStyleName(),
- static_cast<sal_uInt16>(rFont.GetWeight()),
- RTL_TEXTENCODING_SYMBOL == rFont.GetCharSet(),
- rFont.IsVertical(),
- ITALIC_NONE != rFont.GetItalic(),
- PITCH_FIXED == rFont.GetPitch(),
- rFont.IsOutline(),
- bRTL,
- bBiDiStrong);
- // TODO: eKerning
-
- // set FontHeight and init to no FontScaling
- o_rSize.setY(rFont.GetSize().getHeight() > 0 ? rFont.GetSize().getHeight() : 0);
- o_rSize.setX(o_rSize.getY());
-
-#ifdef WIN32
- // for WIN32 systems, the FontScaling at the Font is detected by
- // checking that FontWidth != 0. When FontScaling is used, WIN32
- // needs to do extra stuff to detect the correct width (since it's
- // zero and not equal the font height) and it's relationship to
- // the height
- if(rFont.GetSize().getWidth() > 0)
- {
- Font aUnscaledFont(rFont);
- aUnscaledFont.SetWidth(0);
- const FontMetric aUnscaledFontMetric(Application::GetDefaultDevice()->GetFontMetric(aUnscaledFont));
-
- if(aUnscaledFontMetric.GetWidth() > 0)
- {
- const double fScaleFactor((double)rFont.GetSize().getWidth() / (double)aUnscaledFontMetric.GetWidth());
- o_rSize.setX(fScaleFactor * o_rSize.getY());
- }
- }
-#else
- // For non-WIN32 systems the detection is the same, but the value
- // is easier achieved since width == height is interpreted as no
- // scaling. Ergo, Width == 0 means width == height, and width != 0
- // means the scaling is in the direct relation of width to height
- if(rFont.GetSize().getWidth() > 0)
- {
- o_rSize.setX((double)rFont.GetSize().getWidth());
- }
-#endif
- return aRetval;
- }
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/textlineprimitive2d.cxx b/drawinglayer/source/primitive2d/textlineprimitive2d.cxx
deleted file mode 100644
index f04021c77f..0000000000
--- a/drawinglayer/source/primitive2d/textlineprimitive2d.cxx
+++ /dev/null
@@ -1,312 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/textlineprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/attribute/strokeattribute.hxx>
-#include <drawinglayer/attribute/lineattribute.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence TextLinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- Primitive2DSequence xRetval;
-
- if(TEXT_LINE_NONE != getTextLine())
- {
- bool bDoubleLine(false);
- bool bWaveLine(false);
- bool bBoldLine(false);
- const int* pDotDashArray(0);
- basegfx::B2DLineJoin eLineJoin(basegfx::B2DLINEJOIN_NONE);
- double fOffset(getOffset());
- double fHeight(getHeight());
-
- static const int aDottedArray[] = { 1, 1, 0}; // DOTTED LINE
- static const int aDotDashArray[] = { 1, 1, 4, 1, 0}; // DASHDOT
- static const int aDashDotDotArray[] = { 1, 1, 1, 1, 4, 1, 0}; // DASHDOTDOT
- static const int aDashedArray[] = { 5, 2, 0}; // DASHED LINE
- static const int aLongDashArray[] = { 7, 2, 0}; // LONGDASH
-
- // get decomposition
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
- getObjectTransformation().decompose(aScale, aTranslate, fRotate, fShearX);
-
- switch(getTextLine())
- {
- default: // case TEXT_LINE_SINGLE:
- {
- break;
- }
- case TEXT_LINE_DOUBLE:
- {
- bDoubleLine = true;
- break;
- }
- case TEXT_LINE_DOTTED:
- {
- pDotDashArray = aDottedArray;
- break;
- }
- case TEXT_LINE_DASH:
- {
- pDotDashArray = aDashedArray;
- break;
- }
- case TEXT_LINE_LONGDASH:
- {
- pDotDashArray = aLongDashArray;
- break;
- }
- case TEXT_LINE_DASHDOT:
- {
- pDotDashArray = aDotDashArray;
- break;
- }
- case TEXT_LINE_DASHDOTDOT:
- {
- pDotDashArray = aDashDotDotArray;
- break;
- }
- case TEXT_LINE_SMALLWAVE:
- {
- bWaveLine = true;
- break;
- }
- case TEXT_LINE_WAVE:
- {
- bWaveLine = true;
- break;
- }
- case TEXT_LINE_DOUBLEWAVE:
- {
- bDoubleLine = true;
- bWaveLine = true;
- break;
- }
- case TEXT_LINE_BOLD:
- {
- bBoldLine = true;
- break;
- }
- case TEXT_LINE_BOLDDOTTED:
- {
- bBoldLine = true;
- pDotDashArray = aDottedArray;
- break;
- }
- case TEXT_LINE_BOLDDASH:
- {
- bBoldLine = true;
- pDotDashArray = aDashedArray;
- break;
- }
- case TEXT_LINE_BOLDLONGDASH:
- {
- bBoldLine = true;
- pDotDashArray = aLongDashArray;
- break;
- }
- case TEXT_LINE_BOLDDASHDOT:
- {
- bBoldLine = true;
- pDotDashArray = aDotDashArray;
- break;
- }
- case TEXT_LINE_BOLDDASHDOTDOT:
- {
- bBoldLine = true;
- pDotDashArray = aDashDotDotArray;
- break;
- }
- case TEXT_LINE_BOLDWAVE:
- {
- bWaveLine = true;
- bBoldLine = true;
- break;
- }
- }
-
- if(bBoldLine)
- {
- fHeight *= 2.0;
- }
-
- if(bDoubleLine)
- {
- fOffset -= 0.50 * fHeight;
- fHeight *= 0.64;
- }
-
- if(bWaveLine)
- {
- eLineJoin = basegfx::B2DLINEJOIN_ROUND;
- fHeight *= 0.25;
- }
-
- // prepare Line and Stroke Attributes
- const attribute::LineAttribute aLineAttribute(getLineColor(), fHeight, eLineJoin);
- attribute::StrokeAttribute aStrokeAttribute;
-
- if(pDotDashArray)
- {
- ::std::vector< double > aDoubleArray;
-
- for(const int* p = pDotDashArray; *p; ++p)
- {
- aDoubleArray.push_back((double)(*p) * fHeight);
- }
-
- aStrokeAttribute = attribute::StrokeAttribute(aDoubleArray);
- }
-
- // create base polygon and new primitive
- basegfx::B2DPolygon aLine;
- Primitive2DReference aNewPrimitive;
-
- aLine.append(basegfx::B2DPoint(0.0, fOffset));
- aLine.append(basegfx::B2DPoint(getWidth(), fOffset));
-
- const basegfx::B2DHomMatrix aUnscaledTransform(
- basegfx::tools::createShearXRotateTranslateB2DHomMatrix(
- fShearX, fRotate, aTranslate));
-
- aLine.transform(aUnscaledTransform);
-
- if(bWaveLine)
- {
- double fWaveWidth(10.6 * fHeight);
-
- if(TEXT_LINE_SMALLWAVE == getTextLine())
- {
- fWaveWidth *= 0.7;
- }
- else if(TEXT_LINE_WAVE == getTextLine())
- {
- // extra multiply to get the same WaveWidth as with the bold version
- fWaveWidth *= 2.0;
- }
-
- aNewPrimitive = Primitive2DReference(new PolygonWavePrimitive2D(aLine, aLineAttribute, aStrokeAttribute, fWaveWidth, fWaveWidth * 0.5));
- }
- else
- {
- aNewPrimitive = Primitive2DReference(new PolygonStrokePrimitive2D(aLine, aLineAttribute, aStrokeAttribute));
- }
-
- // add primitive
- appendPrimitive2DReferenceToPrimitive2DSequence(xRetval, aNewPrimitive);
-
- if(bDoubleLine)
- {
- // double line, create 2nd primitive with offset using TransformPrimitive based on
- // already created NewPrimitive
- double fLineDist(2.3 * fHeight);
-
- if(bWaveLine)
- {
- fLineDist = 6.3 * fHeight;
- }
-
- // move base point of text to 0.0 and de-rotate
- basegfx::B2DHomMatrix aTransform(basegfx::tools::createTranslateB2DHomMatrix(
- -aTranslate.getX(), -aTranslate.getY()));
- aTransform.rotate(-fRotate);
-
- // translate in Y by offset
- aTransform.translate(0.0, fLineDist);
-
- // move back and rotate
- aTransform.rotate(fRotate);
- aTransform.translate(aTranslate.getX(), aTranslate.getY());
-
- // add transform primitive
- const Primitive2DSequence aContent(&aNewPrimitive, 1);
- appendPrimitive2DReferenceToPrimitive2DSequence(xRetval,
- Primitive2DReference(new TransformPrimitive2D(aTransform, aContent)));
- }
- }
-
- return xRetval;
- }
-
- TextLinePrimitive2D::TextLinePrimitive2D(
- const basegfx::B2DHomMatrix& rObjectTransformation,
- double fWidth,
- double fOffset,
- double fHeight,
- TextLine eTextLine,
- const basegfx::BColor& rLineColor)
- : BufferedDecompositionPrimitive2D(),
- maObjectTransformation(rObjectTransformation),
- mfWidth(fWidth),
- mfOffset(fOffset),
- mfHeight(fHeight),
- meTextLine(eTextLine),
- maLineColor(rLineColor)
- {
- }
-
- bool TextLinePrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const TextLinePrimitive2D& rCompare = (TextLinePrimitive2D&)rPrimitive;
-
- return (getObjectTransformation() == rCompare.getObjectTransformation()
- && getWidth() == rCompare.getWidth()
- && getOffset() == rCompare.getOffset()
- && getHeight() == rCompare.getHeight()
- && getTextLine() == rCompare.getTextLine()
- && getLineColor() == rCompare.getLineColor());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextLinePrimitive2D, PRIMITIVE2D_ID_TEXTLINEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/textprimitive2d.cxx b/drawinglayer/source/primitive2d/textprimitive2d.cxx
deleted file mode 100644
index fc5296e7d2..0000000000
--- a/drawinglayer/source/primitive2d/textprimitive2d.cxx
+++ /dev/null
@@ -1,348 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/textprimitive2d.hxx>
-#include <drawinglayer/primitive2d/textlayoutdevice.hxx>
-#include <basegfx/polygon/b2dpolypolygon.hxx>
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/primitive2d/texteffectprimitive2d.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace
-{
- // adapts fontScale for usage with TextLayouter. Input is rScale which is the extracted
- // scale from a text transformation. A copy is modified so that it contains only positive
- // scalings and XY-equal scalings to allow to get a non-X-scaled Vcl-Font for TextLayouter.
- // rScale is adapted accordingly to contain the corrected scale which would need to be
- // applied to e.g. outlines received from TextLayouter under usage of fontScale. This
- // includes Y-Scale, X-Scale-correction and mirrorings.
- basegfx::B2DVector getCorrectedScaleAndFontScale(basegfx::B2DVector& rScale)
- {
- // copy input value
- basegfx::B2DVector aFontScale(rScale);
-
- // correct FontHeight settings
- if(basegfx::fTools::equalZero(aFontScale.getY()))
- {
- // no font height; choose one and adapt scale to get back to original scaling
- static double fDefaultFontScale(100.0);
- rScale.setY(1.0 / fDefaultFontScale);
- aFontScale.setY(fDefaultFontScale);
- }
- else if(basegfx::fTools::less(aFontScale.getY(), 0.0))
- {
- // negative font height; invert and adapt scale to get back to original scaling
- aFontScale.setY(-aFontScale.getY());
- rScale.setY(-1.0);
- }
- else
- {
- // positive font height; adapt scale; scaling will be part of the polygons
- rScale.setY(1.0);
- }
-
- // correct FontWidth settings
- if(basegfx::fTools::equal(aFontScale.getX(), aFontScale.getY()))
- {
- // no FontScale, adapt scale
- rScale.setX(1.0);
- }
- else
- {
- // If FontScale is used, force to no FontScale to get a non-scaled VCL font.
- // Adapt scaling in X accordingly.
- rScale.setX(aFontScale.getX() / aFontScale.getY());
- aFontScale.setX(aFontScale.getY());
- }
-
- return aFontScale;
- }
-} // end of anonymous namespace
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- void TextSimplePortionPrimitive2D::getTextOutlinesAndTransformation(basegfx::B2DPolyPolygonVector& rTarget, basegfx::B2DHomMatrix& rTransformation) const
- {
- if(getTextLength())
- {
- // decompose object transformation to single values
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
-
- // if decomposition returns false, create no geometry since e.g. scaling may
- // be zero
- if(getTextTransform().decompose(aScale, aTranslate, fRotate, fShearX))
- {
- // handle special case: If scale is negative in (x,y) (3rd quadrant), it can
- // be expressed as rotation by PI
- if(basegfx::fTools::less(aScale.getX(), 0.0) && basegfx::fTools::less(aScale.getY(), 0.0))
- {
- aScale = basegfx::absolute(aScale);
- fRotate += F_PI;
- }
-
- // for the TextLayouterDevice, it is necessary to have a scaling representing
- // the font size. Since we want to extract polygons here, it is okay to
- // work just with scaling and to ignore shear, rotation and translation,
- // all that can be applied to the polygons later
- const basegfx::B2DVector aFontScale(getCorrectedScaleAndFontScale(aScale));
-
- // prepare textlayoutdevice
- TextLayouterDevice aTextLayouter;
- aTextLayouter.setFontAttribute(
- getFontAttribute(),
- aFontScale.getX(),
- aFontScale.getY(),
- getLocale());
-
- // When getting outlines from stretched text (aScale.getX() != 1.0) it
- // is necessary to inverse-scale the DXArray (if used) to not get the
- // outlines already aligned to given, but wrong DXArray
- if(getDXArray().size() && !basegfx::fTools::equal(aScale.getX(), 1.0))
- {
- ::std::vector< double > aScaledDXArray = getDXArray();
- const double fDXArrayScale(1.0 / aScale.getX());
-
- for(sal_uInt32 a(0); a < aScaledDXArray.size(); a++)
- {
- aScaledDXArray[a] *= fDXArrayScale;
- }
-
- // get the text outlines
- aTextLayouter.getTextOutlines(
- rTarget,
- getText(),
- getTextPosition(),
- getTextLength(),
- aScaledDXArray);
- }
- else
- {
- // get the text outlines
- aTextLayouter.getTextOutlines(
- rTarget,
- getText(),
- getTextPosition(),
- getTextLength(),
- getDXArray());
- }
-
- // create primitives for the outlines
- const sal_uInt32 nCount(rTarget.size());
-
- if(nCount)
- {
- // prepare object transformation for polygons
- rTransformation = basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix(
- aScale, fShearX, fRotate, aTranslate);
- }
- }
- }
- }
-
- Primitive2DSequence TextSimplePortionPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- Primitive2DSequence aRetval;
-
- if(getTextLength())
- {
- basegfx::B2DPolyPolygonVector aB2DPolyPolyVector;
- basegfx::B2DHomMatrix aPolygonTransform;
-
- // get text outlines and their object transformation
- getTextOutlinesAndTransformation(aB2DPolyPolyVector, aPolygonTransform);
-
- // create primitives for the outlines
- const sal_uInt32 nCount(aB2DPolyPolyVector.size());
-
- if(nCount)
- {
- // alloc space for the primitives
- aRetval.realloc(nCount);
-
- // color-filled polypolygons
- for(sal_uInt32 a(0L); a < nCount; a++)
- {
- // prepare polypolygon
- basegfx::B2DPolyPolygon& rPolyPolygon = aB2DPolyPolyVector[a];
- rPolyPolygon.transform(aPolygonTransform);
- aRetval[a] = new PolyPolygonColorPrimitive2D(rPolyPolygon, getFontColor());
- }
-
- if(getFontAttribute().getOutline())
- {
- // decompose polygon transformation to single values
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
- aPolygonTransform.decompose(aScale, aTranslate, fRotate, fShearX);
-
- // create outline text effect with current content and replace
- Primitive2DReference aNewTextEffect(new TextEffectPrimitive2D(
- aRetval,
- aTranslate,
- fRotate,
- TEXTEFFECTSTYLE2D_OUTLINE));
-
- aRetval = Primitive2DSequence(&aNewTextEffect, 1);
- }
- }
- }
-
- return aRetval;
- }
-
- TextSimplePortionPrimitive2D::TextSimplePortionPrimitive2D(
- const basegfx::B2DHomMatrix& rNewTransform,
- const String& rText,
- xub_StrLen aTextPosition,
- xub_StrLen aTextLength,
- const ::std::vector< double >& rDXArray,
- const attribute::FontAttribute& rFontAttribute,
- const ::com::sun::star::lang::Locale& rLocale,
- const basegfx::BColor& rFontColor,
- bool bFilled,
- long nWidthToFill)
- : BufferedDecompositionPrimitive2D(),
- maTextTransform(rNewTransform),
- maText(rText),
- maTextPosition(aTextPosition),
- maTextLength(aTextLength),
- maDXArray(rDXArray),
- maFontAttribute(rFontAttribute),
- maLocale(rLocale),
- maFontColor(rFontColor),
- maB2DRange(),
- mbFilled(bFilled),
- mnWidthToFill(nWidthToFill)
- {
-#if OSL_DEBUG_LEVEL > 0
- const xub_StrLen aStringLength(getText().Len());
- OSL_ENSURE(aStringLength >= getTextPosition() && aStringLength >= getTextPosition() + getTextLength(),
- "TextSimplePortionPrimitive2D with text out of range (!)");
-#endif
- }
-
- bool LocalesAreEqual(const ::com::sun::star::lang::Locale& rA, const ::com::sun::star::lang::Locale& rB)
- {
- return (rA.Language == rB.Language
- && rA.Country == rB.Country
- && rA.Variant == rB.Variant);
- }
-
- bool TextSimplePortionPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const TextSimplePortionPrimitive2D& rCompare = (TextSimplePortionPrimitive2D&)rPrimitive;
-
- return (getTextTransform() == rCompare.getTextTransform()
- && getText() == rCompare.getText()
- && getTextPosition() == rCompare.getTextPosition()
- && getTextLength() == rCompare.getTextLength()
- && getDXArray() == rCompare.getDXArray()
- && getFontAttribute() == rCompare.getFontAttribute()
- && LocalesAreEqual(getLocale(), rCompare.getLocale())
- && getFontColor() == rCompare.getFontColor()
- && mbFilled == rCompare.mbFilled
- && mnWidthToFill == rCompare.mnWidthToFill);
- }
-
- return false;
- }
-
- basegfx::B2DRange TextSimplePortionPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- if(maB2DRange.isEmpty() && getTextLength())
- {
- // get TextBoundRect as base size
- // decompose object transformation to single values
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
-
- if(getTextTransform().decompose(aScale, aTranslate, fRotate, fShearX))
- {
- // for the TextLayouterDevice, it is necessary to have a scaling representing
- // the font size. Since we want to extract polygons here, it is okay to
- // work just with scaling and to ignore shear, rotation and translation,
- // all that can be applied to the polygons later
- const basegfx::B2DVector aFontScale(getCorrectedScaleAndFontScale(aScale));
-
- // prepare textlayoutdevice
- TextLayouterDevice aTextLayouter;
- aTextLayouter.setFontAttribute(
- getFontAttribute(),
- aFontScale.getX(),
- aFontScale.getY(),
- getLocale());
-
- // get basic text range
- basegfx::B2DRange aNewRange(aTextLayouter.getTextBoundRect(getText(), getTextPosition(), getTextLength()));
-
- // #i104432#, #i102556# take empty results into account
- if(!aNewRange.isEmpty())
- {
- // prepare object transformation for range
- const basegfx::B2DHomMatrix aRangeTransformation(basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix(
- aScale, fShearX, fRotate, aTranslate));
-
- // apply range transformation to it
- aNewRange.transform(aRangeTransformation);
-
- // assign to buffered value
- const_cast< TextSimplePortionPrimitive2D* >(this)->maB2DRange = aNewRange;
- }
- }
- }
-
- return maB2DRange;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextSimplePortionPrimitive2D, PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/textstrikeoutprimitive2d.cxx b/drawinglayer/source/primitive2d/textstrikeoutprimitive2d.cxx
deleted file mode 100644
index c278ba7494..0000000000
--- a/drawinglayer/source/primitive2d/textstrikeoutprimitive2d.cxx
+++ /dev/null
@@ -1,289 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx>
-#include <drawinglayer/primitive2d/textlayoutdevice.hxx>
-#include <drawinglayer/primitive2d/textprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-#include <drawinglayer/attribute/lineattribute.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- BaseTextStrikeoutPrimitive2D::BaseTextStrikeoutPrimitive2D(
- const basegfx::B2DHomMatrix& rObjectTransformation,
- double fWidth,
- const basegfx::BColor& rFontColor)
- : BufferedDecompositionPrimitive2D(),
- maObjectTransformation(rObjectTransformation),
- mfWidth(fWidth),
- maFontColor(rFontColor)
- {
- }
-
- bool BaseTextStrikeoutPrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const BaseTextStrikeoutPrimitive2D& rCompare = (BaseTextStrikeoutPrimitive2D&)rPrimitive;
-
- return (getObjectTransformation() == rCompare.getObjectTransformation()
- && getWidth() == rCompare.getWidth()
- && getFontColor() == rCompare.getFontColor());
- }
-
- return false;
- }
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence TextCharacterStrikeoutPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // strikeout with character
- const String aSingleCharString(getStrikeoutChar());
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
-
- // get decomposition
- getObjectTransformation().decompose(aScale, aTranslate, fRotate, fShearX);
-
- // prepare TextLayouter
- TextLayouterDevice aTextLayouter;
-
- aTextLayouter.setFontAttribute(
- getFontAttribute(),
- aScale.getX(),
- aScale.getY(),
- getLocale());
-
- const double fStrikeCharWidth(aTextLayouter.getTextWidth(aSingleCharString, 0, 1));
- const double fStrikeCharCount(fabs(getWidth()/fStrikeCharWidth));
- const sal_uInt32 nStrikeCharCount(static_cast< sal_uInt32 >(fStrikeCharCount + 0.5));
- std::vector<double> aDXArray(nStrikeCharCount);
- String aStrikeoutString;
-
- for(sal_uInt32 a(0); a < nStrikeCharCount; a++)
- {
- aStrikeoutString += aSingleCharString;
- aDXArray[a] = (a + 1) * fStrikeCharWidth;
- }
-
- Primitive2DReference xReference(
- new TextSimplePortionPrimitive2D(
- getObjectTransformation(),
- aStrikeoutString,
- 0,
- aStrikeoutString.Len(),
- aDXArray,
- getFontAttribute(),
- getLocale(),
- getFontColor()));
-
- return Primitive2DSequence(&xReference, 1);
- }
-
- TextCharacterStrikeoutPrimitive2D::TextCharacterStrikeoutPrimitive2D(
- const basegfx::B2DHomMatrix& rObjectTransformation,
- double fWidth,
- const basegfx::BColor& rFontColor,
- sal_Unicode aStrikeoutChar,
- const attribute::FontAttribute& rFontAttribute,
- const ::com::sun::star::lang::Locale& rLocale)
- : BaseTextStrikeoutPrimitive2D(rObjectTransformation, fWidth, rFontColor),
- maStrikeoutChar(aStrikeoutChar),
- maFontAttribute(rFontAttribute),
- maLocale(rLocale)
- {
- }
-
- bool TextCharacterStrikeoutPrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const
- {
- if(BaseTextStrikeoutPrimitive2D::operator==(rPrimitive))
- {
- const TextCharacterStrikeoutPrimitive2D& rCompare = (TextCharacterStrikeoutPrimitive2D&)rPrimitive;
-
- return (getStrikeoutChar() == rCompare.getStrikeoutChar()
- && getFontAttribute() == rCompare.getFontAttribute()
- && LocalesAreEqual(getLocale(), rCompare.getLocale()));
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextCharacterStrikeoutPrimitive2D, PRIMITIVE2D_ID_TEXTCHARACTERSTRIKEOUTPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence TextGeometryStrikeoutPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- OSL_ENSURE(TEXT_STRIKEOUT_SLASH != getTextStrikeout() && TEXT_STRIKEOUT_X != getTextStrikeout(),
- "Wrong TEXT_STRIKEOUT type; a TextCharacterStrikeoutPrimitive2D should be used (!)");
-
- // strikeout with geometry
- double fStrikeoutHeight(getHeight());
- double fStrikeoutOffset(getOffset());
- bool bDoubleLine(false);
-
- // get decomposition
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
- getObjectTransformation().decompose(aScale, aTranslate, fRotate, fShearX);
-
- // set line attribute
- switch(getTextStrikeout())
- {
- default : // case primitive2d::TEXT_STRIKEOUT_SINGLE:
- {
- break;
- }
- case primitive2d::TEXT_STRIKEOUT_DOUBLE:
- {
- bDoubleLine = true;
- break;
- }
- case primitive2d::TEXT_STRIKEOUT_BOLD:
- {
- fStrikeoutHeight *= 2.0;
- break;
- }
- }
-
- if(bDoubleLine)
- {
- fStrikeoutOffset -= 0.50 * fStrikeoutHeight;
- fStrikeoutHeight *= 0.64;
- }
-
- // create base polygon and new primitive
- basegfx::B2DPolygon aStrikeoutLine;
-
- aStrikeoutLine.append(basegfx::B2DPoint(0.0, -fStrikeoutOffset));
- aStrikeoutLine.append(basegfx::B2DPoint(getWidth(), -fStrikeoutOffset));
-
- const basegfx::B2DHomMatrix aUnscaledTransform(
- basegfx::tools::createShearXRotateTranslateB2DHomMatrix(
- fShearX, fRotate, aTranslate));
-
- aStrikeoutLine.transform(aUnscaledTransform);
-
- // add primitive
- const attribute::LineAttribute aLineAttribute(getFontColor(), fStrikeoutHeight, basegfx::B2DLINEJOIN_NONE);
- Primitive2DSequence xRetval(1);
- xRetval[0] = Primitive2DReference(new PolygonStrokePrimitive2D(aStrikeoutLine, aLineAttribute));
-
- if(bDoubleLine)
- {
- // double line, create 2nd primitive with offset using TransformPrimitive based on
- // already created NewPrimitive
- const double fLineDist(2.0 * fStrikeoutHeight);
-
- // move base point of text to 0.0 and de-rotate
- basegfx::B2DHomMatrix aTransform(basegfx::tools::createTranslateB2DHomMatrix(
- -aTranslate.getX(), -aTranslate.getY()));
- aTransform.rotate(-fRotate);
-
- // translate in Y by offset
- aTransform.translate(0.0, -fLineDist);
-
- // move back and rotate
- aTransform.rotate(fRotate);
- aTransform.translate(aTranslate.getX(), aTranslate.getY());
-
- // add transform primitive
- appendPrimitive2DReferenceToPrimitive2DSequence(xRetval,
- Primitive2DReference(
- new TransformPrimitive2D(
- aTransform,
- xRetval)));
- }
-
- return xRetval;
- }
-
- TextGeometryStrikeoutPrimitive2D::TextGeometryStrikeoutPrimitive2D(
- const basegfx::B2DHomMatrix& rObjectTransformation,
- double fWidth,
- const basegfx::BColor& rFontColor,
- double fHeight,
- double fOffset,
- TextStrikeout eTextStrikeout)
- : BaseTextStrikeoutPrimitive2D(rObjectTransformation, fWidth, rFontColor),
- mfHeight(fHeight),
- mfOffset(fOffset),
- meTextStrikeout(eTextStrikeout)
- {
- }
-
- bool TextGeometryStrikeoutPrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const
- {
- if(BaseTextStrikeoutPrimitive2D::operator==(rPrimitive))
- {
- const TextGeometryStrikeoutPrimitive2D& rCompare = (TextGeometryStrikeoutPrimitive2D&)rPrimitive;
-
- return (getHeight() == rCompare.getHeight()
- && getOffset() == rCompare.getOffset()
- && getTextStrikeout() == rCompare.getTextStrikeout());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TextGeometryStrikeoutPrimitive2D, PRIMITIVE2D_ID_TEXTGEOMETRYSTRIKEOUTPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/transformprimitive2d.cxx b/drawinglayer/source/primitive2d/transformprimitive2d.cxx
deleted file mode 100644
index f8ad7e2e36..0000000000
--- a/drawinglayer/source/primitive2d/transformprimitive2d.cxx
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- TransformPrimitive2D::TransformPrimitive2D(
- const basegfx::B2DHomMatrix& rTransformation,
- const Primitive2DSequence& rChildren)
- : GroupPrimitive2D(rChildren),
- maTransformation(rTransformation)
- {
- }
-
- bool TransformPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(GroupPrimitive2D::operator==(rPrimitive))
- {
- const TransformPrimitive2D& rCompare = static_cast< const TransformPrimitive2D& >(rPrimitive);
-
- return (getTransformation() == rCompare.getTransformation());
- }
-
- return false;
- }
-
- basegfx::B2DRange TransformPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- basegfx::B2DRange aRetval(getB2DRangeFromPrimitive2DSequence(getChildren(), rViewInformation));
- aRetval.transform(getTransformation());
- return aRetval;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TransformPrimitive2D, PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/transparenceprimitive2d.cxx b/drawinglayer/source/primitive2d/transparenceprimitive2d.cxx
deleted file mode 100644
index c62699e070..0000000000
--- a/drawinglayer/source/primitive2d/transparenceprimitive2d.cxx
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * The Contents of this file are made available subject to
- * the terms of GNU Lesser General Public License Version 2.1.
- *
- *
- * GNU Lesser General Public License Version 2.1
- * =============================================
- * Copyright 2005 by Sun Microsystems, Inc.
- * 901 San Antonio Road, Palo Alto, CA 94303, USA
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software Foundation.
- *
- * This library 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 for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- TransparencePrimitive2D::TransparencePrimitive2D(
- const Primitive2DSequence& rChildren,
- const Primitive2DSequence& rTransparence)
- : GroupPrimitive2D(rChildren),
- maTransparence(rTransparence)
- {
- }
-
- bool TransparencePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(GroupPrimitive2D::operator==(rPrimitive))
- {
- const TransparencePrimitive2D& rCompare = (TransparencePrimitive2D&)rPrimitive;
-
- return (getTransparence() == rCompare.getTransparence());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(TransparencePrimitive2D, PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D)
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/unifiedtransparenceprimitive2d.cxx b/drawinglayer/source/primitive2d/unifiedtransparenceprimitive2d.cxx
deleted file mode 100644
index cedb90b188..0000000000
--- a/drawinglayer/source/primitive2d/unifiedtransparenceprimitive2d.cxx
+++ /dev/null
@@ -1,133 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * The Contents of this file are made available subject to
- * the terms of GNU Lesser General Public License Version 2.1.
- *
- *
- * GNU Lesser General Public License Version 2.1
- * =============================================
- * Copyright 2005 by Sun Microsystems, Inc.
- * 901 San Antonio Road, Palo Alto, CA 94303, USA
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software Foundation.
- *
- * This library 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 for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/color/bcolor.hxx>
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-using namespace com::sun::star;
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- UnifiedTransparencePrimitive2D::UnifiedTransparencePrimitive2D(
- const Primitive2DSequence& rChildren,
- double fTransparence)
- : GroupPrimitive2D(rChildren),
- mfTransparence(fTransparence)
- {
- }
-
- bool UnifiedTransparencePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(GroupPrimitive2D::operator==(rPrimitive))
- {
- const UnifiedTransparencePrimitive2D& rCompare = (UnifiedTransparencePrimitive2D&)rPrimitive;
-
- return (getTransparence() == rCompare.getTransparence());
- }
-
- return false;
- }
-
- basegfx::B2DRange UnifiedTransparencePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- // do not use the fallback to decomposition here since for a correct BoundRect we also
- // need invisible (1.0 == getTransparence()) geometry; these would be deleted in the decomposition
- return getB2DRangeFromPrimitive2DSequence(getChildren(), rViewInformation);
- }
-
- Primitive2DSequence UnifiedTransparencePrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- if(0.0 == getTransparence())
- {
- // no transparence used, so just use the content
- return getChildren();
- }
- else if(getTransparence() > 0.0 && getTransparence() < 1.0)
- {
- // The idea is to create a TransparencePrimitive2D with transparent content using a fill color
- // corresponding to the transparence value. Problem is that in most systems, the right
- // and bottom pixel array is not filled when filling polygons, thus this would not
- // always produce a complete transparent bitmap. There are some solutions:
- //
- // - Grow the used polygon range by one discrete unit in X and Y. This
- // will make the decomposition view-dependent.
- //
- // - For all filled polygon renderings, dra wthe polygon outline extra. This
- // would lead to unwanted side effects when using concatenated polygons.
- //
- // - At this decomposition, add a filled polygon and a hairline polygon. This
- // solution stays view-independent.
- //
- // I will take the last one here. The small overhead of two primitives will only be
- // used when UnifiedTransparencePrimitive2D is not handled directly.
- const basegfx::B2DRange aPolygonRange(getB2DRangeFromPrimitive2DSequence(getChildren(), rViewInformation));
- const basegfx::B2DPolygon aPolygon(basegfx::tools::createPolygonFromRect(aPolygonRange));
- const basegfx::BColor aGray(getTransparence(), getTransparence(), getTransparence());
- Primitive2DSequence aTransparenceContent(2);
-
- aTransparenceContent[0] = Primitive2DReference(new PolyPolygonColorPrimitive2D(basegfx::B2DPolyPolygon(aPolygon), aGray));
- aTransparenceContent[1] = Primitive2DReference(new PolygonHairlinePrimitive2D(aPolygon, aGray));
-
- // create sub-transparence group with a gray-colored rectangular fill polygon
- const Primitive2DReference xRefB(new TransparencePrimitive2D(getChildren(), aTransparenceContent));
- return Primitive2DSequence(&xRefB, 1L);
- }
- else
- {
- // completely transparent or invalid definition, add nothing
- return Primitive2DSequence();
- }
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(UnifiedTransparencePrimitive2D, PRIMITIVE2D_ID_UNIFIEDTRANSPARENCEPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/wallpaperprimitive2d.cxx b/drawinglayer/source/primitive2d/wallpaperprimitive2d.cxx
deleted file mode 100644
index 625cd5db13..0000000000
--- a/drawinglayer/source/primitive2d/wallpaperprimitive2d.cxx
+++ /dev/null
@@ -1,272 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/wallpaperprimitive2d.hxx>
-#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <drawinglayer/primitive2d/maskprimitive2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence WallpaperBitmapPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- Primitive2DSequence aRetval;
-
- if(!getLocalObjectRange().isEmpty() && !getBitmapEx().IsEmpty())
- {
- // get bitmap PIXEL size
- const Size& rPixelSize = getBitmapEx().GetSizePixel();
-
- if(rPixelSize.Width() > 0 && rPixelSize.Height() > 0)
- {
- if(WALLPAPER_SCALE == getWallpaperStyle())
- {
- // shortcut for scale; use simple BitmapPrimitive2D
- basegfx::B2DHomMatrix aObjectTransform;
-
- aObjectTransform.set(0, 0, getLocalObjectRange().getWidth());
- aObjectTransform.set(1, 1, getLocalObjectRange().getHeight());
- aObjectTransform.set(0, 2, getLocalObjectRange().getMinX());
- aObjectTransform.set(1, 2, getLocalObjectRange().getMinY());
-
- Primitive2DReference xReference(
- new BitmapPrimitive2D(
- getBitmapEx(),
- aObjectTransform));
-
- aRetval = Primitive2DSequence(&xReference, 1);
- }
- else
- {
- // transform to logic size
- basegfx::B2DHomMatrix aInverseViewTransformation(getViewTransformation());
- aInverseViewTransformation.invert();
- basegfx::B2DVector aLogicSize(rPixelSize.Width(), rPixelSize.Height());
- aLogicSize = aInverseViewTransformation * aLogicSize;
-
- // apply laout
- basegfx::B2DPoint aTargetTopLeft(getLocalObjectRange().getMinimum());
- bool bUseTargetTopLeft(true);
- bool bNeedsClipping(false);
-
- switch(getWallpaperStyle())
- {
- default: //case WALLPAPER_TILE :, also WALLPAPER_NULL and WALLPAPER_APPLICATIONGRADIENT
- {
- bUseTargetTopLeft = false;
- break;
- }
- case WALLPAPER_SCALE :
- {
- // handled by shortcut above
- break;
- }
- case WALLPAPER_TOPLEFT :
- {
- // nothing to do
- break;
- }
- case WALLPAPER_TOP :
- {
- const basegfx::B2DPoint aCenter(getLocalObjectRange().getCenter());
- aTargetTopLeft.setX(aCenter.getX() - (aLogicSize.getX() * 0.5));
- break;
- }
- case WALLPAPER_TOPRIGHT :
- {
- aTargetTopLeft.setX(getLocalObjectRange().getMaxX() - aLogicSize.getX());
- break;
- }
- case WALLPAPER_LEFT :
- {
- const basegfx::B2DPoint aCenter(getLocalObjectRange().getCenter());
- aTargetTopLeft.setY(aCenter.getY() - (aLogicSize.getY() * 0.5));
- break;
- }
- case WALLPAPER_CENTER :
- {
- const basegfx::B2DPoint aCenter(getLocalObjectRange().getCenter());
- aTargetTopLeft = aCenter - (aLogicSize * 0.5);
- break;
- }
- case WALLPAPER_RIGHT :
- {
- const basegfx::B2DPoint aCenter(getLocalObjectRange().getCenter());
- aTargetTopLeft.setX(getLocalObjectRange().getMaxX() - aLogicSize.getX());
- aTargetTopLeft.setY(aCenter.getY() - (aLogicSize.getY() * 0.5));
- break;
- }
- case WALLPAPER_BOTTOMLEFT :
- {
- aTargetTopLeft.setY(getLocalObjectRange().getMaxY() - aLogicSize.getY());
- break;
- }
- case WALLPAPER_BOTTOM :
- {
- const basegfx::B2DPoint aCenter(getLocalObjectRange().getCenter());
- aTargetTopLeft.setX(aCenter.getX() - (aLogicSize.getX() * 0.5));
- aTargetTopLeft.setY(getLocalObjectRange().getMaxY() - aLogicSize.getY());
- break;
- }
- case WALLPAPER_BOTTOMRIGHT :
- {
- aTargetTopLeft = getLocalObjectRange().getMaximum() - aLogicSize;
- break;
- }
- }
-
- if(bUseTargetTopLeft)
- {
- // fill target range
- const basegfx::B2DRange aTargetRange(aTargetTopLeft, aTargetTopLeft + aLogicSize);
-
- // create aligned, single BitmapPrimitive2D
- basegfx::B2DHomMatrix aObjectTransform;
-
- aObjectTransform.set(0, 0, aTargetRange.getWidth());
- aObjectTransform.set(1, 1, aTargetRange.getHeight());
- aObjectTransform.set(0, 2, aTargetRange.getMinX());
- aObjectTransform.set(1, 2, aTargetRange.getMinY());
-
- Primitive2DReference xReference(
- new BitmapPrimitive2D(
- getBitmapEx(),
- aObjectTransform));
- aRetval = Primitive2DSequence(&xReference, 1);
-
- // clip when not completely inside object range
- bNeedsClipping = !getLocalObjectRange().isInside(aTargetRange);
- }
- else
- {
- // WALLPAPER_TILE, WALLPAPER_NULL, WALLPAPER_APPLICATIONGRADIENT
- // convert to relative positions
- const basegfx::B2DVector aRelativeSize(
- aLogicSize.getX() / (getLocalObjectRange().getWidth() ? getLocalObjectRange().getWidth() : 1.0),
- aLogicSize.getY() / (getLocalObjectRange().getHeight() ? getLocalObjectRange().getHeight() : 1.0));
- basegfx::B2DPoint aRelativeTopLeft(0.0, 0.0);
-
- if(WALLPAPER_TILE != getWallpaperStyle())
- {
- aRelativeTopLeft.setX(0.5 - aRelativeSize.getX());
- aRelativeTopLeft.setY(0.5 - aRelativeSize.getY());
- }
-
- // prepare FillBitmapAttribute
- const attribute::FillBitmapAttribute aFillBitmapAttribute(
- getBitmapEx(),
- aRelativeTopLeft,
- aRelativeSize,
- true);
-
- // create ObjectTransform
- basegfx::B2DHomMatrix aObjectTransform;
-
- aObjectTransform.set(0, 0, getLocalObjectRange().getWidth());
- aObjectTransform.set(1, 1, getLocalObjectRange().getHeight());
- aObjectTransform.set(0, 2, getLocalObjectRange().getMinX());
- aObjectTransform.set(1, 2, getLocalObjectRange().getMinY());
-
- // create FillBitmapPrimitive
- const drawinglayer::primitive2d::Primitive2DReference xFillBitmap(
- new drawinglayer::primitive2d::FillBitmapPrimitive2D(
- aObjectTransform,
- aFillBitmapAttribute));
- aRetval = Primitive2DSequence(&xFillBitmap, 1);
-
- // always embed tiled fill to clipping
- bNeedsClipping = true;
- }
-
- if(bNeedsClipping)
- {
- // embed to clipping; this is necessary for tiled fills
- const basegfx::B2DPolyPolygon aPolyPolygon(
- basegfx::tools::createPolygonFromRect(getLocalObjectRange()));
- const drawinglayer::primitive2d::Primitive2DReference xClippedFill(
- new drawinglayer::primitive2d::MaskPrimitive2D(
- aPolyPolygon,
- aRetval));
- aRetval = Primitive2DSequence(&xClippedFill, 1);
- }
- }
- }
- }
-
- return aRetval;
- }
-
- WallpaperBitmapPrimitive2D::WallpaperBitmapPrimitive2D(
- const basegfx::B2DRange& rObjectRange,
- const BitmapEx& rBitmapEx,
- WallpaperStyle eWallpaperStyle)
- : ViewTransformationDependentPrimitive2D(),
- maObjectRange(rObjectRange),
- maBitmapEx(rBitmapEx),
- meWallpaperStyle(eWallpaperStyle)
- {
- }
-
- bool WallpaperBitmapPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(ViewTransformationDependentPrimitive2D::operator==(rPrimitive))
- {
- const WallpaperBitmapPrimitive2D& rCompare = (WallpaperBitmapPrimitive2D&)rPrimitive;
-
- return (getLocalObjectRange() == rCompare.getLocalObjectRange()
- && getBitmapEx() == rCompare.getBitmapEx()
- && getWallpaperStyle() == rCompare.getWallpaperStyle());
- }
-
- return false;
- }
-
- basegfx::B2DRange WallpaperBitmapPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- return getLocalObjectRange();
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(WallpaperBitmapPrimitive2D, PRIMITIVE2D_ID_WALLPAPERBITMAPPRIMITIVE2D)
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/primitive2d/wrongspellprimitive2d.cxx b/drawinglayer/source/primitive2d/wrongspellprimitive2d.cxx
deleted file mode 100644
index 2e38ed8bed..0000000000
--- a/drawinglayer/source/primitive2d/wrongspellprimitive2d.cxx
+++ /dev/null
@@ -1,125 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_drawinglayer.hxx"
-
-#include <drawinglayer/primitive2d/wrongspellprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence WrongSpellPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
- {
- // ATM this decompose is view-independent, what the original VCL-Display is not. To mimic
- // the old behaviour here if wanted it is necessary to add get2DDecomposition and implement
- // it similar to the usage in e.g. HelplinePrimitive2D. Remembering the ViewTransformation
- // should be enough then.
- // The view-independent wavelines work well (if You ask me). Maybe the old VCL-Behaviour is only
- // in place because it was not possible/too expensive at that time to scale the wavelines with the
- // view...
- // With the VCL-PixelRenderer this will not even be used since it implements WrongSpellPrimitive2D
- // directly and mimics the old VCL-Display there. If You implemented a new renderer without
- // direct WrongSpellPrimitive2D support, You may want to do the described change here.
-
- // get the font height (part of scale), so decompose the matrix
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
- getTransformation().decompose(aScale, aTranslate, fRotate, fShearX);
-
- // calculate distances based on a static default (to allow testing in debugger)
- static double fDefaultDistance(0.03);
- const double fFontHeight(aScale.getY());
- const double fUnderlineDistance(fFontHeight * fDefaultDistance);
- const double fWaveWidth(2.0 * fUnderlineDistance);
-
- // the Y-distance needs to be relativated to FontHeight since the points get
- // transformed with the transformation containing that scale already.
- const double fRelativeUnderlineDistance(basegfx::fTools::equalZero(aScale.getY()) ? 0.0 : fUnderlineDistance / aScale.getY());
- basegfx::B2DPoint aStart(getStart(), fRelativeUnderlineDistance);
- basegfx::B2DPoint aStop(getStop(), fRelativeUnderlineDistance);
- basegfx::B2DPolygon aPolygon;
-
- aPolygon.append(getTransformation() * aStart);
- aPolygon.append(getTransformation() * aStop);
-
- // prepare line attribute
- const attribute::LineAttribute aLineAttribute(getColor());
-
- // create the waveline primitive
- Primitive2DReference xPrimitive(new PolygonWavePrimitive2D(aPolygon, aLineAttribute, fWaveWidth, 0.5 * fWaveWidth));
- Primitive2DSequence xRetval(&xPrimitive, 1);
-
- return xRetval;
- }
-
- WrongSpellPrimitive2D::WrongSpellPrimitive2D(
- const basegfx::B2DHomMatrix& rTransformation,
- double fStart,
- double fStop,
- const basegfx::BColor& rColor)
- : BufferedDecompositionPrimitive2D(),
- maTransformation(rTransformation),
- mfStart(fStart),
- mfStop(fStop),
- maColor(rColor)
- {
- }
-
- bool WrongSpellPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
- {
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const WrongSpellPrimitive2D& rCompare = (WrongSpellPrimitive2D&)rPrimitive;
-
- return (getTransformation() == rCompare.getTransformation()
- && getStart() == rCompare.getStart()
- && getStop() == rCompare.getStop()
- && getColor() == rCompare.getColor());
- }
-
- return false;
- }
-
- // provide unique ID
- ImplPrimitrive2DIDBlock(WrongSpellPrimitive2D, PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D)
-
- } // end of namespace primitive2d
-} // end of namespace drawinglayer
-
-//////////////////////////////////////////////////////////////////////////////
-// eof
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */