sw/inc/textboxhelper.hxx | 6 +-- sw/source/core/doc/textboxhelper.cxx | 69 ++++++++++++++++++++++++----------- sw/source/core/unocore/unodraw.cxx | 4 +- 3 files changed, 54 insertions(+), 25 deletions(-)
New commits: commit ac687b4d6a1b853ca5a70e2f06b705764d400bcc Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu May 29 14:28:40 2014 +0200 SwTextBoxHelper: use UNO_NAME_* constants Change-Id: Ie2ce95f46c19fa6c693619242a65bccc442a7fe7 diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx index a1a14dc..02980e3 100644 --- a/sw/source/core/doc/textboxhelper.cxx +++ b/sw/source/core/doc/textboxhelper.cxx @@ -18,8 +18,10 @@ #include <unotextbodyhf.hxx> #include <unotextrange.hxx> #include <unomid.h> +#include <unoprnms.hxx> #include <dflyobj.hxx> +#include <editeng/unoprnms.hxx> #include <svx/svdoashp.hxx> #include <svx/unopage.hxx> #include <svx/svdpage.hxx> @@ -47,14 +49,14 @@ void SwTextBoxHelper::create(SwFrmFmt* pShape) // Initialize properties. uno::Reference<beans::XPropertySet> xPropertySet(xTextFrame, uno::UNO_QUERY); uno::Any aEmptyBorder = uno::makeAny(table::BorderLine2()); - xPropertySet->setPropertyValue("TopBorder", aEmptyBorder); - xPropertySet->setPropertyValue("BottomBorder", aEmptyBorder); - xPropertySet->setPropertyValue("LeftBorder", aEmptyBorder); - xPropertySet->setPropertyValue("RightBorder", aEmptyBorder); + xPropertySet->setPropertyValue(UNO_NAME_TOP_BORDER, aEmptyBorder); + xPropertySet->setPropertyValue(UNO_NAME_BOTTOM_BORDER, aEmptyBorder); + xPropertySet->setPropertyValue(UNO_NAME_LEFT_BORDER, aEmptyBorder); + xPropertySet->setPropertyValue(UNO_NAME_RIGHT_BORDER, aEmptyBorder); - xPropertySet->setPropertyValue("FillTransparence", uno::makeAny(sal_Int32(100))); + xPropertySet->setPropertyValue(UNO_NAME_FILL_TRANSPARENCE, uno::makeAny(sal_Int32(100))); - xPropertySet->setPropertyValue("SizeType", uno::makeAny(text::SizeType::FIX)); + xPropertySet->setPropertyValue(UNO_NAME_SIZE_TYPE, uno::makeAny(text::SizeType::FIX)); // Link its text range to the original shape. uno::Reference<text::XTextRange> xTextBox(xTextFrame, uno::UNO_QUERY_THROW); @@ -72,12 +74,12 @@ void SwTextBoxHelper::create(SwFrmFmt* pShape) syncProperty(pShape, RES_FRM_SIZE, MID_FRMSIZE_SIZE, uno::makeAny(xShape->getSize())); uno::Reference<beans::XPropertySet> xShapePropertySet(xShape, uno::UNO_QUERY); - syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_ORIENT, xShapePropertySet->getPropertyValue("HoriOrient")); - syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_RELATION, xShapePropertySet->getPropertyValue("HoriOrientRelation")); - syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_ORIENT, xShapePropertySet->getPropertyValue("VertOrient")); - syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_RELATION, xShapePropertySet->getPropertyValue("VertOrientRelation")); - syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_POSITION, xShapePropertySet->getPropertyValue("HoriOrientPosition")); - syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_POSITION, xShapePropertySet->getPropertyValue("VertOrientPosition")); + syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_ORIENT, xShapePropertySet->getPropertyValue(UNO_NAME_HORI_ORIENT)); + syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_RELATION, xShapePropertySet->getPropertyValue(UNO_NAME_HORI_ORIENT_RELATION)); + syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_ORIENT, xShapePropertySet->getPropertyValue(UNO_NAME_VERT_ORIENT)); + syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_RELATION, xShapePropertySet->getPropertyValue(UNO_NAME_VERT_ORIENT_RELATION)); + syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_POSITION, xShapePropertySet->getPropertyValue(UNO_NAME_HORI_ORIENT_POSITION)); + syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_POSITION, xShapePropertySet->getPropertyValue(UNO_NAME_VERT_ORIENT_POSITION)); } } @@ -247,13 +249,13 @@ void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 switch (nMemberId) { case MID_HORIORIENT_ORIENT: - aPropertyName = "HoriOrient"; + aPropertyName = UNO_NAME_HORI_ORIENT; break; case MID_HORIORIENT_RELATION: - aPropertyName = "HoriOrientRelation"; + aPropertyName = UNO_NAME_HORI_ORIENT_RELATION; break; case MID_HORIORIENT_POSITION: - aPropertyName = "HoriOrientPosition"; + aPropertyName = UNO_NAME_HORI_ORIENT_POSITION; bAdjustX = true; break; } @@ -262,19 +264,19 @@ void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 switch (nMemberId) { case MID_VERTORIENT_ORIENT: - aPropertyName = "VertOrient"; + aPropertyName = UNO_NAME_VERT_ORIENT; break; case MID_VERTORIENT_RELATION: - aPropertyName = "VertOrientRelation"; + aPropertyName = UNO_NAME_VERT_ORIENT_RELATION; break; case MID_VERTORIENT_POSITION: - aPropertyName = "VertOrientPosition"; + aPropertyName = UNO_NAME_VERT_ORIENT_POSITION; bAdjustY = true; break; } break; case RES_FRM_SIZE: - aPropertyName = "Size"; + aPropertyName = UNO_NAME_SIZE; bAdjustSize = true; break; case RES_ANCHOR: @@ -284,7 +286,7 @@ void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 if (aValue.get<text::TextContentAnchorType>() == text::TextContentAnchorType_AS_CHARACTER) { uno::Reference<beans::XPropertySet> xPropertySet(static_cast<cppu::OWeakObject*>(SwXFrames::GetObject(*pFmt, FLYCNTTYPE_FRM)), uno::UNO_QUERY); - xPropertySet->setPropertyValue("Surround", uno::makeAny(text::WrapTextMode_THROUGHT)); + xPropertySet->setPropertyValue(UNO_NAME_SURROUND, uno::makeAny(text::WrapTextMode_THROUGHT)); return; } break; commit 6823b19257c56ba6be2b102e91788f9ef86113ef Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu May 29 12:29:18 2014 +0200 SwTextBoxHelper::syncProperty(): no need to pass the property name Change-Id: Ic2f6ae15fd81826d2bc6f8796e33c3c93b34e240 diff --git a/sw/inc/textboxhelper.hxx b/sw/inc/textboxhelper.hxx index cb0a643..5deb5f6 100644 --- a/sw/inc/textboxhelper.hxx +++ b/sw/inc/textboxhelper.hxx @@ -37,7 +37,7 @@ public: /// Get interface of a shape's TextBox, if there is any. static css::uno::Any queryInterface(SwFrmFmt* pShape, const css::uno::Type& rType); /// Sync property of TextBox with the one of the shape. - static void syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 nMemberID, const OUString& rPropertyName, const css::uno::Any& rValue); + static void syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 nMemberID, const css::uno::Any& rValue); /// If we have an associated TextFrame, then return that. static SwFrmFmt* findTextBox(SwFrmFmt* pShape); /// Return the textbox rectangle of a draw shape (in twips). diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx index ad4bf62..a1a14dc 100644 --- a/sw/source/core/doc/textboxhelper.cxx +++ b/sw/source/core/doc/textboxhelper.cxx @@ -69,15 +69,15 @@ void SwTextBoxHelper::create(SwFrmFmt* pShape) // Also initialize the properties, which are not constant, but inherited from the shape's ones. uno::Reference<drawing::XShape> xShape(pShape->FindRealSdrObject()->getUnoShape(), uno::UNO_QUERY); - syncProperty(pShape, RES_FRM_SIZE, MID_FRMSIZE_SIZE, "Size", uno::makeAny(xShape->getSize())); + syncProperty(pShape, RES_FRM_SIZE, MID_FRMSIZE_SIZE, uno::makeAny(xShape->getSize())); uno::Reference<beans::XPropertySet> xShapePropertySet(xShape, uno::UNO_QUERY); - syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_ORIENT, "HoriOrient", xShapePropertySet->getPropertyValue("HoriOrient")); - syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_RELATION, "HoriOrientRelation", xShapePropertySet->getPropertyValue("HoriOrientRelation")); - syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_ORIENT, "VertOrient", xShapePropertySet->getPropertyValue("VertOrient")); - syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_RELATION, "VertOrientRelation", xShapePropertySet->getPropertyValue("VertOrientRelation")); - syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_POSITION, "HoriOrientPosition", xShapePropertySet->getPropertyValue("HoriOrientPosition")); - syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_POSITION, "VertOrientPosition", xShapePropertySet->getPropertyValue("VertOrientPosition")); + syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_ORIENT, xShapePropertySet->getPropertyValue("HoriOrient")); + syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_RELATION, xShapePropertySet->getPropertyValue("HoriOrientRelation")); + syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_ORIENT, xShapePropertySet->getPropertyValue("VertOrient")); + syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_RELATION, xShapePropertySet->getPropertyValue("VertOrientRelation")); + syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_POSITION, xShapePropertySet->getPropertyValue("HoriOrientPosition")); + syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_POSITION, xShapePropertySet->getPropertyValue("VertOrientPosition")); } } @@ -226,19 +226,18 @@ Rectangle SwTextBoxHelper::getTextRectangle(SwFrmFmt* pShape, bool bAbsolute) return aRet; } -void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 nMemberId, const OUString& rPropertyName, const css::uno::Any& rValue) +void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 nMemberId, const css::uno::Any& rValue) { // No shape yet? Then nothing to do, initial properties are set by create(). if (!pShape) return; - OUString aPropertyName = rPropertyName; uno::Any aValue(rValue); nMemberId &= ~CONVERT_TWIPS; if (SwFrmFmt* pFmt = findTextBox(pShape)) { - bool bSync = false; + OUString aPropertyName; bool bAdjustX = false; bool bAdjustY = false; bool bAdjustSize = false; @@ -248,11 +247,13 @@ void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 switch (nMemberId) { case MID_HORIORIENT_ORIENT: + aPropertyName = "HoriOrient"; + break; case MID_HORIORIENT_RELATION: - bSync = true; + aPropertyName = "HoriOrientRelation"; break; case MID_HORIORIENT_POSITION: - bSync = true; + aPropertyName = "HoriOrientPosition"; bAdjustX = true; break; } @@ -261,17 +262,19 @@ void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 switch (nMemberId) { case MID_VERTORIENT_ORIENT: + aPropertyName = "VertOrient"; + break; case MID_VERTORIENT_RELATION: - bSync = true; + aPropertyName = "VertOrientRelation"; break; case MID_VERTORIENT_POSITION: - bSync = true; + aPropertyName = "VertOrientPosition"; bAdjustY = true; break; } break; case RES_FRM_SIZE: - bSync = true; + aPropertyName = "Size"; bAdjustSize = true; break; case RES_ANCHOR: @@ -289,7 +292,7 @@ void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 break; } - if (bSync) + if (!aPropertyName.isEmpty()) { // Position/size should be the text position/size, not the shape one as-is. if (bAdjustX || bAdjustY || bAdjustSize) diff --git a/sw/source/core/unocore/unodraw.cxx b/sw/source/core/unocore/unodraw.cxx index 7c49f44..a81ff09 100644 --- a/sw/source/core/unocore/unodraw.cxx +++ b/sw/source/core/unocore/unodraw.cxx @@ -1353,7 +1353,7 @@ void SwXShape::setPropertyValue(const OUString& rPropertyName, const uno::Any& a pFmt->SetFmtAttr(aSet); } // We have a pFmt and a pEntry as well: try to sync TextBox property. - SwTextBoxHelper::syncProperty(pFmt, pEntry->nWID, pEntry->nMemberId, rPropertyName, aValue); + SwTextBoxHelper::syncProperty(pFmt, pEntry->nWID, pEntry->nMemberId, aValue); } else { @@ -2343,7 +2343,7 @@ void SAL_CALL SwXShape::setSize( const awt::Size& aSize ) { mxShape->setSize( aSize ); } - SwTextBoxHelper::syncProperty(GetFrmFmt(), RES_FRM_SIZE, MID_FRMSIZE_SIZE, "Size", uno::makeAny(aSize)); + SwTextBoxHelper::syncProperty(GetFrmFmt(), RES_FRM_SIZE, MID_FRMSIZE_SIZE, uno::makeAny(aSize)); } // #i31698# // implementation of virtual methods from drawing::XShapeDescriptor commit 3e266853608eb26fb15ac508ba78d74afb72f51c Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu May 29 12:15:28 2014 +0200 SwTextBoxHelper::create(): initialize position The situation is a bit more complicated here, drawing::XCustomShapeEngine returns the text rectangle in absolute coordinates, but that's on the drawpage. So count the relative coordinates, and then just adjust the position we got from the original shape. Change-Id: Ibfbc183e5170037c8c281d61ce802a19a7acda17 diff --git a/sw/inc/textboxhelper.hxx b/sw/inc/textboxhelper.hxx index 747e729..cb0a643 100644 --- a/sw/inc/textboxhelper.hxx +++ b/sw/inc/textboxhelper.hxx @@ -40,8 +40,8 @@ public: static void syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 nMemberID, const OUString& rPropertyName, const css::uno::Any& rValue); /// If we have an associated TextFrame, then return that. static SwFrmFmt* findTextBox(SwFrmFmt* pShape); - /// Return the textbox rectangle of a draw shape (absolute values, in twips). - static Rectangle getTextRectangle(SwFrmFmt* pShape); + /// Return the textbox rectangle of a draw shape (in twips). + static Rectangle getTextRectangle(SwFrmFmt* pShape, bool bAbsolute = true); /// Look up TextFrames in a document, which are in fact TextBoxes. static std::list<SwFrmFmt*> findTextBoxes(const SwDoc* pDoc); diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx index 1e92c67..ad4bf62 100644 --- a/sw/source/core/doc/textboxhelper.cxx +++ b/sw/source/core/doc/textboxhelper.cxx @@ -70,6 +70,14 @@ void SwTextBoxHelper::create(SwFrmFmt* pShape) // Also initialize the properties, which are not constant, but inherited from the shape's ones. uno::Reference<drawing::XShape> xShape(pShape->FindRealSdrObject()->getUnoShape(), uno::UNO_QUERY); syncProperty(pShape, RES_FRM_SIZE, MID_FRMSIZE_SIZE, "Size", uno::makeAny(xShape->getSize())); + + uno::Reference<beans::XPropertySet> xShapePropertySet(xShape, uno::UNO_QUERY); + syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_ORIENT, "HoriOrient", xShapePropertySet->getPropertyValue("HoriOrient")); + syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_RELATION, "HoriOrientRelation", xShapePropertySet->getPropertyValue("HoriOrientRelation")); + syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_ORIENT, "VertOrient", xShapePropertySet->getPropertyValue("VertOrient")); + syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_RELATION, "VertOrientRelation", xShapePropertySet->getPropertyValue("VertOrientRelation")); + syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_POSITION, "HoriOrientPosition", xShapePropertySet->getPropertyValue("HoriOrientPosition")); + syncProperty(pShape, RES_VERT_ORIENT, MID_VERTORIENT_POSITION, "VertOrientPosition", xShapePropertySet->getPropertyValue("VertOrientPosition")); } } @@ -196,13 +204,25 @@ uno::Any SwTextBoxHelper::queryInterface(SwFrmFmt* pShape, const uno::Type& rTyp return aRet; } -Rectangle SwTextBoxHelper::getTextRectangle(SwFrmFmt* pShape) +Rectangle SwTextBoxHelper::getTextRectangle(SwFrmFmt* pShape, bool bAbsolute) { Rectangle aRet; aRet.SetEmpty(); SdrObjCustomShape* pCustomShape = dynamic_cast<SdrObjCustomShape*>(pShape->FindRealSdrObject()); if (pCustomShape) pCustomShape->GetTextBounds(aRet); + + if (!bAbsolute) + { + // Relative, so count the logic (reference) rectangle, see the EnhancedCustomShape2d ctor. + Point aPoint(pCustomShape->GetSnapRect().Center()); + Size aSize(pCustomShape->GetLogicRect().GetSize()); + aPoint.X() -= aSize.Width() / 2; + aPoint.Y() -= aSize.Height() / 2; + Rectangle aLogicRect(aPoint, aSize); + aRet.Move(-1 * aLogicRect.Left(), -1 * aLogicRect.Top()); + } + return aRet; } @@ -274,7 +294,7 @@ void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 // Position/size should be the text position/size, not the shape one as-is. if (bAdjustX || bAdjustY || bAdjustSize) { - Rectangle aRect = getTextRectangle(pShape); + Rectangle aRect = getTextRectangle(pShape, /*bAbsolute=*/false); if (!aRect.IsEmpty()) { if (bAdjustX || bAdjustY) @@ -283,9 +303,9 @@ void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 if (aValue >>= nValue) { if (bAdjustX) - nValue = TWIPS_TO_MM(aRect.getX()); + nValue += TWIPS_TO_MM(aRect.getX()); else if (bAdjustY) - nValue = TWIPS_TO_MM(aRect.getY()); + nValue += TWIPS_TO_MM(aRect.getY()); aValue <<= nValue; } } commit ad8aeb6e02444aa007ef38a59bbd84d67d60ffad Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu May 29 11:54:39 2014 +0200 SwTextBoxHelper::create(): initialize size On import, syncProperty() takes care of this, but in case the user interactively adds a textbox, when we need to handle the size in create() as well. Change-Id: I9428a682dbf70550bdfd081900e8098aeb64d38f diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx index 7735de5..1e92c67 100644 --- a/sw/source/core/doc/textboxhelper.cxx +++ b/sw/source/core/doc/textboxhelper.cxx @@ -66,6 +66,10 @@ void SwTextBoxHelper::create(SwFrmFmt* pShape) aSet.Put(aCntnt); pShape->SetFmtAttr(aSet); } + + // Also initialize the properties, which are not constant, but inherited from the shape's ones. + uno::Reference<drawing::XShape> xShape(pShape->FindRealSdrObject()->getUnoShape(), uno::UNO_QUERY); + syncProperty(pShape, RES_FRM_SIZE, MID_FRMSIZE_SIZE, "Size", uno::makeAny(xShape->getSize())); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits