Kaydet (Commit) 81e9ede3 authored tarafından Armin Le Grand's avatar Armin Le Grand

i122121 moded automatic StartEnd adaption to svx

üst 81203126
...@@ -174,135 +174,7 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) ...@@ -174,135 +174,7 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
{ {
if( rReq.GetArgs() ) if( rReq.GetArgs() )
{ {
sal_Bool bMergeUndo = sal_False;
::svl::IUndoManager* pUndoManager = GetDocSh()->GetUndoManager();
// Anpassungen Start/EndWidth #63083#
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);
// #86265# 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));
}
// #86265# 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)
{
// Ggf. werden transparente Objekte wei?gefuellt
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 )
{
// Vorlage hat keine Fuellung,
// daher hart attributieren: Fuellung setzen
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()); mpDrawView->SetAttributes(*rReq.GetArgs());
if (bMergeUndo)
{
pUndoManager->LeaveListAction();
}
rReq.Done(); rReq.Done();
} }
else else
......
...@@ -58,6 +58,9 @@ ...@@ -58,6 +58,9 @@
#include <basegfx/matrix/b2dhommatrix.hxx> #include <basegfx/matrix/b2dhommatrix.hxx>
#include <svx/AffineMatrixItem.hxx> #include <svx/AffineMatrixItem.hxx>
#include <basegfx/matrix/b2dhommatrixtools.hxx> #include <basegfx/matrix/b2dhommatrixtools.hxx>
#include <svx/xlnwtit.hxx>
#include <svx/xlnstwit.hxx>
#include <svx/xlnedwit.hxx>
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
...@@ -1053,6 +1056,16 @@ void SdrEditView::SetAttrToMarked(const SfxItemSet& rAttr, sal_Bool bReplaceAll) ...@@ -1053,6 +1056,16 @@ void SdrEditView::SetAttrToMarked(const SfxItemSet& rAttr, sal_Bool bReplaceAll)
// #i38135# // #i38135#
bool bResetAnimationTimer(false); 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++) for (sal_uIntPtr nm=0; nm<nMarkAnz; nm++)
{ {
SdrMark* pM=GetSdrMarkByIndex(nm); SdrMark* pM=GetSdrMarkByIndex(nm);
...@@ -1097,9 +1110,38 @@ void SdrEditView::SetAttrToMarked(const SfxItemSet& rAttr, sal_Bool bReplaceAll) ...@@ -1097,9 +1110,38 @@ void SdrEditView::SetAttrToMarked(const SfxItemSet& rAttr, sal_Bool bReplaceAll)
aUpdaters.push_back(new E3DModifySceneSnapRectUpdater(pObj)); aUpdaters.push_back(new E3DModifySceneSnapRectUpdater(pObj));
} }
if(bLineWidthChange)
{
nOldLineWidth = ((const XLineWidthItem&)pObj->GetMergedItem(XATTR_LINEWIDTH)).GetValue();
}
// set attributes at object // set attributes at object
pObj->SetMergedItemSetAndBroadcast(aAttr, bReplaceAll); 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)) if(pObj->ISA(SdrTextObj))
{ {
SdrTextObj* pTextObj = ((SdrTextObj*)pObj); SdrTextObj* pTextObj = ((SdrTextObj*)pObj);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment