[libreoffice] fix patch

Caolan McNamara caolanm at fedoraproject.org
Wed Jan 12 16:48:03 UTC 2011


commit eda739924d8634ed900d49af72938e93a19919d4
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Jan 12 16:47:48 2011 +0000

    fix patch

 ...fice.org-3.1.0.ooo102061.sc.cellanchoring.patch |  584 ++++++++++----------
 1 files changed, 292 insertions(+), 292 deletions(-)
---
diff --git a/openoffice.org-3.1.0.ooo102061.sc.cellanchoring.patch b/openoffice.org-3.1.0.ooo102061.sc.cellanchoring.patch
index 550b0fe..08fd19f 100644
--- a/openoffice.org-3.1.0.ooo102061.sc.cellanchoring.patch
+++ b/openoffice.org-3.1.0.ooo102061.sc.cellanchoring.patch
@@ -87,7 +87,7 @@ diff -ru sc.orig/source/core/data/documen3.cxx sc/source/core/data/documen3.cxx
 diff -ru sc.orig/source/core/data/drwlayer.cxx sc/source/core/data/drwlayer.cxx
 --- sc.orig/source/core/data/drwlayer.cxx	2009-06-04 12:39:09.000000000 +0100
 +++ sc/source/core/data/drwlayer.cxx	2009-06-05 12:28:12.000000000 +0100
-@@ -68,6 +68,9 @@
+@@ -69,6 +69,9 @@
  #include <vcl/svapp.hxx>
  #include <unotools/ucbstreamhelper.hxx>
  
@@ -97,8 +97,8 @@ diff -ru sc.orig/source/core/data/drwlayer.cxx sc/source/core/data/drwlayer.cxx
  #include "drwlayer.hxx"
  #include "drawpage.hxx"
  #include "global.hxx"
-@@ -526,7 +529,41 @@
- 	}
+@@ -539,7 +542,41 @@
+     }
  }
  
 -void ScDrawLayer::RecalcPos( SdrObject* pObj, const ScDrawObjData& rData, bool bNegativePage, bool bUpdateNoteCaptionPos )
@@ -138,126 +138,126 @@ diff -ru sc.orig/source/core/data/drwlayer.cxx sc/source/core/data/drwlayer.cxx
 +
 +void ScDrawLayer::RecalcPos( SdrObject* pObj, ScDrawObjData& rData, bool bNegativePage, bool bUpdateNoteCaptionPos )
  {
- 	DBG_ASSERT( pDoc, "ScDrawLayer::RecalcPos - missing document" );
- 	if( !pDoc )
-@@ -565,6 +602,8 @@
+     DBG_ASSERT( pDoc, "ScDrawLayer::RecalcPos - missing document" );
+     if( !pDoc )
+@@ -578,6 +615,8 @@
  
- 	if( bCircle )
- 	{
+     if( bCircle )
+     {
 +		rData.maLastRect = pObj->GetLogicRect();
 +
- 		Point aPos( pDoc->GetColOffset( nCol1, nTab1 ), pDoc->GetRowOffset( nRow1, nTab1 ) );
- 		TwipsToMM( aPos.X() );
- 		TwipsToMM( aPos.Y() );
-@@ -585,11 +624,18 @@
- 		{
- 			if (bRecording)
- 				AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
--			pObj->SetLogicRect(aRect);
+         Point aPos( pDoc->GetColOffset( nCol1, nTab1 ), pDoc->GetRowOffset( nRow1, nTab1 ) );
+         TwipsToMM( aPos.X() );
+         TwipsToMM( aPos.Y() );
+@@ -598,11 +637,18 @@
+         {
+             if (bRecording)
+                 AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
+-            pObj->SetLogicRect(aRect);
 +			rData.maLastRect = lcl_makeSafeRectangle(aRect);
 +			pObj->SetLogicRect(rData.maLastRect);
- 		}
- 	}
- 	else if( bArrow )
- 	{
+         }
+     }
+     else if( bArrow )
+     {
 +		rData.maLastRect = pObj->GetLogicRect();
 +		basegfx::B2DPolygon aCalcPoly;
 +		Point aOrigStartPos(pObj->GetPoint(0));
 +		Point aOrigEndPos(pObj->GetPoint(1));
 +		aCalcPoly.append(basegfx::B2DPoint(aOrigStartPos.X(), aOrigStartPos.Y()));
 +		aCalcPoly.append(basegfx::B2DPoint(aOrigEndPos.X(), aOrigEndPos.Y()));
- 		//!	nicht mehrere Undos fuer ein Objekt erzeugen (hinteres kann dann weggelassen werden)
+         //!	nicht mehrere Undos fuer ein Objekt erzeugen (hinteres kann dann weggelassen werden)
  
          SCCOL nLastCol;
-@@ -610,6 +656,8 @@
- 			{
- 				if (bRecording)
- 					AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
+@@ -623,6 +669,8 @@
+             {
+                 if (bRecording)
+                     AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
 +
 +				rData.maLastRect = lcl_UpdateCalcPoly(aCalcPoly, 0, aStartPos);
- 				pObj->SetPoint( aStartPos, 0 );
- 			}
+                 pObj->SetPoint( aStartPos, 0 );
+             }
  
-@@ -624,6 +672,8 @@
- 				{
- 					if (bRecording)
- 						AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
+@@ -637,6 +685,8 @@
+                 {
+                     if (bRecording)
+                         AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
 +
 +					rData.maLastRect = lcl_UpdateCalcPoly(aCalcPoly, 1, aEndPos);
- 					pObj->SetPoint( aEndPos, 1 );
- 				}
- 			}
-@@ -644,6 +694,8 @@
- 			{
- 				if (bRecording)
- 					AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
+                     pObj->SetPoint( aEndPos, 1 );
+                 }
+             }
+@@ -657,6 +707,8 @@
+             {
+                 if (bRecording)
+                     AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
 +
 +				rData.maLastRect = lcl_UpdateCalcPoly(aCalcPoly, 1, aEndPos);
- 				pObj->SetPoint( aEndPos, 1 );
- 			}
+                 pObj->SetPoint( aEndPos, 1 );
+             }
  
-@@ -660,45 +712,68 @@
- 				{
- 					if (bRecording)
- 						AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
+@@ -673,45 +725,68 @@
+                 {
+                     if (bRecording)
+                         AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
 +
 +					rData.maLastRect = lcl_UpdateCalcPoly(aCalcPoly, 0, aStartPos);
- 					pObj->SetPoint( aStartPos, 0 );
- 				}
- 			}
- 		}
- 	}
--	else								// Referenz-Rahmen
+                     pObj->SetPoint( aStartPos, 0 );
+                 }
+             }
+         }
+     }
+-    else								// Referenz-Rahmen
 +	else
