diff options
-rw-r--r-- | sd/source/ui/view/drviews2.cxx | 128 | ||||
-rw-r--r-- | svx/source/svdraw/svdedtv1.cxx | 42 |
2 files changed, 42 insertions, 128 deletions
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx index 37619aa294c2..4e44fb76b528 100644 --- a/sd/source/ui/view/drviews2.cxx +++ b/sd/source/ui/view/drviews2.cxx @@ -277,135 +277,7 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) { if( rReq.GetArgs() ) { - sal_Bool bMergeUndo = sal_False; - ::svl::IUndoManager* pUndoManager = GetDocSh()->GetUndoManager(); - - // adjustment Start/EndWidth - if(nSId == SID_ATTR_LINE_WIDTH) - { - SdrObject* pObj = NULL; - const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); - sal_uLong nCount = rMarkList.GetMarkCount(); - const sal_Int32 nNewLineWidth(((const XLineWidthItem&)rReq.GetArgs()->Get(XATTR_LINEWIDTH)).GetValue()); - const bool bUndo(mpDrawView->IsUndoEnabled()); - - for (sal_uLong i=0; i<nCount; i++) - { - SfxItemSet aAttr(GetDoc()->GetPool()); - pObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); - aAttr.Put(pObj->GetMergedItemSet()); - - sal_Int32 nActLineWidth = ((const XLineWidthItem&)aAttr.Get(XATTR_LINEWIDTH)).GetValue(); - - if(nActLineWidth != nNewLineWidth) - { - sal_Bool bSetItemSet(sal_False); - - // do this for SFX_ITEM_DEFAULT and for SFX_ITEM_SET - if(SFX_ITEM_DONTCARE != aAttr.GetItemState(XATTR_LINESTARTWIDTH)) - { - sal_Int32 nValAct = ((const XLineStartWidthItem&)aAttr.Get(XATTR_LINESTARTWIDTH)).GetValue(); - sal_Int32 nValNew = nValAct + (((nNewLineWidth - nActLineWidth) * 15) / 10); - if(nValNew < 0) - nValNew = 0; - bSetItemSet = sal_True; - aAttr.Put(XLineStartWidthItem(nValNew)); - } - - // do this for SFX_ITEM_DEFAULT and for SFX_ITEM_SET - if(SFX_ITEM_DONTCARE != aAttr.GetItemState(XATTR_LINEENDWIDTH)) - { - sal_Int32 nValAct = ((const XLineEndWidthItem&)aAttr.Get(XATTR_LINEENDWIDTH)).GetValue(); - sal_Int32 nValNew = nValAct + (((nNewLineWidth - nActLineWidth) * 15) / 10); - if(nValNew < 0) - nValNew = 0; - bSetItemSet = sal_True; - aAttr.Put(XLineEndWidthItem(nValNew)); - } - - if(bSetItemSet) - { - if(bUndo) - { - if(!bMergeUndo) - { - pUndoManager->EnterListAction( String(), String() ); - mpDrawView->BegUndo(); - bMergeUndo = sal_True; - } - - mpDrawView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoAttrObject(*pObj)); - } - - pObj->SetMergedItemSet(aAttr); - } - } - } - - if(bMergeUndo) - { - mpDrawView->EndUndo(); - } - } - - if (nSId == SID_ATTR_FILL_SHADOW) - { - // possibly transparent objects are filled white - SdrObject* pObj = NULL; - const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); - sal_uLong nCount = rMarkList.GetMarkCount(); - const bool bUndo = mpDrawView->IsUndoEnabled(); - - for (sal_uLong i=0; i<nCount; i++) - { - SfxItemSet aAttr(GetDoc()->GetPool()); - pObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); - - // #i25616# - if(!pObj->ISA(SdrGrafObj)) - { - aAttr.Put(pObj->GetMergedItemSet()); - - const XFillStyleItem& rFillStyle = (const XFillStyleItem&) aAttr.Get(XATTR_FILLSTYLE); - const XLineStyleItem& rLineStyle = (const XLineStyleItem&) aAttr.Get(XATTR_LINESTYLE); - - if(XFILL_NONE == rFillStyle.GetValue() && XLINE_NONE == rLineStyle.GetValue()) - { - if( bUndo ) - { - // template has no filling, so force - // filling (hard) attribute - if (!bMergeUndo) - { - bMergeUndo = sal_True; - pUndoManager->EnterListAction( String(), String() ); - mpDrawView->BegUndo(); - } - - mpDrawView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoAttrObject(*pObj)); - } - - aAttr.Put(XFillStyleItem(XFILL_SOLID)); - aAttr.Put(XFillColorItem(String(), COL_WHITE)); - - pObj->SetMergedItemSet(aAttr); - } - } - } - - if (bMergeUndo) - { - mpDrawView->EndUndo(); - } - } - mpDrawView->SetAttributes(*rReq.GetArgs()); - - if (bMergeUndo) - { - pUndoManager->LeaveListAction(); - } - rReq.Done(); } else diff --git a/svx/source/svdraw/svdedtv1.cxx b/svx/source/svdraw/svdedtv1.cxx index 6a1c62e5a269..196779b7770c 100644 --- a/svx/source/svdraw/svdedtv1.cxx +++ b/svx/source/svdraw/svdedtv1.cxx @@ -49,6 +49,9 @@ #include <basegfx/matrix/b2dhommatrix.hxx> #include <svx/AffineMatrixItem.hxx> #include <basegfx/matrix/b2dhommatrixtools.hxx> +#include <svx/xlnwtit.hxx> +#include <svx/xlnstwit.hxx> +#include <svx/xlnedwit.hxx> //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1033,6 +1036,16 @@ void SdrEditView::SetAttrToMarked(const SfxItemSet& rAttr, sal_Bool bReplaceAll) // #i38135# bool bResetAnimationTimer(false); + // check if LineWidth is part of the change + const bool bLineWidthChange(SFX_ITEM_SET == aAttr.GetItemState(XATTR_LINEWIDTH)); + sal_Int32 nNewLineWidth(0); + sal_Int32 nOldLineWidth(0); + + if(bLineWidthChange) + { + nNewLineWidth = ((const XLineWidthItem&)aAttr.Get(XATTR_LINEWIDTH)).GetValue(); + } + for (sal_uIntPtr nm=0; nm<nMarkAnz; nm++) { SdrMark* pM=GetSdrMarkByIndex(nm); @@ -1077,9 +1090,38 @@ void SdrEditView::SetAttrToMarked(const SfxItemSet& rAttr, sal_Bool bReplaceAll) aUpdaters.push_back(new E3DModifySceneSnapRectUpdater(pObj)); } + if(bLineWidthChange) + { + nOldLineWidth = ((const XLineWidthItem&)pObj->GetMergedItem(XATTR_LINEWIDTH)).GetValue(); + } + // set attributes at object pObj->SetMergedItemSetAndBroadcast(aAttr, bReplaceAll); + if(bLineWidthChange) + { + const SfxItemSet& rSet = pObj->GetMergedItemSet(); + + if(nOldLineWidth != nNewLineWidth) + { + if(SFX_ITEM_DONTCARE != rSet.GetItemState(XATTR_LINESTARTWIDTH)) + { + const sal_Int32 nValAct(((const XLineStartWidthItem&)rSet.Get(XATTR_LINESTARTWIDTH)).GetValue()); + const sal_Int32 nValNewStart(std::max((sal_Int32)0, nValAct + (((nNewLineWidth - nOldLineWidth) * 15) / 10))); + + pObj->SetMergedItem(XLineStartWidthItem(nValNewStart)); + } + + if(SFX_ITEM_DONTCARE != rSet.GetItemState(XATTR_LINEENDWIDTH)) + { + const sal_Int32 nValAct(((const XLineEndWidthItem&)rSet.Get(XATTR_LINEENDWIDTH)).GetValue()); + const sal_Int32 nValNewEnd(std::max((sal_Int32)0, nValAct + (((nNewLineWidth - nOldLineWidth) * 15) / 10))); + + pObj->SetMergedItem(XLineEndWidthItem(nValNewEnd)); + } + } + } + if(pObj->ISA(SdrTextObj)) { SdrTextObj* pTextObj = ((SdrTextObj*)pObj); |