diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-04-13 15:09:53 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-04-13 20:20:09 +0200 |
commit | c8b976ac64c9cac360f7c4fd9844fcfac7ba25a8 (patch) | |
tree | 2c03d7f7ff35fc5e3a80721a70a26009dcf1618c | |
parent | f762607ae0f1ea02323401de387318b7b0f09a36 (diff) |
tdf#116985 sw: fix geometry of textbox of shape with relative size
Relative size of shapes are calculated by the layout, so the normal doc
model-level synchronization between the shape and its textbox was not
enough.
Change-Id: Ia6f460132efaf03a7ba3a023cf751f6fff74404d
Reviewed-on: https://gerrit.libreoffice.org/52831
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/tdf116985.docx | bin | 0 -> 13508 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport11.cxx | 10 | ||||
-rw-r--r-- | sw/source/core/layout/anchoreddrawobject.cxx | 17 |
3 files changed, 26 insertions, 1 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf116985.docx b/sw/qa/extras/ooxmlexport/data/tdf116985.docx Binary files differnew file mode 100644 index 000000000000..2a8e2023884d --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf116985.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx index ea584e6c6ef9..9e7d943d3e37 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx @@ -359,6 +359,16 @@ DECLARE_OOXMLEXPORT_TEST(testTdf116976, "tdf116976.docx") getProperty<sal_Int16>(getShape(1), "RelativeWidth")); } +DECLARE_OOXMLEXPORT_TEST(testTdf116985, "tdf116985.docx") +{ + // Body frame width is 10800, 40% is the requested relative width, with 144 + // spacing to text on the left/right side. So ideal width would be 4032, + // was 3431. Allow one pixel tolerance, though. + sal_Int32 nWidth + = parseDump("/root/page[1]/body/txt[1]/anchored/fly/infos/bounds", "width").toInt32(); + CPPUNIT_ASSERT(nWidth > 4000); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/layout/anchoreddrawobject.cxx b/sw/source/core/layout/anchoreddrawobject.cxx index 8f96c6fd8bca..e1afbd3feb3a 100644 --- a/sw/source/core/layout/anchoreddrawobject.cxx +++ b/sw/source/core/layout/anchoreddrawobject.cxx @@ -32,6 +32,8 @@ #include <IDocumentState.hxx> #include <txtfly.hxx> #include <viewimp.hxx> +#include <textboxhelper.hxx> +#include <unomid.h> using namespace ::com::sun::star; @@ -659,9 +661,22 @@ const SwRect SwAnchoredDrawObject::GetObjBoundRect() const bool bEnableSetModified = pDoc->getIDocumentState().IsEnableSetModified(); pDoc->getIDocumentState().SetEnableSetModified(false); - const_cast< SdrObject* >( GetDrawObj() )->Resize( aCurrObjRect.TopLeft(), + auto pObject = const_cast<SdrObject*>(GetDrawObj()); + pObject->Resize( aCurrObjRect.TopLeft(), Fraction( nTargetWidth, aCurrObjRect.GetWidth() ), Fraction( nTargetHeight, aCurrObjRect.GetHeight() ), false ); + + if (SwFrameFormat* pFrameFormat = FindFrameFormat(pObject)) + { + if (SwTextBoxHelper::isTextBox(pFrameFormat, RES_DRAWFRMFMT)) + { + // Shape has relative size and also a textbox, update its text area as well. + uno::Reference<drawing::XShape> xShape(pObject->getUnoShape(), uno::UNO_QUERY); + SwTextBoxHelper::syncProperty(pFrameFormat, RES_FRM_SIZE, MID_FRMSIZE_SIZE, + uno::makeAny(xShape->getSize())); + } + } + pDoc->getIDocumentState().SetEnableSetModified(bEnableSetModified); } } |