Hello.
As promised, here is the second part... a big thanks goes to Eike who...
managed to get hold of an intact revision before ooo/DEV300_m101 was
merged and converted it from *gasp* cp437 to utf-8
I am still unsure what to make of the second ASCII image,... I
sincerely hope someone else does.
I also tried to use more future-proof symbols than those contained in
the old version (so we won't be in the same sorry place again, and
also because the old symbols messed up Gedit's and Notepad++ code
view, in Nano everything was fine though).
Astron.
From d18c7a2d4b758978b7e09413698bf3786431be07 Mon Sep 17 00:00:00 2001
From: "Stefan Knorr (astron)" <heinzlesspam@gmail.com>
Date: Mon, 28 Nov 2011 14:14:12 +0100
Subject: [PATCH] Translation of comments in svdraw (part two)
Big thanks to Eike Rathke who rescued the ASCII imagery in svdoedge.cxx.
---
svx/source/svdraw/svdocapt.cxx | 34 ++--
svx/source/svdraw/svdocirc.cxx | 83 +++----
svx/source/svdraw/svdoedge.cxx | 512 +++++++++++++++++++++------------------
svx/source/svdraw/svdograf.cxx | 31 ++--
svx/source/svdraw/svdogrp.cxx | 28 +-
svx/source/svdraw/svdomeas.cxx | 88 ++++----
svx/source/svdraw/svdomedia.cxx | 5 +-
svx/source/svdraw/svdoole2.cxx | 28 +-
svx/source/svdraw/svdopage.cxx | 2 +-
svx/source/svdraw/svdopath.cxx | 343 +++++++++++++-------------
10 files changed, 597 insertions(+), 557 deletions(-)
diff --git a/svx/source/svdraw/svdocapt.cxx b/svx/source/svdraw/svdocapt.cxx
index 5822a0e..cf261d8 100644
--- a/svx/source/svdraw/svdocapt.cxx
+++ b/svx/source/svdraw/svdocapt.cxx
@@ -39,9 +39,9 @@
#include <svx/svdhdl.hxx>
#include <svx/svddrag.hxx>
#include <svx/svdmodel.hxx>
-#include <svx/svdview.hxx> // fuer RectSnap
+#include <svx/svdview.hxx> // for RectSnap
#include "svx/svdglob.hxx" // StringCache
-#include "svx/svdstr.hrc" // Objektname
+#include "svx/svdstr.hrc" // the object's name
#include <svx/svdogrp.hxx>
#include <svx/svdpage.hxx>
#include <svx/xflhtit.hxx>
@@ -99,7 +99,7 @@ public:
void ImpCaptParams::CalcEscPos(const Point& rTailPt, const Rectangle& rRect, Point& rPt, EscDir&
rDir) const
{
- Point aTl(rTailPt); // lokal kopieren wg. Performance
+ Point aTl(rTailPt); // copy locally for performance reasons
long nX,nY;
if (bEscRel) {
nX=rRect.Right()-rRect.Left();
@@ -199,7 +199,7 @@ TYPEINIT1(SdrCaptionObj,SdrRectObj);
SdrCaptionObj::SdrCaptionObj():
SdrRectObj(OBJ_TEXT),
- aTailPoly(3), // Default Groesse: 3 Punkte = 2 Linien
+ aTailPoly(3), // default size: 3 points = 2 lines
mbSpecialTextBoxShadow(sal_False),
mbFixedTail(sal_False)
{
@@ -207,7 +207,7 @@ SdrCaptionObj::SdrCaptionObj():
SdrCaptionObj::SdrCaptionObj(const Rectangle& rRect, const Point& rTail):
SdrRectObj(OBJ_TEXT,rRect),
- aTailPoly(3), // Default Groesse: 3 Punkte = 2 Linien
+ aTailPoly(3), // default size: 3 points = 2 lines
mbSpecialTextBoxShadow(sal_False),
mbFixedTail(sal_False)
{
@@ -276,7 +276,7 @@ basegfx::B2DPolyPolygon SdrCaptionObj::TakeXorPoly() const
sal_uInt32 SdrCaptionObj::GetHdlCount() const
{
sal_uInt32 nAnz1(SdrRectObj::GetHdlCount());
- // Derzeit ist nur das Draggen des Schwanzendes implementiert
+ // Currently only dragging the tail's end is implemented.
return nAnz1 + 1L;
}
@@ -453,8 +453,8 @@ void SdrCaptionObj::ImpRecalcTail()
// Changed this method to not do that.
// Also found why this has been done: For interactive dragging of the
// tail end pos for SDRCAPT_TYPE1. This sure was the simplest method
-// to achieve this, for the cost to make a whole group of const methods
-// of this object implicitly chainging the object's position.
+// to achieve this, at the cost of making a whole group of const methods
+// of this object implicitly change the object's position.
void SdrCaptionObj::ImpCalcTail1(const ImpCaptParams& rPara, Polygon& rPoly, Rectangle& rRect)
const
{
Polygon aPol(2);
@@ -493,7 +493,7 @@ void SdrCaptionObj::ImpCalcTail2(const ImpCaptParams& rPara, Polygon& rPoly, Rec
aPol[1]=aEscPos;
if (!rPara.bFixedAngle) {
- // fehlende Implementation
+ // TODO: Implementation missing.
}
rPoly=aPol;
}
@@ -526,7 +526,7 @@ void SdrCaptionObj::ImpCalcTail3(const ImpCaptParams& rPara, Polygon& rPoly, Rec
}
}
if (!rPara.bFixedAngle) {
- // fehlende Implementation
+ // TODO: Implementation missing.
}
rPoly=aPol;
}
@@ -548,7 +548,7 @@ void SdrCaptionObj::ImpCalcTail(const ImpCaptParams& rPara, Polygon& rPoly, Rect
bool SdrCaptionObj::BegCreate(SdrDragStat& rStat)
{
- if (aRect.IsEmpty()) return sal_False; // Create z.Zt. nur mit vorgegebenen Rect
+ if (aRect.IsEmpty()) return sal_False; // Create currently only works with the given Rect
ImpCaptParams aPara;
ImpGetCaptParams(aPara);
@@ -625,7 +625,7 @@ void SdrCaptionObj::NbcSetRelativePos(const Point& rPnt)
{
Point aRelPos0(aTailPoly.GetPoint(0)-aAnchor);
Size aSiz(rPnt.X()-aRelPos0.X(),rPnt.Y()-aRelPos0.Y());
- NbcMove(aSiz); // Der ruft auch das SetRectsDirty()
+ NbcMove(aSiz); // This also calls SetRectsDirty()
}
Point SdrCaptionObj::GetRelativePos() const
@@ -636,12 +636,12 @@ Point SdrCaptionObj::GetRelativePos() const
void SdrCaptionObj::NbcSetAnchorPos(const Point& rPnt)
{
SdrRectObj::NbcSetAnchorPos(rPnt);
- // !!!!! fehlende Impl.
+ // TODO: Implementation missing.
}
const Point& SdrCaptionObj::GetAnchorPos() const
{
- // !!!!! fehlende Impl.
+ // TODO: Implementation missing.
return SdrRectObj::GetAnchorPos();
}
@@ -649,7 +649,7 @@ void SdrCaptionObj::RecalcSnapRect()
{
SdrRectObj::RecalcSnapRect();
// #i32599#
- // !!!!! fehlende Impl.
+ // TODO: Implementation missing.
}
const Rectangle& SdrCaptionObj::GetSnapRect() const
@@ -701,13 +701,13 @@ void SdrCaptionObj::NbcSetTailPos(const Point& rPos)
sal_uInt32 SdrCaptionObj::GetSnapPointCount() const
{
- // !!!!! fehlende Impl.
+ // TODO: Implementation missing.
return 0L;
}
Point SdrCaptionObj::GetSnapPoint(sal_uInt32 /*i*/) const
{
- // !!!!! fehlende Impl.
+ // TODO: Implementation missing.
return Point(0,0);
}
diff --git a/svx/source/svdraw/svdocirc.cxx b/svx/source/svdraw/svdocirc.cxx
index c67e47c..746873b 100644
--- a/svx/source/svdraw/svdocirc.cxx
+++ b/svx/source/svdraw/svdocirc.cxx
@@ -44,10 +44,10 @@
#include <svx/svddrag.hxx>
#include <svx/svdmodel.hxx>
#include <svx/svdpage.hxx>
-#include <svx/svdopath.hxx> // fuer die Objektkonvertierung
-#include <svx/svdview.hxx> // Zum Draggen (Ortho)
+#include <svx/svdopath.hxx> // for the object conversion
+#include <svx/svdview.hxx> // for dragging (Ortho)
#include "svx/svdglob.hxx" // StringCache
-#include "svx/svdstr.hrc" // Objektname
+#include "svx/svdstr.hrc" // the object's name
#include <editeng/eeitem.hxx>
#include <svx/sdr/properties/circleproperties.hxx>
#include <svx/sdr/contact/viewcontactofsdrcircobj.hxx>
@@ -74,7 +74,7 @@ Point GetWinkPnt(const Rectangle& rR, long nWink)
if (nWdt!=nHgt) {
if (nWdt>nHgt) {
if (nWdt!=0) {
- // eventuelle Ueberlaeufe bei sehr grossen Objekten abfangen
+ // stop possible overruns for very large objects
if (Abs(nHgt)>32767 || Abs(aRetval.Y())>32767) {
aRetval.Y()=BigMulDiv(aRetval.Y(),nHgt,nWdt);
} else {
@@ -83,7 +83,7 @@ Point GetWinkPnt(const Rectangle& rR, long nWink)
}
} else {
if (nHgt!=0) {
- // eventuelle Ueberlaeufe bei sehr grossen Objekten abfangen
+ // stop possible overruns for very large objects
if (Abs(nWdt)>32767 || Abs(aRetval.X())>32767) {
aRetval.X()=BigMulDiv(aRetval.X(),nWdt,nHgt);
} else {
@@ -139,7 +139,7 @@ SdrCircObj::SdrCircObj(SdrObjKind eNewKind, const Rectangle& rRect, long nNewSta
long nWinkDif=nNewEndWink-nNewStartWink;
nStartWink=NormAngle360(nNewStartWink);
nEndWink=NormAngle360(nNewEndWink);
- if (nWinkDif==36000) nEndWink+=nWinkDif; // Vollkreis
+ if (nWinkDif==36000) nEndWink+=nWinkDif; // full circle
meCircleKind=eNewKind;
bClosedObj=eNewKind!=OBJ_CARC;
}
@@ -164,42 +164,42 @@ sal_uInt16 SdrCircObj::GetObjIdentifier() const
bool SdrCircObj::PaintNeedsXPolyCirc() const
{
- // XPoly ist notwendig fuer alle gedrehten Ellipsenobjekte,
- // fuer alle Kreis- und Ellipsenabschnitte
- // und wenn nicht WIN dann (erstmal) auch fuer Kreis-/Ellipsenausschnitte
- // und Kreis-/Ellipsenboegen (wg. Genauigkeit)
+ // XPoly is necessary for all rotated ellipse objects, circle and
+ // ellipse segments.
+ // If not WIN, then (for now) also for circle/ellipse segments and circle/
+ // ellipse arcs (for precision)
bool bNeed=aGeo.nDrehWink!=0 || aGeo.nShearWink!=0 || meCircleKind==OBJ_CCUT;
- // Wenn nicht Win, dann fuer alle ausser Vollkreis (erstmal!!!)
+ // If not WIN, then for everything except full circle (for now!)
if (meCircleKind!=OBJ_CIRC) bNeed = true;
const SfxItemSet& rSet = GetObjectItemSet();
if(!bNeed)
{
- // XPoly ist notwendig fuer alles was nicht LineSolid oder LineNone ist
+ // XPoly is necessary for everything that isn't LineSolid or LineNone
XLineStyle eLine = ((XLineStyleItem&)(rSet.Get(XATTR_LINESTYLE))).GetValue();
bNeed = eLine != XLINE_NONE && eLine != XLINE_SOLID;
- // XPoly ist notwendig fuer dicke Linien
+ // XPoly is necessary for thick lines
if(!bNeed && eLine != XLINE_NONE)
bNeed = ((XLineWidthItem&)(rSet.Get(XATTR_LINEWIDTH))).GetValue() != 0;
- // XPoly ist notwendig fuer Kreisboegen mit Linienenden
+ // XPoly is necessary for circle arcs with line ends
if(!bNeed && meCircleKind == OBJ_CARC)
{
- // Linienanfang ist da, wenn StartPolygon und StartWidth!=0
+ // start of the line is here if StartPolygon, StartWidth!=0
bNeed=((XLineStartItem&)(rSet.Get(XATTR_LINESTART))).GetLineStartValue().count() != 0L
&&
((XLineStartWidthItem&)(rSet.Get(XATTR_LINESTARTWIDTH))).GetValue() != 0;
if(!bNeed)
{
- // Linienende ist da, wenn EndPolygon und EndWidth!=0
+ // end of the line is here if EndPolygon, EndWidth!=0
bNeed = ((XLineEndItem&)(rSet.Get(XATTR_LINEEND))).GetLineEndValue().count() != 0L
&&
((XLineEndWidthItem&)(rSet.Get(XATTR_LINEENDWIDTH))).GetValue() != 0;
}
}
}
- // XPoly ist notwendig, wenn Fill !=None und !=Solid
+ // XPoly is necessary if Fill !=None and !=Solid
if(!bNeed && meCircleKind != OBJ_CARC)
{
XFillStyle eFill=((XFillStyleItem&)(rSet.Get(XATTR_FILLSTYLE))).GetValue();
@@ -207,7 +207,7 @@ bool SdrCircObj::PaintNeedsXPolyCirc() const
}
if(!bNeed && meCircleKind != OBJ_CIRC && nStartWink == nEndWink)
- bNeed = true; // Weil sonst Vollkreis gemalt wird
+ bNeed = true; // otherwise we're drawing a full circle
return bNeed;
}
@@ -370,7 +370,7 @@ struct ImpCircUser : public SdrDragStatUserData
long nStart;
long nEnd;
long nWink;
- bool bRight; // noch nicht implementiert
+ bool bRight; // not yet implemented
public:
ImpCircUser()
@@ -644,7 +644,7 @@ void ImpCircUser::SetCreateParams(SdrDragStat& rStat)
nStart=NormAngle360(GetAngle(aP));
if (rStat.GetView()!=NULL && rStat.GetView()->IsAngleSnapEnabled()) {
long nSA=rStat.GetView()->GetSnapAngle();
- if (nSA!=0) { // Winkelfang
+ if (nSA!=0) { // angle snapping
nStart+=nSA/2;
nStart/=nSA;
nStart*=nSA;
@@ -665,7 +665,7 @@ void ImpCircUser::SetCreateParams(SdrDragStat& rStat)
nEnd=NormAngle360(GetAngle(aP));
if (rStat.GetView()!=NULL && rStat.GetView()->IsAngleSnapEnabled()) {
long nSA=rStat.GetView()->GetSnapAngle();
- if (nSA!=0) { // Winkelfang
+ if (nSA!=0) { // angle snapping
nEnd+=nSA/2;
nEnd/=nSA;
nEnd*=nSA;
@@ -702,7 +702,7 @@ bool SdrCircObj::MovCreate(SdrDragStat& rStat)
ImpSetCreateParams(rStat);
ImpCircUser* pU=(ImpCircUser*)rStat.GetUser();
rStat.SetActionRect(pU->aR);
- aRect=pU->aR; // fuer ObjName
+ aRect=pU->aR; // for ObjName
ImpJustifyRect(aRect);
nStartWink=pU->nStart;
nEndWink=pU->nEnd;
@@ -826,21 +826,20 @@ void SdrCircObj::NbcResize(const Point& rRef, const Fraction& xFact, const
Fract
bool bXMirr=(xFact.GetNumerator()<0) != (xFact.GetDenominator()<0);
bool bYMirr=(yFact.GetNumerator()<0) != (yFact.GetDenominator()<0);
if (bXMirr || bYMirr) {
- // bei bXMirr!=bYMirr muessten eigentlich noch die beiden
- // Linienende vertauscht werden. Das ist jedoch mal wieder
- // schlecht (wg. zwangslaeufiger harter Formatierung).
- // Alternativ koennte ein bMirrored-Flag eingefuehrt werden
- // (Vielleicht ja mal grundsaetzlich, auch fuer gepiegelten Text, ...).
+ // At bXMirr!=bYMirr we should actually swap both line ends.
+ // That, however, is pretty bad (because of forced "hard" formatting).
+ // Alternatively, we could implement a bMirrored flag (maybe even
+ // a more general one, e. g. for mirrored text, ...).
long nS0=nStartWink;
long nE0=nEndWink;
if (bNoShearRota) {
- // Das RectObj spiegelt bei VMirror bereits durch durch 180deg Drehung.
+ // the RectObj already mirrors at VMirror because of a 180deg rotation
if (! (bXMirr && bYMirr)) {
long nTmp=nS0;
nS0=18000-nE0;
nE0=18000-nTmp;
}
- } else { // Spiegeln fuer verzerrte Ellipsen
+ } else { // mirror contorted ellipses
if (bXMirr!=bYMirr) {
nS0+=nWink0;
nE0+=nWink0;
@@ -861,7 +860,7 @@ void SdrCircObj::NbcResize(const Point& rRef, const Fraction& xFact, const Fract
long nWinkDif=nE0-nS0;
nStartWink=NormAngle360(nS0);
nEndWink =NormAngle360(nE0);
- if (nWinkDif==36000) nEndWink+=nWinkDif; // Vollkreis
+ if (nWinkDif==36000) nEndWink+=nWinkDif; // full circle
}
}
SetXPolyDirty();
@@ -880,19 +879,19 @@ void SdrCircObj::NbcMirror(const Point& rRef1, const Point& rRef2)
bool bFreeMirr=meCircleKind!=OBJ_CIRC;
Point aTmpPt1;
Point aTmpPt2;
- if (bFreeMirr) { // bei freier Spiegelachse einige Vorbereitungen Treffen
+ if (bFreeMirr) { // some preparations for using an arbitrary axis of reflection
Point aCenter(aRect.Center());
long nWdt=aRect.GetWidth()-1;
long nHgt=aRect.GetHeight()-1;
long nMaxRad=((nWdt>nHgt ? nWdt : nHgt)+1) /2;
double a;
- // Startpunkt
+ // starting point
a=nStartWink*nPi180;
aTmpPt1=Point(Round(cos(a)*nMaxRad),-Round(sin(a)*nMaxRad));
if (nWdt==0) aTmpPt1.X()=0;
if (nHgt==0) aTmpPt1.Y()=0;
aTmpPt1+=aCenter;
- // Endpunkt
+ // finishing point
a=nEndWink*nPi180;
aTmpPt2=Point(Round(cos(a)*nMaxRad),-Round(sin(a)*nMaxRad));
if (nWdt==0) aTmpPt2.X()=0;
@@ -908,29 +907,29 @@ void SdrCircObj::NbcMirror(const Point& rRef1, const Point& rRef2)
}
}
SdrTextObj::NbcMirror(rRef1,rRef2);
- if (meCircleKind!=OBJ_CIRC) { // Anpassung von Start- und Endwinkel
+ if (meCircleKind!=OBJ_CIRC) { // adapt starting and finishing angle
MirrorPoint(aTmpPt1,rRef1,rRef2);
MirrorPoint(aTmpPt2,rRef1,rRef2);
- // Unrotate:
+ // unrotate:
if (aGeo.nDrehWink!=0) {
- RotatePoint(aTmpPt1,aRect.TopLeft(),-aGeo.nSin,aGeo.nCos); // -sin fuer Umkehrung
- RotatePoint(aTmpPt2,aRect.TopLeft(),-aGeo.nSin,aGeo.nCos); // -sin fuer Umkehrung
+ RotatePoint(aTmpPt1,aRect.TopLeft(),-aGeo.nSin,aGeo.nCos); // -sin for reversion
+ RotatePoint(aTmpPt2,aRect.TopLeft(),-aGeo.nSin,aGeo.nCos); // -sin for reversion
}
- // Unshear:
+ // unshear:
if (aGeo.nShearWink!=0) {
- ShearPoint(aTmpPt1,aRect.TopLeft(),-aGeo.nTan); // -tan fuer Umkehrung
- ShearPoint(aTmpPt2,aRect.TopLeft(),-aGeo.nTan); // -tan fuer Umkehrung
+ ShearPoint(aTmpPt1,aRect.TopLeft(),-aGeo.nTan); // -tan for reversion
+ ShearPoint(aTmpPt2,aRect.TopLeft(),-aGeo.nTan); // -tan for reversion
}
Point aCenter(aRect.Center());
aTmpPt1-=aCenter;
aTmpPt2-=aCenter;
- // Weil gespiegelt sind die Winkel nun auch noch vertauscht
+ // because it's mirrored, the angles are swapped, too
nStartWink=GetAngle(aTmpPt2);
nEndWink =GetAngle(aTmpPt1);
long nWinkDif=nEndWink-nStartWink;
nStartWink=NormAngle360(nStartWink);
nEndWink =NormAngle360(nEndWink);
- if (nWinkDif==36000) nEndWink+=nWinkDif; // Vollkreis
+ if (nWinkDif==36000) nEndWink+=nWinkDif; // full circle
}
SetXPolyDirty();
ImpSetCircInfoToAttr();
diff --git a/svx/source/svdraw/svdoedge.cxx b/svx/source/svdraw/svdoedge.cxx
index 3d0fc70..672c8fe 100644
--- a/svx/source/svdraw/svdoedge.cxx
+++ b/svx/source/svdraw/svdoedge.cxx
@@ -43,7 +43,7 @@
#include <svx/svdtrans.hxx>
#include <svx/svdetc.hxx>
#include "svx/svdglob.hxx" // StringCache
-#include "svx/svdstr.hrc" // Objektname
+#include "svx/svdstr.hrc" // the object's name
#include <svl/style.hxx>
#include <svl/smplhint.hxx>
#include <editeng/eeitem.hxx>
@@ -77,7 +77,7 @@ void SdrObjConnection::ResetVars()
bool SdrObjConnection::TakeGluePoint(SdrGluePoint& rGP, bool bSetAbsPos) const
{
bool bRet = false;
- if (pObj!=NULL) { // Ein Obj muss schon angedockt sein!
+ if (pObj!=NULL) { // one object has to be docked already!
if (bAutoVertex) {
rGP=pObj->GetVertexGluePoint(nConId);
bRet = true;
@@ -450,12 +450,12 @@ SdrGluePoint SdrEdgeObj::GetCornerGluePoint(sal_uInt16 nNum) const
const SdrGluePointList* SdrEdgeObj::GetGluePointList() const
{
- return NULL; // Keine benutzerdefinierten Klebepunkte fuer Verbinder
+ return NULL; // no user defined glue points for connectors
}
SdrGluePointList* SdrEdgeObj::ForceGluePointList()
{
- return NULL; // Keine benutzerdefinierten Klebepunkte fuer Verbinder
+ return NULL; // no user defined glue points for connectors
}
bool SdrEdgeObj::IsEdge() const
@@ -552,7 +552,7 @@ void SdrEdgeObj::ImpRecalcEdgeTrack()
if(IsBoundRectCalculationRunning())
{
- // this object is involved into another ImpRecalcEdgeTrack() call
+ // This object is involved into another ImpRecalcEdgeTrack() call
// from another SdrEdgeObj. Do not calculate again to avoid loop.
// Also, do not change bEdgeTrackDirty so that it gets recalculated
// later at the first non-looping call.
@@ -561,7 +561,7 @@ void SdrEdgeObj::ImpRecalcEdgeTrack()
else if(GetModel() && GetModel()->isLocked())
{
// avoid re-layout during imports/API call sequences
- // #i45294# but calc EdgeTrack and secure properties there
+ // #i45294# but calculate EdgeTrack and secure properties there
((SdrEdgeObj*)this)->mbBoundRectCalculationRunning = sal_True;
*pEdgeTrack=ImpCalcEdgeTrack(*pEdgeTrack,aCon1,aCon2,&aEdgeInfo);
ImpSetAttrToEdgeInfo();
@@ -570,14 +570,14 @@ void SdrEdgeObj::ImpRecalcEdgeTrack()
}
else
{
- // To not run in a depth loop, use a coloring algorythm on
+ // To not run in a depth loop, use a coloring algorithm on
// SdrEdgeObj BoundRect calculations
((SdrEdgeObj*)this)->mbBoundRectCalculationRunning = sal_True;
Rectangle aBoundRect0; if (pUserCall!=NULL) aBoundRect0=GetLastBoundRect();
SetRectsDirty();
*pEdgeTrack=ImpCalcEdgeTrack(*pEdgeTrack,aCon1,aCon2,&aEdgeInfo);
- ImpSetEdgeInfoToAttr(); // Die Werte aus aEdgeInfo in den Pool kopieren
+ ImpSetEdgeInfoToAttr(); // copy values from aEdgeInfo into the pool
bEdgeTrackDirty=sal_False;
// Only redraw here, no object change
@@ -602,25 +602,25 @@ sal_uInt16 SdrEdgeObj::ImpCalcEscAngle(SdrObject* pObj, const Point& rPt)
const
long dx=Min(dxl,dxr);
long dy=Min(dyo,dyu);
bool bDiag=Abs(dx-dy)<2;
- if (bxMitt && byMitt) return SDRESC_ALL; // In der Mitte
- if (bDiag) { // diagonal
+ if (bxMitt && byMitt) return SDRESC_ALL; // in the center
+ if (bDiag) { // diagonally
sal_uInt16 nRet=0;
if (byMitt) nRet|=SDRESC_VERT;
if (bxMitt) nRet|=SDRESC_HORZ;
- if (dxl<dxr) { // Links
+ if (dxl<dxr) { // left
if (dyo<dyu) nRet|=SDRESC_LEFT | SDRESC_TOP;
else nRet|=SDRESC_LEFT | SDRESC_BOTTOM;
- } else { // Rechts
+ } else { // right
if (dyo<dyu) nRet|=SDRESC_RIGHT | SDRESC_TOP;
else nRet|=SDRESC_RIGHT | SDRESC_BOTTOM;
}
return nRet;
}
- if (dx<dy) { // waagerecht
+ if (dx<dy) { // horizontal
if (bxMitt) return SDRESC_HORZ;
if (dxl<dxr) return SDRESC_LEFT;
else return SDRESC_RIGHT;
- } else { // senkrecht
+ } else { // vertical
if (byMitt) return SDRESC_VERT;
if (dyo<dyu) return SDRESC_TOP;
else return SDRESC_BOTTOM;
@@ -636,13 +636,13 @@ XPolygon SdrEdgeObj::ImpCalcObjToCenter(const Point& rStPt, long nEscAngle,
cons
bool bLks=nEscAngle==18000;
bool bUnt=nEscAngle==27000;
- Point aP1(rStPt); // erstmal den Pflichtabstand
+ Point aP1(rStPt); // mandatory difference first,...
if (bLks) aP1.X()=rRect.Left();
if (bRts) aP1.X()=rRect.Right();
if (bObn) aP1.Y()=rRect.Top();
if (bUnt) aP1.Y()=rRect.Bottom();
- Point aP2(aP1); // Und nun den Pflichtabstand ggf. bis auf Meetinghoehe erweitern
+ Point aP2(aP1); // ...now increase to Meeting height, if necessary
if (bLks && rMeeting.X()<=aP2.X()) aP2.X()=rMeeting.X();
if (bRts && rMeeting.X()>=aP2.X()) aP2.X()=rMeeting.X();
if (bObn && rMeeting.Y()<=aP2.Y()) aP2.Y()=rMeeting.Y();
@@ -650,7 +650,7 @@ XPolygon SdrEdgeObj::ImpCalcObjToCenter(const Point& rStPt, long nEscAngle, cons
aXP.Insert(XPOLY_APPEND,aP2,XPOLY_NORMAL);
Point aP3(aP2);
- if ((bLks && rMeeting.X()>aP2.X()) || (bRts && rMeeting.X()<aP2.X())) { // Aussenrum
+ if ((bLks && rMeeting.X()>aP2.X()) || (bRts && rMeeting.X()<aP2.X())) { // around
if (rMeeting.Y()<aP2.Y()) {
aP3.Y()=rRect.Top();
if (rMeeting.Y()<aP3.Y()) aP3.Y()=rMeeting.Y();
@@ -664,7 +664,7 @@ XPolygon SdrEdgeObj::ImpCalcObjToCenter(const Point& rStPt, long nEscAngle, cons
aXP.Insert(XPOLY_APPEND,aP3,XPOLY_NORMAL);
}
}
- if ((bObn && rMeeting.Y()>aP2.Y()) || (bUnt && rMeeting.Y()<aP2.Y())) { // Aussenrum
+ if ((bObn && rMeeting.Y()>aP2.Y()) || (bUnt && rMeeting.Y()<aP2.Y())) { // around
if (rMeeting.X()<aP2.X()) {
aP3.X()=rRect.Left();
if (rMeeting.X()<aP3.X()) aP3.X()=rMeeting.X();
@@ -680,7 +680,7 @@ XPolygon SdrEdgeObj::ImpCalcObjToCenter(const Point& rStPt, long nEscAngle, cons
}
#ifdef DBG_UTIL
if (aXP.GetPointCount()>4) {
- OSL_FAIL("SdrEdgeObj::ImpCalcObjToCenter(): Polygon hat mehr als 4 Punkte!");
+ OSL_FAIL("SdrEdgeObj::ImpCalcObjToCenter(): Polygon has more than 4 points!");
}
#endif
return aXP;
@@ -695,7 +695,7 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const XPolygon& rTrack0, SdrObjConnection&
Rectangle aBoundRect2;
Rectangle aBewareRect1;
Rectangle aBewareRect2;
- // Erstmal die alten Endpunkte wiederholen
+ // first, get the old corner points
if (rTrack0.GetPointCount()!=0) {
aPt1=rTrack0[0];
sal_uInt16 nSiz=rTrack0.GetPointCount();
@@ -714,7 +714,7 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const XPolygon& rTrack0, SdrObjConnection&
if (bCon1) {
if (rCon1.pObj==(SdrObject*)this)
{
- // sicherheitshalber Abfragen
+ // check, just in case
aBoundRect1=aOutRect;
}
else
@@ -737,7 +737,7 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const XPolygon& rTrack0, SdrObjConnection&
aBewareRect1=aBoundRect1;
}
if (bCon2) {
- if (rCon2.pObj==(SdrObject*)this) { // sicherheitshalber Abfragen
+ if (rCon2.pObj==(SdrObject*)this) { // check, just in case
aBoundRect2=aOutRect;
}
else
@@ -893,12 +893,12 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
Point aC1(aBewareRect1.Center());
Point aC2(aBewareRect2.Center());
if (aBewareRect1.Left()<=aBewareRect2.Right() &&
aBewareRect1.Right()>=aBewareRect2.Left()) {
- // Ueberschneidung auf der X-Achse
+ // overlapping on the x axis
long n1=Max(aBewareRect1.Left(),aBewareRect2.Left());
long n2=Min(aBewareRect1.Right(),aBewareRect2.Right());
aMeeting.X()=(n1+n2+1)/2;
} else {
- // Ansonsten den Mittelpunkt des Freiraums
+ // otherwise the center point of the empty space
if (aC1.X()<aC2.X()) {
aMeeting.X()=(aBewareRect1.Right()+aBewareRect2.Left()+1)/2;
} else {
@@ -906,22 +906,22 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
}
}
if (aBewareRect1.Top()<=aBewareRect2.Bottom() &&
aBewareRect1.Bottom()>=aBewareRect2.Top()) {
- // Ueberschneidung auf der Y-Achse
+ // overlapping on the x axis
long n1=Max(aBewareRect1.Top(),aBewareRect2.Top());
long n2=Min(aBewareRect1.Bottom(),aBewareRect2.Bottom());
aMeeting.Y()=(n1+n2+1)/2;
} else {
- // Ansonsten den Mittelpunkt des Freiraums
+ // otherwise the center point of the empty space
if (aC1.Y()<aC2.Y()) {
aMeeting.Y()=(aBewareRect1.Bottom()+aBewareRect2.Top()+1)/2;
} else {
aMeeting.Y()=(aBewareRect1.Top()+aBewareRect2.Bottom()+1)/2;
}
}
- // Im Prinzip gibt es 3 zu unterscheidene Faelle:
- // 1. Beide in die selbe Richtung
- // 2. Beide in genau entgegengesetzte Richtungen
- // 3. Einer waagerecht und der andere senkrecht
+ // Here, there are three cases:
+ // 1. both go into the same direction
+ // 2. both go into opposite directions
+ // 3. one is vertical, the other is horizontal
long nXMin=Min(aBewareRect1.Left(),aBewareRect2.Left());
long nXMax=Max(aBewareRect1.Right(),aBewareRect2.Right());
long nYMin=Min(aBewareRect1.Top(),aBewareRect2.Top());
@@ -931,10 +931,10 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
unsigned nMainCase=3;
if (nAngle1==nAngle2) nMainCase=1;
else if ((bHor1 && bHor2) || (bVer1 && bVer2)) nMainCase=2;
- if (nMainCase==1) { // Fall 1: Beide in eine Richtung moeglich.
- if (bVer1) aMeeting.X()=(aPt1.X()+aPt2.X()+1)/2; // ist hier besser, als der
- if (bHor1) aMeeting.Y()=(aPt1.Y()+aPt2.Y()+1)/2; // Mittelpunkt des Freiraums
- // bX1Ok bedeutet, dass die Vertikale, die aus Obj1 austritt, keinen Konflikt mit Obj2
bildet, ...
+ if (nMainCase==1) { // case 1 (both go in one direction) is possible
+ if (bVer1) aMeeting.X()=(aPt1.X()+aPt2.X()+1)/2; // Here, this is better than
+ if (bHor1) aMeeting.Y()=(aPt1.Y()+aPt2.Y()+1)/2; // using center point of empty space
+ // bX1Ok means that the vertical exiting Obj1 doesn't conflict with Obj2, ...
bool bX1Ok=aPt1.X()<=aBewareRect2.Left() || aPt1.X()>=aBewareRect2.Right();
bool bX2Ok=aPt2.X()<=aBewareRect1.Left() || aPt2.X()>=aBewareRect1.Right();
bool bY1Ok=aPt1.Y()<=aBewareRect2.Top() || aPt1.Y()>=aBewareRect2.Bottom();
@@ -952,49 +952,69 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
aMeeting.Y()=nYMax;
}
} else if (nMainCase==2) {
- // Fall 2:
- if (bHor1) { // beide waagerecht
- /* 9 Moeglichkeiten: � � � */
- /* 2.1 Gegenueber, Ueberschneidung � � � */
- /* nur auf der Y-Achse � � � */
- /* 2.2, 2.3 Gegenueber, vertikal versetzt. � � � � � � */
- /* Ueberschneidung weder auf der � � � � � � */
- /* X- noch auf der Y-Achse � � � � � � */
- /* 2.4, 2.5 Untereinander, � � � � � � */
- /* Ueberschneidung � � � � � � */
- /* nur auf X-Achse � � � � � � */
- /* 2.6, 2.7 Gegeneinander, vertikal versetzt. � � � � � � */
- /* Ueberschneidung weder auf der � � � � � � */
- /* X- noch auf der Y-Achse. � � � � � � */
- /* 2.8 Gegeneinander. � � � */
- /* Ueberschneidung nur � � � */
- /* auf der Y-Achse. � � � */
- /* 2.9 Die BewareRects der Objekte ueberschneiden */
- /* sich auf X- und Y-Achse. */
- /* Die Faelle gelten entsprechend umgesetzt auch fuer */
- /* senkrechte Linienaustritte. */
- /* Die Faelle 2.1-2.7 werden mit dem Default-Meeting ausreichend*/
- /* gut behandelt. Spezielle MeetingPoints werden hier also nur */
- /* fuer 2.8 und 2.9 bestimmt. */
-
- // Normalisierung. aR1 soll der nach rechts und
- // aR2 der nach links austretende sein.
+ // case 2:
+ if (bHor1) { // both horizontal
+ /* 9 sub-cases:
+ (legend: line exits to the left (-|), right (|-))
+
+ 2.1: Facing; overlap only on y axis
+ * * *
+ |--| *
+ * * *
+
+ 2.2, 2.3: Facing, offset vertically; no overlap on either
+ axis
+ |- * * * * *
+ * -| * * -| *
+ * * * , * * *
+
+ 2.4, 2.5: One below the other; overlap only on y axis
+ * |- * * * *
+ * -| * * -| *
+ * * * , * |- *
+
+ 2.6, 2.7: Not facing, offset vertically; no overlap on either
+ axis
+ * * |- * * *
+ * -| * * -| *
+ * * * , * * |-
+
+ 2.8: Not facing; overlap only on y axis
+ * * *
+ * -| |-
+ * * *
+
+ 2.9: The objects's BewareRects overlap on x and y axis
+
+ These cases, with some modifications are also valid for
+ horizontal line exits.
+ Cases 2.1 through 2.7 are covered well enough with the
+ default meetings. Only for cases 2.8 and 2.9 do we determine
+ special meeting points here.
+ */
+
+ // normalization; be aR1 the one exiting to the right,
+ // be aR2 the one exiting to the left
Rectangle aBewR1(bRts1 ? aBewareRect1 : aBewareRect2);
Rectangle aBewR2(bRts1 ? aBewareRect2 : aBewareRect1);
Rectangle aBndR1(bRts1 ? aBoundRect1 : aBoundRect2);
Rectangle aBndR2(bRts1 ? aBoundRect2 : aBoundRect1);
if (aBewR1.Bottom()>aBewR2.Top() && aBewR1.Top()<aBewR2.Bottom()) {
- // Ueberschneidung auf der Y-Achse. Faelle 2.1, 2.8, 2.9
+ // overlap on y axis; cases 2.1, 2.8, 2.9
if (aBewR1.Right()>aBewR2.Left()) {
- // Faelle 2.8, 2.9
- // Fall 2.8 ist immer Aussenrumlauf (bDirect=sal_False).
- // Fall 2.9 kann auch Direktverbindung sein (bei geringer
- // Ueberschneidung der BewareRects ohne Ueberschneidung der
- // Boundrects wenn die Linienaustritte sonst das BewareRect
- // des jeweils anderen Objekts verletzen wuerden.
+ /* Cases 2.8, 2.9:
+ Case 2.8: always going around on the outside
+ (bDirect=sal_False).
+
+ Case 2.9 could also be a direct connection (in the
+ case that the BewareRects overlap only slightly and
+ the BoundRects don't overlap at all and if the
+ line exits would otherwise violate the respective
+ other object's BewareRect).
+ */
bool bCase29Direct = false;
bool bCase29=aBewR1.Right()>aBewR2.Left();
- if (aBndR1.Right()<=aBndR2.Left()) { // Fall 2.9 und keine
Boundrectueberschneidung
+ if (aBndR1.Right()<=aBndR2.Left()) { // case 2.9 without BoundRect overlap
if ((aPt1.Y()>aBewareRect2.Top() && aPt1.Y()<aBewareRect2.Bottom()) ||
(aPt2.Y()>aBewareRect1.Top() && aPt2.Y()<aBewareRect1.Bottom())) {
bCase29Direct = true;
@@ -1008,8 +1028,8 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
aMeeting.Y()=nYMax;
}
if (bCase29) {
- // und nun noch dafuer sorgen, dass das
- // umzingelte Obj nicht durchquert wird
+ // now make sure that the surrounded object
+ // isn't traversed
if ((aBewR1.Center().Y()<aBewR2.Center().Y()) != bObenLang) {
aMeeting.X()=aBewR2.Right();
} else {
@@ -1017,42 +1037,45 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1,
const Rec
}
}
} else {
- // Direkte Verbindung (3-Linien Z-Verbindung), da
- // Verletzung der BewareRects unvermeidlich ist.
- // Via Dreisatz werden die BewareRects nun verkleinert.
- long nWant1=aBewR1.Right()-aBndR1.Right(); // Abstand bei Obj1
- long nWant2=aBndR2.Left()-aBewR2.Left(); // Abstand bei Obj2
- long nSpace=aBndR2.Left()-aBndR1.Right(); // verfuegbarer Platz
+ // We need a direct connection (3-line Z connection),
+ // because we have to violate the BewareRects.
+ // Use rule of three to scale down the BewareRects.
+ long nWant1=aBewR1.Right()-aBndR1.Right(); // distance at Obj1
+ long nWant2=aBndR2.Left()-aBewR2.Left(); // distance at Obj2
+ long nSpace=aBndR2.Left()-aBndR1.Right(); // available space
long nGet1=BigMulDiv(nWant1,nSpace,nWant1+nWant2);
long nGet2=nSpace-nGet1;
- if (bRts1) { // Normalisierung zurueckwandeln
+ if (bRts1) { // revert normalization
aBewareRect1.Right()+=nGet1-nWant1;
aBewareRect2.Left()-=nGet2-nWant2;
} else {
aBewareRect2.Right()+=nGet1-nWant1;
aBewareRect1.Left()-=nGet2-nWant2;
}
- nIntersections++; // Qualitaet herabsetzen
+ nIntersections++; // lower quality
}
}
}
- } else if (bVer1) { // beide senkrecht
+ } else if (bVer1) { // both horizontal
Rectangle aBewR1(bUnt1 ? aBewareRect1 : aBewareRect2);
Rectangle aBewR2(bUnt1 ? aBewareRect2 : aBewareRect1);
Rectangle aBndR1(bUnt1 ? aBoundRect1 : aBoundRect2);
Rectangle aBndR2(bUnt1 ? aBoundRect2 : aBoundRect1);
if (aBewR1.Right()>aBewR2.Left() && aBewR1.Left()<aBewR2.Right()) {
- // Ueberschneidung auf der Y-Achse. Faelle 2.1, 2.8, 2.9
+ // overlap on y axis; cases 2.1, 2.8, 2.9
if (aBewR1.Bottom()>aBewR2.Top()) {
- // Faelle 2.8, 2.9
- // Fall 2.8 ist immer Aussenrumlauf (bDirect=sal_False).
- // Fall 2.9 kann auch Direktverbindung sein (bei geringer
- // Ueberschneidung der BewareRects ohne Ueberschneidung der
- // Boundrects wenn die Linienaustritte sonst das BewareRect
- // des jeweils anderen Objekts verletzen wuerden.
+ /* Cases 2.8, 2.9
+ Case 2.8 always going around on the outside (bDirect=sal_False).
+
+ Case 2.9 could also be a direct connection (in the
+ case that the BewareRects overlap only slightly and
+ the BoundRects don't overlap at all and if the
+ line exits would otherwise violate the respective
+ other object's BewareRect).
+ */
bool bCase29Direct = false;
bool bCase29=aBewR1.Bottom()>aBewR2.Top();
- if (aBndR1.Bottom()<=aBndR2.Top()) { // Fall 2.9 und keine
Boundrectueberschneidung
+ if (aBndR1.Bottom()<=aBndR2.Top()) { // case 2.9 without BoundRect overlap
if ((aPt1.X()>aBewareRect2.Left() && aPt1.X()<aBewareRect2.Right()) ||
(aPt2.X()>aBewareRect1.Left() && aPt2.X()<aBewareRect1.Right())) {
bCase29Direct = true;
@@ -1066,8 +1089,8 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
aMeeting.X()=nXMax;
}
if (bCase29) {
- // und nun noch dafuer sorgen, dass das
- // umzingelte Obj nicht durchquert wird
+ // now make sure that the surrounded object
+ // isn't traversed
if ((aBewR1.Center().X()<aBewR2.Center().X()) != bLinksLang) {
aMeeting.Y()=aBewR2.Bottom();
} else {
@@ -1075,66 +1098,80 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1,
const Rec
}
}
} else {
- // Direkte Verbindung (3-Linien Z-Verbindung), da
- // Verletzung der BewareRects unvermeidlich ist.
- // Via Dreisatz werden die BewareRects nun verkleinert.
- long nWant1=aBewR1.Bottom()-aBndR1.Bottom(); // Abstand bei Obj1
- long nWant2=aBndR2.Top()-aBewR2.Top(); // Abstand bei Obj2
- long nSpace=aBndR2.Top()-aBndR1.Bottom(); // verfuegbarer Platz
+ // We need a direct connection (3-line Z connection),
+ // because we have to violate the BewareRects.
+ // Use rule of three to scale down the BewareRects.
+ long nWant1=aBewR1.Bottom()-aBndR1.Bottom(); // difference at Obj1
+ long nWant2=aBndR2.Top()-aBewR2.Top(); // difference at Obj2
+ long nSpace=aBndR2.Top()-aBndR1.Bottom(); // available space
long nGet1=BigMulDiv(nWant1,nSpace,nWant1+nWant2);
long nGet2=nSpace-nGet1;
- if (bUnt1) { // Normalisierung zurueckwandeln
+ if (bUnt1) { // revert normalization
aBewareRect1.Bottom()+=nGet1-nWant1;
aBewareRect2.Top()-=nGet2-nWant2;
} else {
aBewareRect2.Bottom()+=nGet1-nWant1;
aBewareRect1.Top()-=nGet2-nWant2;
}
- nIntersections++; // Qualitaet herabsetzen
+ nIntersections++; // lower quality
}
}
}
}
- } else if (nMainCase==3) { // Fall 3: Einer waagerecht und der andere senkrecht. Sehr
viele Fallunterscheidungen
- /* Kleine Legende: � � � � � -> Ohne Ueberschneidung, maximal Beruehrung.
*/
- /* � � � � � -> Ueberschneidung
*/
- /* � � � � � -> Selbe Hoehe
*/
- /* � � � � � -> Ueberschneidung
*/
- /* � � � � � -> Ohne Ueberschneidung, maximal Beruehrung.
*/
- /* Linienaustritte links �, rechts �, oben � und unten �.
*/
- /* Insgesamt sind 96 Konstellationen moeglich, wobei einige nicht einmal
*/
- /* eindeutig einem Fall und damit einer Behandlungsmethode zugeordnet werden
*/
- /* koennen.
*/
- /* 3.1: Hierzu moegen alle Konstellationen zaehlen, die durch den
*/
- /* Default-MeetingPoint zufriedenstellend abgedeckt sind (20+12).
*/
- /* � � � � � � � � � � Diese 12 � � � � � � � � � � � � � � � � � � �
� */
- /* � � � � � � � � � � Konstel. � � � � � � � � � � � � � � � � � � �
� */
- /* � � � � � � � � � � jedoch � � � � � � � � � � � � � � � � � � �
� */
- /* � � � � � � � � � � nur zum � � � � � � � � � � � � � � � � � � �
� */
- /* � � � � � � � � � � Teil: � � � � � � � � � � � � � � � � � � �
� */
- /* Letztere 16 Faelle scheiden aus, sobald sich die Objekte offen
*/
- /* gegenueberstehen (siehe Fall 3.2).
*/
- /* 3.2: Die Objekte stehen sich offen gegenueber und somit ist eine
*/
- /* Verbindung mit lediglich 2 Linien moeglich (4+20).
*/
- /* Dieser Fall hat 1. Prioritaet.
*/
- /* � � � � � � � � � � Diese 20 � � � � � � � � � � � � � � � � � � � �
*/
- /* � � � � � � � � � � Konstel. � � � � � � � � � � � � � � � � � � � �
*/
- /* � � � � � � � � � � jedoch � � � � � � � � � � � � � � � � � � � �
*/
- /* � � � � � � � � � � nur zum � � � � � � � � � � � � � � � � � � � �
*/
- /* � � � � � � � � � � Teil: � � � � � � � � � � � � � � � � � � � �
*/
- /* 3.3: Die Linienaustritte zeigen vom anderen Objekt weg bzw. hinter
*/
- /* dessen Ruecken vorbei (52+4).
*/
- /* � � � � � � � � � � � � � � � � � � � � Diese 4 � � � � � � � � � �
*/
- /* � � � � � � � � � � � � � � � � � � � � Konstel. � � � � � � � � � �
*/
- /* � � � � � � � � � � � � � � � � � � � � jedoch � � � � � � � � � �
*/
- /* � � � � � � � � � � � � � � � � � � � � nur zum � � � � � � � � � �
*/
- /* � � � � � � � � � � � � � � � � � � � � Teil: � � � � � � � � � �
*/
-
- // Fall 3.2
+ } else if (nMainCase==3) { // case 3: one horizontal, the other vertical
+ /* legend:
+ The line exits to the:
+ -| left
+
+ |- right
+
+ _|_ top
+
+ T bottom
+
+ * . * . * -- no overlap, at most might touch
+ . . . . . -- overlap
+ * . |- . * -- same height
+ . . . . . -- overlap
+ * . * . * -- no overlap, at most might touch
+
+ Overall, there are 96 possible constellations, some of these can't even
+ be unambiguously assigned to a certain case/method of handling.
+
+
+ 3.1: All those constellations that are covered reasonably well
+ by the default MeetingPoint (20+12).
+
+ T T T . _|_ _|_ . T T T these 12 * . * T * * . * . *
* T * . * * . * . *
+ . . . . _|_ _|_ . . . . constellations . . . . . . . . . T
. . . . . T . . . .
+ * . |- . * * . -| . * are covered * . |- . _|_ * . |- . T
_|_ . -| . * T . -| . *
+ . . . . T T . . . . only in . . . . _|_ . . . . .
_|_ . . . . . . . . .
+ _|__|__|_ . T T . _|__|__|_ part: * . * _|_ * * . * . *
* _|_ * . * * . * . *
+
+ The last 16 of these cases can be excluded, if the objects face each other openly.
+
+
+ 3.2: The objects face each other openly, thus a connection using only two lines is
possible (4+20);
+ This case is priority #1.
+ * . * . T T . * . * these 20 * . * T * * T * . *
* . * . * * . * . *
+ . . . . . . . . . . constellations . . . T T T T . . .
. . . . . . . . . .
+ * . |- . * * . -| . * are covered * . |-_|__|_ _|__|_-| . *
* . |- T T T T -| . *
+ . . . . . . . . . . only in . . . _|__|_ _|__|_ . . .
. . . . . . . . . .
+ * . * . _|_ _|_ . * . * part: * . * _|_ * * _|_ * . *
* . * . * * . * . *
+
+ 3.3: The line exits point away from the other object or or miss its back (52+4).
+ _|__|__|__|_ * * _|__|__|__|_ * . . . * * . * . * these 4
* . * . * * . * . *
+ _|__|__|__|_ . . _|__|__|__|_ T T T . . . . T T T
constellations . . . T . . T . . .
+ _|__|_ |- . * * . -| _|__|_ T T |- . * * . -| T T are
covered * . |- . * * . -| . *
+ _|__|__|_ . . . . _|__|__|_ T T T T . . T T T T only in
. . . _|_ . . _|_ . . .
+ * . * . * * . * . * T T T T * * T T T T part:
* . * . * * . * . *
+ */
+
+ // case 3.2
Rectangle aTmpR1(aBewareRect1);
Rectangle aTmpR2(aBewareRect2);
if (bBewareOverlap) {
- // Ueberschneidung der BewareRects: BoundRects fuer Check auf Fall 3.2 verwenden.
+ // overlapping BewareRects: use BoundRects for checking for case 3.2
aTmpR1=aBoundRect1;
aTmpR2=aBoundRect2;
}
@@ -1142,7 +1179,7 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
((bUnt2 && aTmpR2.Bottom()<=aPt1.Y()) || (bObn2 && aTmpR2.Top ()>=aPt1.Y()))) ||
(((bRts2 && aTmpR2.Right ()<=aPt1.X()) || (bLks2 && aTmpR2.Left()>=aPt1.X())) &&
((bUnt1 && aTmpR1.Bottom()<=aPt2.Y()) || (bObn1 && aTmpR1.Top ()>=aPt2.Y())))) {
- // Fall 3.2 trifft zu: Verbindung mit lediglich 2 Linien
+ // case 3.2 applies: connector with only 2 lines
if (bHor1) {
aMeeting.X()=aPt2.X();
aMeeting.Y()=aPt1.Y();
@@ -1150,7 +1187,7 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
aMeeting.X()=aPt1.X();
aMeeting.Y()=aPt2.Y();
}
- // Falls Ueberschneidung der BewareRects:
+ // in the case of overlapping BewareRects:
aBewareRect1=aTmpR1;
aBewareRect2=aTmpR2;
} else if ((((bRts1 && aBewareRect1.Right ()>aBewareRect2.Left ()) ||
@@ -1161,7 +1198,7 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
(bLks2 && aBewareRect2.Left ()<aBewareRect1.Right ())) &&
((bUnt1 && aBewareRect1.Bottom()>aBewareRect2.Top ()) ||
(bObn1 && aBewareRect1.Top ()<aBewareRect2.Bottom())))) {
- // Fall 3.3
+ // case 3.3
if (bRts1 || bRts2) { aMeeting.X()=nXMax; }
if (bLks1 || bLks2) { aMeeting.X()=nXMin; }
if (bUnt1 || bUnt2) { aMeeting.Y()=nYMax; }
@@ -1181,18 +1218,18 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1,
const Rec
Point aEP1(aXP1[nXP1Anz-1]);
Point aEP2(aXP2[nXP2Anz-1]);
bool bInsMeetingPoint=aEP1.X()!=aEP2.X() && aEP1.Y()!=aEP2.Y();
- bool bHorzE1=aEP1.Y()==aXP1[nXP1Anz-2].Y(); // letzte Linie von XP1 horizontal?
- bool bHorzE2=aEP2.Y()==aXP2[nXP2Anz-2].Y(); // letzte Linie von XP2 horizontal?
+ bool bHorzE1=aEP1.Y()==aXP1[nXP1Anz-2].Y(); // is last line of XP1 horizontal?
+ bool bHorzE2=aEP2.Y()==aXP2[nXP2Anz-2].Y(); // is last line of XP2 horizontal?
if (aEP1==aEP2 && ((bHorzE1 && bHorzE2 && aEP1.Y()==aEP2.Y()) || (!bHorzE1 && !bHorzE2 &&
aEP1.X()==aEP2.X()))) {
- // Sonderbehandlung fuer 'I'-Verbinder
+ // special casing 'I' connectors
nXP1Anz--; aXP1.Remove(nXP1Anz,1);
nXP2Anz--; aXP2.Remove(nXP2Anz,1);
}
if (bInsMeetingPoint) {
aXP1.Insert(XPOLY_APPEND,aMeeting,XPOLY_NORMAL);
if (bInfo) {
- // Durch einfuegen des MeetingPoints kommen 2 weitere Linie hinzu.
- // Evtl. wird eine von diesen die Mittellinie.
+ // Inserting a MeetingPoint adds 2 new lines,
+ // either might become the center line.
if (pInfo->nObj1Lines==pInfo->nObj2Lines) {
pInfo->nObj1Lines++;
pInfo->nObj2Lines++;
@@ -1207,8 +1244,7 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
}
}
} else if (bInfo && aEP1!=aEP2 && nXP1Anz+nXP2Anz>=4) {
- // Durch Verbinden der beiden Enden kommt eine weitere Linie hinzu.
- // Dies wird die Mittellinie.
+ // By connecting both ends, another line is added, this becomes the center line.
pInfo->nMiddleLine=nXP1Anz-1;
}
sal_uInt16 nNum=aXP2.GetPointCount();
@@ -1223,27 +1259,27 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1,
const Rec
cForm='?';
if (nPntAnz==2) cForm='I';
else if (nPntAnz==3) cForm='L';
- else if (nPntAnz==4) { // Z oder U
+ else if (nPntAnz==4) { // Z or U
if (nAngle1==nAngle2) cForm='U';
else cForm='Z';
- } else if (nPntAnz==6) { // S oder C oder ...
+ } else if (nPntAnz==6) { // S or C or ...
if (nAngle1!=nAngle2) {
- // Fuer Typ S hat Linie2 dieselbe Richtung wie Linie4.
- // Bei Typ C sind die beiden genau entgegengesetzt.
+ // For type S, line 2 has the same direction as line 4.
+ // For type C, the opposite is true.
Point aP1(aXP1[1]);
Point aP2(aXP1[2]);
Point aP3(aXP1[3]);
Point aP4(aXP1[4]);
- if (aP1.Y()==aP2.Y()) { // beide Linien Horz
+ if (aP1.Y()==aP2.Y()) { // else both lines are horizontal
if ((aP1.X()<aP2.X())==(aP3.X()<aP4.X())) cForm='S';
else cForm='C';
- } else { // sonst beide Linien Vert
+ } else { // else both lines are vertical
if ((aP1.Y()<aP2.Y())==(aP3.Y()<aP4.Y())) cForm='S';
else cForm='C';
}
- } else cForm='4'; // sonst der 3. Fall mit 5 Linien
+ } else cForm='4'; // else is case 3 with 5 lines
} else cForm='?'; //
- // Weitere Formen:
+ // more shapes:
if (bInfo) {
pInfo->cOrthoForm=cForm;
if (cForm=='I' || cForm=='L' || cForm=='Z' || cForm=='U') {
@@ -1263,7 +1299,7 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
}
if (pnQuality!=NULL) {
sal_uIntPtr nQual=0;
- sal_uIntPtr nQual0=nQual; // Ueberlaeufe vorbeugen
+ sal_uIntPtr nQual0=nQual; // prevent overruns
bool bOverflow = false;
Point aPt0(aXP1[0]);
for (sal_uInt16 nPntNum=1; nPntNum<nPntAnz; nPntNum++) {
@@ -1276,18 +1312,18 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1,
const Rec
sal_uInt16 nTmp=nPntAnz;
if (cForm=='Z') {
- nTmp=2; // Z-Form hat gute Qualitaet (nTmp=2 statt 4)
+ nTmp=2; // Z shape with good quality (nTmp=2 instead of 4)
sal_uIntPtr n1=Abs(aXP1[1].X()-aXP1[0].X())+Abs(aXP1[1].Y()-aXP1[0].Y());
sal_uIntPtr n2=Abs(aXP1[2].X()-aXP1[1].X())+Abs(aXP1[2].Y()-aXP1[1].Y());
sal_uIntPtr n3=Abs(aXP1[3].X()-aXP1[2].X())+Abs(aXP1[3].Y()-aXP1[2].Y());
- // fuer moeglichst gleichlange Linien sorgen
+ // try to make lines lengths similar
sal_uIntPtr nBesser=0;
n1+=n3;
n3=n2/4;
if (n1>=n2) nBesser=6;
else if (n1>=3*n3) nBesser=4;
else if (n1>=2*n3) nBesser=2;
- if (aXP1[0].Y()!=aXP1[1].Y()) nBesser++; // Senkrechte Startlinie kriegt auch noch
einen Pluspunkt (fuer H/V-Prio)
+ if (aXP1[0].Y()!=aXP1[1].Y()) nBesser++; // vertical starting line gets a plus (for
H/V-Prio)
if (nQual>nBesser) nQual-=nBesser; else nQual=0;
}
if (nTmp>=3) {
@@ -1295,20 +1331,20 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1,
const Rec
nQual+=(sal_uIntPtr)nTmp*0x01000000;
if (nQual<nQual0 || nTmp>15) bOverflow = true;
}
- if (nPntAnz>=2) { // Austrittswinkel nochmal pruefen
+ if (nPntAnz>=2) { // check exit angle again
Point aP1(aXP1[1]); aP1-=aXP1[0];
Point aP2(aXP1[nPntAnz-2]); aP2-=aXP1[nPntAnz-1];
long nAng1=0; if (aP1.X()<0) nAng1=18000; if (aP1.Y()>0) nAng1=27000;
- if (aP1.Y()<0) nAng1=9000; if (aP1.X()!=0 && aP1.Y()!=0) nAng1=1; // Schraeg!?!
+ if (aP1.Y()<0) nAng1=9000; if (aP1.X()!=0 && aP1.Y()!=0) nAng1=1; // slant?!
long nAng2=0; if (aP2.X()<0) nAng2=18000; if (aP2.Y()>0) nAng2=27000;
- if (aP2.Y()<0) nAng2=9000; if (aP2.X()!=0 && aP2.Y()!=0) nAng2=1; // Schraeg!?!
+ if (aP2.Y()<0) nAng2=9000; if (aP2.X()!=0 && aP2.Y()!=0) nAng2=1; // slant?!
if (nAng1!=nAngle1) nIntersections++;
if (nAng2!=nAngle2) nIntersections++;
}
- // Fuer den Qualitaetscheck wieder die Original-Rects verwenden und
- // gleichzeitig checken, ob eins fuer die Edge-Berechnung verkleinert
- // wurde (z.B. Fall 2.9)
+ // For the quality check, use the original Rects and at the same time
+ // check whether one them was scaled down for the calculation of the
+ // Edges (e. g. case 2.9)
aBewareRect1=rBewareRect1;
aBewareRect2=rBewareRect2;
@@ -1325,16 +1361,16 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1,
const Rec
if (b1) nIntersections++;
if (b2) nIntersections++;
}
- // und nun noch auf Ueberschneidungen checken
+ // check for overlaps
if (i>0 && nInt0==nIntersections) {
- if (aPt0.Y()==aPt1b.Y()) { // Horizontale Linie
+ if (aPt0.Y()==aPt1b.Y()) { // horizontal line
if (aPt0.Y()>aBewareRect1.Top() && aPt0.Y()<aBewareRect1.Bottom() &&
((aPt0.X()<=aBewareRect1.Left() && aPt1b.X()>=aBewareRect1.Right()) ||
(aPt1b.X()<=aBewareRect1.Left() && aPt0.X()>=aBewareRect1.Right())))
nIntersections++;
if (aPt0.Y()>aBewareRect2.Top() && aPt0.Y()<aBewareRect2.Bottom() &&
((aPt0.X()<=aBewareRect2.Left() && aPt1b.X()>=aBewareRect2.Right()) ||
(aPt1b.X()<=aBewareRect2.Left() && aPt0.X()>=aBewareRect2.Right())))
nIntersections++;
- } else { // Vertikale Linie
+ } else { // vertical line
if (aPt0.X()>aBewareRect1.Left() && aPt0.X()<aBewareRect1.Right() &&
((aPt0.Y()<=aBewareRect1.Top() && aPt1b.Y()>=aBewareRect1.Bottom()) ||
(aPt1b.Y()<=aBewareRect1.Top() && aPt0.Y()>=aBewareRect1.Bottom())))
nIntersections++;
@@ -1353,7 +1389,7 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
if (bOverflow || nQual==0xFFFFFFFF) nQual=0xFFFFFFFE;
*pnQuality=nQual;
}
- if (bInfo) { // nun die Linienversaetze auf aXP1 anwenden
+ if (bInfo) { // now apply line offsets to aXP1
if (pInfo->nMiddleLine!=0xFFFF) {
sal_uInt16 nIdx=pInfo->ImpGetPolyIdx(MIDDLELINE,aXP1);
if (pInfo->ImpIsHorzLine(MIDDLELINE,aXP1)) {
@@ -1405,7 +1441,7 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
}
}
}
- // Nun mache ich ggf. aus dem Verbinder eine Bezierkurve
+ // make the connector a bezier curve, if appropriate
if (eKind==SDREDGE_BEZIER && nPntAnz>2) {
Point* pPt1=&aXP1[0];
Point* pPt2=&aXP1[1];
@@ -1428,20 +1464,18 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1,
const Rec
pPt2->Y()-=dy1/3;
pPt3->X()-=dx2/3;
pPt3->Y()-=dy2/3;
- } else if (nPntAnz>=4 && nPntAnz<=6) { // Z oder U oder ...
- // fuer Alle Anderen werden die Endpunkte der Ausgangslinien
- // erstmal zu Kontrollpunkten. Bei nPntAnz>4 ist also noch
- // Nacharbeit erforderlich!
+ } else if (nPntAnz>=4 && nPntAnz<=6) { // Z or U or ...
+ // To all others, the end points of the original lines become control
+ // points for now. Thus, we need to do some more work for nPntAnz>4!
aXP1.SetFlags(1,XPOLY_CONTROL);
aXP1.SetFlags(nPntAnz-2,XPOLY_CONTROL);
- // Distanz x1.5
+ // distance x1.5
pPt2->X()+=dx1/2;
pPt2->Y()+=dy1/2;
pPt3->X()+=dx2/2;
pPt3->Y()+=dy2/2;
if (nPntAnz==5) {
- // Vor und hinter dem Mittelpunkt jeweils
- // noch einen Kontrollpunkt einfuegen
+ // add a control point before and after center
Point aCenter(aXP1[2]);
long dx1b=aCenter.X()-aXP1[1].X();
long dy1b=aCenter.Y()-aXP1[1].Y();
@@ -1469,7 +1503,7 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const
Rec
aXP1.SetFlags(3,XPOLY_SYMMTR);
//aXP1[4].X()+=dx/2;
//aXP1[4].Y()+=dy/2;
- aXP1.Remove(4,1); // weil identisch mit aXP1[3]
+ aXP1.Remove(4,1); // because it's identical with aXP1[3]
}
}
}
@@ -1477,37 +1511,48 @@ XPolygon SdrEdgeObj::ImpCalcEdgeTrack(const Point& rPt1, long nAngle1,
const Rec
}
/*
-Nach einer einfachen Rechnung koennte es max. 64 unterschiedliche Verlaeufe mit
-5 Linien, 32 mit 4 Linien, 16 mit 3, 8 mit 2 Linien und 4 mit 1 Linie geben=124.
-Normalisiert auf 1. Austrittswinkel nach rechts bleiben dann noch 31.
-Dann noch eine vertikale Spiegelung wegnormalisiert bleiben noch 16
-characteristische Verlaufszuege mit 1-5 Linien:
-Mit 1 Linie (Typ 'I'): --
-Mit 2 Linien (Typ 'L'): -�
-Mit 3 Linien (Typ 'U'): -� (Typ 'Z'): �-
- -� -�
-Mit 4 Linien: 1 ist nicht plausibel, 3 ist=2 (90deg Drehung). Verbleibt 2,4
- �-� ڿ � ڿ ڿ �-�
- -� -� -� -� -� -�
-Mit 5 Linien: nicht plausibel sind 1,2,4,5. 7 ist identisch mit 3 (Richtungsumkehr)
- Bleibt also 3,6 und 8. '4' 'S' 'C'
- � � -� �- �-� �-
- �-� �-� �-� �-� � � -� � �-� �-� � �-�
- -� -� -� � -� �- -� -� --� � � -� � -� � �
-Insgesamt sind also 9 Grundtypen zu unterscheiden die den 400 Konstellationen
-aus Objektposition und Austrittswinkeln zuzuordnen sind.
-4 der 9 Grundtypen haben eine 'Mittellinie'. Die Anzahl der zu Objektabstaende
-je Objekt variiert von 0-3:
- Mi O1 O2 Anmerkung
-'I': n 0 0
-'L': n 0 0
-'U': n 0-1 0-1
-'Z': j 0 0
-4.1: j 0 1 = U+1 bzw. 1+U
-4.2: n 0-2 0-2 = Z+1
-'4': j 0 2 = Z+2
-'S': j 1 1 = 1+Z+1
-'C': n 0-3 0-3 = 1+U+1
+There could be a maximum of 64 different developments with with 5 lines, a
+maximum of 32 developments with 4 lines, a maximum of 16 developments with
+3 lines, a maximum of 8 developments with 2 lines.
+This gives us a total of 124 possibilities.
+Normalized for the 1st exit angle to the right, there remain 31 possibilities.
+Now, normalizing away the vertical mirroring, we get to a total of 16
+characteristic developments with 1 through 5 lines:
+
+1 line (type "I") --
+
+2 lines (type "L") __|
+
+3 lines (type "U") __ (type "Z") _
+ __| _|
+ _ _
+4 lines #1 _| #2 | | #3 |_ #4 | |
+ _| _| _| _|
+ Of these, #1 is implausible, #2 is a rotated version of #3. This leaves
+ #2 (from now on referred to as 4.1) and #4 (from now on referred to as 4.2).
+ _ _
+5 lines #1 _| #2 _| #3 ___ #4 _
+ _| _| _| _| _| |_
+ _ _ _
+ #5 |_ #6 |_ #7 _| | #8 ____
+ _| _| _| |_ _|
+ Of these, 5.1, 5.2, 5.4 and 5.5 are implausible, 5.7 is a reversed version
+ of 5.3. This leaves 5.3 (type "4"), 5.6 (type "S") and 5.8 (type "C").
+
+We now have discerned the 9 basic types to cover all 400 possible constellations
+of object positions and exit angles. 4 of the 9 types have got a center
+line (CL). The number of object margins per object varies between 0 and 3:
+
+ CL O1 O2 Note
+"I": n 0 0
+"L": n 0 0
+"U": n 0-1 0-1
+"Z": y 0 0
+4.2: y 0 1 = U+1, respectively 1+U
+4.4: n 0-2 0-2 = Z+1
+"4": y 0 2 = Z+2
+"S": y 1 1 = 1+Z+1
+"C": n 0-3 0-3 = 1+U+1
*/
void SdrEdgeObj::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
@@ -1519,33 +1564,33 @@ void SdrEdgeObj::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
bool bObj1=aCon1.pObj!=NULL && aCon1.pObj->GetBroadcaster()==&rBC;
bool bObj2=aCon2.pObj!=NULL && aCon2.pObj->GetBroadcaster()==&rBC;
if (bDying && (bObj1 || bObj2)) {
- // Dying vorher abfangen, damit AttrObj nicht
- // wg. vermeintlicher Vorlagenaenderung rumbroadcastet
+ // catch Dying, so AttrObj doesn't start broadcasting
+ // about an alleged change of template
if (bObj1) aCon1.pObj=NULL;
if (bObj2) aCon2.pObj=NULL;
- return; // Und mehr braucht hier nicht getan werden.
+ return;
}
if ( bObj1 || bObj2 )
{
bEdgeTrackUserDefined = sal_False;
}
SdrTextObj::Notify(rBC,rHint);
- if (nNotifyingCount==0) { // Hier nun auch ein VerriegelungsFlag
+ if (nNotifyingCount==0) { // a locking flag
((SdrEdgeObj*)this)->nNotifyingCount++;
SdrHint* pSdrHint=PTR_CAST(SdrHint,&rHint);
- if (bDataChg) { // StyleSheet geaendert
- ImpSetAttrToEdgeInfo(); // Werte bei Vorlagenaenderung vom Pool nach aEdgeInfo kopieren
+ if (bDataChg) { // StyleSheet changed
+ ImpSetAttrToEdgeInfo(); // when changing templates, copy values from Pool to aEdgeInfo
}
if (bDataChg ||
(bObj1 && aCon1.pObj->GetPage()==pPage) ||
(bObj2 && aCon2.pObj->GetPage()==pPage) ||
(pSdrHint && pSdrHint->GetKind()==HINT_OBJREMOVED))
{
- // Broadcasting nur, wenn auf der selben Page
+ // broadcasting only, if on the same page
Rectangle aBoundRect0; if (pUserCall!=NULL) aBoundRect0=GetLastBoundRect();
ImpDirtyEdgeTrack();
- // only redraw here, no objectchange
+ // only redraw here, object hasn't actually changed
ActionChanged();
SendUserCall(SDRUSERCALL_RESIZE,aBoundRect0);
@@ -1555,7 +1600,7 @@ void SdrEdgeObj::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
}
/** updates edges that are connected to the edges of this object
- as if the connected objects send a repaint broadcast
+ as if the connected objects sent a repaint broadcast
*/
void SdrEdgeObj::Reformat()
{
@@ -1641,7 +1686,7 @@ void SdrEdgeObj::SetEdgeTrackPath( const basegfx::B2DPolyPolygon& rPoly )
bEdgeTrackDirty = sal_False;
bEdgeTrackUserDefined = sal_True;
- // #i110629# also set aRect and maSnapeRect dependent from pEdgeTrack
+ // #i110629# also set aRect and maSnapeRect depending on pEdgeTrack
const Rectangle aPolygonBounds(pEdgeTrack->GetBoundRect());
aRect = aPolygonBounds;
maSnapRect = aPolygonBounds;
@@ -1868,7 +1913,7 @@ bool SdrEdgeObj::applySpecialDrag(SdrDragStat& rDragStat)
aEdgeInfo.ImpSetLineVersatz(eLineCode, *pEdgeTrack, nDist);
}
- // force recalc EdgeTrack
+ // force recalculation of EdgeTrack
*pEdgeTrack = ImpCalcEdgeTrack(*pEdgeTrack, aCon1, aCon2, &aEdgeInfo);
bEdgeTrackDirty=sal_False;
@@ -2007,7 +2052,7 @@ bool SdrEdgeObj::EndCreate(SdrDragStat& rDragStat, SdrCreateCmd eCmd)
if (rDragStat.GetView()!=NULL) {
rDragStat.GetView()->HideConnectMarker();
}
- ImpSetEdgeInfoToAttr(); // Die Werte aus aEdgeInfo in den Pool kopieren
+ ImpSetEdgeInfoToAttr(); // copy values from aEdgeInfo into the pool
}
SetRectsDirty();
return bOk;
@@ -2047,7 +2092,7 @@ bool SdrEdgeObj::ImpFindConnector(const Point& rPt, const SdrPageView& rPV,
SdrO
if (pOut==NULL) return sal_False;
SdrObjList* pOL=rPV.GetObjList();
const SetOfByte& rVisLayer=rPV.GetVisibleLayers();
- // Sensitiver Bereich der Konnektoren ist doppelt so gross wie die Handles:
+ // sensitive area of connectors is twice as large as the one of the handles
sal_uInt16 nMarkHdSiz=rPV.GetView().GetMarkHdlSizePixel();
Size aHalfConSiz(nMarkHdSiz,nMarkHdSiz);
aHalfConSiz=pOut->PixelToLogic(aHalfConSiz);
@@ -2064,20 +2109,20 @@ bool SdrEdgeObj::ImpFindConnector(const Point& rPt, const SdrPageView& rPV,
SdrO
SdrObjConnection aBestCon;
while (no>0 && !bFnd) {
- // Problem: Gruppenobjekt mit verschiedenen Layern liefert LayerID 0 !!!!
+ // issue: group objects on different layers return LayerID=0!
no--;
SdrObject* pObj=pOL->GetObj(no);
if (rVisLayer.IsSet(pObj->GetLayer()) && pObj->IsVisible() && // only visible objects
- (pThis==NULL || pObj!=(SdrObject*)pThis) && // nicht an mich selbst connecten
+ (pThis==NULL || pObj!=(SdrObject*)pThis) && // don't connect it to itself
pObj->IsNode())
{
Rectangle aObjBound(pObj->GetCurrentBoundRect());
if (aObjBound.IsOver(aMouseRect)) {
aTestCon.ResetVars();
- bool bEdge=HAS_BASE(SdrEdgeObj,pObj); // kein BestCon fuer Edge
- // Die Userdefined Konnektoren haben absolute Prioritaet.
- // Danach kommt Vertex, Corner und Mitte(Best) gleich priorisiert.
- // Zum Schluss kommt noch ein HitTest aufs Obj.
+ bool bEdge=HAS_BASE(SdrEdgeObj,pObj); // no BestCon for Edge
+ // User-defined connectors have absolute priority.
+ // After those come Vertex, Corner and center (Best), all prioritized equally.
+ // Finally, a HitTest for the object.
const SdrGluePointList* pGPL=pObj->GetGluePointList();
sal_uInt16 nConAnz=pGPL==NULL ? 0 : pGPL->GetCount();
sal_uInt16 nGesAnz=nConAnz+9;
@@ -2117,7 +2162,7 @@ bool SdrEdgeObj::ImpFindConnector(const Point& rPt, const SdrPageView& rPV,
SdrO
// Suppress default connect at object center
if(!pThis || !pThis->GetSuppressDefaultConnect())
{
- // Edges nicht!
+ // not the edges!
nConNum=0;
aConPos=aObjBound.Center();
bOk = true;
@@ -2138,8 +2183,7 @@ bool SdrEdgeObj::ImpFindConnector(const Point& rPt, const SdrPageView& rPV,
SdrO
}
}
}
- // Falls kein Konnektor getroffen wird nochmal
- // HitTest versucht fuer BestConnector (=bCenter)
+ // if no connector is hit, try HitTest again, for BestConnector (=bCenter)
if(!bFnd &&
!bEdge &&
SdrObjectPrimitiveHit(*pObj, rPt, nBoundHitTol, rPV, &rVisLayer, false))
@@ -2264,7 +2308,7 @@ Point SdrEdgeObj::GetPoint(sal_uInt32 i) const
void SdrEdgeObj::NbcSetPoint(const Point& rPnt, sal_uInt32 i)
{
- // ToDo: Umconnekten fehlt noch
+ // TODO: Need an implementation to connect differently.
ImpUndirtyEdgeTrack();
sal_uInt16 nAnz=pEdgeTrack->GetPointCount();
if (0L == i)
@@ -2354,9 +2398,9 @@ void SdrEdgeObj::SetTailPoint( sal_Bool bTail, const Point& rPt )
}
/** this method is used by the api to set a glue point for a connection
- nId == -1 : The best default point is automaticly choosen
- 0 <= nId <= 3 : One of the default points is choosen
- nId >= 4 : A user defined glue point is choosen
+ nId == -1 : The best default point is automatically chosen
+ 0 <= nId <= 3 : One of the default points is chosen
+ nId >= 4 : A user defined glue point is chosen
*/
void SdrEdgeObj::setGluePointIndex( sal_Bool bTail, sal_Int32 nIndex /* = -1 */ )
{
@@ -2424,7 +2468,7 @@ sal_Bool SdrEdgeObj::TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix,
basegfx::
void SdrEdgeObj::TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const
basegfx::B2DPolyPolygon& rPolyPolygon)
{
- // evtl. take care for existing connections. For now, just use the
+ // where appropriate take care for existing connections. For now, just use the
// implementation from SdrObject.
SdrObject::TRSetBaseGeometry(rMatrix, rPolyPolygon);
}
diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index 151878a..dbe9077 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -109,9 +109,9 @@ const Graphic ImpLoadLinkedGraphic( const String aFileName, const String aFilter
String aEmptyStr;
com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > aFilterData( 1 );
- // Room for improvment:
+ // TODO: Room for improvement:
// As this is a linked graphic the GfxLink is not needed if saving/loading our own format.
- // But this link is required by some filters to access the native graphic (pdf export/ms
export),
+ // But this link is required by some filters to access the native graphic (PDF export/MS
export),
// there we should create a new service to provide this data if needed
aFilterData[ 0 ].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CreateNativeLink" ) );
aFilterData[ 0 ].Value = Any( sal_True );
@@ -258,7 +258,7 @@ void SdrGraphicLink::RemoveGraphicUpdater()
}
else if( SotExchange::GetFormatIdFromMimeType( rMimeType ) !=
sfx2::LinkManager::RegisterStatusInfoId() )
{
- // broadcasting, to update slidesorter
+ // broadcasting, to update slide sorter
pGrafObj->BroadcastObjectChange();
}
}
@@ -269,7 +269,7 @@ void SdrGraphicLink::RemoveGraphicUpdater()
void SdrGraphicLink::Closed()
{
- // Die Verbindung wird aufgehoben; pLink des Objekts auf NULL setzen, da die Link-Instanz ja
gerade destruiert wird.
+ // close connection; set pLink of the object to NULL, as link instance is just about getting
destructed.
pGrafObj->ForceSwapIn();
pGrafObj->pGraphicLink=NULL;
pGrafObj->ReleaseGraphicLink();
@@ -614,7 +614,7 @@ void SdrGrafObj::ImpLinkAbmeldung()
if( pLinkManager != NULL && pGraphicLink!=NULL)
{
- // Bei Remove wird *pGraphicLink implizit deleted
+ // When using Remove, the *pGraphicLink is implicitly deleted
pLinkManager->Remove( pGraphicLink );
pGraphicLink=NULL;
}
@@ -960,7 +960,7 @@ void SdrGrafObj::SetPage( SdrPage* pNewPage )
if( bRemove )
{
- // hier kein SwapIn noetig, weil wenn nicht geladen, dann auch nicht animiert.
+ // No SwapIn necessary here, because if something's not loaded, it can't be animated
either.
if( pGraphic->IsAnimated())
pGraphic->StopAnimation();
@@ -992,7 +992,7 @@ void SdrGrafObj::SetModel( SdrModel* pNewModel )
ImpLinkAbmeldung();
}
- // Model umsetzen
+ // realize model
SdrRectObj::SetModel(pNewModel);
if( bChg && aFileName.Len() )
@@ -1023,7 +1023,7 @@ SdrObject* SdrGrafObj::DoConvertToPolyObj(sal_Bool bBezier) const
{
case GRAPHIC_GDIMETAFILE:
{
- // NUR die aus dem MetaFile erzeugbaren Objekte in eine Gruppe packen und
zurueckliefern
+ // Sort into group and return ONLY those objects that can be created from the MetaFile.
SdrObjGroup* pGrp = new SdrObjGroup();
ImpSdrGDIMetaFileImport aFilter(*GetModel());
Point aOutPos( aRect.TopLeft() );
@@ -1065,13 +1065,13 @@ SdrObject* SdrGrafObj::DoConvertToPolyObj(sal_Bool bBezier) const
}
case GRAPHIC_BITMAP:
{
- // Grundobjekt kreieren und Fuellung ergaenzen
+ // create basic object and add fill
pRetval = SdrRectObj::DoConvertToPolyObj(bBezier);
- // Bitmap als Attribut retten
+ // save bitmap as an attribute
if(pRetval)
{
- // Bitmap als Fuellung holen
+ // retrieve bitmap for the fill
SfxItemSet aSet(GetObjectItemSet());
aSet.Put(XFillStyleItem(XFILL_BITMAP));
@@ -1142,8 +1142,7 @@ void SdrGrafObj::AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly
)
{
Point aPos( rMaxRect.TopLeft() );
- // Falls Grafik zu gross, wird die Grafik
- // in die Seite eingepasst
+ // if the graphic is too large, fit it to page
if ( (!bShrinkOnly ||
( aSize.Height() > aMaxSize.Height() ) ||
( aSize.Width() > aMaxSize.Width() ) )&&
@@ -1154,7 +1153,7 @@ void SdrGrafObj::AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly
)
float fWinWH = (float)aMaxSize.Width() /
(float)aMaxSize.Height();
- // Grafik an Pagesize anpassen (skaliert)
+ // Scale graphic to page size
if ( fGrfWH < fWinWH )
{
aSize.Width() = (long)(aMaxSize.Height() * fGrfWH);
@@ -1217,7 +1216,7 @@ IMPL_LINK( SdrGrafObj, ImpSwapHdl, GraphicObject*, pO )
}
else if( pO->IsInSwapIn() )
{
- // kann aus dem original Doc-Stream nachgeladen werden...
+ // can be loaded from the original document stream later
if( pModel != NULL )
{
if( pGraphic->HasUserData() )
@@ -1305,7 +1304,7 @@ Reference< XInputStream > SdrGrafObj::getInputStream()
if( pModel )
{
- // kann aus dem original Doc-Stream nachgeladen werden...
+ // can be loaded from the original document stream later
if( pGraphic->HasUserData() )
{
::comphelper::LifecycleProxy proxy;
diff --git a/svx/source/svdraw/svdogrp.cxx b/svx/source/svdraw/svdogrp.cxx
index 1e52062..5ee2597 100644
--- a/svx/source/svdraw/svdogrp.cxx
+++ b/svx/source/svdraw/svdogrp.cxx
@@ -49,9 +49,9 @@
#include <svx/svdtrans.hxx>
#include <svx/svdetc.hxx>
#include <svx/svdattrx.hxx> // NotPersistItems
-#include <svx/svdoedge.hxx> // Die Verbinder nach Move nochmal anbroadcasten
+#include <svx/svdoedge.hxx> // broadcast connectors to Move
#include "svx/svdglob.hxx" // StringCache
-#include "svx/svdstr.hrc" // Objektname
+#include "svx/svdstr.hrc" // the object's name
#include <svx/svxids.hrc>
#include <svl/whiter.hxx>
@@ -300,7 +300,7 @@ SdrObjGroup& SdrObjGroup::operator=(const SdrObjGroup& rObj)
pSub->SetModel(rSourceSubList.GetModel());
pSub->CopyObjects(*rObj.GetSubList());
- // copy local paremeters
+ // copy local parameters
nDrehWink = rObj.nDrehWink;
nShearWink = rObj.nShearWink;
aRefPoint = rObj.aRefPoint;
@@ -344,7 +344,7 @@ void SdrObjGroup::TakeObjNamePlural(XubString& rName) const
void SdrObjGroup::RecalcSnapRect()
{
- // nicht erforderlich, da die Rects von der SubList verwendet werden.
+ // TODO: unnecessary, because we use the Rects from the SubList
}
basegfx::B2DPolyPolygon SdrObjGroup::TakeXorPoly() const
@@ -485,7 +485,7 @@ void SdrObjGroup::NbcRotate(const Point& rRef, long nWink, double sn, double cs)
void SdrObjGroup::NbcMirror(const Point& rRef1, const Point& rRef2)
{
SetGlueReallyAbsolute(sal_True);
- MirrorPoint(aRefPoint,rRef1,rRef2); // fehlende Implementation in SvdEtc !!!
+ MirrorPoint(aRefPoint,rRef1,rRef2); // implementation missing in SvdEtc!
SdrObjList* pOL=pSub;
sal_uIntPtr nObjAnz=pOL->GetObjCount();
for (sal_uIntPtr i=0; i<nObjAnz; i++) {
@@ -564,7 +564,7 @@ void SdrObjGroup::Move(const Size& rSiz)
Rectangle aBoundRect0; if (pUserCall!=NULL) aBoundRect0=GetLastBoundRect();
MovePoint(aRefPoint,rSiz);
if (pSub->GetObjCount()!=0) {
- // Erst die Verbinder verschieben, dann den Rest
+ // first move the connectors, then everything else
SdrObjList* pOL=pSub;
sal_uIntPtr nObjAnz=pOL->GetObjCount();
sal_uIntPtr i;
@@ -609,7 +609,7 @@ void SdrObjGroup::Resize(const Point& rRef, const Fraction& xFact, const Fractio
Rectangle aBoundRect0; if (pUserCall!=NULL) aBoundRect0=GetLastBoundRect();
ResizePoint(aRefPoint,rRef,xFact,yFact);
if (pSub->GetObjCount()!=0) {
- // Erst die Verbinder verschieben, dann den Rest
+ // move the connectors first, everything else afterwards
SdrObjList* pOL=pSub;
sal_uIntPtr nObjAnz=pOL->GetObjCount();
sal_uIntPtr i;
@@ -640,7 +640,7 @@ void SdrObjGroup::Rotate(const Point& rRef, long nWink, double sn, double cs)
Rectangle aBoundRect0; if (pUserCall!=NULL) aBoundRect0=GetLastBoundRect();
nDrehWink=NormAngle360(nDrehWink+nWink);
RotatePoint(aRefPoint,rRef,sn,cs);
- // Erst die Verbinder verschieben, dann den Rest
+ // move the connectors first, everything else afterwards
SdrObjList* pOL=pSub;
sal_uIntPtr nObjAnz=pOL->GetObjCount();
sal_uIntPtr i;
@@ -665,8 +665,8 @@ void SdrObjGroup::Mirror(const Point& rRef1, const Point& rRef2)
{
SetGlueReallyAbsolute(sal_True);
Rectangle aBoundRect0; if (pUserCall!=NULL) aBoundRect0=GetLastBoundRect();
- MirrorPoint(aRefPoint,rRef1,rRef2); // fehlende Implementation in SvdEtc !!!
- // Erst die Verbinder verschieben, dann den Rest
+ MirrorPoint(aRefPoint,rRef1,rRef2); // implementation missing in SvdEtc!
+ // move the connectors first, everything else afterwards
SdrObjList* pOL=pSub;
sal_uIntPtr nObjAnz=pOL->GetObjCount();
sal_uIntPtr i;
@@ -693,7 +693,7 @@ void SdrObjGroup::Shear(const Point& rRef, long nWink, double tn, bool bVShear)
Rectangle aBoundRect0; if (pUserCall!=NULL) aBoundRect0=GetLastBoundRect();
nShearWink+=nWink;
ShearPoint(aRefPoint,rRef,tn);
- // Erst die Verbinder verschieben, dann den Rest
+ // move the connectors first, everything else afterwards
SdrObjList* pOL=pSub;
sal_uIntPtr nObjAnz=pOL->GetObjCount();
sal_uIntPtr i;
@@ -721,7 +721,7 @@ void SdrObjGroup::SetAnchorPos(const Point& rPnt)
aAnchor=rPnt;
Size aSiz(rPnt.X()-aAnchor.X(),rPnt.Y()-aAnchor.Y());
MovePoint(aRefPoint,aSiz);
- // Erst die Verbinder verschieben, dann den Rest
+ // move the connectors first, everything else afterwards
SdrObjList* pOL=pSub;
sal_uIntPtr nObjAnz=pOL->GetObjCount();
sal_uIntPtr i;
@@ -746,14 +746,14 @@ void SdrObjGroup::NbcSetRelativePos(const Point& rPnt)
{
Point aRelPos0(GetSnapRect().TopLeft()-aAnchor);
Size aSiz(rPnt.X()-aRelPos0.X(),rPnt.Y()-aRelPos0.Y());
- NbcMove(aSiz); // Der ruft auch das SetRectsDirty()
+ NbcMove(aSiz); // this also calls SetRectsDirty()
}
void SdrObjGroup::SetRelativePos(const Point& rPnt)
{
Point aRelPos0(GetSnapRect().TopLeft()-aAnchor);
Size aSiz(rPnt.X()-aRelPos0.X(),rPnt.Y()-aRelPos0.Y());
- if (aSiz.Width()!=0 || aSiz.Height()!=0) Move(aSiz); // Der ruft auch das SetRectsDirty() und
Broadcast, ...
+ if (aSiz.Width()!=0 || aSiz.Height()!=0) Move(aSiz); // this also calls SetRectsDirty() and
Broadcast, ...
}
void SdrObjGroup::NbcReformatText()
diff --git a/svx/source/svdraw/svdomeas.cxx b/svx/source/svdraw/svdomeas.cxx
index f04d79a..8a98a7e 100644
--- a/svx/source/svdraw/svdomeas.cxx
+++ b/svx/source/svdraw/svdomeas.cxx
@@ -40,7 +40,7 @@
#include <svx/svdmodel.hxx>
#include <svx/svdview.hxx>
#include "svx/svdglob.hxx" // StringCache
-#include "svx/svdstr.hrc" // Objektname
+#include "svx/svdstr.hrc" // the object's name
#include <svl/style.hxx>
#include <svl/smplhint.hxx>
#include <editeng/eeitem.hxx>
@@ -105,7 +105,7 @@ void SdrMeasureObj::TakeRepresentation( XubString& rStr, SdrMeasureFieldKind eMe
if(eMeasureUnit != eModUIUnit)
{
- // Zur Umrechnung der Einheiten
+ // for the unit conversion
aFact *= GetMapFactor(eModUIUnit, eMeasureUnit).X();
}
@@ -116,7 +116,7 @@ void SdrMeasureObj::TakeRepresentation( XubString& rStr, SdrMeasureFieldKind eMe
if(aFact.GetNumerator() != aFact.GetDenominator())
{
- // Scaling ueber BigInt, um Ueberlaeufe zu vermeiden
+ // scale via BigInt, to avoid overruns
nLen = BigMulDiv(nLen, aFact.GetNumerator(), aFact.GetDenominator());
}
@@ -152,7 +152,7 @@ void SdrMeasureObj::TakeRepresentation( XubString& rStr, SdrMeasureFieldKind eMe
}
else
{
- // falls kein Model da ... (z.B. Preview im Dialog)
+ // if there's no Model ... (e. g. preview in dialog)
rStr = String();
rStr.AppendAscii("4711");
}
@@ -293,9 +293,9 @@ struct ImpLineRec
struct ImpMeasurePoly
{
- ImpLineRec aMainline1; // die mit dem 1. Pfeil
- ImpLineRec aMainline2; // die mit dem 2. Pfeil
- ImpLineRec aMainline3; // die dazwischen
+ ImpLineRec aMainline1; // those with the 1st arrowhead
+ ImpLineRec aMainline2; // those with the 2nd arrowhead
+ ImpLineRec aMainline3; // those in between
ImpLineRec aHelpline1;
ImpLineRec aHelpline2;
Rectangle aTextRect;
@@ -311,16 +311,16 @@ struct ImpMeasurePoly
sal_uInt16 nMainlineAnz;
SdrMeasureTextHPos eUsedTextHPos;
SdrMeasureTextVPos eUsedTextVPos;
- long nLineWdt2; // Halbe Strichstaerke
- long nArrow1Len; // Laenge des 1. Pfeils. Bei Center nur die Haelfte
- long nArrow2Len; // Laenge des 2. Pfeils. Bei Center nur die Haelfte
- long nArrow1Wdt; // Breite des 1. Pfeils
- long nArrow2Wdt; // Breite des 2. Pfeils
- long nShortLineLen; // Linienlaenge, wenn PfeileAussen
- bool bArrow1Center; // Pfeil 1 zentriert?
- bool bArrow2Center; // Pfeil 2 zentriert?
- bool bAutoUpsideDown; // UpsideDown durch Automatik
- bool bPfeileAussen;
+ long nLineWdt2; // half the line width
+ long nArrow1Len; // length of 1st arrowhead; for Center, use only half
+ long nArrow2Len; // length of 2nd arrowhead; for Center, use only half
+ long nArrow1Wdt; // width of 1st arrow
+ long nArrow2Wdt; // width of 2nd arrow
+ long nShortLineLen; // line length, if PfeileAussen (arrowheads on the
outside)
+ bool bArrow1Center; // arrowhead 1 centered?
+ bool bArrow2Center; // arrowhead 2 centered?
+ bool bAutoUpsideDown; // UpsideDown via automation
+ bool bPfeileAussen; // arrowheads on the outside
bool bBreakedLine;
};
@@ -406,8 +406,8 @@ void SdrMeasureObj::ImpCalcGeometrics(const ImpMeasureRec& rRec, ImpMeasurePoly&
nArrow1Len = impGetLineStartEndDistance(aPol1, nArrow1Wdt, bArrow1Center) - 1;
nArrow2Len = impGetLineStartEndDistance(aPol2, nArrow2Wdt, bArrow2Center) - 1;
- // nArrowLen ist bei bCenter bereits halbiert
- // Bei 2 Pfeilen a 4mm ist unter 10mm Schluss.
+ // nArrowLen is already halved at bCenter.
+ // In the case of 2 arrowheads each 4mm long, we can't go below 10mm.
nArrowNeed=nArrow1Len+nArrow2Len+(nArrow1Wdt+nArrow2Wdt)/2;
if (rPol.nLineLen<nArrowNeed) bPfeileAussen = true;
nShortLen=(nArrow1Len+nArrow1Wdt + nArrow2Len+nArrow2Wdt) /2;
@@ -421,19 +421,19 @@ void SdrMeasureObj::ImpCalcGeometrics(const ImpMeasureRec& rRec,
ImpMeasurePoly&
OutlinerParaObject* pOutlinerParaObject = SdrTextObj::GetOutlinerParaObject();
if (pOutlinerParaObject!=NULL &&
pOutlinerParaObject->GetTextObject().GetParagraphCount()==1)
{
- bBrkLine=sal_True; // Unterbrochene Linie, wenn nur 1 Absatz.
+ bBrkLine=sal_True; // dashed line if there's only on paragraph.
}
}
rPol.bBreakedLine=bBrkLine;
- if (rPol.eUsedTextHPos==SDRMEASURE_TEXTHAUTO) { // bei zu breitem Text diesen eventuell nach
aussen schieben
+ if (rPol.eUsedTextHPos==SDRMEASURE_TEXTHAUTO) { // if text is too wide, push it outside
bool bOutside = false;
long nNeedSiz=!rRec.bTextRota90 ? rPol.aTextSize.Width() : rPol.aTextSize.Height();
- if (nNeedSiz>rPol.nLineLen) bOutside = true; // Text passt nicht in die Mitte
+ if (nNeedSiz>rPol.nLineLen) bOutside = true; // text doesn't fit in between
if (bBrkLine) {
- if (nNeedSiz+nArrowNeed>rPol.nLineLen) bPfeileAussen = true; // Text passt in die
Mitte, wenn die Pfeile nach aussen kommen
+ if (nNeedSiz+nArrowNeed>rPol.nLineLen) bPfeileAussen = true; // text fits in between,
if arrowheads are on the outside
} else {
long nSmallNeed=nArrow1Len+nArrow2Len+(nArrow1Wdt+nArrow2Wdt)/2/4;
- if (nNeedSiz+nSmallNeed>rPol.nLineLen) bPfeileAussen = true; // Text passt in die
Mitte, wenn die Pfeile nach aussen kommen
+ if (nNeedSiz+nSmallNeed>rPol.nLineLen) bPfeileAussen = true; // text fits in between,
if arrowheads are on the outside
}
rPol.eUsedTextHPos=bOutside ? SDRMEASURE_TEXTLEFTOUTSIDE : SDRMEASURE_TEXTINSIDE;
}
@@ -493,15 +493,15 @@ void SdrMeasureObj::ImpCalcGeometrics(const ImpMeasureRec& rRec,
ImpMeasurePoly&
long dxh2= Round((nLineDist+nOverhang)*nHlpCos);
long dyh2=-Round((nLineDist+nOverhang)*nHlpSin);
- // Masshilfslinie 1
+ // extension line 1
rPol.aHelpline1.aP1=Point(aP1.X()+dxh1a,aP1.Y()+dyh1a);
rPol.aHelpline1.aP2=Point(aP1.X()+dxh2,aP1.Y()+dyh2);
- // Masshilfslinie 2
+ // extension line 2
rPol.aHelpline2.aP1=Point(aP2.X()+dxh1b,aP2.Y()+dyh1b);
rPol.aHelpline2.aP2=Point(aP2.X()+dxh2,aP2.Y()+dyh2);
- // Masslinie(n)
+ // dimension line
Point aMainlinePt1(aP1.X()+dx,aP1.Y()+dy);
Point aMainlinePt2(aP2.X()+dx,aP2.Y()+dy);
if (!bPfeileAussen) {
@@ -522,7 +522,7 @@ void SdrMeasureObj::ImpCalcGeometrics(const ImpMeasureRec& rRec, ImpMeasurePoly&
RotatePoint(rPol.aMainline2.aP1,rPol.aMainline2.aP2,nLineSin,nLineCos);
}
} else {
- long nLen1=nShortLen; // Pfeilbreite als Linienlaenge ausserhalb des Pfeils
+ long nLen1=nShortLen; // arrowhead's width as line length outside of the arrowhead
long nLen2=nShortLen;
long nTextWdt=rRec.bTextRota90 ? rPol.aTextSize.Height() : rPol.aTextSize.Width();
if (!bBrkLine) {
@@ -616,7 +616,7 @@ void SdrMeasureObj::UndirtyText() const
rOutliner.SetParaAttribs(0, GetObjectItemSet());
- // casting auf nonconst
+ // cast to nonconst
const_cast<SdrMeasureObj*>(this)->NbcSetOutlinerParaObject(
rOutliner.CreateParaObject() );
}
else
@@ -628,7 +628,7 @@ void SdrMeasureObj::UndirtyText() const
rOutliner.UpdateFields();
Size aSiz(rOutliner.CalcTextSize());
rOutliner.Clear();
- // 3x casting auf nonconst
+ // cast to nonconst three times
((SdrMeasureObj*)this)->aTextSize=aSiz;
((SdrMeasureObj*)this)->bTextSizeDirty=sal_False;
((SdrMeasureObj*)this)->bTextDirty=sal_False;
@@ -643,7 +643,7 @@ void SdrMeasureObj::TakeUnrotatedSnapRect(Rectangle& rRect) const
ImpTakeAttr(aRec);
ImpCalcGeometrics(aRec,aMPol);
- // TextSize ermitteln inkl. Textrahmenabstaende
+ // determine TextSize including text frame margins
Size aTextSize2(aMPol.aTextSize);
if (aTextSize2.Width()<1) aTextSize2.Width()=1;
if (aTextSize2.Height()<1) aTextSize2.Height()=1;
@@ -656,8 +656,9 @@ void SdrMeasureObj::TakeUnrotatedSnapRect(Rectangle& rRect) const
long nArr1Len=aMPol.nArrow1Len;
long nArr2Len=aMPol.nArrow2Len;
if (aMPol.bBreakedLine) {
- // Bei Unterbrochener Linie und Outside muss der Text nicht neben den
- // Pfeil sondern neben die Linie an dem Pfeil plaziert werden
+ // In the case of a dashed line and Outside, the text shouldn't be
+ // placed next to the line at the arrowhead insetead of directly at the
+ // arrowhead.
nArr1Len=aMPol.nShortLineLen+aMPol.nArrow1Wdt/4;
nArr2Len=aMPol.nShortLineLen+aMPol.nArrow2Wdt/4;
}
@@ -690,7 +691,7 @@ void SdrMeasureObj::TakeUnrotatedSnapRect(Rectangle& rRect) const
aTextPos.X()+=aTextSize2.Width();
aTextPos.Y()+=aTextSize2.Height();
}
- } else { // also wenn bTextRota90==TRUE
+ } else { // also if bTextRota90==TRUE
switch (eMH) {
case SDRMEASURE_TEXTLEFTOUTSIDE: aTextPos.X()=aPt1b.X()-aTextSize2.Height()-nArr1Len;
break;
case SDRMEASURE_TEXTRIGHTOUTSIDE: aTextPos.X()=aPt1b.X()+nLen+nArr2Len; break;
@@ -718,7 +719,7 @@ void SdrMeasureObj::TakeUnrotatedSnapRect(Rectangle& rRect) const
((SdrMeasureObj*)this)->aGeo.RecalcSinCos();
}
RotatePoint(aTextPos,aPt1b,aMPol.nLineSin,aMPol.nLineCos);
- aTextSize2.Width()++; aTextSize2.Height()++; // wg. des komischen Verhaltens beim Rect-Ctor
+ aTextSize2.Width()++; aTextSize2.Height()++; // because of the Rect-Ctor's odd behavior
rRect=Rectangle(aTextPos,aTextSize2);
rRect.Justify();
((SdrMeasureObj*)this)->aRect=rRect;
@@ -931,7 +932,7 @@ void SdrMeasureObj::ImpEvalDrag(ImpMeasureRec& rRec, const SdrDragStat& rDrag) c
long ndy0=aMov.Y()-aFix.Y();
bool bHLin=ndy0==0;
bool bVLin=ndx0==0;
- if (!bHLin || !bVLin) { // sonst ist aPt1==aPt2
+ if (!bHLin || !bVLin) { // else aPt1==aPt2
long ndx=aPt.X()-aFix.X();
long ndy=aPt.Y()-aFix.Y();
double nXFact=0; if (!bVLin) nXFact=(double)ndx/(double)ndx0;
@@ -1042,7 +1043,7 @@ void SdrMeasureObj::NbcRotate(const Point& rRef, long nWink, double sn,
double c
RotatePoint(aPt1,rRef,sn,cs);
RotatePoint(aPt2,rRef,sn,cs);
long nLen1=GetLen(aPt2-aPt1);
- if (nLen1!=nLen0) { // Aha, Rundungsfehler
+ if (nLen1!=nLen0) { // rounding error!
long dx=aPt2.X()-aPt1.X();
long dy=aPt2.Y()-aPt1.Y();
dx=BigMulDiv(dx,nLen0,nLen1);
@@ -1082,7 +1083,6 @@ long SdrMeasureObj::GetRotateAngle() const
void SdrMeasureObj::RecalcSnapRect()
{
- // Added correct implementation here.
ImpMeasureRec aRec;
ImpMeasurePoly aMPol;
XPolyPolygon aXPP;
@@ -1286,7 +1286,7 @@ void SdrMeasureObj::NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject)
{
SdrTextObj::NbcSetOutlinerParaObject(pTextObject);
if(SdrTextObj::GetOutlinerParaObject())
- SetTextDirty(); // Text neu berechnen!
+ SetTextDirty(); // recalculate text
}
void SdrMeasureObj::TakeTextRect( SdrOutliner& rOutliner, Rectangle& rTextRect, bool bNoEditText,
@@ -1323,18 +1323,18 @@ sal_uInt16 SdrMeasureObj::GetOutlinerViewAnchorMode() const
bool bTextRota90=aRec.bTextRota90;
bool bBelowRefEdge=aRec.bBelowRefEdge;
- // bTextUpsideDown muss hier noch ausgewertet werden!!!!
+ // TODO: bTextUpsideDown should be interpreted here!
if (!bTextRota90) {
if (eMH==SDRMEASURE_TEXTLEFTOUTSIDE) eTH=SDRTEXTHORZADJUST_RIGHT;
if (eMH==SDRMEASURE_TEXTRIGHTOUTSIDE) eTH=SDRTEXTHORZADJUST_LEFT;
- // bei eMH==SDRMEASURE_TEXTINSIDE kann horizontal geankert werden.
+ // at eMH==SDRMEASURE_TEXTINSIDE we can anchor horizontally
if (eMV==SDRMEASURE_ABOVE) eTV=SDRTEXTVERTADJUST_BOTTOM;
if (eMV==SDRMEASURE_BELOW) eTV=SDRTEXTVERTADJUST_TOP;
if (eMV==SDRMEASURETEXT_BREAKEDLINE || eMV==SDRMEASURETEXT_VERTICALCENTERED)
eTV=SDRTEXTVERTADJUST_CENTER;
} else {
if (eMH==SDRMEASURE_TEXTLEFTOUTSIDE) eTV=SDRTEXTVERTADJUST_BOTTOM;
if (eMH==SDRMEASURE_TEXTRIGHTOUTSIDE) eTV=SDRTEXTVERTADJUST_TOP;
- // bei eMH==SDRMEASURE_TEXTINSIDE kann vertikal geankert werden.
+ // at eMH==SDRMEASURE_TEXTINSIDE we can anchor vertically
if (!bBelowRefEdge) {
if (eMV==SDRMEASURE_ABOVE) eTH=SDRTEXTHORZADJUST_LEFT;
if (eMV==SDRMEASURE_BELOW) eTH=SDRTEXTHORZADJUST_RIGHT;
@@ -1379,7 +1379,7 @@ sal_Bool SdrMeasureObj::TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix,
basegf
basegfx::B2DTuple aScale(aRange.getRange());
basegfx::B2DTuple aTranslate(aRange.getMinimum());
- // position maybe relative to anchorpos, convert
+ // position maybe relative to anchor position, convert
if( pModel->IsWriter() )
{
if(GetAnchorPos().X() || GetAnchorPos().Y())
@@ -1396,7 +1396,7 @@ sal_Bool SdrMeasureObj::TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix,
basegf
{
case SFX_MAPUNIT_TWIP :
{
- // postion
+ // position
aTranslate.setX(ImplTwipsToMM(aTranslate.getX()));
aTranslate.setY(ImplTwipsToMM(aTranslate.getY()));
diff --git a/svx/source/svdraw/svdomedia.cxx b/svx/source/svdraw/svdomedia.cxx
index 526d30f..3dd3c54 100644
--- a/svx/source/svdraw/svdomedia.cxx
+++ b/svx/source/svdraw/svdomedia.cxx
@@ -163,8 +163,7 @@ void SdrMediaObj::AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly /
{
Point aPos( rMaxRect.TopLeft() );
- // Falls Grafik zu gross, wird die Grafik
- // in die Seite eingepasst
+ // if graphic is too large, fit it to the page
if ( (!bShrinkOnly ||
( aSize.Height() > aMaxSize.Height() ) ||
( aSize.Width() > aMaxSize.Width() ) )&&
@@ -175,7 +174,7 @@ void SdrMediaObj::AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly /
float fWinWH = (float)aMaxSize.Width() /
(float)aMaxSize.Height();
- // Grafik an Pagesize anpassen (skaliert)
+ // scale graphic to page size
if ( fGrfWH < fWinWH )
{
aSize.Width() = (long)(aMaxSize.Height() * fGrfWH);
diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx
index 13871ee..b56dd78 100644
--- a/svx/source/svdraw/svdoole2.cxx
+++ b/svx/source/svdraw/svdoole2.cxx
@@ -77,7 +77,7 @@
#include <svx/svdpagv.hxx>
#include <svx/svdmodel.hxx>
#include "svx/svdglob.hxx" // Stringcache
-#include "svx/svdstr.hrc" // Objektname
+#include "svx/svdstr.hrc" // the object's name
#include <svx/svdetc.hxx>
#include <svx/svdview.hxx>
#include "unomlstr.hxx"
@@ -234,7 +234,7 @@ void SAL_CALL SdrLightEmbeddedClient_Impl::notifyEvent( const document::EventObj
SolarMutexGuard aGuard;
- // the code currently makes sence only in case there is no other client
+ // the code currently makes sense only in case there is no other client
if ( mpObj && mpObj->GetAspect() != embed::Aspects::MSOLE_ICON &&
aEvent.EventName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("OnVisAreaChanged"))
&& mpObj->GetObjRef().is() && mpObj->GetObjRef()->getClientSite() == uno::Reference<
embed::XEmbeddedClient >( this ) )
{
@@ -309,7 +309,7 @@ void SAL_CALL SdrLightEmbeddedClient_Impl::saveObject()
if ( !mpObj )
throw embed::ObjectSaveVetoException();
- // the common persistance is supported by objects and links
+ // the common persistence is supported by objects and links
xPersist = uno::Reference< embed::XCommonEmbedPersist >( mpObj->GetObjRef(),
uno::UNO_QUERY_THROW );
xModifiable = uno::Reference< util::XModifiable >( mpObj->GetParentXModel(),
uno::UNO_QUERY );
}
@@ -1211,8 +1211,8 @@ void SdrOle2Obj::Disconnect_Impl()
// TODO/LATER: here we must assume that the destruction of the model is enough to
make clear that we will not
// remove the object from the container, even if the DrawingObject itself is not
destroyed (unfortunately this
// There is no real need to do the following removing of the object from the
container
- // in case the model has correct persistance, but in case of problems such a
removing
- // would make the behaviour of the office more stable
+ // in case the model has correct persistence, but in case of problems such a
removing
+ // would make the behavior of the office more stable
comphelper::EmbeddedObjectContainer* pContainer = xObjRef.GetContainer();
if ( pContainer )
@@ -1250,7 +1250,7 @@ void SdrOle2Obj::Disconnect_Impl()
{
pContainer->RemoveEmbeddedObject( xObjRef.GetObject(), sal_False);
- // TODO/LATER: mpImpl->aPersistName contains outdated information, to have
it uptodate
+ // TODO/LATER: mpImpl->aPersistName contains outdated information, to keep
it updated
// it should be returned from RemoveEmbeddedObject call. Currently it is
no problem,
// since no container is adjusted, actually the empty string could be
provided as a name here
xObjRef.AssignToContainer( NULL, mpImpl->aPersistName );
@@ -1293,7 +1293,7 @@ void SdrOle2Obj::SetModel(SdrModel* pNewModel)
if ( pNewModel == pModel )
{
- // don't know if this is necessary or if it will ever happen, but who know?!
+ // don't know if this is necessary or if it will ever happen, but who knows?!
SdrRectObj::SetModel( pNewModel );
return;
}
@@ -1315,7 +1315,7 @@ void SdrOle2Obj::SetModel(SdrModel* pNewModel)
{
try
{
- // move the objects' storage; ObjectRef remains the same, but PersistName may change
+ // move the object's storage; ObjectRef remains the same, but PersistName may change
::rtl::OUString aTmp;
comphelper::EmbeddedObjectContainer& rContainer =
pSrcPers->getEmbeddedObjectContainer();
uno::Reference < embed::XEmbeddedObject > xObj = rContainer.GetEmbeddedObject(
mpImpl->aPersistName );
@@ -1343,7 +1343,7 @@ void SdrOle2Obj::SetModel(SdrModel* pNewModel)
SdrRectObj::SetModel( pNewModel );
// #i43086#
- // #i85304 redo the change for charts for the above bugfix, as #i43086# does not ocur anymore
+ // #i85304 redo the change for charts for the above bugfix, as #i43086# does not occur anymore
//so maybe the ImpSetVisAreaSize call can be removed here completely
//Nevertheless I leave it in for other objects as I am not sure about the side effects when
removing now
if( pModel && !pModel->isLocked() && !IsChart() )
@@ -1352,7 +1352,7 @@ void SdrOle2Obj::SetModel(SdrModel* pNewModel)
if( pDestPers && !IsEmptyPresObj() )
{
if ( !pSrcPers || IsEmptyPresObj() )
- // object wasn't connected, now it should
+ // object wasn't connected, now it should be
Connect_Impl();
else
Reconnect_Impl();
@@ -1386,7 +1386,7 @@ void SdrOle2Obj::SetObjRef( const com::sun::star::uno::Reference <
com::sun::sta
return;
// the caller of the method is responsible to control the old object, it will not be closed
here
- // Otherwise WW8 import crashes because it tranfers control to OLENode by this method
+ // Otherwise WW8 import crashes because it transfers control to OLENode by this method
if ( xObjRef.GetObject().is() )
xObjRef.Lock( sal_False );
@@ -1636,7 +1636,7 @@ void SdrOle2Obj::ImpSetVisAreaSize()
if ( pClient || bHasOwnClient )
{
- // TODO/LATER: IMHO we need to do similar things when object is UIActive or
OutplaceActive?! (MBA)
+ // TODO: IMHO we need to do similar things when object is UIActive or OutplaceActive?!
if ( ((nMiscStatus & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) &&
svt::EmbeddedObjectRef::TryRunningState( xObjRef.GetObject() ))
|| xObjRef->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE
@@ -1760,7 +1760,7 @@ void SdrOle2Obj::NbcResize(const Point& rRef, const Fraction& xFact, const
Fract
}
SdrRectObj::NbcResize(rRef,xFact,yFact);
- if (aGeo.nShearWink!=0 || aGeo.nDrehWink!=0) { // kleine Korrekturen
+ if (aGeo.nShearWink!=0 || aGeo.nDrehWink!=0) { // little correctures
if (aGeo.nDrehWink>=9000 && aGeo.nDrehWink<27000) {
aRect.Move(aRect.Left()-aRect.Right(),aRect.Top()-aRect.Bottom());
}
@@ -1911,7 +1911,7 @@ sal_Bool SdrOle2Obj::Unload()
{
//TODO/LATER: no refcounting tricks anymore!
//"customers" must register as state change listeners
- //Nicht notwendig im Doc DTor (MM)
+ // Not necessary in Doc DTor (MM)
//sal_uIntPtr nRefCount = (*ppObjRef)->GetRefCount();
// prevent Unload if there are external references
//if( nRefCount > 2 )
diff --git a/svx/source/svdraw/svdopage.cxx b/svx/source/svdraw/svdopage.cxx
index c9dafba..2c9e34e 100644
--- a/svx/source/svdraw/svdopage.cxx
+++ b/svx/source/svdraw/svdopage.cxx
@@ -29,7 +29,7 @@
#include <svx/svdopage.hxx>
#include "svx/svdglob.hxx" // Stringcache
-#include "svx/svdstr.hrc" // Objektname
+#include "svx/svdstr.hrc" // the object's name
#include <svx/svdtrans.hxx>
#include <svx/svdetc.hxx>
#include <svx/svdmodel.hxx>
diff --git a/svx/source/svdraw/svdopath.cxx b/svx/source/svdraw/svdopath.cxx
index 4a9dc0c..6b515ca 100644
--- a/svx/source/svdraw/svdopath.cxx
+++ b/svx/source/svdraw/svdopath.cxx
@@ -39,9 +39,9 @@
#include <svx/svdmodel.hxx>
#include <svx/svdpage.hxx>
#include <svx/svdhdl.hxx>
-#include <svx/svdview.hxx> // fuer MovCreate bei Freihandlinien
+#include <svx/svdview.hxx> // for MovCreate when using curves
#include "svx/svdglob.hxx" // Stringcache
-#include "svx/svdstr.hrc" // Objektname
+#include "svx/svdstr.hrc" // the object's name
#ifdef _MSC_VER
#pragma optimize ("",off)
@@ -98,32 +98,32 @@ inline sal_uInt16 GetNextPnt(sal_uInt16 nPnt, sal_uInt16 nPntMax, bool bClosed)
struct ImpSdrPathDragData : public SdrDragStatUserData
{
- XPolygon aXP; // Ausschnitt aud dem Originalpolygon
- bool bValid; // FALSE = zu wenig Punkte
- bool bClosed; // geschlossenes Objekt?
- sal_uInt16 nPoly; // Nummer des Polygons im PolyPolygon
- sal_uInt16 nPnt; // Punktnummer innerhalb des obigen Polygons
- sal_uInt16 nPntAnz; // Punktanzahl des Polygons
- sal_uInt16 nPntMax; // Maximaler Index
- bool bBegPnt; // Gedraggter Punkt ist der Anfangspunkt einer
Polyline
- bool bEndPnt; // Gedraggter Punkt ist der Endpunkt einer Polyline
- sal_uInt16 nPrevPnt; // Index des vorherigen Punkts
- sal_uInt16 nNextPnt; // Index des naechsten Punkts
- bool bPrevIsBegPnt; // Vorheriger Punkt ist Anfangspunkt einer Polyline
- bool bNextIsEndPnt; // Folgepunkt ist Endpunkt einer Polyline
- sal_uInt16 nPrevPrevPnt; // Index des vorvorherigen Punkts
- sal_uInt16 nNextNextPnt; // Index des uebernaechsten Punkts
- bool bControl; // Punkt ist ein Kontrollpunkt
- bool bIsPrevControl; // Punkt ist Kontrollpunkt vor einem Stuetzpunkt
- bool bIsNextControl; // Punkt ist Kontrollpunkt hinter einem Stuetzpunkt
- bool bPrevIsControl; // Falls nPnt ein StPnt: Davor ist ein
Kontrollpunkt
- bool bNextIsControl; // Falls nPnt ein StPnt: Dahinter ist ein
Kontrollpunkt
+ XPolygon aXP; // section of the original polygon
+ bool bValid; // FALSE = too few points
+ bool bClosed; // closed object?
+ sal_uInt16 nPoly; // number of the polygon in the PolyPolygon
+ sal_uInt16 nPnt; // number of point in the upper polygon
+ sal_uInt16 nPntAnz; // number of points of the polygon
+ sal_uInt16 nPntMax; // maximum index
+ bool bBegPnt; // dragged point is first point of a Polyline
+ bool bEndPnt; // dragged point is finishing point of a Polyline
+ sal_uInt16 nPrevPnt; // index of previous point
+ sal_uInt16 nNextPnt; // index of next point
+ bool bPrevIsBegPnt; // previous point is first point of a Polyline
+ bool bNextIsEndPnt; // next point is first point of a Polyline
+ sal_uInt16 nPrevPrevPnt; // index of point before previous point
+ sal_uInt16 nNextNextPnt; // index of point after next point
+ bool bControl; // point is a control point
+ bool bIsPrevControl; // point is a control point before a support point
+ bool bIsNextControl; // point is a control point after a support point
+ bool bPrevIsControl; // if nPnt is a support point: a control point
comes before
+ bool bNextIsControl; // if nPnt is a support point: a control point
comes after
sal_uInt16 nPrevPrevPnt0;
sal_uInt16 nPrevPnt0;
sal_uInt16 nPnt0;
sal_uInt16 nNextPnt0;
sal_uInt16 nNextNextPnt0;
- bool bEliminate; // Punkt loeschen? (wird von MovDrag gesetzt)
+ bool bEliminate; // delete point? (is set by MovDrag)
sal_Bool mbMultiPointDrag;
const XPolyPolygon maOrig;
@@ -165,34 +165,34 @@ ImpSdrPathDragData::ImpSdrPathDragData(const SdrPathObj& rPO, const SdrHdl&
rHdl
else
{
bValid=sal_False;
- bClosed=rPO.IsClosed(); // geschlossenes Objekt?
- nPoly=(sal_uInt16)rHdl.GetPolyNum(); // Nummer des Polygons im PolyPolygon
- nPnt=(sal_uInt16)rHdl.GetPointNum(); // Punktnummer innerhalb des obigen
Polygons
+ bClosed=rPO.IsClosed(); // closed object?
+ nPoly=(sal_uInt16)rHdl.GetPolyNum(); // number of the polygon in the PolyPolygon
+ nPnt=(sal_uInt16)rHdl.GetPointNum(); // number of points in the upper polygon
const XPolygon aTmpXP(rPO.GetPathPoly().getB2DPolygon(nPoly));
- nPntAnz=aTmpXP.GetPointCount(); // Punktanzahl des Polygons
- if (nPntAnz==0 || (bClosed && nPntAnz==1)) return; // min. 1Pt bei Line, min. 2 bei Polygon
- nPntMax=nPntAnz-1; // Maximaler Index
- bBegPnt=!bClosed && nPnt==0; // Gedraggter Punkt ist der Anfangspunkt einer Polyline
- bEndPnt=!bClosed && nPnt==nPntMax; // Gedraggter Punkt ist der Endpunkt einer Polyline
- if (bClosed && nPntAnz<=3) { // Falls Polygon auch nur eine Linie ist
+ nPntAnz=aTmpXP.GetPointCount(); // number of point of the polygon
+ if (nPntAnz==0 || (bClosed && nPntAnz==1)) return; // minimum of 1 points for Lines,
minimum of 2 points for Polygon
+ nPntMax=nPntAnz-1; // maximum index
+ bBegPnt=!bClosed && nPnt==0; // dragged point is first point of a Polyline
+ bEndPnt=!bClosed && nPnt==nPntMax; // dragged point is finishing point of a Polyline
+ if (bClosed && nPntAnz<=3) { // if polygon is only a line
bBegPnt=(nPntAnz<3) || nPnt==0;
bEndPnt=(nPntAnz<3) || nPnt==nPntMax-1;
}
- nPrevPnt=nPnt; // Index des vorherigen Punkts
- nNextPnt=nPnt; // Index des naechsten Punkts
+ nPrevPnt=nPnt; // index of previous point
+ nNextPnt=nPnt; // index of next point
if (!bBegPnt) nPrevPnt=GetPrevPnt(nPnt,nPntMax,bClosed);
if (!bEndPnt) nNextPnt=GetNextPnt(nPnt,nPntMax,bClosed);
bPrevIsBegPnt=bBegPnt || (!bClosed && nPrevPnt==0);
bNextIsEndPnt=bEndPnt || (!bClosed && nNextPnt==nPntMax);
- nPrevPrevPnt=nPnt; // Index des vorvorherigen Punkts
- nNextNextPnt=nPnt; // Index des uebernaechsten Punkts
+ nPrevPrevPnt=nPnt; // index of point before previous point
+ nNextNextPnt=nPnt; // index of point after next point
if (!bPrevIsBegPnt) nPrevPrevPnt=GetPrevPnt(nPrevPnt,nPntMax,bClosed);
if (!bNextIsEndPnt) nNextNextPnt=GetNextPnt(nNextPnt,nPntMax,bClosed);
- bControl=rHdl.IsPlusHdl(); // Punkt ist ein Kontrollpunkt
- bIsPrevControl=sal_False; // Punkt ist Kontrollpunkt vor einem Stuetzpunkt
- bIsNextControl=sal_False; // Punkt ist Kontrollpunkt hinter einem Stuetzpunkt
- bPrevIsControl=sal_False; // Falls nPnt ein StPnt: Davor ist ein
Kontrollpunkt
- bNextIsControl=sal_False; // Falls nPnt ein StPnt: Dahinter ist ein
Kontrollpunkt
+ bControl=rHdl.IsPlusHdl(); // point is a control point
+ bIsPrevControl=sal_False; // point is a control point before a support point
+ bIsNextControl=sal_False; // point is a control point after a support point
+ bPrevIsControl=sal_False; // if nPnt is a support point: a control point
comes before
+ bNextIsControl=sal_False; // if nPnt is a support point: a control point
comes after
if (bControl) {
bIsPrevControl=aTmpXP.IsControl(nPrevPnt);
bIsNextControl=!bIsPrevControl;
@@ -346,7 +346,7 @@ bool ImpPathCreateUser::CalcCircle(const Point& rP1, const Point& rP2, const Poi
bAngleSnap=pView!=NULL && pView->IsAngleSnapEnabled();
if (bAngleSnap) {
long nSA=pView->GetSnapAngle();
- if (nSA!=0) { // Winkelfang
+ if (nSA!=0) { // angle snapping
bool bNeg=nCircRelWink<0;
if (bNeg) nCircRelWink=-nCircRelWink;
nCircRelWink+=nSA/2;
@@ -375,7 +375,7 @@ XPolygon ImpPathCreateUser::GetCirclePoly() const
sal_uInt16(NormAngle360(nCircStWink+nCircRelWink+5)/10),sal_uInt16((nCircStWink+5)/10),sal_False);
sal_uInt16 nAnz=aXP.GetPointCount();
for (sal_uInt16 nNum=nAnz/2; nNum>0;) {
- nNum--; // XPoly Punktreihenfolge umkehren
+ nNum--; // reverse XPoly's order of points
sal_uInt16 n2=nAnz-nNum-1;
Point aPt(aXP[nNum]);
aXP[nNum]=aXP[n2];
@@ -420,11 +420,11 @@ bool ImpPathCreateUser::CalcLine(const Point& rP1, const Point& rP2, const
Point
long nDirY=rDir.Y();
Point aP1(CalcLine(aTmpPt, nDirX, nDirY,pView)); aP1-=aTmpPt; long
nQ1=Abs(aP1.X())+Abs(aP1.Y());
Point aP2(CalcLine(aTmpPt, nDirY,-nDirX,pView)); aP2-=aTmpPt; long
nQ2=Abs(aP2.X())+Abs(aP2.Y());
- if (pView!=NULL && pView->IsOrtho()) nQ1=0; // Ortho schaltet rechtwinklig aus
+ if (pView!=NULL && pView->IsOrtho()) nQ1=0; // Ortho turns off at right angle
bLine90=nQ1>2*nQ2;
- if (!bLine90) { // glatter Uebergang
+ if (!bLine90) { // smooth transition
aLineEnd+=aP1;
- } else { // rechtwinkliger Uebergang
+ } else { // rectangular transition
aLineEnd+=aP2;
}
bLine=sal_True;
@@ -597,7 +597,7 @@ bool ImpPathForDragAndCreate::beginPathDrag( SdrDragStat& rDrag ) const
if(!mpSdrPathDragData || !mpSdrPathDragData->bValid)
{
- OSL_FAIL("ImpPathForDragAndCreate::BegDrag(): ImpSdrPathDragData ist ungueltig");
+ OSL_FAIL("ImpPathForDragAndCreate::BegDrag(): ImpSdrPathDragData is invalid.");
delete mpSdrPathDragData;
((ImpPathForDragAndCreate*)this)->mpSdrPathDragData = 0;
return false;
@@ -610,7 +610,7 @@ bool ImpPathForDragAndCreate::movePathDrag( SdrDragStat& rDrag ) const
{
if(!mpSdrPathDragData || !mpSdrPathDragData->bValid)
{
- OSL_FAIL("ImpPathForDragAndCreate::MovDrag(): ImpSdrPathDragData ist ungueltig");
+ OSL_FAIL("ImpPathForDragAndCreate::MovDrag(): ImpSdrPathDragData is invalid.");
return false;
}
@@ -664,35 +664,35 @@ bool ImpPathForDragAndCreate::movePathDrag( SdrDragStat& rDrag ) const
{
mpSdrPathDragData->ResetPoly(mrSdrPathObject);
- // Div. Daten lokal Kopieren fuer weniger Code und schnelleren Zugriff
- bool bClosed =mpSdrPathDragData->bClosed ; // geschlossenes Objekt?
- sal_uInt16 nPnt =mpSdrPathDragData->nPnt ; // Punktnummer innerhalb
des obigen Polygons
- bool bBegPnt =mpSdrPathDragData->bBegPnt ; // Gedraggter Punkt ist der
Anfangspunkt einer Polyline
- bool bEndPnt =mpSdrPathDragData->bEndPnt ; // Gedraggter Punkt ist der
Endpunkt einer Polyline
- sal_uInt16 nPrevPnt =mpSdrPathDragData->nPrevPnt ; // Index des vorherigen
Punkts
- sal_uInt16 nNextPnt =mpSdrPathDragData->nNextPnt ; // Index des naechsten
Punkts
- bool bPrevIsBegPnt =mpSdrPathDragData->bPrevIsBegPnt ; // Vorheriger Punkt ist
Anfangspunkt einer Polyline
- bool bNextIsEndPnt =mpSdrPathDragData->bNextIsEndPnt ; // Folgepunkt ist Endpunkt
einer Polyline
- sal_uInt16 nPrevPrevPnt =mpSdrPathDragData->nPrevPrevPnt ; // Index des vorvorherigen
Punkts
- sal_uInt16 nNextNextPnt =mpSdrPathDragData->nNextNextPnt ; // Index des uebernaechsten
Punkts
- bool bControl =mpSdrPathDragData->bControl ; // Punkt ist ein Kontrollpunkt
- bool bIsNextControl =mpSdrPathDragData->bIsNextControl; // Punkt ist Kontrollpunkt
hinter einem Stuetzpunkt
- bool bPrevIsControl =mpSdrPathDragData->bPrevIsControl; // Falls nPnt ein StPnt: Davor
ist ein Kontrollpunkt
- bool bNextIsControl =mpSdrPathDragData->bNextIsControl; // Falls nPnt ein StPnt:
Dahinter ist ein Kontrollpunkt
-
- // Ortho bei Linien/Polygonen = Winkel beibehalten
+ // copy certain data locally to use less code and have faster access times
+ bool bClosed =mpSdrPathDragData->bClosed ; // closed object?
+ sal_uInt16 nPnt =mpSdrPathDragData->nPnt ; // number of point in the
upper polygon
+ bool bBegPnt =mpSdrPathDragData->bBegPnt ; // dragged point is first point
of a Polyline
+ bool bEndPnt =mpSdrPathDragData->bEndPnt ; // dragged point is last point
of a Polyline
+ sal_uInt16 nPrevPnt =mpSdrPathDragData->nPrevPnt ; // index of previous point
+ sal_uInt16 nNextPnt =mpSdrPathDragData->nNextPnt ; // index of next point
+ bool bPrevIsBegPnt =mpSdrPathDragData->bPrevIsBegPnt ; // previous point is first
point of a Polyline
+ bool bNextIsEndPnt =mpSdrPathDragData->bNextIsEndPnt ; // next point is last point of
a Polyline
+ sal_uInt16 nPrevPrevPnt =mpSdrPathDragData->nPrevPrevPnt ; // index of the point
before the previous point
+ sal_uInt16 nNextNextPnt =mpSdrPathDragData->nNextNextPnt ; // index if the point after
the next point
+ bool bControl =mpSdrPathDragData->bControl ; // point is a control point
+ bool bIsNextControl =mpSdrPathDragData->bIsNextControl; // point is a control point
after a support point
+ bool bPrevIsControl =mpSdrPathDragData->bPrevIsControl; // if nPnt is a support point:
there's a control point before
+ bool bNextIsControl =mpSdrPathDragData->bNextIsControl; // if nPnt is a support point:
there's a control point after
+
+ // Ortho for lines/polygons: keep angle
if (!bControl && rDrag.GetView()!=NULL && rDrag.GetView()->IsOrtho()) {
bool bBigOrtho=rDrag.GetView()->IsBigOrtho();
- Point aPos(rDrag.GetNow()); // die aktuelle Position
- Point aPnt(mpSdrPathDragData->aXP[nPnt]); // der gedraggte Punkt
- sal_uInt16 nPnt1=0xFFFF,nPnt2=0xFFFF; // seine Nachbarpunkte
- Point aNeuPos1,aNeuPos2; // die neuen Alternativen fuer aPos
- bool bPnt1 = false, bPnt2 = false; // die neuen Alternativen gueltig?
- if (!bClosed && mpSdrPathDragData->nPntAnz>=2) { // Mind. 2 Pt bei Linien
+ Point aPos(rDrag.GetNow()); // current position
+ Point aPnt(mpSdrPathDragData->aXP[nPnt]); // the dragged point
+ sal_uInt16 nPnt1=0xFFFF,nPnt2=0xFFFF; // its neighboring points
+ Point aNeuPos1,aNeuPos2; // new alternative for aPos
+ bool bPnt1 = false, bPnt2 = false; // are these valid alternatives?
+ if (!bClosed && mpSdrPathDragData->nPntAnz>=2) { // minimum of 2 points for lines
if (!bBegPnt) nPnt1=nPrevPnt;
if (!bEndPnt) nPnt2=nNextPnt;
}
- if (bClosed && mpSdrPathDragData->nPntAnz>=3) { // Mind. 3 Pt bei Polygon
+ if (bClosed && mpSdrPathDragData->nPntAnz>=3) { // minimum of 3 points for polygon
nPnt1=nPrevPnt;
nPnt2=nNextPnt;
}
@@ -738,14 +738,14 @@ bool ImpPathForDragAndCreate::movePathDrag( SdrDragStat& rDrag ) const
aNeuPos2.Y()+=ndy;
}
}
- if (bPnt1 && bPnt2) { // beide Alternativen vorhanden (Konkurenz)
+ if (bPnt1 && bPnt2) { // both alternatives exist (and compete)
BigInt nX1(aNeuPos1.X()-aPos.X()); nX1*=nX1;
BigInt nY1(aNeuPos1.Y()-aPos.Y()); nY1*=nY1;
BigInt nX2(aNeuPos2.X()-aPos.X()); nX2*=nX2;
BigInt nY2(aNeuPos2.Y()-aPos.Y()); nY2*=nY2;
- nX1+=nY1; // Korrekturabstand zum Quadrat
- nX2+=nY2; // Korrekturabstand zum Quadrat
- // Die Alternative mit dem geringeren Korrekturbedarf gewinnt
+ nX1+=nY1; // correction distance to square
+ nX2+=nY2; // correction distance to square
+ // let the alternative that allows fewer correction win
if (nX1<nX2) bPnt2=sal_False; else bPnt1=sal_False;
}
if (bPnt1) rDrag.Now()=aNeuPos1;
@@ -753,8 +753,7 @@ bool ImpPathForDragAndCreate::movePathDrag( SdrDragStat& rDrag ) const
}
rDrag.SetActionRect(Rectangle(rDrag.GetNow(),rDrag.GetNow()));
- // IBM Special: Punkte eliminieren, wenn die beiden angrenzenden
- // Linien eh' fast 180 deg sind.
+ // spacially for IBM: Eliminate points, if both adjoining lines form near 180 degrees
angle anyway
if (!bControl && rDrag.GetView()!=NULL && rDrag.GetView()->IsEliminatePolyPoints() &&
!bBegPnt && !bEndPnt && !bPrevIsControl && !bNextIsControl)
{
@@ -767,7 +766,7 @@ bool ImpPathForDragAndCreate::movePathDrag( SdrDragStat& rDrag ) const
long nDiff=nWink1-nWink2;
nDiff=Abs(nDiff);
mpSdrPathDragData->bEliminate=nDiff<=rDrag.GetView()->GetEliminatePolyPointLimitAngle();
- if (mpSdrPathDragData->bEliminate) { // Position anpassen, damit Smooth an den Enden
stimmt
+ if (mpSdrPathDragData->bEliminate) { // adapt position, Smooth is true for the ends
aPt=mpSdrPathDragData->aXP[nNextPnt];
aPt+=mpSdrPathDragData->aXP[nPrevPnt];
aPt/=2;
@@ -775,29 +774,29 @@ bool ImpPathForDragAndCreate::movePathDrag( SdrDragStat& rDrag ) const
}
}
- // Um diese Entfernung wurde insgesamt gedraggd
+ // we dragged by this distance
Point aDiff(rDrag.GetNow()); aDiff-=mpSdrPathDragData->aXP[nPnt];
- // Insgesamt sind 8 Faelle moeglich:
- // X 1. Weder rechts noch links Ctrl.
- // o--X--o 2. Rechts und links Ctrl, gedraggd wird St.
- // o--X 3. Nur links Ctrl, gedraggd wird St.
- // X--o 4. Nur rechts Ctrl, gedraggd wird St.
- // x--O--o 5. Rechts und links Ctrl, gedraggd wird links.
- // x--O 6. Nur links Ctrl, gedraggd wird links.
- // o--O--x 7. Rechts und links Ctrl, gedraggd wird rechts.
- // O--x 8. Nur rechts Ctrl, gedraggd wird rechts.
- // Zusaetzlich ist zu beachten, dass das Veraendern einer Linie (keine Kurve)
- // eine evtl. Kurve am anderen Ende der Linie bewirkt, falls dort Smooth
- // gesetzt ist (Kontrollpunktausrichtung an Gerade).
+ /* There are 8 possible cases:
+ X 1. A control point neither on the left nor on the right.
+ o--X--o 2. There are control points on the left and the right, we are dragging a
support point.
+ o--X 3. There is a control point on the left, we are dragging a support point.
+ X--o 4. There is a control point on the right, we are dragging a support point.
+ x--O--o 5. There are control points on the left and the right, we are dragging the
left one.
+ x--O 6. There is a control point on the left, we are dragging it.
+ o--O--x 7. There are control points on the left and the right, we are dragging the
right one.
+ O--x 8. There is a control point on the right, we are dragging it.
+ Note: modifying a line (not a curve!) might create a curve on the other end of the line
+ if Smooth is set there (with control points aligned to line).
+ */
mpSdrPathDragData->aXP[nPnt]+=aDiff;
- // Nun symmetrische PlusHandles etc. checken
- if (bControl) { // Faelle 5,6,7,8
- sal_uInt16 nSt=nPnt; // der zugehoerige Stuetzpunkt
- sal_uInt16 nFix=nPnt; // der gegenueberliegende Kontrollpunkt
- if (bIsNextControl) { // Wenn der naechste ein Kontrollpunkt ist, muss der vorh. der
Stuetzpunkt sein
+ // now check symmetric plus handles
+ if (bControl) { // cases 5,6,7,8
+ sal_uInt16 nSt=nPnt; // the associated support point
+ sal_uInt16 nFix=nPnt; // the opposing control point
+ if (bIsNextControl) { // if the next one is a control point, the on before has to be a
support point
nSt=nPrevPnt;
nFix=nPrevPrevPnt;
} else {
@@ -809,22 +808,22 @@ bool ImpPathForDragAndCreate::movePathDrag( SdrDragStat& rDrag ) const
}
}
- if (!bControl) { // Faelle 1,2,3,4 wobei bei 1 nix passiert und bei 3+4 unten noch mehr
folgt
- // die beiden Kontrollpunkte mit verschieben
+ if (!bControl) { // Cases 1,2,3,4. In case 1, nothing happens; in cases 3 and 4, there is
more following below.
+ // move both control points
if (bPrevIsControl) mpSdrPathDragData->aXP[nPrevPnt]+=aDiff;
if (bNextIsControl) mpSdrPathDragData->aXP[nNextPnt]+=aDiff;
- // Kontrollpunkt ggf. an Gerade ausrichten
+ // align control point to line, if appropriate
if (mpSdrPathDragData->aXP.IsSmooth(nPnt)) {
- if (bPrevIsControl && !bNextIsControl && !bEndPnt) { // Fall 3
+ if (bPrevIsControl && !bNextIsControl && !bEndPnt) { // case 3
mpSdrPathDragData->aXP.CalcSmoothJoin(nPnt,nNextPnt,nPrevPnt);
}
- if (bNextIsControl && !bPrevIsControl && !bBegPnt) { // Fall 4
+ if (bNextIsControl && !bPrevIsControl && !bBegPnt) { // case 4
mpSdrPathDragData->aXP.CalcSmoothJoin(nPnt,nPrevPnt,nNextPnt);
}
}
- // Und nun noch die anderen Enden der Strecken ueberpruefen (nPnt+-1).
- // Ist dort eine Kurve (IsControl(nPnt+-2)) mit SmoothJoin (nPnt+-1),
- // so muss der entsprechende Kontrollpunkt (nPnt+-2) angepasst werden.
+ // Now check the other ends of the line (nPnt+-1). If there is a
+ // curve (IsControl(nPnt+-2)) with SmoothJoin (nPnt+-1), the
+ // associated control point (nPnt+-2) has to be adapted.
if (!bBegPnt && !bPrevIsControl && !bPrevIsBegPnt &&
mpSdrPathDragData->aXP.IsSmooth(nPrevPnt)) {
if (mpSdrPathDragData->aXP.IsControl(nPrevPrevPnt)) {
mpSdrPathDragData->aXP.CalcSmoothJoin(nPrevPnt,nPnt,nPrevPrevPnt);
@@ -846,7 +845,7 @@ bool ImpPathForDragAndCreate::endPathDrag(SdrDragStat& rDrag)
Point aLinePt1;
Point aLinePt2;
bool bLineGlueMirror(OBJ_LINE == meObjectKind);
- if (bLineGlueMirror) { // #40549#
+ if (bLineGlueMirror) {
XPolygon& rXP=aPathPolygon[0];
aLinePt1=rXP[0];
aLinePt2=rXP[1];
@@ -854,7 +853,7 @@ bool ImpPathForDragAndCreate::endPathDrag(SdrDragStat& rDrag)
if(!mpSdrPathDragData || !mpSdrPathDragData->bValid)
{
- OSL_FAIL("ImpPathForDragAndCreate::MovDrag(): ImpSdrPathDragData ist ungueltig");
+ OSL_FAIL("ImpPathForDragAndCreate::MovDrag(): ImpSdrPathDragData is invalid.");
return false;
}
@@ -866,17 +865,17 @@ bool ImpPathForDragAndCreate::endPathDrag(SdrDragStat& rDrag)
{
const SdrHdl* pHdl=rDrag.GetHdl();
- // Referenz auf das Polygon
+ // reference the polygon
XPolygon& rXP=aPathPolygon[(sal_uInt16)pHdl->GetPolyNum()];
- // Die 5 Punkte die sich evtl. geaendert haben
+ // the 5 points that might have changed
if (!mpSdrPathDragData->bPrevIsBegPnt)
rXP[mpSdrPathDragData->nPrevPrevPnt0]=mpSdrPathDragData->aXP[mpSdrPathDragData->nPrevPrevPnt];
if (!mpSdrPathDragData->bNextIsEndPnt)
rXP[mpSdrPathDragData->nNextNextPnt0]=mpSdrPathDragData->aXP[mpSdrPathDragData->nNextNextPnt];
if (!mpSdrPathDragData->bBegPnt) rXP[mpSdrPathDragData->nPrevPnt0]
=mpSdrPathDragData->aXP[mpSdrPathDragData->nPrevPnt];
if (!mpSdrPathDragData->bEndPnt) rXP[mpSdrPathDragData->nNextPnt0]
=mpSdrPathDragData->aXP[mpSdrPathDragData->nNextPnt];
rXP[mpSdrPathDragData->nPnt0] =mpSdrPathDragData->aXP[mpSdrPathDragData->nPnt];
- // Letzter Punkt muss beim Geschlossenen immer gleich dem Ersten sein
+ // for closed objects: last point has to be equal to first point
if (mpSdrPathDragData->bClosed) rXP[rXP.GetPointCount()-1]=rXP[0];
if (mpSdrPathDragData->bEliminate)
@@ -902,7 +901,7 @@ bool ImpPathForDragAndCreate::endPathDrag(SdrDragStat& rDrag)
aPathPolygon = XPolyPolygon(aTempPolyPolygon);
}
- // Winkel anpassen fuer Text an einfacher Linie
+ // adapt angle for text beneath a simple line
if (bLineGlueMirror)
{
Point aLinePt1_(aPathPolygon[0][0]);
@@ -1010,27 +1009,27 @@ String ImpPathForDragAndCreate::getSpecialDragComment(const SdrDragStat&
rDrag)
if(!pDragData)
{
- OSL_FAIL("ImpPathForDragAndCreate::MovDrag(): ImpSdrPathDragData ist ungueltig");
+ OSL_FAIL("ImpPathForDragAndCreate::MovDrag(): ImpSdrPathDragData is invalid.");
return String();
}
if(!pDragData->IsMultiPointDrag() && pDragData->bEliminate)
{
- // Punkt von ...
+ // point of ...
mrSdrPathObject.ImpTakeDescriptionStr(STR_ViewMarkedPoint, aStr);
- // %O loeschen
+ // delete %O
XubString aStr2(ImpGetResStr(STR_EditDelete));
- // UNICODE: Punkt von ... loeschen
+ // UNICODE: delete point of ...
aStr2.SearchAndReplaceAscii("%1", aStr);
return aStr2;
}
- // dx=0.00 dy=0.00 // Beide Seiten Bezier
- // dx=0.00 dy=0.00 l=0.00 0.00� // Anfang oder Ende oder eine Seite Bezier bzw. Hebel
- // dx=0.00 dy=0.00 l=0.00 0.00� / l=0.00 0.00� // Mittendrin
+ // dx=0.00 dy=0.00 -- both sides bezier
+ // dx=0.00 dy=0.00 l=0.00 0.00° -- one bezier/lever on one side, a start, or an ending
+ // dx=0.00 dy=0.00 l=0.00 0.00° / l=0.00 0.00° -- in between
XubString aMetr;
Point aBeg(rDrag.GetStart());
Point aNow(rDrag.GetNow());
@@ -1056,7 +1055,7 @@ String ImpPathForDragAndCreate::getSpecialDragComment(const SdrDragStat&
rDrag)
if(pHdl->IsPlusHdl())
{
- // Hebel
+ // lever
sal_uInt16 nRef(nPntNum);
if(rXPoly.IsControl(nPntNum + 1))
@@ -1103,10 +1102,10 @@ String ImpPathForDragAndCreate::getSpecialDragComment(const SdrDragStat&
rDrag)
nPt2 = 0;
if(bPt1 && rXPoly.IsControl(nPt1))
- bPt1 = sal_False; // Keine Anzeige
+ bPt1 = sal_False; // don't display
if(bPt2 && rXPoly.IsControl(nPt2))
- bPt2 = sal_False; // von Bezierdaten
+ bPt2 = sal_False; // of bezier data
if(bPt1)
{
@@ -1155,7 +1154,7 @@ basegfx::B2DPolyPolygon ImpPathForDragAndCreate::getSpecialDragPoly(const
SdrDra
{
if(!mpSdrPathDragData || !mpSdrPathDragData->bValid)
{
- OSL_FAIL("ImpPathForDragAndCreate::MovDrag(): ImpSdrPathDragData ist ungueltig");
+ OSL_FAIL("ImpPathForDragAndCreate::MovDrag(): ImpSdrPathDragData is invalid.");
return basegfx::B2DPolyPolygon();
}
@@ -1174,22 +1173,22 @@ basegfx::B2DPolyPolygon ImpPathForDragAndCreate::getSpecialDragPoly(const
SdrDra
aRetval.Insert(aXPoly);
return aRetval.getB2DPolyPolygon();
}
- // Div. Daten lokal Kopieren fuer weniger Code und schnelleren Zugriff
- bool bClosed =mpSdrPathDragData->bClosed ; // geschlossenes Objekt?
- sal_uInt16 nPntAnz =mpSdrPathDragData->nPntAnz ; // Punktanzahl
- sal_uInt16 nPnt =mpSdrPathDragData->nPnt ; // Punktnummer innerhalb
des Polygons
- bool bBegPnt =mpSdrPathDragData->bBegPnt ; // Gedraggter Punkt ist der
Anfangspunkt einer Polyline
- bool bEndPnt =mpSdrPathDragData->bEndPnt ; // Gedraggter Punkt ist der
Endpunkt einer Polyline
- sal_uInt16 nPrevPnt =mpSdrPathDragData->nPrevPnt ; // Index des vorherigen
Punkts
- sal_uInt16 nNextPnt =mpSdrPathDragData->nNextPnt ; // Index des naechsten
Punkts
- bool bPrevIsBegPnt =mpSdrPathDragData->bPrevIsBegPnt ; // Vorheriger Punkt ist
Anfangspunkt einer Polyline
- bool bNextIsEndPnt =mpSdrPathDragData->bNextIsEndPnt ; // Folgepunkt ist Endpunkt
einer Polyline
- sal_uInt16 nPrevPrevPnt =mpSdrPathDragData->nPrevPrevPnt ; // Index des vorvorherigen
Punkts
- sal_uInt16 nNextNextPnt =mpSdrPathDragData->nNextNextPnt ; // Index des uebernaechsten
Punkts
- bool bControl =mpSdrPathDragData->bControl ; // Punkt ist ein Kontrollpunkt
- bool bIsNextControl =mpSdrPathDragData->bIsNextControl; // Punkt ist Kontrollpunkt
hinter einem Stuetzpunkt
- bool bPrevIsControl =mpSdrPathDragData->bPrevIsControl; // Falls nPnt ein StPnt: Davor
ist ein Kontrollpunkt
- bool bNextIsControl =mpSdrPathDragData->bNextIsControl; // Falls nPnt ein StPnt:
Dahinter ist ein Kontrollpunkt
+ // copy certain data locally to use less code and have faster access times
+ bool bClosed =mpSdrPathDragData->bClosed ; // closed object?
+ sal_uInt16 nPntAnz =mpSdrPathDragData->nPntAnz ; // number of points
+ sal_uInt16 nPnt =mpSdrPathDragData->nPnt ; // number of points in the
polygon
+ bool bBegPnt =mpSdrPathDragData->bBegPnt ; // dragged point is the first
point of a Polyline
+ bool bEndPnt =mpSdrPathDragData->bEndPnt ; // dragged point is the last
point of a Polyline
+ sal_uInt16 nPrevPnt =mpSdrPathDragData->nPrevPnt ; // index of the previous
point
+ sal_uInt16 nNextPnt =mpSdrPathDragData->nNextPnt ; // index of the next point
+ bool bPrevIsBegPnt =mpSdrPathDragData->bPrevIsBegPnt ; // previous point is first
point of a Polyline
+ bool bNextIsEndPnt =mpSdrPathDragData->bNextIsEndPnt ; // next point is last point of
a Polyline
+ sal_uInt16 nPrevPrevPnt =mpSdrPathDragData->nPrevPrevPnt ; // index of the point
before the previous point
+ sal_uInt16 nNextNextPnt =mpSdrPathDragData->nNextNextPnt ; // index of the point after
the last point
+ bool bControl =mpSdrPathDragData->bControl ; // point is a control point
+ bool bIsNextControl =mpSdrPathDragData->bIsNextControl; //point is a control point
after a support point
+ bool bPrevIsControl =mpSdrPathDragData->bPrevIsControl; // if nPnt is a support point:
there's a control point before
+ bool bNextIsControl =mpSdrPathDragData->bNextIsControl; // if nPnt is a support point:
there's a control point after
XPolygon aXPoly(mpSdrPathDragData->aXP);
XPolygon aLine1(2);
XPolygon aLine2(2);
@@ -1197,14 +1196,14 @@ basegfx::B2DPolyPolygon ImpPathForDragAndCreate::getSpecialDragPoly(const
SdrDra
XPolygon aLine4(2);
if (bControl) {
aLine1[1]=mpSdrPathDragData->aXP[nPnt];
- if (bIsNextControl) { // bin ich Kontrollpunkt hinter der Stuetzstelle?
+ if (bIsNextControl) { // is this a control point after the support point?
aLine1[0]=mpSdrPathDragData->aXP[nPrevPnt];
aLine2[0]=mpSdrPathDragData->aXP[nNextNextPnt];
aLine2[1]=mpSdrPathDragData->aXP[nNextPnt];
if (mpSdrPathDragData->aXP.IsSmooth(nPrevPnt) && !bPrevIsBegPnt &&
mpSdrPathDragData->aXP.IsControl(nPrevPrevPnt)) {
aXPoly.Insert(0,rXP[mpSdrPathDragData->nPrevPrevPnt0-1],XPOLY_CONTROL);
aXPoly.Insert(0,rXP[mpSdrPathDragData->nPrevPrevPnt0-2],XPOLY_NORMAL);
- // Hebellienien fuer das gegenueberliegende Kurvensegment
+ // leverage lines for the opposing curve segment
aLine3[0]=mpSdrPathDragData->aXP[nPrevPnt];
aLine3[1]=mpSdrPathDragData->aXP[nPrevPrevPnt];
aLine4[0]=rXP[mpSdrPathDragData->nPrevPrevPnt0-2];
@@ -1212,14 +1211,14 @@ basegfx::B2DPolyPolygon ImpPathForDragAndCreate::getSpecialDragPoly(const
SdrDra
} else {
aXPoly.Remove(0,1);
}
- } else { // ansonsten bin ich Kontrollpunkt vor der Stuetzstelle
+ } else { // else this is a control point before a support point
aLine1[0]=mpSdrPathDragData->aXP[nNextPnt];
aLine2[0]=mpSdrPathDragData->aXP[nPrevPrevPnt];
aLine2[1]=mpSdrPathDragData->aXP[nPrevPnt];
if (mpSdrPathDragData->aXP.IsSmooth(nNextPnt) && !bNextIsEndPnt &&
mpSdrPathDragData->aXP.IsControl(nNextNextPnt)) {
aXPoly.Insert(XPOLY_APPEND,rXP[mpSdrPathDragData->nNextNextPnt0+1],XPOLY_CONTROL);
aXPoly.Insert(XPOLY_APPEND,rXP[mpSdrPathDragData->nNextNextPnt0+2],XPOLY_NORMAL);
- // Hebellinien fuer das gegenueberliegende Kurvensegment
+ // leverage lines for the opposing curve segment
aLine3[0]=mpSdrPathDragData->aXP[nNextPnt];
aLine3[1]=mpSdrPathDragData->aXP[nNextNextPnt];
aLine4[0]=rXP[mpSdrPathDragData->nNextNextPnt0+2];
@@ -1228,7 +1227,7 @@ basegfx::B2DPolyPolygon ImpPathForDragAndCreate::getSpecialDragPoly(const
SdrDra
aXPoly.Remove(aXPoly.GetPointCount()-1,1);
}
}
- } else { // ansonsten kein Kontrollpunkt
+ } else { // else is not a control point
if (mpSdrPathDragData->bEliminate) {
aXPoly.Remove(2,1);
}
@@ -1248,7 +1247,7 @@ basegfx::B2DPolyPolygon ImpPathForDragAndCreate::getSpecialDragPoly(const
SdrDra
aXPoly.Remove(aXPoly.GetPointCount()-1,1);
if (bEndPnt) aXPoly.Remove(aXPoly.GetPointCount()-1,1);
}
- if (bClosed) { // "Birnenproblem": 2 Linien, 1 Kurve, alles Smooth, Punkt zw. beiden
Linien wird gedraggt
+ if (bClosed) { // "pear problem": 2 lines, 1 curve, everything smoothed, a point
between both lines is dragged
if (aXPoly.GetPointCount()>nPntAnz && aXPoly.IsControl(1)) {
sal_uInt16 a=aXPoly.GetPointCount();
aXPoly[a-2]=aXPoly[2]; aXPoly.SetFlags(a-2,aXPoly.GetFlags(2));
@@ -1298,7 +1297,7 @@ bool ImpPathForDragAndCreate::MovCreate(SdrDragStat& rStat)
SdrView* pView=rStat.GetView();
XPolygon& rXPoly=aPathPolygon[aPathPolygon.Count()-1];
if (pView!=NULL && pView->IsCreateMode()) {
- // ggf. auf anderes CreateTool umschalten
+ // switch to different CreateTool, if appropriate
sal_uInt16 nIdent;
sal_uInt32 nInvent;
pView->TakeCurrentObj(nIdent,nInvent);
@@ -1346,7 +1345,7 @@ bool ImpPathForDragAndCreate::MovCreate(SdrDragStat& rStat)
if (bFreeHand) {
if (pU->nBezierStartPoint>nActPoint) pU->nBezierStartPoint=nActPoint;
if (rStat.IsMouseDown() && nActPoint>0) {
- // keine aufeinanderfolgenden Punkte an zu Nahe gelegenen Positionen zulassen
+ // don't allow two consecutive points to occupy too similar positions
long nMinDist=1;
if (pView!=NULL) nMinDist=pView->GetFreeHandMinDistPix();
if (pOut!=NULL) nMinDist=pOut->PixelToLogic(Size(nMinDist,0)).Width();
@@ -1358,8 +1357,8 @@ bool ImpPathForDragAndCreate::MovCreate(SdrDragStat& rStat)
long dy=aPt0.Y()-aPt1.Y(); if (dy<0) dy=-dy;
if (dx<nMinDist && dy<nMinDist) return sal_False;
- // folgendes ist aus EndCreate kopiert (nur kleine Modifikationen)
- // und sollte dann mal in eine Methode zusammengefasst werden:
+ // TODO: the following is copied from EndCreate (with a few smaller modifications)
+ // and should be combined into a method with the code there.
if (nActPoint-pU->nBezierStartPoint>=3 && ((nActPoint-pU->nBezierStartPoint)%3)==0) {
rXPoly.PointsToBezier(nActPoint-3);
@@ -1431,7 +1430,7 @@ bool ImpPathForDragAndCreate::EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd)
return bRet;
}
if (eCmd==SDRCREATE_NEXTPOINT || eCmd==SDRCREATE_NEXTOBJECT) {
- // keine aufeinanderfolgenden Punkte an identischer Position zulassen
+ // don't allow two consecutive points to occupy the same position
if (nActPoint==0 || rStat.Now()!=rXPoly[nActPoint-1]) {
if (bIncomp) {
if (pU->nBezierStartPoint>nActPoint) pU->nBezierStartPoint=nActPoint;
@@ -1453,10 +1452,10 @@ bool ImpPathForDragAndCreate::EndCreate(SdrDragStat& rStat, SdrCreateCmd
eCmd)
}
if (pU->IsFormFlag()) {
sal_uInt16 nPtAnz0=rXPoly.GetPointCount();
- rXPoly.Remove(nActPoint-1,2); // die letzten beiden Punkte entfernen und durch
die Form ersetzen
+ rXPoly.Remove(nActPoint-1,2); // remove last two points and replace by form
rXPoly.Insert(XPOLY_APPEND,pU->GetFormPoly());
sal_uInt16 nPtAnz1=rXPoly.GetPointCount();
- for (sal_uInt16 i=nPtAnz0+1; i<nPtAnz1-1; i++) { // Damit BckAction richtig
funktioniert
+ for (sal_uInt16 i=nPtAnz0+1; i<nPtAnz1-1; i++) { // to make BckAction work
if (!rXPoly.IsControl(i)) rStat.NextPoint();
}
nActPoint=rXPoly.GetPointCount()-1;
@@ -1468,7 +1467,7 @@ bool ImpPathForDragAndCreate::EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd)
if (eCmd==SDRCREATE_NEXTOBJECT) {
if (rXPoly.GetPointCount()>=2) {
pU->bBezHasCtrl0=sal_False;
- // nur einzelnes Polygon kann offen sein, deshalb schliessen
+ // only a singular polygon may be opened, so close this
rXPoly[nActPoint]=rXPoly[0];
XPolygon aXP;
aXP[0]=rStat.GetNow();
@@ -1479,7 +1478,7 @@ bool ImpPathForDragAndCreate::EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd)
sal_uInt16 nPolyAnz=aPathPolygon.Count();
if (nPolyAnz!=0) {
- // den letzten Punkt ggf. wieder loeschen
+ // delete last point, if necessary
if (eCmd==SDRCREATE_FORCEEND) {
XPolygon& rXP=aPathPolygon[nPolyAnz-1];
sal_uInt16 nPtAnz=rXP.GetPointCount();
@@ -1499,7 +1498,7 @@ bool ImpPathForDragAndCreate::EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd)
nPolyNum--;
XPolygon& rXP=aPathPolygon[nPolyNum];
sal_uInt16 nPtAnz=rXP.GetPointCount();
- // Polygone mit zu wenig Punkten werden geloescht
+ // delete polygons with too few points
if (nPolyNum<nPolyAnz-1 || eCmd==SDRCREATE_FORCEEND) {
if (nPtAnz<2) aPathPolygon.Remove(nPolyNum);
}
@@ -1523,16 +1522,16 @@ bool ImpPathForDragAndCreate::BckCreate(SdrDragStat& rStat)
sal_uInt16 nActPoint=rXPoly.GetPointCount();
if (nActPoint>0) {
nActPoint--;
- // Das letzte Stueck einer Bezierkurve wird erstmal zu 'ner Linie
+ // make the last part of a bezier curve a line
rXPoly.Remove(nActPoint,1);
if (nActPoint>=3 && rXPoly.IsControl(nActPoint-1)) {
- // Beziersegment am Ende sollte zwar nicht vorkommen, aber falls doch ...
+ // there should never be a bezier segment at the end, so this is just in case...
rXPoly.Remove(nActPoint-1,1);
if (rXPoly.IsControl(nActPoint-2)) rXPoly.Remove(nActPoint-2,1);
}
}
nActPoint=rXPoly.GetPointCount();
- if (nActPoint>=4) { // Kein Beziersegment am Ende
+ if (nActPoint>=4) { // no bezier segment at the end
nActPoint--;
if (rXPoly.IsControl(nActPoint-1)) {
rXPoly.Remove(nActPoint-1,1);
@@ -1588,7 +1587,7 @@ basegfx::B2DPolyPolygon ImpPathForDragAndCreate::TakeObjectPolyPolygon(const
Sdr
if(nChangeIndex < aNewPolygon.count())
{
- // if really something was added, set the saved prev control point at the
+ // if really something was added, set the saved previous control point to the
// point where it belongs
aNewPolygon.setPrevControlPoint(nChangeIndex, aSavedPrevCtrlPoint);
}
@@ -1768,9 +1767,9 @@ void SdrPathObj::ImpForceKind()
//
// Here i again need to fix something, because when Path-Polys are Copy-Pasted
// between Apps with different measurements (e.g. 100TH_MM and TWIPS) there is
- // a scaling loop started from SdrExchangeView::Paste. This is principally nothing
+ // a scaling loop started from SdrExchangeView::Paste. In itself, this is not
// wrong, but aRect is wrong here and not even updated by RecalcSnapRect(). If
- // this is the case, some size needs to be set here in aRect to avoid that the cyclus
+ // this is the case, some size needs to be set here in aRect to avoid that the cycle
// through Rect2Poly - Poly2Rect does something badly wrong since that cycle is
// BASED on aRect. That cycle is triggered in SdrTextObj::NbcResize() which is called
// from the local Resize() implementation.
@@ -2472,7 +2471,7 @@ Point SdrPathObj::GetSnapPoint(sal_uInt32 nSnapPnt) const
sal_uInt32 nPoly,nPnt;
if(!PolyPolygonEditor::GetRelativePolyPoint(GetPathPoly(), nSnapPnt, nPoly, nPnt))
{
- DBG_ASSERT(sal_False,"SdrPathObj::GetSnapPoint: Punkt nSnapPnt nicht vorhanden!");
+ DBG_ASSERT(sal_False,"SdrPathObj::GetSnapPoint: Point nSnapPnt does not exist.");
}
const basegfx::B2DPoint aB2DPoint(GetPathPoly().getB2DPolygon(nPoly).getB2DPoint(nPnt));
@@ -2531,7 +2530,7 @@ void SdrPathObj::NbcSetPoint(const Point& rPnt, sal_uInt32 nHdlNum)
if(GetPathPoly().count())
{
// #i10659# for SdrTextObj, keep aRect up to date
- aRect = ImpGetBoundRect(GetPathPoly()); // fuer SdrTextObj#
+ aRect = ImpGetBoundRect(GetPathPoly());
}
}
@@ -2790,7 +2789,7 @@ void SdrPathObj::RestGeoData(const SdrObjGeoData& rGeo)
SdrPathObjGeoData& rPGeo=(SdrPathObjGeoData&)rGeo;
maPathPolygon=rPGeo.maPathPolygon;
meKind=rPGeo.meKind;
- ImpForceKind(); // damit u.a. bClosed gesetzt wird
+ ImpForceKind(); // to set bClosed (among other things)
}
void SdrPathObj::NbcSetPathPoly(const basegfx::B2DPolyPolygon& rPathPoly)
@@ -2820,15 +2819,15 @@ void SdrPathObj::ToggleClosed()
Rectangle aBoundRect0;
if(pUserCall != NULL)
aBoundRect0 = GetLastBoundRect();
- ImpSetClosed(!IsClosed()); // neuen ObjKind setzen
- ImpForceKind(); // wg. Line->Poly->PolyLine statt Line->Poly->Line
+ ImpSetClosed(!IsClosed()); // set new ObjKind
+ ImpForceKind(); // because we want Line -> Poly -> PolyLine instead of Line -> Poly -> Line
SetRectsDirty();
SetChanged();
BroadcastObjectChange();
SendUserCall(SDRUSERCALL_RESIZE, aBoundRect0);
}
-// fuer friend class SdrPolyEditView auf einigen Compilern:
+// for friend class SdrPolyEditView in some compilers:
void SdrPathObj::SetRectsDirty(sal_Bool bNotMyself)
{
SdrTextObj::SetRectsDirty(bNotMyself);
@@ -2856,7 +2855,7 @@ void SdrPathObj::impDeleteDAC() const
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// transformation interface for StarOfficeAPI. This implements support for
-// homogen 3x3 matrices containing the transformation of the SdrObject. At the
+// homogeneous 3x3 matrices containing the transformation of the SdrObject. At the
// moment it contains a shearX, rotation and translation, but for setting all linear
// transforms like Scale, ShearX, ShearY, Rotate and Translate are supported.
//
@@ -2879,7 +2878,7 @@ sal_Bool SdrPathObj::TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix,
basegfx::
if(OBJ_LINE == meKind)
{
// ignore shear and rotate, just use scale and translate
- OSL_ENSURE(GetPathPoly().count() > 0L && GetPathPoly().getB2DPolygon(0L).count() > 1L,
"OBJ_LINE with too less polygons (!)");
+ OSL_ENSURE(GetPathPoly().count() > 0L && GetPathPoly().getB2DPolygon(0L).count() > 1L,
"OBJ_LINE with too few polygons (!)");
// #i72287# use polygon without control points for range calculation. Do not change
rPolyPolygon
// itself, else this method will no longer return the full polygon information (curve
will
// be lost)
@@ -2959,7 +2958,7 @@ sal_Bool SdrPathObj::TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix,
basegfx::
{
case SFX_MAPUNIT_TWIP :
{
- // postion
+ // position
aTranslate.setX(ImplTwipsToMM(aTranslate.getX()));
aTranslate.setY(ImplTwipsToMM(aTranslate.getY()));
@@ -2992,7 +2991,7 @@ sal_Bool SdrPathObj::TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix,
basegfx::
return sal_True;
}
-// sets the base geometry of the object using infos contained in the homogen 3x3 matrix.
+// Sets the base geometry of the object using infos contained in the homogeneous 3x3 matrix.
// If it's an SdrPathObj it will use the provided geometry information. The Polygon has
// to use (0,0) as upper left and will be scaled to the given size in the matrix.
void SdrPathObj::TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const
basegfx::B2DPolyPolygon& rPolyPolygon)
@@ -3084,12 +3083,12 @@ void SdrPathObj::TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix,
const b
if(!basegfx::fTools::equalZero(fRotate))
{
// #i78696#
- // fRotate is matematically correct for linear transformations, so it's
+ // fRotate is mathematically correct for linear transformations, so it's
// the one to use for the geometry change
aTransform.rotate(fRotate);
// #i78696#
- // fRotate is matematically correct, but aGeoStat.nDrehWink is
+ // fRotate is mathematically correct, but aGeoStat.nDrehWink is
// mirrored -> mirror value here
aGeo.nDrehWink = NormAngle360(FRound(-fRotate / F_PI18000));
aGeo.RecalcSinCos();
--
1.7.5.4
Context
- [Libreoffice] [PATCH] Translation of German comments in /svx/source/svdraw (part2) · Stefan Knorr (Astron)
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.