[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-4.4' - sc/source svx/source

Henry Castro hcastro at collabora.com
Thu May 28 06:46:55 PDT 2015


 sc/source/core/data/drwlayer.cxx |   59 +++++++++++++++++++++++++++++++++++++++
 svx/source/svdraw/svdoashp.cxx   |    1 
 2 files changed, 60 insertions(+)

New commits:
commit b1f1c77687e301c99e81631d33298e44bdb5ca84
Author: Henry Castro <hcastro at collabora.com>
Date:   Fri Apr 24 16:55:01 2015 -0400

    Resolves tdf#67712 form controls and draw objects
    
    anchored to cell but changes position after reopening
    
    Also included tdf#68797 "FILEOPEN lost position of lines
    anchored to cell". It was marked as duplicate but the
    step to reproduce are different.
    
    Conflicts:
    	sc/qa/unit/subsequent_filters-test.cxx
    
    Conflicts:
    	sc/qa/unit/subsequent_export-test.cxx
    
    Reviewed-on: https://gerrit.libreoffice.org/15523
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Andras Timar <andras.timar at collabora.com>
    (cherry picked from commit 487880b6882ec01c1b4679eae60bec484272a86b)
    
    Conflicts:
    	sc/qa/unit/subsequent_export-test.cxx
    
    Change-Id: Ia1c4010f118749256077a0ecad6ca16b867d22f7

diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx
index 23e0de3..6649953 100644
--- a/sc/source/core/data/drwlayer.cxx
+++ b/sc/source/core/data/drwlayer.cxx
@@ -27,6 +27,7 @@
 #include <com/sun/star/embed/ElementModes.hpp>
 #include <com/sun/star/embed/NoVisualAreaSizeException.hpp>
 #include <com/sun/star/datatransfer/XTransferable.hpp>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
 
 #include "scitems.hxx"
 #include <editeng/eeitem.hxx>
@@ -116,6 +117,14 @@ void ScUndoObjData::Undo()
         pData->maStart = aOldStt;
         pData->maEnd = aOldEnd;
     }
+
+    // Undo also an untransformed anchor
+    pData = ScDrawLayer::GetNonRotatedObjData( pObj );
+    if (pData)
+    {
+        pData->maStart = aOldStt;
+        pData->maEnd = aOldEnd;
+    }
 }
 
 void ScUndoObjData::Redo()
@@ -127,6 +136,14 @@ void ScUndoObjData::Redo()
         pData->maStart = aNewStt;
         pData->maEnd = aNewEnd;
     }
+
+    // Redo also an untransformed anchor
+    pData = ScDrawLayer::GetNonRotatedObjData( pObj );
+    if (pData)
+    {
+        pData->maStart = aNewStt;
+        pData->maEnd = aNewEnd;
+    }
 }
 
 ScTabDeletedHint::ScTabDeletedHint( SCTAB nTabNo ) :
@@ -495,6 +512,15 @@ void ScDrawLayer::MoveCells( SCTAB nTab, SCCOL nCol1,SCROW nRow1, SCCOL nCol2,SC
             {
                 if ( pObj->ISA( SdrRectObj ) && pData->maStart.IsValid() && pData->maEnd.IsValid() )
                     pData->maStart.PutInOrder( pData->maEnd );
+
+                // Update also an untransformed anchor thats what we stored ( and still do ) to xml
+                ScDrawObjData* pNoRotatedAnchor = GetNonRotatedObjData( pObj, false );
+                if ( pNoRotatedAnchor )
+                {
+                    pNoRotatedAnchor->maStart = pData->maStart;
+                    pNoRotatedAnchor->maEnd = pData->maEnd;
+                }
+
                 AddCalcUndo( new ScUndoObjData( pObj, aOldStt, aOldEnd, pData->maStart, pData->maEnd ) );
                 RecalcPos( pObj, *pData, bNegativePage, bUpdateNoteCaptionPos );
             }
@@ -759,6 +785,39 @@ void ScDrawLayer::RecalcPos( SdrObject* pObj, ScDrawObjData& rData, bool bNegati
         ScDrawObjData& rNoRotatedAnchor = *GetNonRotatedObjData( pObj, true );
         if (rData.maLastRect.IsEmpty())
         {
+            // Every shape it is saved with an negative offset relative to cell
+            if (ScDrawLayer::GetAnchorType(*pObj) == SCA_CELL)
+            {
+                double fRotate(0.0);
+                double fShearX(0.0);
+
+                Point aPoint;
+                Rectangle aRect;
+
+                basegfx::B2DTuple aScale;
+                basegfx::B2DTuple aTranslate;
+                basegfx::B2DPolyPolygon aPolyPolygon;
+                basegfx::B2DHomMatrix aOriginalMatrix;
+
+                aRect = pDoc->GetMMRect(nCol1, nRow1, nCol1 , nRow1, nTab1);
+
+                if (bNegativePage)
+                    aPoint.X() = aRect.Right();
+                else
+                    aPoint.X() = aRect.Left();
+                aPoint.Y() = aRect.Top();
+
+                pObj->TRGetBaseGeometry(aOriginalMatrix, aPolyPolygon);
+                aOriginalMatrix.decompose(aScale, aTranslate, fRotate, fShearX);
+                aTranslate += ::basegfx::B2DTuple(aPoint.X(), aPoint.Y());
+                aOriginalMatrix = basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix(
+                    aScale,
+                    fShearX,
+                    fRotate,
+                    aTranslate);
+                pObj->TRSetBaseGeometry(aOriginalMatrix, aPolyPolygon);
+            }
+
             // It's confusing ( but blame that we persist the anchor in terms of unrotated shape )
             // that the initial anchor we get here is in terms of an unrotated shape ( if the shape is rotated )
             // we need to save the old anchor ( for persisting ) and also track any resize or repositions that happen.
diff --git a/svx/source/svdraw/svdoashp.cxx b/svx/source/svdraw/svdoashp.cxx
index 60910e1..a77d9e9 100644
--- a/svx/source/svdraw/svdoashp.cxx
+++ b/svx/source/svdraw/svdoashp.cxx
@@ -3002,6 +3002,7 @@ void SdrObjCustomShape::TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix,
     }
 
     // reset object shear and rotations
+    fObjectRotation = 0.0;
     aGeo.nRotationAngle = 0;
     aGeo.RecalcSinCos();
     aGeo.nShearAngle = 0;


More information about the Libreoffice-commits mailing list