summaryrefslogtreecommitdiff
path: root/svx/source/svdraw
diff options
context:
space:
mode:
authorRegina Henschel <rb.henschel@t-online.de>2019-11-09 23:46:22 +0100
committerRegina Henschel <rb.henschel@t-online.de>2019-11-12 11:16:20 +0100
commit7cf0e43d39172cc083e7b64e06cf0730f14bcf19 (patch)
tree2f6b5adec88e3dd6ec944cd64d1670d9c9d520a7 /svx/source/svdraw
parent745122c0446c4cda0acdaf16e058f70509364831 (diff)
tdf#128651 SdrObjCustomShape::NbcSetSnapRect needs logic rect
SdrObjCustomShape::NbcSetSnapRect needs a logic rect in its parameter. A general change to snap rect as input in NbcSetSnapRect is not possible, if the transformation has to be kept. Therefore callers need to be adapted. This is done her for SdrUndoAttrObj. The error was that for a transformed custom shape with text, undo and redo had generated a wrong size of the shape. A least the following actions were affected: extrusion on/off, shadow on/off, and changes in line or fill properties. The unit test uses extrusion on. Change-Id: I8b6990d3d57d25f15f18e8690fc49dbe5e2a2728 Reviewed-on: https://gerrit.libreoffice.org/82367 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
Diffstat (limited to 'svx/source/svdraw')
-rw-r--r--svx/source/svdraw/svdundo.cxx14
1 files changed, 12 insertions, 2 deletions
diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx
index e27e6cf42c58..a29142a4a734 100644
--- a/svx/source/svdraw/svdundo.cxx
+++ b/svx/source/svdraw/svdundo.cxx
@@ -46,6 +46,7 @@
#include <svx/svdotable.hxx> // #i124389#
#include <vcl/svapp.hxx>
#include <sfx2/viewsh.hxx>
+#include <svx/svdoashp.hxx>
// iterates over all views and unmarks this SdrObject if it is marked
@@ -348,6 +349,8 @@ void SdrUndoAttrObj::Undo()
// laid out again from AdjustTextFrameWidthAndHeight(). This makes
// rescuing the size of the object necessary.
const tools::Rectangle aSnapRect = pObj->GetSnapRect();
+ // SdrObjCustomShape::NbcSetSnapRect needs logic instead of snap rect
+ const tools::Rectangle aLogicRect = pObj->GetLogicRect();
if(pUndoSet)
{
@@ -382,7 +385,10 @@ void SdrUndoAttrObj::Undo()
// Restore previous size here when it was changed.
if(aSnapRect != pObj->GetSnapRect())
{
- pObj->NbcSetSnapRect(aSnapRect);
+ if(dynamic_cast<const SdrObjCustomShape*>(pObj))
+ pObj->NbcSetSnapRect(aLogicRect);
+ else
+ pObj->NbcSetSnapRect(aSnapRect);
}
pObj->GetProperties().BroadcastItemChange(aItemChange);
@@ -425,6 +431,7 @@ void SdrUndoAttrObj::Redo()
sdr::properties::ItemChangeBroadcaster aItemChange(*pObj);
const tools::Rectangle aSnapRect = pObj->GetSnapRect();
+ const tools::Rectangle aLogicRect = pObj->GetLogicRect();
if(pRedoSet)
{
@@ -459,7 +466,10 @@ void SdrUndoAttrObj::Redo()
// Restore previous size here when it was changed.
if(aSnapRect != pObj->GetSnapRect())
{
- pObj->NbcSetSnapRect(aSnapRect);
+ if(dynamic_cast<const SdrObjCustomShape*>(pObj))
+ pObj->NbcSetSnapRect(aLogicRect);
+ else
+ pObj->NbcSetSnapRect(aSnapRect);
}
pObj->GetProperties().BroadcastItemChange(aItemChange);