summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-08-28 15:13:41 +0100
committerCaolán McNamara <caolanm@redhat.com>2015-08-28 20:06:37 +0100
commit8c2b2d63eed861e8cfe847c4b3757b307e9d389e (patch)
tree1bd8cc6c1644595a6feab5f570d2f8dc7b9b650b /svx
parent2aadad1e89e96cb80c15fe1069cb6365f0cade1d (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.cxx18
-rw-r--r--svx/source/svdraw/svdmark.cxx12
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;