[Libreoffice] Bug #i89051
Ivan Timofeev
timofeev.i.s at gmail.com
Tue Nov 1 06:12:02 PDT 2011
Hi,
I dug into http://openoffice.org/bugzilla/show_bug.cgi?id=89051 and
I've stalled...
--Some explanations.--
When inserting a point there is a call to
SdrDragView::ImpBegInsObjPoint (svx/source/svdraw/svddrgv.cxx).
Inside it:
- we remember the number of new point in a polypolygon:
mnInsPointNum = pMarkedPath->NbcInsPoint*;
- we call AdjustMarkHdl that calls SetMarkHandles. Inside
SetMarkHandles we add all handles - including custom ones (anchors in
Writer) and then sort handles. So, mnInsPointNum (see previous step)
becomes invalid (in Wrtier).
- we use [invalid] mnInsPointNum to get handle by its index *in
SdrHdlList* (var aHdl) using remembered index *in polygon*:
BegDragObj(rPnt, pOut, aHdl.GetHdl(mnInsPointNum), 0);
So, we can use mnInsPointNum only if custom (and other) handles had
placed *after* point handles in SdrHdlList.
--Possible solutions.--
1. Rearrange the following lines of the SetMarkHandles method
(svx/source/svdraw/svdmrkv.cxx#805):
// add custom handles (used by other apps, e.g. AnchorPos)
AddCustomHdl();
// sort handles
aHdl.Sort();
to:
// sort handles
aHdl.Sort();
// add custom handles (used by other apps, e.g. AnchorPos)
AddCustomHdl();
2. Tweak sorting of handles somehow - method Compare
(svx/source/svdraw/svdhdl.cxx#1704) looks ugly...
3. Something else.
Can someone provide some comments/tips/decisions?
Thanks!
Ivan
More information about the LibreOffice
mailing list