diff options
Diffstat (limited to 'svx')
-rw-r--r-- | svx/inc/svditer.hxx | 8 | ||||
-rw-r--r-- | svx/inc/svx/msdffimp.hxx | 6 | ||||
-rw-r--r-- | svx/source/msfilter/msdffimp.cxx | 17 | ||||
-rw-r--r-- | svx/source/svdraw/svditer.cxx | 59 |
4 files changed, 56 insertions, 34 deletions
diff --git a/svx/inc/svditer.hxx b/svx/inc/svditer.hxx index 35535627ab..0dc391ec46 100644 --- a/svx/inc/svditer.hxx +++ b/svx/inc/svditer.hxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: svditer.hxx,v $ - * $Revision: 1.9 $ + * $Revision: 1.9.246.1 $ * * This file is part of OpenOffice.org. * @@ -37,6 +37,7 @@ class SdrObjList; class SdrObject; +class SdrMarkList; // SdrObjListIter methods: // IM_FLAT : Flach ueber die Liste @@ -51,6 +52,8 @@ class SVX_DLLPUBLIC SdrObjListIter BOOL mbReverse; void ImpProcessObjectList(const SdrObjList& rObjList, SdrIterMode eMode, BOOL bUseZOrder); + void ImpProcessMarkList(const SdrMarkList& rMarkList, SdrIterMode eMode); + void ImpProcessObj(SdrObject* pObj, SdrIterMode eMode, BOOL bUseZOrder); public: SdrObjListIter(const SdrObjList& rObjList, SdrIterMode eMode = IM_DEEPNOGROUPS, BOOL bReverse = FALSE); @@ -67,6 +70,9 @@ public: SdrObject and is no longer limited to group objects */ SdrObjListIter(const SdrObject& rObj, SdrIterMode eMode = IM_DEEPNOGROUPS, BOOL bReverse = FALSE); + /** Iterates over a list of marked objects received from the SdrMarkView. */ + SdrObjListIter(const SdrMarkList& rMarkList, SdrIterMode eMode = IM_DEEPNOGROUPS, BOOL bReverse = FALSE); + void Reset() { mnIndex = (mbReverse ? maObjList.Count() : 0L); } BOOL IsMore() const { return (mbReverse ? mnIndex != 0 : ( mnIndex < maObjList.Count())); } SdrObject* Next() { return (SdrObject*)maObjList.GetObject(mbReverse ? --mnIndex : mnIndex++); } diff --git a/svx/inc/svx/msdffimp.hxx b/svx/inc/svx/msdffimp.hxx index 338b1f06c3..9168c2a08c 100644 --- a/svx/inc/svx/msdffimp.hxx +++ b/svx/inc/svx/msdffimp.hxx @@ -616,13 +616,13 @@ public: // BOOL bLookForEnd ); // SdrObject* ImportObj(SvStream& rSt, void* pData, - const Rectangle& rClientRect, const Rectangle& rGlobalChildRect, int nCalledByGroup = 0, sal_Int32* pShapeId = NULL); + Rectangle& rClientRect, const Rectangle& rGlobalChildRect, int nCalledByGroup = 0, sal_Int32* pShapeId = NULL); SdrObject* ImportGroup( const DffRecordHeader& rHd, SvStream& rSt, void* pData, - const Rectangle& rClientRect, const Rectangle& rGlobalChildRect, int nCalledByGroup = 0, sal_Int32* pShapeId = NULL ); + Rectangle& rClientRect, const Rectangle& rGlobalChildRect, int nCalledByGroup = 0, sal_Int32* pShapeId = NULL ); SdrObject* ImportShape( const DffRecordHeader& rHd, SvStream& rSt, void* pData, - const Rectangle& rClientRect, const Rectangle& rGlobalChildRect, int nCalledByGroup = 0, sal_Int32* pShapeId = NULL); + Rectangle& rClientRect, const Rectangle& rGlobalChildRect, int nCalledByGroup = 0, sal_Int32* pShapeId = NULL); Rectangle GetGlobalChildAnchor( const DffRecordHeader& rHd, SvStream& rSt, Rectangle& aClientRect ); void GetGroupAnchors( const DffRecordHeader& rHd, SvStream& rSt, diff --git a/svx/source/msfilter/msdffimp.cxx b/svx/source/msfilter/msdffimp.cxx index 8ff9cea19e..3829c7fb5d 100644 --- a/svx/source/msfilter/msdffimp.cxx +++ b/svx/source/msfilter/msdffimp.cxx @@ -1,7 +1,7 @@ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * + * * Copyright 2008 by Sun Microsystems, Inc. * * OpenOffice.org - a multi-platform office productivity suite @@ -4453,7 +4453,7 @@ SdrObject* SvxMSDffManager::ImportGraphic( SvStream& rSt, SfxItemSet& rSet, Rect // PptSlidePersistEntry& rPersistEntry, SdPage* pPage SdrObject* SvxMSDffManager::ImportObj( SvStream& rSt, void* pClientData, - const Rectangle& rClientRect, const Rectangle& rGlobalChildRect, int nCalledByGroup, sal_Int32* pShapeId ) + Rectangle& rClientRect, const Rectangle& rGlobalChildRect, int nCalledByGroup, sal_Int32* pShapeId ) { SdrObject* pRet = NULL; DffRecordHeader aObjHd; @@ -4471,7 +4471,7 @@ SdrObject* SvxMSDffManager::ImportObj( SvStream& rSt, void* pClientData, } SdrObject* SvxMSDffManager::ImportGroup( const DffRecordHeader& rHd, SvStream& rSt, void* pClientData, - const Rectangle& rClientRect, const Rectangle& rGlobalChildRect, + Rectangle& rClientRect, const Rectangle& rGlobalChildRect, int nCalledByGroup, sal_Int32* pShapeId ) { SdrObject* pRet = NULL; @@ -4495,8 +4495,6 @@ SdrObject* SvxMSDffManager::ImportGroup( const DffRecordHeader& rHd, SvStream& r nGroupRotateAngle = mnFix16Angle; Rectangle aClientRect( rClientRect ); - if ( rClientRect.IsEmpty() ) - aClientRect = pRet->GetSnapRect(); Rectangle aGlobalChildRect; if ( !nCalledByGroup || rGlobalChildRect.IsEmpty() ) @@ -4575,7 +4573,7 @@ SdrObject* SvxMSDffManager::ImportGroup( const DffRecordHeader& rHd, SvStream& r } SdrObject* SvxMSDffManager::ImportShape( const DffRecordHeader& rHd, SvStream& rSt, void* pClientData, - const Rectangle& rClientRect, const Rectangle& rGlobalChildRect, + Rectangle& rClientRect, const Rectangle& rGlobalChildRect, int nCalledByGroup, sal_Int32* pShapeId ) { SdrObject* pRet = NULL; @@ -4686,7 +4684,12 @@ SdrObject* SvxMSDffManager::ImportShape( const DffRecordHeader& rHd, SvStream& r if ( aObjData.nSpFlags & SP_FGROUP ) { pRet = new SdrObjGroup; - pRet->NbcSetLogicRect( aBoundRect ); // SJ: SnapRect is allowed to be set at the group only for the first time + /* After CWS aw033 has been integrated, an empty group object + cannot store its resulting bounding rectangle anymore. We have + to return this rectangle via rClientRect now, but only, if + caller has not passed an own bounding ractangle. */ + if ( rClientRect.IsEmpty() ) + rClientRect = aBoundRect; nGroupShapeFlags = aObjData.nSpFlags; // #73013# } else if ( ( aObjData.eShapeType != mso_sptNil ) || IsProperty( DFF_Prop_pVertices ) || bGraphic ) diff --git a/svx/source/svdraw/svditer.cxx b/svx/source/svdraw/svditer.cxx index 5207c529c6..d396876bfd 100644 --- a/svx/source/svdraw/svditer.cxx +++ b/svx/source/svdraw/svditer.cxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: svditer.cxx,v $ - * $Revision: 1.9 $ + * $Revision: 1.9.246.1 $ * * This file is part of OpenOffice.org. * @@ -34,6 +34,7 @@ #include <svx/svdpage.hxx> #include <svx/svdogrp.hxx> #include <svx/svdobj.hxx> +#include <svx/svdmark.hxx> // #99190# #include <svx/scene3d.hxx> @@ -68,33 +69,45 @@ SdrObjListIter::SdrObjListIter( const SdrObject& rObj, SdrIterMode eMode, BOOL b Reset(); } +SdrObjListIter::SdrObjListIter( const SdrMarkList& rMarkList, SdrIterMode eMode, BOOL bReverse ) +: maObjList(1024, 64, 64), + mnIndex(0L), + mbReverse(bReverse) +{ + ImpProcessMarkList(rMarkList, eMode); + Reset(); +} + void SdrObjListIter::ImpProcessObjectList(const SdrObjList& rObjList, SdrIterMode eMode, BOOL bUseZOrder) { - for(sal_uInt32 a(0L); a < rObjList.GetObjCount(); a++) + for( ULONG nIdx = 0, nCount = rObjList.GetObjCount(); nIdx < nCount; ++nIdx ) { - SdrObject* pObj = NULL; - if (bUseZOrder) - pObj = rObjList.GetObj(a); - else - pObj = rObjList.GetObjectForNavigationPosition(a); - if (pObj == NULL) - { - OSL_ASSERT(pObj!=NULL); - continue; - } + SdrObject* pObj = bUseZOrder ? + rObjList.GetObj( nIdx ) : rObjList.GetObjectForNavigationPosition( nIdx ); + OSL_ASSERT( pObj != 0 ); + if( pObj ) + ImpProcessObj( pObj, eMode, bUseZOrder ); + } +} - sal_Bool bIsGroup(pObj->IsGroupObject()); +void SdrObjListIter::ImpProcessMarkList( const SdrMarkList& rMarkList, SdrIterMode eMode ) +{ + for( ULONG nIdx = 0, nCount = rMarkList.GetMarkCount(); nIdx < nCount; ++nIdx ) + if( SdrObject* pObj = rMarkList.GetMark( nIdx )->GetMarkedSdrObj() ) + ImpProcessObj( pObj, eMode, FALSE ); +} - // #99190# 3D objects are no group objects, IsGroupObject() - // only tests if pSub is not null ptr :-( - if(bIsGroup && pObj->ISA(E3dObject) && !pObj->ISA(E3dScene)) - bIsGroup = sal_False; +void SdrObjListIter::ImpProcessObj(SdrObject* pObj, SdrIterMode eMode, BOOL bUseZOrder) +{ + bool bIsGroup = pObj->IsGroupObject(); + // #99190# 3D objects are no group objects, IsGroupObject() + // only tests if pSub is not null ptr :-( + if( bIsGroup && pObj->ISA( E3dObject ) && !pObj->ISA( E3dScene ) ) + bIsGroup = false; - if(eMode != IM_DEEPNOGROUPS || !bIsGroup) - maObjList.Insert(pObj, LIST_APPEND); + if( !bIsGroup || (eMode != IM_DEEPNOGROUPS) ) + maObjList.Insert( pObj, LIST_APPEND ); - if(bIsGroup && eMode != IM_FLAT) - ImpProcessObjectList(*pObj->GetSubList(), eMode, bUseZOrder); - } + if( bIsGroup && (eMode != IM_FLAT) ) + ImpProcessObjectList( *pObj->GetSubList(), eMode, bUseZOrder ); } - |