diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-08-28 15:13:41 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-08-28 20:06:37 +0100 |
commit | 8c2b2d63eed861e8cfe847c4b3757b307e9d389e (patch) | |
tree | 1bd8cc6c1644595a6feab5f570d2f8dc7b9b650b /svx | |
parent | 2aadad1e89e96cb80c15fe1069cb6365f0cade1d (diff) |
time stamp object selections and use newest as ref for equalization
Change-Id: I1bf22ddbaf263b240288f70d03d6949611f86b69
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/svdraw/svdedtv2.cxx | 18 | ||||
-rw-r--r-- | svx/source/svdraw/svdmark.cxx | 12 |
2 files changed, 25 insertions, 5 deletions
diff --git a/svx/source/svdraw/svdedtv2.cxx b/svx/source/svdraw/svdedtv2.cxx index 719355d9729b..090efa714a92 100644 --- a/svx/source/svdraw/svdedtv2.cxx +++ b/svx/source/svdraw/svdedtv2.cxx @@ -1181,7 +1181,19 @@ void SdrEditView::EqualizeMarkedObjects(bool bWidth) if (nMarked < 2) return; - SdrObject* pLastSelectedObj = rMarkList.GetMark(nMarked-1)->GetMarkedSdrObj(); + size_t nLastSelected = 0; + sal_Int64 nLastSelectedTime = rMarkList.GetMark(0)->getTimeStamp(); + for (size_t a = 1; a < nMarked; ++a) + { + sal_Int64 nCandidateTime = rMarkList.GetMark(a)->getTimeStamp(); + if (nCandidateTime > nLastSelectedTime) + { + nLastSelectedTime = nCandidateTime; + nLastSelected = a; + } + } + + SdrObject* pLastSelectedObj = rMarkList.GetMark(nLastSelected)->GetMarkedSdrObj(); Size aLastRectSize(pLastSelectedObj->GetLogicRect().GetSize()); const bool bUndo = IsUndoEnabled(); @@ -1189,8 +1201,10 @@ void SdrEditView::EqualizeMarkedObjects(bool bWidth) if (bUndo) BegUndo(); - for (size_t a = 0; a < nMarked-1; ++a) + for (size_t a = 0; a < nMarked; ++a) { + if (a == nLastSelected) + continue; SdrMark* pM = rMarkList.GetMark(a); SdrObject* pObj = pM->GetMarkedSdrObj(); Rectangle aLogicRect(pObj->GetLogicRect()); diff --git a/svx/source/svdraw/svdmark.cxx b/svx/source/svdraw/svdmark.cxx index 7ddde618d4c8..8b7f3e09c46f 100644 --- a/svx/source/svdraw/svdmark.cxx +++ b/svx/source/svdraw/svdmark.cxx @@ -38,8 +38,12 @@ #include <svl/SfxBroadcaster.hxx> #include <svx/svdoedge.hxx> - - +void SdrMark::setTime() +{ + TimeValue aNow; + osl_getSystemTime(&aNow); + mnTimeStamp = sal_Int64(aNow.Seconds) * 1000000000L + aNow.Nanosec; +} SdrMark::SdrMark(SdrObject* pNewObj, SdrPageView* pNewPageView) : mpSelectedSdrObject(pNewObj), @@ -55,10 +59,12 @@ SdrMark::SdrMark(SdrObject* pNewObj, SdrPageView* pNewPageView) { mpSelectedSdrObject->AddObjectUser( *this ); } + setTime(); } SdrMark::SdrMark(const SdrMark& rMark) : ObjectUser(), + mnTimeStamp(0), mpSelectedSdrObject(0L), mpPageView(0L), mpPoints(0L), @@ -117,10 +123,10 @@ void SdrMark::SetMarkedSdrObj(SdrObject* pNewObj) } } - SdrMark& SdrMark::operator=(const SdrMark& rMark) { SetMarkedSdrObj(rMark.mpSelectedSdrObject); + mnTimeStamp = rMark.mnTimeStamp; mpPageView = rMark.mpPageView; mbCon1 = rMark.mbCon1; mbCon2 = rMark.mbCon2; |