2004-06-28 12:37:37 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
|
|
|
* $RCSfile: anchoredobject.cxx,v $
|
|
|
|
*
|
2005-01-21 09:33:21 +00:00
|
|
|
* $Revision: 1.10 $
|
2004-06-28 12:37:37 +00:00
|
|
|
*
|
2005-01-21 09:33:21 +00:00
|
|
|
* last change: $Author: kz $ $Date: 2005-01-21 10:33:21 $
|
2004-06-28 12:37:37 +00:00
|
|
|
*
|
|
|
|
* The Contents of this file are made available subject to the terms of
|
|
|
|
* either of the following licenses
|
|
|
|
*
|
|
|
|
* - GNU Lesser General Public License Version 2.1
|
|
|
|
* - Sun Industry Standards Source License Version 1.1
|
|
|
|
*
|
|
|
|
* Sun Microsystems Inc., October, 2000
|
|
|
|
*
|
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
* =============================================
|
|
|
|
* Copyright 2000 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
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Sun Industry Standards Source License Version 1.1
|
|
|
|
* =================================================
|
|
|
|
* The contents of this file are subject to the Sun Industry Standards
|
|
|
|
* Source 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.openoffice.org/license.html.
|
|
|
|
*
|
|
|
|
* Software provided under this License is provided on an "AS IS" basis,
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
|
|
|
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
|
|
|
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
|
|
|
* See the License for the specific provisions governing your rights and
|
|
|
|
* obligations concerning the Software.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
|
|
|
*
|
|
|
|
* Copyright: 2000 by Sun Microsystems, Inc.
|
|
|
|
*
|
|
|
|
* All Rights Reserved.
|
|
|
|
*
|
|
|
|
* Contributor(s): _______________________________________
|
|
|
|
*
|
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
#ifndef _ANCHOREDOBJECT_HXX
|
|
|
|
#include <anchoredobject.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _PAM_HXX
|
|
|
|
#include <pam.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _FRAME_HXX
|
|
|
|
#include <frame.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _TXTFRM_HXX
|
|
|
|
#include <txtfrm.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _FRMFMT_HXX
|
|
|
|
#include <frmfmt.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _FMTANCHR_HXX
|
|
|
|
#include <fmtanchr.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _FMTORNT_HXX
|
|
|
|
#include <fmtornt.hxx>
|
|
|
|
#endif
|
2004-08-03 05:05:14 +00:00
|
|
|
// --> OD 2004-06-29 #i28701#
|
|
|
|
#ifndef _DOC_HXX
|
|
|
|
#include <doc.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _FMTSRND_HXX
|
|
|
|
#include <fmtsrnd.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _SVDOBJ_HXX
|
|
|
|
#include <svx/svdobj.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _DCONTACT_HXX
|
|
|
|
#include <dcontact.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _SVX_ULSPITEM_HXX
|
|
|
|
#include <svx/ulspitem.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _SVX_LRSPITEM_HXX
|
|
|
|
#include <svx/lrspitem.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _SORTEDOBJS_HXX
|
|
|
|
#include <sortedobjs.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _PAGEFRM_HXX
|
|
|
|
#include <pagefrm.hxx>
|
|
|
|
#endif
|
|
|
|
// <--
|
|
|
|
#ifndef _FRMATR_HXX
|
|
|
|
#include <frmatr.hxx>
|
|
|
|
#endif
|
2004-09-09 09:56:32 +00:00
|
|
|
// --> OD 2004-08-25 #i3317#
|
|
|
|
#ifndef _COLFRM_HXX
|
|
|
|
#include <colfrm.hxx>
|
|
|
|
#endif
|
|
|
|
// <--
|
2004-11-16 14:44:00 +00:00
|
|
|
// --> OD 2004-10-22 #i35911#
|
|
|
|
#ifndef _LAYOUTER_HXX
|
|
|
|
#include <layouter.hxx>
|
|
|
|
#endif
|
|
|
|
// <--
|
2004-08-03 05:05:14 +00:00
|
|
|
// ============================================================================
|
|
|
|
// --> OD 2004-06-30 #i28701# -
|
|
|
|
// implementation of helper class <SwObjPositioningInProgress>
|
|
|
|
// ============================================================================
|
|
|
|
SwObjPositioningInProgress::SwObjPositioningInProgress( SdrObject& _rSdrObj ) :
|
|
|
|
mpAnchoredObj( 0L )
|
|
|
|
{
|
|
|
|
mpAnchoredObj = ::GetUserCall( &_rSdrObj )->GetAnchoredObj( &_rSdrObj );
|
|
|
|
mpAnchoredObj->SetPositioningInProgress( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
SwObjPositioningInProgress::SwObjPositioningInProgress( SwAnchoredObject& _rAnchoredObj ) :
|
|
|
|
mpAnchoredObj( &_rAnchoredObj )
|
|
|
|
{
|
|
|
|
mpAnchoredObj->SetPositioningInProgress( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
SwObjPositioningInProgress::~SwObjPositioningInProgress()
|
|
|
|
{
|
|
|
|
if ( mpAnchoredObj )
|
|
|
|
{
|
|
|
|
mpAnchoredObj->SetPositioningInProgress( false );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ============================================================================
|
2004-06-28 12:37:37 +00:00
|
|
|
|
|
|
|
TYPEINIT0(SwAnchoredObject);
|
|
|
|
|
|
|
|
SwAnchoredObject::SwAnchoredObject() :
|
|
|
|
mpDrawObj( 0L ),
|
|
|
|
mpAnchorFrm( 0L ),
|
2004-08-03 05:05:14 +00:00
|
|
|
// --> OD 2004-06-30 #i28701#
|
|
|
|
mpPageFrm( 0L ),
|
|
|
|
// <--
|
2004-08-23 07:02:09 +00:00
|
|
|
maRelPos(),
|
2004-06-28 12:37:37 +00:00
|
|
|
maLastCharRect(),
|
|
|
|
mnLastTopOfLine( 0L ),
|
2004-08-03 05:05:14 +00:00
|
|
|
mpVertPosOrientFrm( 0L ),
|
|
|
|
// --> OD 2004-06-29 #i28701#
|
|
|
|
mbPositioningInProgress( false ),
|
|
|
|
mbConsiderForTextWrap( false ),
|
|
|
|
mbPositionLocked( false ),
|
2005-01-21 09:33:21 +00:00
|
|
|
// --> OD 2005-01-10 #i40147#
|
|
|
|
mbKeepPositionLockedForSection( false ),
|
|
|
|
// <--
|
2004-09-09 09:56:32 +00:00
|
|
|
mbRestartLayoutProcess( false ),
|
|
|
|
// <--
|
2004-11-16 14:44:00 +00:00
|
|
|
// --> OD 2004-10-22 #i35911#
|
|
|
|
mbClearedEnvironment( false ),
|
|
|
|
// <--
|
2004-09-09 09:56:32 +00:00
|
|
|
// --> OD 2004-08-25 #i3317#
|
|
|
|
mbTmpConsiderWrapInfluence( false )
|
2004-08-03 05:05:14 +00:00
|
|
|
// <--
|
2004-06-28 12:37:37 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
SwAnchoredObject::~SwAnchoredObject()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
// =============================================================================
|
|
|
|
// accessors for member <mpDrawObj>
|
|
|
|
// =============================================================================
|
|
|
|
void SwAnchoredObject::SetDrawObj( SdrObject& _rDrawObj )
|
|
|
|
{
|
|
|
|
mpDrawObj = &_rDrawObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
const SdrObject* SwAnchoredObject::GetDrawObj() const
|
|
|
|
{
|
|
|
|
return mpDrawObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
SdrObject* SwAnchoredObject::DrawObj()
|
|
|
|
{
|
|
|
|
return mpDrawObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
// =============================================================================
|
|
|
|
// accessors for member <mpAnchorFrm>
|
|
|
|
// =============================================================================
|
|
|
|
const SwFrm* SwAnchoredObject::GetAnchorFrm() const
|
|
|
|
{
|
|
|
|
return mpAnchorFrm;
|
|
|
|
}
|
|
|
|
|
|
|
|
SwFrm* SwAnchoredObject::AnchorFrm()
|
|
|
|
{
|
|
|
|
return mpAnchorFrm;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAnchoredObject::ChgAnchorFrm( SwFrm* _pNewAnchorFrm )
|
|
|
|
{
|
|
|
|
mpAnchorFrm = _pNewAnchorFrm;
|
|
|
|
|
|
|
|
ObjectAttachedToAnchorFrame();
|
|
|
|
}
|
|
|
|
|
2004-11-16 14:44:00 +00:00
|
|
|
/** determine anchor frame containing the anchor position
|
|
|
|
|
|
|
|
OD 2004-10-08 #i26945#
|
|
|
|
the anchor frame, which is determined, is <mpAnchorFrm>
|
|
|
|
for an at-page, at-frame or at-paragraph anchored object
|
|
|
|
and the anchor character frame for an at-character and as-character
|
|
|
|
anchored object.
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
SwFrm* SwAnchoredObject::GetAnchorFrmContainingAnchPos()
|
|
|
|
{
|
|
|
|
SwFrm* pAnchorFrmContainingAnchPos = FindAnchorCharFrm();
|
|
|
|
if ( !pAnchorFrmContainingAnchPos )
|
|
|
|
{
|
|
|
|
pAnchorFrmContainingAnchPos = AnchorFrm();
|
|
|
|
}
|
|
|
|
|
|
|
|
return pAnchorFrmContainingAnchPos;
|
|
|
|
}
|
|
|
|
|
2004-08-03 05:05:14 +00:00
|
|
|
// =============================================================================
|
|
|
|
// OD 2004-06-30 #i28701# accessors for member <mpPageFrm>
|
|
|
|
// =============================================================================
|
|
|
|
SwPageFrm* SwAnchoredObject::GetPageFrm()
|
|
|
|
{
|
|
|
|
return mpPageFrm;
|
|
|
|
}
|
|
|
|
|
|
|
|
const SwPageFrm* SwAnchoredObject::GetPageFrm() const
|
|
|
|
{
|
|
|
|
return mpPageFrm;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAnchoredObject::SetPageFrm( SwPageFrm* _pNewPageFrm )
|
|
|
|
{
|
|
|
|
mpPageFrm = _pNewPageFrm;
|
|
|
|
}
|
|
|
|
|
2004-06-28 12:37:37 +00:00
|
|
|
// =============================================================================
|
|
|
|
// accessors for member <maLastCharRect>
|
|
|
|
// =============================================================================
|
|
|
|
const SwRect& SwAnchoredObject::GetLastCharRect() const
|
|
|
|
{
|
|
|
|
return maLastCharRect;
|
|
|
|
}
|
|
|
|
|
|
|
|
SwTwips SwAnchoredObject::GetLastCharX() const
|
|
|
|
{
|
|
|
|
return maLastCharRect.Left() - GetObjRect().Left();
|
|
|
|
}
|
|
|
|
|
|
|
|
SwTwips SwAnchoredObject::GetRelCharX( const SwFrm* pFrm ) const
|
|
|
|
{
|
|
|
|
return maLastCharRect.Left() - pFrm->Frm().Left();
|
|
|
|
}
|
|
|
|
|
|
|
|
SwTwips SwAnchoredObject::GetRelCharY( const SwFrm* pFrm ) const
|
|
|
|
{
|
|
|
|
return maLastCharRect.Bottom() - pFrm->Frm().Top();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAnchoredObject::AddLastCharY( long nDiff )
|
|
|
|
{
|
|
|
|
maLastCharRect.Pos().Y() += nDiff;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAnchoredObject::ResetLastCharRectHeight()
|
|
|
|
{
|
|
|
|
maLastCharRect.Height( 0 );
|
|
|
|
}
|
|
|
|
// =============================================================================
|
|
|
|
// accessors for member <mpVertPosOrientFrm>
|
|
|
|
// =============================================================================
|
|
|
|
void SwAnchoredObject::SetVertPosOrientFrm( const SwLayoutFrm& _rVertPosOrientFrm )
|
|
|
|
{
|
|
|
|
mpVertPosOrientFrm = &_rVertPosOrientFrm;
|
2004-08-03 05:05:14 +00:00
|
|
|
|
|
|
|
// --> OD 2004-07-02 #i28701# - take over functionality of deleted method
|
|
|
|
// <SwFlyAtCntFrm::AssertPage()>: assure for at-paragraph and at-character
|
|
|
|
// an anchored object, that it is registered at the correct page frame
|
|
|
|
RegisterAtCorrectPage();
|
2004-06-28 12:37:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// =============================================================================
|
|
|
|
// accessors for member <mnLastTopOfLine>
|
|
|
|
// =============================================================================
|
|
|
|
const SwTwips SwAnchoredObject::GetLastTopOfLine() const
|
|
|
|
{
|
|
|
|
return mnLastTopOfLine;
|
|
|
|
}
|
|
|
|
|
2004-08-03 05:05:14 +00:00
|
|
|
// OD 2004-05-18 #i28701# - follow-up of #i22341#
|
|
|
|
void SwAnchoredObject::AddLastTopOfLineY( SwTwips _nDiff )
|
|
|
|
{
|
|
|
|
mnLastTopOfLine += _nDiff;
|
|
|
|
}
|
|
|
|
|
2004-06-28 12:37:37 +00:00
|
|
|
/** check anchor character rectangle and top of line
|
|
|
|
|
|
|
|
OD 2004-03-24 #i26791
|
|
|
|
For to-character anchored Writer fly frames the members <maLastCharRect>
|
|
|
|
and <maLastTopOfLine> are updated. These are checked for change and
|
|
|
|
depending on the applied positioning, it's decided, if the Writer fly
|
|
|
|
frame has to be invalidated.
|
2004-08-02 12:06:55 +00:00
|
|
|
OD 2004-07-15 #117380#
|
|
|
|
add parameter <_bCheckForParaPorInf>, default value <true>
|
2004-06-28 12:37:37 +00:00
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
2004-08-02 12:06:55 +00:00
|
|
|
void SwAnchoredObject::CheckCharRectAndTopOfLine(
|
|
|
|
const bool _bCheckForParaPorInf )
|
2004-06-28 12:37:37 +00:00
|
|
|
{
|
2004-08-02 12:06:55 +00:00
|
|
|
if ( GetAnchorFrm() &&
|
|
|
|
GetAnchorFrm()->IsTxtFrm() )
|
2004-06-28 12:37:37 +00:00
|
|
|
{
|
|
|
|
const SwFmtAnchor& rAnch = GetFrmFmt().GetAnchor();
|
2004-08-02 12:06:55 +00:00
|
|
|
if ( rAnch.GetAnchorId() == FLY_AUTO_CNTNT &&
|
|
|
|
rAnch.GetCntntAnchor() )
|
2004-06-28 12:37:37 +00:00
|
|
|
{
|
2004-08-02 12:06:55 +00:00
|
|
|
// --> OD 2004-07-14 #117380# - if requested, assure that anchor frame,
|
|
|
|
// which contains the anchor character, has a paragraph portion information.
|
|
|
|
// The paragraph portion information is needed to determine the
|
|
|
|
// anchor character rectangle respectively the top of the line.
|
|
|
|
// Thus, a format of this frame is avoided to determine the
|
|
|
|
// paragraph portion information.
|
2004-11-16 14:44:00 +00:00
|
|
|
// --> OD 2004-10-04 #i26945# - use new method <FindAnchorCharFrm()>
|
|
|
|
const SwTxtFrm& aAnchorCharFrm = *(FindAnchorCharFrm());
|
|
|
|
// <--
|
2004-08-02 12:06:55 +00:00
|
|
|
if ( !_bCheckForParaPorInf || aAnchorCharFrm.HasPara() )
|
|
|
|
{
|
|
|
|
_CheckCharRect( rAnch, aAnchorCharFrm );
|
|
|
|
_CheckTopOfLine( rAnch, aAnchorCharFrm );
|
|
|
|
}
|
|
|
|
// <--
|
2004-06-28 12:37:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/** check anchor character rectangle
|
|
|
|
|
|
|
|
OD 11.11.2003 #i22341#
|
|
|
|
helper method for method <CheckCharRectAndTopOfLine()>
|
|
|
|
For to-character anchored Writer fly frames the member <maLastCharRect>
|
|
|
|
is updated. This is checked for change and depending on the applied
|
|
|
|
positioning, it's decided, if the Writer fly frame has to be invalidated.
|
2004-08-02 12:06:55 +00:00
|
|
|
OD 2004-07-14 #117380#
|
|
|
|
improvement - add second parameter <_rAnchorCharFrm>
|
2004-06-28 12:37:37 +00:00
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
2004-08-02 12:06:55 +00:00
|
|
|
void SwAnchoredObject::_CheckCharRect( const SwFmtAnchor& _rAnch,
|
|
|
|
const SwTxtFrm& _rAnchorCharFrm )
|
2004-06-28 12:37:37 +00:00
|
|
|
{
|
|
|
|
// determine rectangle of anchor character. If not exist, abort operation
|
|
|
|
SwRect aCharRect;
|
2004-08-02 12:06:55 +00:00
|
|
|
if ( !_rAnchorCharFrm.GetAutoPos( aCharRect, *_rAnch.GetCntntAnchor() ) )
|
2004-06-28 12:37:37 +00:00
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
// check, if anchor character rectangle has changed
|
|
|
|
if ( aCharRect != maLastCharRect )
|
|
|
|
{
|
|
|
|
// check positioning and alignment for invalidation of position
|
|
|
|
{
|
2004-08-02 12:06:55 +00:00
|
|
|
SWRECTFN( (&_rAnchorCharFrm) );
|
2004-06-28 12:37:37 +00:00
|
|
|
// determine positioning and alignment
|
|
|
|
SwFmtVertOrient aVert( GetFrmFmt().GetVertOrient() );
|
|
|
|
SwFmtHoriOrient aHori( GetFrmFmt().GetHoriOrient() );
|
|
|
|
// check for anchor character rectangle changes for certain
|
|
|
|
// positionings and alignments
|
|
|
|
// OD 07.10.2003 #110978# - add condition to invalidate position,
|
|
|
|
// if vertical aligned at frame/page area and vertical position
|
|
|
|
// of anchor character has changed.
|
|
|
|
const SwRelationOrient eVertRelOrient = aVert.GetRelationOrient();
|
|
|
|
if ( ( aHori.GetRelationOrient() == REL_CHAR &&
|
|
|
|
(aCharRect.*fnRect->fnGetLeft)() !=
|
|
|
|
(maLastCharRect.*fnRect->fnGetLeft)() ) ||
|
|
|
|
( eVertRelOrient == REL_CHAR &&
|
|
|
|
( (aCharRect.*fnRect->fnGetTop)() !=
|
|
|
|
(maLastCharRect.*fnRect->fnGetTop)() ||
|
|
|
|
(aCharRect.*fnRect->fnGetHeight)() !=
|
|
|
|
(maLastCharRect.*fnRect->fnGetHeight)() ) ) ||
|
|
|
|
( ( ( eVertRelOrient == FRAME ) ||
|
|
|
|
( eVertRelOrient == PRTAREA ) ||
|
|
|
|
( eVertRelOrient == REL_PG_FRAME ) ||
|
|
|
|
( eVertRelOrient == REL_PG_PRTAREA ) ) &&
|
|
|
|
( (aCharRect.*fnRect->fnGetTop)() !=
|
|
|
|
(maLastCharRect.*fnRect->fnGetTop)() ) ) )
|
|
|
|
{
|
2004-11-16 14:44:00 +00:00
|
|
|
// --> OD 2004-10-08 #i26945#, #i35911# - unlock position of
|
|
|
|
// anchored object, if it isn't registered at the page,
|
|
|
|
// where its anchor character frame is on.
|
|
|
|
if ( GetPageFrm() != _rAnchorCharFrm.FindPageFrm() )
|
|
|
|
{
|
|
|
|
UnlockPosition();
|
|
|
|
}
|
|
|
|
// <--
|
2004-06-28 12:37:37 +00:00
|
|
|
InvalidateObjPos();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// keep new anchor character rectangle
|
|
|
|
maLastCharRect = aCharRect;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/** check top of line
|
|
|
|
|
|
|
|
OD 11.11.2003 #i22341#
|
|
|
|
helper method for method <CheckCharRectAndTopOfLine()>
|
|
|
|
For to-character anchored Writer fly frames the member <mnLastTopOfLine>
|
|
|
|
is updated. This is checked for change and depending on the applied
|
|
|
|
positioning, it's decided, if the Writer fly frame has to be invalidated.
|
2004-08-02 12:06:55 +00:00
|
|
|
OD 2004-07-14 #117380#
|
|
|
|
improvement - add second parameter <_rAnchorCharFrm>
|
2004-06-28 12:37:37 +00:00
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
2004-08-02 12:06:55 +00:00
|
|
|
void SwAnchoredObject::_CheckTopOfLine( const SwFmtAnchor& _rAnch,
|
|
|
|
const SwTxtFrm& _rAnchorCharFrm )
|
2004-06-28 12:37:37 +00:00
|
|
|
{
|
|
|
|
SwTwips nTopOfLine = 0L;
|
2004-08-02 12:06:55 +00:00
|
|
|
if ( _rAnchorCharFrm.GetTopOfLine( nTopOfLine, *_rAnch.GetCntntAnchor() ) )
|
2004-06-28 12:37:37 +00:00
|
|
|
{
|
|
|
|
if ( nTopOfLine != mnLastTopOfLine )
|
|
|
|
{
|
|
|
|
// check alignment for invalidation of position
|
|
|
|
if ( GetFrmFmt().GetVertOrient().GetRelationOrient() == REL_VERT_LINE )
|
|
|
|
{
|
2004-11-16 14:44:00 +00:00
|
|
|
// --> OD 2004-10-08 #i26945#, #i35911# - unlock position of
|
|
|
|
// anchored object, if it isn't registered at the page,
|
|
|
|
// where its anchor character frame is on.
|
|
|
|
if ( GetPageFrm() != _rAnchorCharFrm.FindPageFrm() )
|
|
|
|
{
|
|
|
|
UnlockPosition();
|
|
|
|
}
|
|
|
|
// <--
|
2004-06-28 12:37:37 +00:00
|
|
|
InvalidateObjPos();
|
|
|
|
}
|
|
|
|
// keep new top of line value
|
|
|
|
mnLastTopOfLine = nTopOfLine;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-08-03 05:05:14 +00:00
|
|
|
void SwAnchoredObject::ClearCharRectAndTopOfLine()
|
|
|
|
{
|
|
|
|
maLastCharRect.Clear();
|
|
|
|
mnLastTopOfLine = 0;
|
|
|
|
}
|
|
|
|
|
2004-06-28 12:37:37 +00:00
|
|
|
void SwAnchoredObject::SetPositioningInProgress( const bool _bPosInProgress )
|
|
|
|
{
|
2004-08-03 05:05:14 +00:00
|
|
|
mbPositioningInProgress = _bPosInProgress;
|
2004-06-28 12:37:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
bool SwAnchoredObject::IsPositioningInProgress() const
|
|
|
|
{
|
2004-08-03 05:05:14 +00:00
|
|
|
return mbPositioningInProgress;
|
2004-06-28 12:37:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const Point SwAnchoredObject::GetCurrRelPos() const
|
|
|
|
{
|
|
|
|
return maRelPos;
|
|
|
|
}
|
|
|
|
void SwAnchoredObject::SetCurrRelPos( Point _aRelPos )
|
|
|
|
{
|
|
|
|
maRelPos = _aRelPos;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAnchoredObject::ObjectAttachedToAnchorFrame()
|
|
|
|
{
|
2004-08-23 07:02:09 +00:00
|
|
|
// default behaviour:
|
|
|
|
// update layout direction, the anchored object is assigned to
|
|
|
|
UpdateLayoutDir();
|
|
|
|
}
|
|
|
|
|
|
|
|
/** method update layout direction the layout direction, the anchored
|
|
|
|
object is in
|
|
|
|
|
|
|
|
OD 2004-07-27 #i31698#
|
|
|
|
method has typically to be called, if the anchored object gets its
|
|
|
|
anchor frame assigned.
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
void SwAnchoredObject::UpdateLayoutDir()
|
|
|
|
{
|
|
|
|
SwFrmFmt::tLayoutDir nLayoutDir = SwFrmFmt::HORI_L2R;
|
|
|
|
const SwFrm* pAnchorFrm = GetAnchorFrm();
|
|
|
|
if ( pAnchorFrm )
|
|
|
|
{
|
|
|
|
const bool bVert = pAnchorFrm->IsVertical();
|
|
|
|
const bool bR2L = pAnchorFrm->IsRightToLeft();
|
|
|
|
if ( bVert )
|
|
|
|
{
|
|
|
|
nLayoutDir = SwFrmFmt::VERT_R2L;
|
|
|
|
}
|
|
|
|
else if ( bR2L )
|
|
|
|
{
|
|
|
|
nLayoutDir = SwFrmFmt::HORI_R2L;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
GetFrmFmt().SetLayoutDir( nLayoutDir );
|
2004-06-28 12:37:37 +00:00
|
|
|
}
|
2004-08-03 05:05:14 +00:00
|
|
|
|
|
|
|
/** method to perform necessary invalidations for the positioning of
|
|
|
|
objects, for whose the wrapping style influence has to be considered
|
|
|
|
on the object positioning.
|
|
|
|
|
|
|
|
OD 2004-06-30 #i28701#
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
void SwAnchoredObject::InvalidateObjPosForConsiderWrapInfluence(
|
|
|
|
const bool _bNotifyBackgrd )
|
|
|
|
{
|
|
|
|
if ( ConsiderObjWrapInfluenceOnObjPos() )
|
|
|
|
{
|
|
|
|
// indicate that object has not to be considered for text wrap
|
|
|
|
SetConsiderForTextWrap( false );
|
|
|
|
// unlock position
|
|
|
|
UnlockPosition();
|
|
|
|
// invalidate position
|
|
|
|
InvalidateObjPos();
|
|
|
|
// invalidate 'background', if requested
|
|
|
|
if ( _bNotifyBackgrd )
|
|
|
|
{
|
|
|
|
NotifyBackground( GetPageFrm(), GetObjRectWithSpaces(), PREP_FLY_LEAVE );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/** method to determine, if wrapping style influence of the anchored
|
|
|
|
object has to be considered on the object positioning
|
|
|
|
|
|
|
|
OD 2004-06-30 #i28701#
|
2004-09-09 09:56:32 +00:00
|
|
|
Note: result of this method also decides, if the booleans for the
|
2004-08-03 05:05:14 +00:00
|
|
|
layout process are of relevance.
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
bool SwAnchoredObject::ConsiderObjWrapInfluenceOnObjPos() const
|
|
|
|
{
|
|
|
|
bool bRet( false );
|
|
|
|
|
|
|
|
const SwFrmFmt& rObjFmt = GetFrmFmt();
|
2004-09-09 09:56:32 +00:00
|
|
|
// --> OD 2004-08-25 #i3317# - add condition <IsTmpConsiderWrapInfluence()>
|
|
|
|
if ( rObjFmt.GetDoc()->ConsiderWrapOnObjPos() ||
|
|
|
|
IsTmpConsiderWrapInfluence() )
|
|
|
|
// <--
|
2004-08-03 05:05:14 +00:00
|
|
|
{
|
|
|
|
const SwFmtAnchor& rAnchor = rObjFmt.GetAnchor();
|
|
|
|
if ( ( rAnchor.GetAnchorId() == FLY_AUTO_CNTNT ||
|
|
|
|
rAnchor.GetAnchorId() == FLY_AT_CNTNT ) &&
|
|
|
|
rObjFmt.GetSurround().GetSurround() != SURROUND_THROUGHT )
|
|
|
|
{
|
2004-11-09 12:46:39 +00:00
|
|
|
// --> OD 2004-09-23 #i34520# - text also wraps around anchored
|
|
|
|
// objects in the layer Hell - see the text formatting.
|
|
|
|
// Thus, it hasn't to be checked here.
|
|
|
|
bRet = true;
|
|
|
|
// <--
|
2004-08-03 05:05:14 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return bRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
// =============================================================================
|
|
|
|
// --> OD 2004-06-29 #i28701# - accessors to booleans for layout process
|
|
|
|
// =============================================================================
|
|
|
|
bool SwAnchoredObject::ConsiderForTextWrap() const
|
|
|
|
{
|
|
|
|
if ( ConsiderObjWrapInfluenceOnObjPos() )
|
|
|
|
return mbConsiderForTextWrap;
|
|
|
|
else
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAnchoredObject::SetConsiderForTextWrap( const bool _bConsiderForTextWrap )
|
|
|
|
{
|
|
|
|
mbConsiderForTextWrap = _bConsiderForTextWrap;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool SwAnchoredObject::PositionLocked() const
|
|
|
|
{
|
|
|
|
if ( ConsiderObjWrapInfluenceOnObjPos() )
|
|
|
|
return mbPositionLocked;
|
|
|
|
else
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool SwAnchoredObject::RestartLayoutProcess() const
|
|
|
|
{
|
|
|
|
if ( ConsiderObjWrapInfluenceOnObjPos() )
|
|
|
|
return mbRestartLayoutProcess;
|
|
|
|
else
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAnchoredObject::SetRestartLayoutProcess( const bool _bRestartLayoutProcess )
|
|
|
|
{
|
|
|
|
mbRestartLayoutProcess = _bRestartLayoutProcess;
|
|
|
|
}
|
|
|
|
|
2004-11-16 14:44:00 +00:00
|
|
|
// --> OD 2004-10-22 #i35911#
|
|
|
|
bool SwAnchoredObject::ClearedEnvironment() const
|
|
|
|
{
|
|
|
|
if ( ConsiderObjWrapInfluenceOnObjPos() )
|
|
|
|
return mbClearedEnvironment;
|
|
|
|
else
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
void SwAnchoredObject::SetClearedEnvironment( const bool _bClearedEnvironment )
|
|
|
|
{
|
|
|
|
mbClearedEnvironment = _bClearedEnvironment;
|
|
|
|
}
|
|
|
|
// <--
|
|
|
|
|
|
|
|
/** method to determine, if due to anchored object size and wrapping
|
|
|
|
style, its layout environment is cleared.
|
|
|
|
|
|
|
|
OD 2004-10-22 #i35911#
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
bool SwAnchoredObject::HasClearedEnvironment() const
|
|
|
|
{
|
|
|
|
bool bHasClearedEnvironment( false );
|
|
|
|
|
|
|
|
if ( GetAnchorFrm()->IsTxtFrm() &&
|
|
|
|
!static_cast<const SwTxtFrm*>(GetAnchorFrm())->IsFollow() &&
|
|
|
|
static_cast<const SwTxtFrm*>(GetAnchorFrm())->FindPageFrm()->GetPhyPageNum() >=
|
|
|
|
GetPageFrm()->GetPhyPageNum() )
|
|
|
|
{
|
|
|
|
const SwFrm* pTmpFrm = GetVertPosOrientFrm()->Lower();
|
|
|
|
while ( pTmpFrm && pTmpFrm->IsLayoutFrm() && !pTmpFrm->IsTabFrm() )
|
|
|
|
{
|
|
|
|
pTmpFrm = static_cast<const SwLayoutFrm*>(pTmpFrm)->Lower();
|
|
|
|
}
|
|
|
|
if ( !pTmpFrm )
|
|
|
|
{
|
|
|
|
bHasClearedEnvironment = true;
|
|
|
|
}
|
|
|
|
else if ( pTmpFrm->IsTxtFrm() && !pTmpFrm->GetNext() )
|
|
|
|
{
|
|
|
|
const SwTxtFrm* pTmpTxtFrm = static_cast<const SwTxtFrm*>(pTmpFrm);
|
|
|
|
if ( pTmpTxtFrm->IsUndersized() ||
|
|
|
|
( pTmpTxtFrm->GetFollow() &&
|
|
|
|
pTmpTxtFrm->GetFollow()->GetOfst() == 0 ) )
|
|
|
|
{
|
|
|
|
bHasClearedEnvironment = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return bHasClearedEnvironment;
|
|
|
|
}
|
|
|
|
|
2004-08-03 05:05:14 +00:00
|
|
|
/** method to add spacing to object area
|
|
|
|
|
|
|
|
OD 2004-06-30 #i28701#
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
const SwRect SwAnchoredObject::GetObjRectWithSpaces() const
|
|
|
|
{
|
|
|
|
SwRect aRet( GetObjRect() );
|
|
|
|
const SwFrmFmt& rFmt = GetFrmFmt();
|
|
|
|
const SvxULSpaceItem& rUL = rFmt.GetULSpace();
|
|
|
|
const SvxLRSpaceItem& rLR = rFmt.GetLRSpace();
|
|
|
|
{
|
|
|
|
aRet.Top ( Max( aRet.Top() - long(rUL.GetUpper()), 0L ));
|
|
|
|
aRet.Left( Max( aRet.Left()- long(rLR.GetLeft()), 0L ));
|
|
|
|
aRet.SSize().Height() += rUL.GetLower();
|
|
|
|
aRet.SSize().Width() += rLR.GetRight();
|
|
|
|
}
|
|
|
|
return aRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** method to update anchored object in the <SwSortedObjs> lists
|
|
|
|
|
|
|
|
OD 2004-07-01 #i28701#
|
|
|
|
If document compatibility option 'Consider wrapping style influence
|
|
|
|
on object positioning' is ON, additionally all anchored objects
|
|
|
|
at the anchor frame and all following anchored objects on the page
|
|
|
|
frame are invalidated.
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
void SwAnchoredObject::UpdateObjInSortedList()
|
|
|
|
{
|
|
|
|
if ( GetAnchorFrm() )
|
|
|
|
{
|
|
|
|
if ( GetFrmFmt().GetDoc()->ConsiderWrapOnObjPos() )
|
|
|
|
{
|
|
|
|
// invalidate position of all anchored objects at anchor frame
|
|
|
|
if ( GetAnchorFrm()->GetDrawObjs() )
|
|
|
|
{
|
|
|
|
const SwSortedObjs* pObjs = GetAnchorFrm()->GetDrawObjs();
|
|
|
|
// determine start index
|
|
|
|
sal_uInt32 i = 0;
|
|
|
|
for ( ; i < pObjs->Count(); ++i )
|
|
|
|
{
|
|
|
|
SwAnchoredObject* pAnchoredObj = (*pObjs)[i];
|
|
|
|
if ( pAnchoredObj->ConsiderObjWrapInfluenceOnObjPos() )
|
|
|
|
pAnchoredObj->InvalidateObjPosForConsiderWrapInfluence( true );
|
|
|
|
else
|
|
|
|
pAnchoredObj->InvalidateObjPos();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// invalidate all following anchored objects on the page frame
|
|
|
|
if ( GetPageFrm() && GetPageFrm()->GetSortedObjs() )
|
|
|
|
{
|
|
|
|
const SwSortedObjs* pObjs = GetPageFrm()->GetSortedObjs();
|
|
|
|
// determine start index
|
|
|
|
sal_uInt32 i = pObjs->ListPosOf( *this ) + 1;
|
|
|
|
for ( ; i < pObjs->Count(); ++i )
|
|
|
|
{
|
|
|
|
SwAnchoredObject* pAnchoredObj = (*pObjs)[i];
|
|
|
|
if ( pAnchoredObj->ConsiderObjWrapInfluenceOnObjPos() )
|
|
|
|
pAnchoredObj->InvalidateObjPosForConsiderWrapInfluence( true );
|
|
|
|
else
|
|
|
|
pAnchoredObj->InvalidateObjPos();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// update its position in the sorted object list of its anchor frame
|
|
|
|
AnchorFrm()->GetDrawObjs()->Update( *this );
|
|
|
|
// update its position in the sorted object list of its page frame
|
|
|
|
// note: as-character anchored object aren't registered at a page frame
|
|
|
|
if ( GetFrmFmt().GetAnchor().GetAnchorId() != FLY_IN_CNTNT )
|
|
|
|
{
|
|
|
|
GetPageFrm()->GetSortedObjs()->Update( *this );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/** method to determine, if invalidation of position is allowed
|
|
|
|
|
|
|
|
OD 2004-07-01 #i28701#
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
bool SwAnchoredObject::InvalidationOfPosAllowed() const
|
|
|
|
{
|
2004-11-16 14:44:00 +00:00
|
|
|
// --> OD 2004-11-03 #114798# - Check, if page frame layout is in progress,
|
|
|
|
// isn't needed, because of anchored object, whose are moved forward.
|
|
|
|
return !PositionLocked();
|
|
|
|
// <--
|
2004-08-03 05:05:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/** method to determine the page frame, on which the 'anchor' of
|
|
|
|
the given anchored object is.
|
|
|
|
|
|
|
|
OD 2004-07-02 #i28701#
|
2004-11-09 12:46:39 +00:00
|
|
|
OD 2004-09-23 #i33751#, #i34060#
|
|
|
|
Adjust meaning of method and thus its name: If the anchored object
|
|
|
|
or its anchor isn't correctly inserted in the layout, no page frame
|
|
|
|
can be found. Thus, the return type changed to be a pointer and can
|
|
|
|
be NULL.
|
2004-08-03 05:05:14 +00:00
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
2004-11-09 12:46:39 +00:00
|
|
|
SwPageFrm* SwAnchoredObject::FindPageFrmOfAnchor()
|
2004-08-03 05:05:14 +00:00
|
|
|
{
|
|
|
|
SwPageFrm* pRetPageFrm = 0L;
|
|
|
|
|
2004-11-16 14:44:00 +00:00
|
|
|
// --> OD 2004-10-08 #i26945# - use new method <GetAnchorFrmContainingAnchPos()>
|
|
|
|
pRetPageFrm = GetAnchorFrmContainingAnchPos()->FindPageFrm();
|
|
|
|
// <--
|
|
|
|
|
|
|
|
return pRetPageFrm;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** get frame, which contains the anchor character, if the object
|
|
|
|
is anchored at-character or as-character.
|
|
|
|
|
|
|
|
OD 2004-10-04 #i26945#
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
|
|
|
|
@return SwTxtFrm*
|
|
|
|
text frame containing the anchor character. It's NULL, if the object
|
|
|
|
isn't anchored at-character resp. as-character.
|
|
|
|
*/
|
|
|
|
SwTxtFrm* SwAnchoredObject::FindAnchorCharFrm()
|
|
|
|
{
|
|
|
|
SwTxtFrm* pAnchorCharFrm( 0L );
|
|
|
|
|
2004-08-03 05:05:14 +00:00
|
|
|
const SwFmtAnchor& rAnch = GetFrmFmt().GetAnchor();
|
|
|
|
if ( rAnch.GetAnchorId() == FLY_AUTO_CNTNT ||
|
|
|
|
rAnch.GetAnchorId() == FLY_IN_CNTNT )
|
|
|
|
{
|
2004-11-16 14:44:00 +00:00
|
|
|
pAnchorCharFrm = &(static_cast<SwTxtFrm*>(AnchorFrm())->
|
|
|
|
GetFrmAtOfst( rAnch.GetCntntAnchor()->nContent.GetIndex() ));
|
2004-08-03 05:05:14 +00:00
|
|
|
}
|
|
|
|
|
2004-11-16 14:44:00 +00:00
|
|
|
return pAnchorCharFrm;
|
2004-08-03 05:05:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/** method to determine, if a format on the anchored object is possible
|
|
|
|
|
|
|
|
OD 2004-07-23 #i28701#
|
|
|
|
A format is possible, if anchored object is in an invisible layer.
|
|
|
|
Note: method is virtual to refine the conditions for the sub-classes.
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
bool SwAnchoredObject::IsFormatPossible() const
|
|
|
|
{
|
|
|
|
return GetFrmFmt().GetDoc()->IsVisibleLayerId( GetDrawObj()->GetLayer() );
|
|
|
|
}
|
2004-09-09 09:56:32 +00:00
|
|
|
|
|
|
|
// --> OD 2004-08-25 #i3317#
|
|
|
|
void SwAnchoredObject::SetTmpConsiderWrapInfluence( const bool _bTmpConsiderWrapInfluence )
|
|
|
|
{
|
|
|
|
mbTmpConsiderWrapInfluence = _bTmpConsiderWrapInfluence;
|
2004-11-16 14:44:00 +00:00
|
|
|
// --> OD 2004-10-22 #i35911#
|
|
|
|
if ( mbTmpConsiderWrapInfluence )
|
|
|
|
{
|
|
|
|
SwLayouter::InsertObjForTmpConsiderWrapInfluence( *(GetFrmFmt().GetDoc()),
|
|
|
|
*this );
|
|
|
|
}
|
|
|
|
// <--
|
2004-09-09 09:56:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
bool SwAnchoredObject::IsTmpConsiderWrapInfluence() const
|
|
|
|
{
|
|
|
|
return mbTmpConsiderWrapInfluence;
|
|
|
|
}
|
|
|
|
// <--
|
|
|
|
|
|
|
|
/** method to determine, if the anchored object is overlapping with a
|
|
|
|
previous column
|
|
|
|
|
|
|
|
OD 2004-08-25 #i3317#
|
|
|
|
overlapping with a previous column means, that the object overlaps
|
|
|
|
with a column, which is a previous one of the column its anchor
|
|
|
|
frame is in.
|
|
|
|
Only applied for at-paragraph and at-character anchored objects.
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
bool SwAnchoredObject::OverlapsPrevColumn() const
|
|
|
|
{
|
|
|
|
bool bOverlapsPrevColumn( false );
|
|
|
|
|
|
|
|
if ( mpAnchorFrm && mpAnchorFrm->IsTxtFrm() )
|
|
|
|
{
|
|
|
|
const SwFrm* pColFrm = mpAnchorFrm->FindColFrm();
|
|
|
|
if ( pColFrm && pColFrm->GetPrev() )
|
|
|
|
{
|
|
|
|
const SwFrm* pTmpColFrm = pColFrm->GetPrev();
|
|
|
|
SwRect aChkRect;
|
|
|
|
while ( pTmpColFrm )
|
|
|
|
{
|
|
|
|
aChkRect.Union( pTmpColFrm->Frm() );
|
|
|
|
pTmpColFrm = pTmpColFrm->GetPrev();
|
|
|
|
}
|
|
|
|
bOverlapsPrevColumn = GetObjRect().IsOver( aChkRect );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return bOverlapsPrevColumn;
|
|
|
|
}
|
2005-01-21 09:33:21 +00:00
|
|
|
|
|
|
|
/** method to determine position of anchored object relative to
|
|
|
|
anchor frame
|
|
|
|
|
|
|
|
OD 2005-01-06 #i30669#
|
|
|
|
Usage: Needed layout information for WW8 export
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
Point SwAnchoredObject::GetRelPosToAnchorFrm() const
|
|
|
|
{
|
|
|
|
Point aRelPos;
|
|
|
|
|
|
|
|
ASSERT( GetAnchorFrm(),
|
|
|
|
"<SwAnchoredObject::GetRelPosToAnchorFrm()> - missing anchor frame." );
|
|
|
|
aRelPos = GetObjRect().Pos();
|
|
|
|
aRelPos -= GetAnchorFrm()->Frm().Pos();
|
|
|
|
|
|
|
|
return aRelPos;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** method to determine position of anchored object relative to
|
|
|
|
page frame
|
|
|
|
|
|
|
|
OD 2005-01-06 #i30669#
|
|
|
|
Usage: Needed layout information for WW8 export
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
Point SwAnchoredObject::GetRelPosToPageFrm() const
|
|
|
|
{
|
|
|
|
Point aRelPos;
|
|
|
|
|
|
|
|
ASSERT( GetAnchorFrm(),
|
|
|
|
"<SwAnchoredObject::GetRelPosToPageFrm()> - missing anchor frame." );
|
|
|
|
ASSERT( GetAnchorFrm()->FindPageFrm(),
|
|
|
|
"<SwAnchoredObject::GetRelPosToPageFrm()> - missing page frame." );
|
|
|
|
|
|
|
|
aRelPos = GetObjRect().Pos();
|
|
|
|
aRelPos -= GetAnchorFrm()->FindPageFrm()->Frm().Pos();
|
|
|
|
|
|
|
|
return aRelPos;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** method to determine position of anchored object relative to
|
|
|
|
anchor character
|
|
|
|
|
|
|
|
OD 2005-01-06 #i30669#
|
|
|
|
Usage: Needed layout information for WW8 export
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
Point SwAnchoredObject::GetRelPosToChar() const
|
|
|
|
{
|
|
|
|
Point aRelPos;
|
|
|
|
|
|
|
|
aRelPos = GetObjRect().Pos();
|
|
|
|
aRelPos -= GetLastCharRect().Pos();
|
|
|
|
|
|
|
|
return aRelPos;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** method to determine position of anchored object relative to
|
|
|
|
top of line
|
|
|
|
|
|
|
|
OD 2005-01-06 #i30669#
|
|
|
|
Usage: Needed layout information for WW8 export
|
|
|
|
|
|
|
|
@author OD
|
|
|
|
*/
|
|
|
|
Point SwAnchoredObject::GetRelPosToLine() const
|
|
|
|
{
|
|
|
|
Point aRelPos;
|
|
|
|
|
|
|
|
aRelPos = GetObjRect().Pos();
|
|
|
|
aRelPos.Y() -= GetLastTopOfLine();
|
|
|
|
|
|
|
|
return aRelPos;
|
|
|
|
}
|