[Libreoffice-commits] core.git: sw/source

László Németh laszlo.nemeth at collabora.com
Wed May 13 09:14:01 PDT 2015


 sw/source/core/doc/textboxhelper.cxx                        |    8 ++++
 sw/source/core/objectpositioning/anchoredobjectposition.cxx |   24 +++++++++++-
 2 files changed, 31 insertions(+), 1 deletion(-)

New commits:
commit a4dee94afed9ade6ac50237c8d99a6e49d3bebc1
Author: László Németh <laszlo.nemeth at collabora.com>
Date:   Wed May 13 17:47:36 2015 +0200

    tdf#91260: allow textboxes extending beyond the page bottom
    
    This commit fixes layout problems of DOCX import, but also
    now it's possible to move a textbox beyond the page bottom
    using the arrow keys (this worked only for page-anchored
    shapes in Writer).
    
    Change-Id: Ie83d3202a2248d948348656aa26df20982f9675b

diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx
index eb9ed84..f09e2e9 100644
--- a/sw/source/core/doc/textboxhelper.cxx
+++ b/sw/source/core/doc/textboxhelper.cxx
@@ -636,6 +636,14 @@ void SwTextBoxHelper::syncFlyFrmAttr(SwFrmFmt& rShape, SfxItemSet& rSet)
                     aOrient.SetPos(aOrient.GetPos() + aRect.getY());
 
                 aTextBoxSet.Put(aOrient);
+
+                // restore height (shrinked for extending beyond the page bottom - tdf#91260)
+                SwFmtFrmSize aSize(pFmt->GetFrmSize());
+                if (!aRect.IsEmpty())
+                {
+                    aSize.SetHeight(aRect.getHeight());
+                    aTextBoxSet.Put(aSize);
+                }
             }
             break;
             case RES_HORI_ORIENT:
diff --git a/sw/source/core/objectpositioning/anchoredobjectposition.cxx b/sw/source/core/objectpositioning/anchoredobjectposition.cxx
index c7b916a..54bf5e0 100644
--- a/sw/source/core/objectpositioning/anchoredobjectposition.cxx
+++ b/sw/source/core/objectpositioning/anchoredobjectposition.cxx
@@ -19,6 +19,7 @@
 
 #include <anchoredobjectposition.hxx>
 #include <environmentofanchoredobject.hxx>
+#include <doc.hxx>
 #include <flyfrm.hxx>
 #include <flyfrms.hxx>
 #include <txtfrm.hxx>
@@ -29,6 +30,7 @@
 #include <dcontact.hxx>
 #include <frmfmt.hxx>
 #include <fmtornt.hxx>
+#include <fmtfsize.hxx>
 #include <fmtfollowtextflow.hxx>
 #include <editeng/lrspitem.hxx>
 #include <editeng/ulspitem.hxx>
@@ -471,8 +473,28 @@ SwTwips SwAnchoredObjectPosition::_ImplAdjustVertRelPos( const SwTwips nTopOfAnc
         {
             nAdjustedRelPosY = aPgAlignArea.Top() - nTopOfAnch;
         }
-    }
 
+        // tdf#91260 - allow textboxes extending beyond the page bottom
+        if ( nAdjustedRelPosY < nProposedRelPosY )
+        {
+            const SwFrmFmt* pFmt = &(GetFrmFmt());
+            if ( SwTextBoxHelper::isTextBox(&GetObject()) )
+            {
+                // shrink textboxes to extend beyond the page bottom
+                SwFrmFmt* pFrmFmt = ::FindFrmFmt(&GetObject());
+                SfxItemSet aTextBoxSet(pFrmFmt->GetDoc()->GetAttrPool(), aFrmFmtSetRange);
+                SwFmtFrmSize aSize(pFmt->GetFrmSize());
+                SwTwips nShrinked = aSize.GetHeight() - (nProposedRelPosY - nAdjustedRelPosY);
+                aSize.SetHeight( nShrinked > 0 ? nShrinked : 0 );
+                aTextBoxSet.Put(aSize);
+                if (aTextBoxSet.Count())
+                    pFrmFmt->GetDoc()->SetFlyFrmAttr(*pFrmFmt, aTextBoxSet);
+                nAdjustedRelPosY = nProposedRelPosY;
+            } else if ( SwTextBoxHelper::findTextBox(pFmt) )
+                // when the shape has a textbox, use only the proposed vertical position
+                nAdjustedRelPosY = nProposedRelPosY;
+        }
+    }
     return nAdjustedRelPosY;
 }
 


More information about the Libreoffice-commits mailing list