- 	{
+     {
 +		bool bCanResize = bValid2 && !pObj->IsResizeProtect();
 +
 +		//First time positioning, must be able to at least move it
 +		if (rData.maLastRect.IsEmpty())
 +			rData.maLastRect = pObj->GetLogicRect();
 +
- 		DBG_ASSERT( bValid1, "ScDrawLayer::RecalcPos - invalid start position" );
- 		Point aPos( pDoc->GetColOffset( nCol1, nTab1 ), pDoc->GetRowOffset( nRow1, nTab1 ) );
- 		TwipsToMM( aPos.X() );
- 		TwipsToMM( aPos.Y() );
+         DBG_ASSERT( bValid1, "ScDrawLayer::RecalcPos - invalid start position" );
+         Point aPos( pDoc->GetColOffset( nCol1, nTab1 ), pDoc->GetRowOffset( nRow1, nTab1 ) );
+         TwipsToMM( aPos.X() );
+         TwipsToMM( aPos.Y() );
 +		aPos += lcl_calcAvailableDiff(*pDoc, nCol1, nRow1, nTab1, rData.maStartOffset);
  
--		if( bValid2 )
+-        if( bValid2 )
 +		if( bCanResize )
- 		{
--			Point aEnd( pDoc->GetColOffset( nCol2 + 1, nTab2 ), pDoc->GetRowOffset( nRow2 + 1, nTab2 ) );
+         {
+-            Point aEnd( pDoc->GetColOffset( nCol2 + 1, nTab2 ), pDoc->GetRowOffset( nRow2 + 1, nTab2 ) );
 +			Point aEnd( pDoc->GetColOffset( nCol2, nTab2 ), pDoc->GetRowOffset( nRow2, nTab2 ) );
- 			TwipsToMM( aEnd.X() );
- 			TwipsToMM( aEnd.Y() );
+             TwipsToMM( aEnd.X() );
+             TwipsToMM( aEnd.Y() );
 +			aEnd += lcl_calcAvailableDiff(*pDoc, nCol2, nRow2, nTab2, rData.maEndOffset);
  
- 			Rectangle aNew( aPos, aEnd );
- 			if ( bNegativePage )
- 				MirrorRectRTL( aNew );
- 			if ( pObj->GetLogicRect() != aNew )
- 			{
+             Rectangle aNew( aPos, aEnd );
+             if ( bNegativePage )
+                 MirrorRectRTL( aNew );
+             if ( pObj->GetLogicRect() != aNew )
+             {
 +				Rectangle aOld(pObj->GetLogicRect());
 +
- 				if (bRecording)
- 					AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
--				pObj->SetLogicRect(aNew);
+                 if (bRecording)
+                     AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
+-                pObj->SetLogicRect(aNew);
 +			    rData.maLastRect = lcl_makeSafeRectangle(aNew);
 +			    pObj->SetLogicRect(rData.maLastRect);
- 			}
- 		}
- 		else
- 		{
- 			if ( bNegativePage )
--				aPos.X() = -aPos.X();
+             }
+         }
+         else
+         {
+             if ( bNegativePage )
+-                aPos.X() = -aPos.X();
 +				aPos.X() = -aPos.X() - rData.maLastRect.GetWidth();
- 			if ( pObj->GetRelativePos() != aPos )
- 			{
- 				if (bRecording)
- 					AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
+             if ( pObj->GetRelativePos() != aPos )
+             {
+                 if (bRecording)
+                     AddCalcUndo( new SdrUndoGeoObj( *pObj ) );
 +				rData.maLastRect.SetPos( aPos );
- 				pObj->SetRelativePos( aPos );
- 			}
- 		}
+                 pObj->SetRelativePos( aPos );
+             }
+         }
 +
 +		/*
 +		 * If we were not allowed resize the object, then the end cell anchor
@@ -267,193 +267,193 @@ diff -ru sc.orig/source/core/data/drwlayer.cxx sc/source/core/data/drwlayer.cxx
 +		bool bEndAnchorIsBad = !bValid2 || pObj->IsResizeProtect();
 +		if (bEndAnchorIsBad)
 +			ScDrawLayer::UpdateCellAnchorFromPositionEnd(*pObj, *pDoc, nTab1);
- 	}
+     }
  }
  
-@@ -873,151 +948,6 @@
- 	return pRet;
+@@ -886,151 +961,6 @@
+     return pRet;
  }
  
 -//	MoveAreaTwips: all measures are kept in twips
 -void ScDrawLayer::MoveAreaTwips( SCTAB nTab, const Rectangle& rArea,
--		const Point& rMove, const Point& rTopLeft )
+-        const Point& rMove, const Point& rTopLeft )
 -{
--	if (!rMove.X() && !rMove.Y())
--		return; 									// nix
+-    if (!rMove.X() && !rMove.Y())
+-        return; 									// nix
 -
--	SdrPage* pPage = GetPage(static_cast<sal_uInt16>(nTab));
--	DBG_ASSERT(pPage,"Page nicht gefunden");
--	if (!pPage)
--		return;
+-    SdrPage* pPage = GetPage(static_cast<sal_uInt16>(nTab));
+-    DBG_ASSERT(pPage,"Page nicht gefunden");
+-    if (!pPage)
+-        return;
 -
--	BOOL bNegativePage = pDoc && pDoc->IsNegativePage( nTab );
+-    BOOL bNegativePage = pDoc && pDoc->IsNegativePage( nTab );
 -
--	// fuer Shrinking!
--	Rectangle aNew( rArea );
--	BOOL bShrink = FALSE;
--	if ( rMove.X() < 0 || rMove.Y() < 0 )		// verkleinern
--	{
--		if ( rTopLeft != rArea.TopLeft() )		// sind gleich beim Verschieben von Zellen
--		{
--			bShrink = TRUE;
--			aNew.Left() = rTopLeft.X();
--			aNew.Top() = rTopLeft.Y();
--		}
--	}
--	SdrObjListIter aIter( *pPage, IM_FLAT );
--	SdrObject* pObject = aIter.Next();
--	while (pObject)
--	{
--		if( GetAnchor( pObject ) == SCA_CELL )
--		{
--			if ( GetObjData( pObject ) )					// Detektiv-Pfeil ?
--			{
--				// hier nichts
--			}
--			else if ( pObject->ISA( SdrEdgeObj ) )			// Verbinder?
--			{
--				//	hier auch nichts
--				//!	nicht verbundene Enden wie bei Linien (s.u.) behandeln?
--			}
--			else if ( pObject->IsPolyObj() && pObject->GetPointCount()==2 )
--			{
--				for (USHORT i=0; i<2; i++)
--				{
--					BOOL bMoved = FALSE;
--					Point aPoint = pObject->GetPoint(i);
--					lcl_ReverseTwipsToMM( aPoint );
--					if (rArea.IsInside(aPoint))
--					{
--						aPoint += rMove; bMoved = TRUE;
--					}
--					else if (bShrink && aNew.IsInside(aPoint))
--					{
--						//	Punkt ist in betroffener Zelle - Test auf geloeschten Bereich
--						if ( rMove.X() && aPoint.X() >= rArea.Left() + rMove.X() )
--						{
--							aPoint.X() = rArea.Left() + rMove.X() - SHRINK_DIST_TWIPS;
--							if ( aPoint.X() < 0 ) aPoint.X() = 0;
--							bMoved = TRUE;
--						}
--						if ( rMove.Y() && aPoint.Y() >= rArea.Top() + rMove.Y() )
--						{
--							aPoint.Y() = rArea.Top() + rMove.Y() - SHRINK_DIST_TWIPS;
--							if ( aPoint.Y() < 0 ) aPoint.Y() = 0;
--							bMoved = TRUE;
--						}
--					}
--					if( bMoved )
--					{
--						AddCalcUndo( new SdrUndoGeoObj( *pObject ) );
--						lcl_TwipsToMM( aPoint );
--						pObject->SetPoint( aPoint, i );
--					}
--				}
--			}
--			else
--			{
--				Rectangle aObjRect = pObject->GetLogicRect();
--				// aOldMMPos: not converted, millimeters
--				Point aOldMMPos = bNegativePage ? aObjRect.TopRight() : aObjRect.TopLeft();
--				lcl_ReverseTwipsToMM( aObjRect );
--				Point aTopLeft = bNegativePage ? aObjRect.TopRight() : aObjRect.TopLeft();	// logical left
--				Size aMoveSize;
--				BOOL bDoMove = FALSE;
--				if (rArea.IsInside(aTopLeft))
--				{
--					aMoveSize = Size(rMove.X(),rMove.Y());
--					bDoMove = TRUE;
--				}
--				else if (bShrink && aNew.IsInside(aTopLeft))
--				{
--					//	Position ist in betroffener Zelle - Test auf geloeschten Bereich
--					if ( rMove.X() && aTopLeft.X() >= rArea.Left() + rMove.X() )
--					{
--						aMoveSize.Width() = rArea.Left() + rMove.X() - SHRINK_DIST - aTopLeft.X();
--						bDoMove = TRUE;
--					}
--					if ( rMove.Y() && aTopLeft.Y() >= rArea.Top() + rMove.Y() )
--					{
--						aMoveSize.Height() = rArea.Top() + rMove.Y() - SHRINK_DIST - aTopLeft.Y();
--						bDoMove = TRUE;
--					}
--				}
--				if ( bDoMove )
--				{
--					if ( bNegativePage )
--					{
--						if ( aTopLeft.X() + aMoveSize.Width() > 0 )
--							aMoveSize.Width() = -aTopLeft.X();
--					}
--					else
--					{
--						if ( aTopLeft.X() + aMoveSize.Width() < 0 )
--							aMoveSize.Width() = -aTopLeft.X();
--					}
--					if ( aTopLeft.Y() + aMoveSize.Height() < 0 )
--						aMoveSize.Height() = -aTopLeft.Y();
+-    // fuer Shrinking!
+-    Rectangle aNew( rArea );
+-    BOOL bShrink = FALSE;
+-    if ( rMove.X() < 0 || rMove.Y() < 0 )		// verkleinern
+-    {
+-        if ( rTopLeft != rArea.TopLeft() )		// sind gleich beim Verschieben von Zellen
+-        {
+-            bShrink = TRUE;
+-            aNew.Left() = rTopLeft.X();
+-            aNew.Top() = rTopLeft.Y();
+-        }
+-    }
+-    SdrObjListIter aIter( *pPage, IM_FLAT );
+-    SdrObject* pObject = aIter.Next();
+-    while (pObject)
+-    {
+-        if( GetAnchor( pObject ) == SCA_CELL )
+-        {
+-            if ( GetObjData( pObject ) )					// Detektiv-Pfeil ?
+-            {
+-                // hier nichts
+-            }
+-            else if ( pObject->ISA( SdrEdgeObj ) )			// Verbinder?
+-            {
+-                //	hier auch nichts
+-                //!	nicht verbundene Enden wie bei Linien (s.u.) behandeln?
+-            }
+-            else if ( pObject->IsPolyObj() && pObject->GetPointCount()==2 )
+-            {
+-                for (USHORT i=0; i<2; i++)
+-                {
+-                    BOOL bMoved = FALSE;
+-                    Point aPoint = pObject->GetPoint(i);
+-                    lcl_ReverseTwipsToMM( aPoint );
+-                    if (rArea.IsInside(aPoint))
+-                    {
+-                        aPoint += rMove; bMoved = TRUE;
+-                    }
+-                    else if (bShrink && aNew.IsInside(aPoint))
+-                    {
+-                        //	Punkt ist in betroffener Zelle - Test auf geloeschten Bereich
+-                        if ( rMove.X() && aPoint.X() >= rArea.Left() + rMove.X() )
+-                        {
+-                            aPoint.X() = rArea.Left() + rMove.X() - SHRINK_DIST_TWIPS;
+-                            if ( aPoint.X() < 0 ) aPoint.X() = 0;
+-                            bMoved = TRUE;
+-                        }
+-                        if ( rMove.Y() && aPoint.Y() >= rArea.Top() + rMove.Y() )
+-                        {
+-                            aPoint.Y() = rArea.Top() + rMove.Y() - SHRINK_DIST_TWIPS;
+-                            if ( aPoint.Y() < 0 ) aPoint.Y() = 0;
+-                            bMoved = TRUE;
+-                        }
+-                    }
+-                    if( bMoved )
+-                    {
+-                        AddCalcUndo( new SdrUndoGeoObj( *pObject ) );
+-                        lcl_TwipsToMM( aPoint );
+-                        pObject->SetPoint( aPoint, i );
+-                    }
+-                }
+-            }
+-            else
+-            {
+-                Rectangle aObjRect = pObject->GetLogicRect();
+-                // aOldMMPos: not converted, millimeters
+-                Point aOldMMPos = bNegativePage ? aObjRect.TopRight() : aObjRect.TopLeft();
+-                lcl_ReverseTwipsToMM( aObjRect );
+-                Point aTopLeft = bNegativePage ? aObjRect.TopRight() : aObjRect.TopLeft();	// logical left
+-                Size aMoveSize;
+-                BOOL bDoMove = FALSE;
+-                if (rArea.IsInside(aTopLeft))
+-                {
+-                    aMoveSize = Size(rMove.X(),rMove.Y());
+-                    bDoMove = TRUE;
+-                }
+-                else if (bShrink && aNew.IsInside(aTopLeft))
+-                {
+-                    //	Position ist in betroffener Zelle - Test auf geloeschten Bereich
+-                    if ( rMove.X() && aTopLeft.X() >= rArea.Left() + rMove.X() )
+-                    {
+-                        aMoveSize.Width() = rArea.Left() + rMove.X() - SHRINK_DIST - aTopLeft.X();
+-                        bDoMove = TRUE;
+-                    }
+-                    if ( rMove.Y() && aTopLeft.Y() >= rArea.Top() + rMove.Y() )
+-                    {
+-                        aMoveSize.Height() = rArea.Top() + rMove.Y() - SHRINK_DIST - aTopLeft.Y();
+-                        bDoMove = TRUE;
+-                    }
+-                }
+-                if ( bDoMove )
+-                {
+-                    if ( bNegativePage )
+-                    {
+-                        if ( aTopLeft.X() + aMoveSize.Width() > 0 )
+-                            aMoveSize.Width() = -aTopLeft.X();
+-                    }
+-                    else
+-                    {
+-                        if ( aTopLeft.X() + aMoveSize.Width() < 0 )
+-                            aMoveSize.Width() = -aTopLeft.X();
+-                    }
+-                    if ( aTopLeft.Y() + aMoveSize.Height() < 0 )
+-                        aMoveSize.Height() = -aTopLeft.Y();
 -
--					//	get corresponding move size in millimeters:
--					Point aNewPos( aTopLeft.X() + aMoveSize.Width(), aTopLeft.Y() + aMoveSize.Height() );
--					lcl_TwipsToMM( aNewPos );
--					aMoveSize = Size( aNewPos.X() - aOldMMPos.X(), aNewPos.Y() - aOldMMPos.Y() );	// millimeters
+-                    //	get corresponding move size in millimeters:
+-                    Point aNewPos( aTopLeft.X() + aMoveSize.Width(), aTopLeft.Y() + aMoveSize.Height() );
+-                    lcl_TwipsToMM( aNewPos );
+-                    aMoveSize = Size( aNewPos.X() - aOldMMPos.X(), aNewPos.Y() - aOldMMPos.Y() );	// millimeters
 -
--					AddCalcUndo( new SdrUndoMoveObj( *pObject, aMoveSize ) );
--					pObject->Move( aMoveSize );
--				}
--				else if ( rArea.IsInside( bNegativePage ? aObjRect.BottomLeft() : aObjRect.BottomRight() ) &&
--							!pObject->IsResizeProtect() )
--				{
--					//	geschuetzte Groessen werden nicht veraendert
--					//	(Positionen schon, weil sie ja an der Zelle "verankert" sind)
--					AddCalcUndo( new SdrUndoGeoObj( *pObject ) );
--					long nOldSizeX = aObjRect.Right() - aObjRect.Left() + 1;
--					long nOldSizeY = aObjRect.Bottom() - aObjRect.Top() + 1;
--					long nLogMoveX = rMove.X() * ( bNegativePage ? -1 : 1 );	// logical direction
--					pObject->Resize( aOldMMPos, Fraction( nOldSizeX+nLogMoveX, nOldSizeX ),
--												Fraction( nOldSizeY+rMove.Y(), nOldSizeY ) );
--				}
--			}
--		}
--		pObject = aIter.Next();
--	}
+-                    AddCalcUndo( new SdrUndoMoveObj( *pObject, aMoveSize ) );
+-                    pObject->Move( aMoveSize );
+-                }
+-                else if ( rArea.IsInside( bNegativePage ? aObjRect.BottomLeft() : aObjRect.BottomRight() ) &&
+-                            !pObject->IsResizeProtect() )
+-                {
+-                    //	geschuetzte Groessen werden nicht veraendert
+-                    //	(Positionen schon, weil sie ja an der Zelle "verankert" sind)
+-                    AddCalcUndo( new SdrUndoGeoObj( *pObject ) );
+-                    long nOldSizeX = aObjRect.Right() - aObjRect.Left() + 1;
+-                    long nOldSizeY = aObjRect.Bottom() - aObjRect.Top() + 1;
+-                    long nLogMoveX = rMove.X() * ( bNegativePage ? -1 : 1 );	// logical direction
+-                    pObject->Resize( aOldMMPos, Fraction( nOldSizeX+nLogMoveX, nOldSizeX ),
+-                                                Fraction( nOldSizeY+rMove.Y(), nOldSizeY ) );
+-                }
+-            }
+-        }
+-        pObject = aIter.Next();
+-    }
 -}
 -
  void ScDrawLayer::MoveArea( SCTAB nTab, SCCOL nCol1,SCROW nRow1, SCCOL nCol2,SCROW nRow2,
- 							SCsCOL nDx,SCsROW nDy, BOOL bInsDel, bool bUpdateNoteCaptionPos )
+                             SCsCOL nDx,SCsROW nDy, BOOL bInsDel, bool bUpdateNoteCaptionPos )
  {
-@@ -1059,11 +989,6 @@
- 			aTopLeft.Y() += aMove.Y();
- 	}
+@@ -1072,11 +1002,6 @@
+             aTopLeft.Y() += aMove.Y();
+     }
  
--	//	drawing objects are now directly included in cut&paste
--	//	-> only update references when inserting/deleting (or changing widths or heights)
--	if ( bInsDel )
--		MoveAreaTwips( nTab, aRect, aMove, aTopLeft );
+-    //	drawing objects are now directly included in cut&paste
+-    //	-> only update references when inserting/deleting (or changing widths or heights)
+-    if ( bInsDel )
+-        MoveAreaTwips( nTab, aRect, aMove, aTopLeft );
 -
- 		//
- 		//		Detektiv-Pfeile: Zellpositionen anpassen
- 		//
-@@ -1101,8 +1026,6 @@
- 		aTopLeft.X() = -aTopLeft.X();
- 		nDifTwips = -nDifTwips;
- 	}
+         //
+         //		Detektiv-Pfeile: Zellpositionen anpassen
+         //
+@@ -1114,8 +1039,6 @@
+         aTopLeft.X() = -aTopLeft.X();
+         nDifTwips = -nDifTwips;
+     }
 -
--	MoveAreaTwips( nTab, aRect, Point( nDifTwips,0 ), aTopLeft );
+-    MoveAreaTwips( nTab, aRect, Point( nDifTwips,0 ), aTopLeft );
  }
  
  void ScDrawLayer::HeightChanged( SCTAB nTab, SCROW nRow, long nDifTwips )
-@@ -1133,8 +1056,6 @@
- 		MirrorRectRTL( aRect );
- 		aTopLeft.X() = -aTopLeft.X();
- 	}
+@@ -1146,8 +1069,6 @@
+         MirrorRectRTL( aRect );
+         aTopLeft.X() = -aTopLeft.X();
+     }
 -
--	MoveAreaTwips( nTab, aRect, Point( 0,nDifTwips ), aTopLeft );
+-    MoveAreaTwips( nTab, aRect, Point( 0,nDifTwips ), aTopLeft );
  }
  
- BOOL ScDrawLayer::HasObjectsInRows( SCTAB nTab, SCROW nStartRow, SCROW nEndRow )
-@@ -1846,35 +1767,105 @@
- 	}
+ BOOL ScDrawLayer::HasObjectsInRows( SCTAB nTab, SCROW nStartRow, SCROW nEndRow, bool bIncludeNotes )
+@@ -1823,35 +1744,105 @@
+     }
  }
  
 -void ScDrawLayer::SetAnchor( SdrObject* pObj, ScAnchorType eType )
@@ -484,7 +484,8 @@ diff -ru sc.orig/source/core/data/drwlayer.cxx sc/source/core/data/drwlayer.cxx
 +}
 +
 +void ScDrawLayer::SetCellAnchored( SdrObject &rObj, const ScDrawObjData &rAnchor )
-+{
+ {
+-    ScAnchorType eOldAnchorType = GetAnchor( pObj );
 +    ScDrawObjData* pAnchor = GetObjData( &rObj, true );
 +    pAnchor->maStart = rAnchor.maStart;
 +    pAnchor->maEnd = rAnchor.maEnd;
@@ -508,7 +509,11 @@ diff -ru sc.orig/source/core/data/drwlayer.cxx sc/source/core/data/drwlayer.cxx
 +        aAnchor.maStartOffset.X() = aObjRect.Left()-aCellRect.Left();
 +    else
 +        aAnchor.maStartOffset.X() = aCellRect.Right()-aObjRect.Right();
-+
+ 
+-    // Ein an der Seite verankertes Objekt zeichnet sich durch eine Anker-Pos
+-    // von (0,1) aus. Das ist ein shabby Trick, der aber funktioniert!
+-    Point aAnchor( 0, eType == SCA_PAGE ? 1 : 0 );
+-    pObj->SetAnchorPos( aAnchor );
 +    aAnchor.maEnd = aRange.aEnd;
 +    aCellRect = rDoc.GetMMRect( aRange.aEnd.Col(), aRange.aEnd.Row(), 
 +      aRange.aEnd.Col(), aRange.aEnd.Row(), aRange.aEnd.Tab() );
@@ -517,20 +522,20 @@ diff -ru sc.orig/source/core/data/drwlayer.cxx sc/source/core/data/drwlayer.cxx
 +        aAnchor.maEndOffset.X() = aObjRect.Right()-aCellRect.Left();
 +    else
 +        aAnchor.maEndOffset.X() = aCellRect.Right()-aObjRect.Left();
-+
+ 
+-    if ( eOldAnchorType != eType )
+-        pObj->notifyShapePropertyChange( ::svx::eSpreadsheetAnchor );
 +    SetCellAnchored( rObj, aAnchor );
-+}
-+
+ }
+ 
+-ScAnchorType ScDrawLayer::GetAnchor( const SdrObject* pObj )
 +void ScDrawLayer::UpdateCellAnchorFromPositionEnd( SdrObject &rObj, const ScDocument &rDoc, SCTAB nTab )
  {
--    ScAnchorType eOldAnchorType = GetAnchor( pObj );
+-    Point aAnchor( pObj->GetAnchorPos() );
+-    return ( aAnchor.Y() != 0 ) ? SCA_PAGE : SCA_CELL;
 +    Rectangle aObjRect(rObj.GetLogicRect());
 +    ScRange aRange = rDoc.GetRange( nTab, aObjRect );
- 
--    // Ein an der Seite verankertes Objekt zeichnet sich durch eine Anker-Pos
--	// von (0,1) aus. Das ist ein shabby Trick, der aber funktioniert!
--	Point aAnchor( 0, eType == SCA_PAGE ? 1 : 0 );
--	pObj->SetAnchorPos( aAnchor );
++
 +    ScDrawObjData* pAnchor = GetObjData( &rObj, true );
 +    pAnchor->maEnd = aRange.aEnd;
 +
@@ -543,19 +548,14 @@ diff -ru sc.orig/source/core/data/drwlayer.cxx sc/source/core/data/drwlayer.cxx
 +    else
 +        pAnchor->maEndOffset.X() = aCellRect.Right()-aObjRect.Left();
 +}
- 
--    if ( eOldAnchorType != eType )
--        pObj->notifyShapePropertyChange( ::svx::eSpreadsheetAnchor );
++
 +void ScDrawLayer::SetPageAnchored( SdrObject &rObj )
 +{
 +    DeleteFirstUserDataOfType(&rObj, SC_UD_OBJDATA);
- }
- 
--ScAnchorType ScDrawLayer::GetAnchor( const SdrObject* pObj )
++}
++
 +ScAnchorType ScDrawLayer::GetAnchorType( const SdrObject &rObj )
- {
--	Point aAnchor( pObj->GetAnchorPos() );
--	return ( aAnchor.Y() != 0 ) ? SCA_PAGE : SCA_CELL;
++{
 +	//If this object has a cell anchor associated with it
 +	//then its cell-anchored, otherwise its page-anchored
 +	return ScDrawLayer::GetObjData(const_cast<SdrObject*>(&rObj)) ? SCA_CELL : SCA_PAGE;
@@ -563,47 +563,47 @@ diff -ru sc.orig/source/core/data/drwlayer.cxx sc/source/core/data/drwlayer.cxx
  
  ScDrawObjData* ScDrawLayer::GetObjData( SdrObject* pObj, BOOL bCreate )		// static
  {
--	USHORT nCount = pObj ? pObj->GetUserDataCount() : 0;
--	for( USHORT i = 0; i < nCount; i++ )
--	{
--		SdrObjUserData* pData = pObj->GetUserData( i );
--		if( pData && pData->GetInventor() == SC_DRAWLAYER
--					&& pData->GetId() == SC_UD_OBJDATA )
--			return (ScDrawObjData*) pData;
--	}
+-    USHORT nCount = pObj ? pObj->GetUserDataCount() : 0;
+-    for( USHORT i = 0; i < nCount; i++ )
+-    {
+-        SdrObjUserData* pData = pObj->GetUserData( i );
+-        if( pData && pData->GetInventor() == SC_DRAWLAYER
+-                    && pData->GetId() == SC_UD_OBJDATA )
+-            return (ScDrawObjData*) pData;
+-    }
 +	if (SdrObjUserData *pData = GetFirstUserDataOfType(pObj, SC_UD_OBJDATA))
 +		return (ScDrawObjData*) pData;
 +
- 	if( pObj && bCreate )
- 	{
- 		ScDrawObjData* pData = new ScDrawObjData;
-@@ -1911,15 +1902,7 @@
+     if( pObj && bCreate )
+     {
+         ScDrawObjData* pData = new ScDrawObjData;
+@@ -1888,15 +1879,7 @@
  
  ScIMapInfo* ScDrawLayer::GetIMapInfo( SdrObject* pObj )				// static
  {
--	USHORT nCount = pObj->GetUserDataCount();
--	for( USHORT i = 0; i < nCount; i++ )
--	{
--		SdrObjUserData* pData = pObj->GetUserData( i );
--		if( pData && pData->GetInventor() == SC_DRAWLAYER
--					&& pData->GetId() == SC_UD_IMAPDATA )
--			return (ScIMapInfo*) pData;
--	}
--	return NULL;
+-    USHORT nCount = pObj->GetUserDataCount();
+-    for( USHORT i = 0; i < nCount; i++ )
+-    {
+-        SdrObjUserData* pData = pObj->GetUserData( i );
+-        if( pData && pData->GetInventor() == SC_DRAWLAYER
+-                    && pData->GetId() == SC_UD_IMAPDATA )
+-            return (ScIMapInfo*) pData;
+-    }
+-    return NULL;
 +	return (ScIMapInfo*)GetFirstUserDataOfType(pObj, SC_UD_IMAPDATA);
  }
  
  // static:
-@@ -1972,7 +1955,7 @@
- 		else if ( pObj->ISA( SdrOle2Obj ) ) // OLE-Objekt
- 		{
+@@ -1949,7 +1932,7 @@
+         else if ( pObj->ISA( SdrOle2Obj ) ) // OLE-Objekt
+         {
              // TODO/LEAN: working with visual area needs running state
--			aGraphSize = ((SdrOle2Obj*)pObj)->GetOrigObjSize();
+-            aGraphSize = ((SdrOle2Obj*)pObj)->GetOrigObjSize();
 +			aGraphSize = ((const SdrOle2Obj*)pObj)->GetOrigObjSize();
- 			bObjSupported = TRUE;
- 		}
+             bObjSupported = TRUE;
+         }
  
-@@ -1990,14 +1973,9 @@
+@@ -1967,14 +1950,9 @@
  
  ScMacroInfo* ScDrawLayer::GetMacroInfo( SdrObject* pObj, BOOL bCreate )             // static
  {


More information about the scm-commits mailing list