[Libreoffice-commits] core.git: include/svx

Philipp Weissenbacher p.weissenbacher at gmail.com
Wed Jul 29 04:55:30 PDT 2015


 include/svx/svdtrans.hxx |  169 ++++++++++++++++++++++++++---------------------
 include/svx/svdxcgv.hxx  |   73 ++++++++++----------
 2 files changed, 133 insertions(+), 109 deletions(-)

New commits:
commit 0f2fb06b9e26077568c18e186894c445fb84285b
Author: Philipp Weissenbacher <p.weissenbacher at gmail.com>
Date:   Tue Jul 28 23:30:19 2015 +0200

    fdo#39468 Translate German comments - include/svx
    
    Change-Id: If0591f7cb799568cb61bb506c4e1f65e8bc540ac
    Reviewed-on: https://gerrit.libreoffice.org/17390
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    Tested-by: Michael Stahl <mstahl at redhat.com>

diff --git a/include/svx/svdtrans.hxx b/include/svx/svdtrans.hxx
index 221b7ad..f70bfed 100644
--- a/include/svx/svdtrans.hxx
+++ b/include/svx/svdtrans.hxx
@@ -29,20 +29,22 @@
 #include <vcl/field.hxx>
 #include <vcl/mapmod.hxx>
 
-
-
-// Winkelangaben der DrawingEngine sind 1/100 Degree
-// #i19054# nowhere used, removed // const int nAngleDiv=100;
-// Um Winkel der DrawingEngine mit den Trigonometrischen Funktionen
-// verarbeiten zu koennen, muessen sie zunaest ins Bogenmass umgerechnet
-// werden. Dies gestaltet sich recht einfach mit der folgenden Konstanten
-// nPi180. Sei nAngle ein Winkel in 1/100 Deg so schreibt man z.B.:
+// The DrawingEngine's angles are specified in 1/100th degrees
+// We need to convert these angles to radians, in order to be able
+// to process them with trigonometric functions.
+// This is done, using the constant nPi180.
+//
+// Example usage:
+// nAngle ... is an angle in 1/100 Deg
+//
+// Which is converted, by this:
 //   double nSin=sin(nAngle*nPi180);
-// Rueckwandlung entsprechend durch Teilen.
+//
+// To convert it back, we use divison.
 const double nPi=3.14159265358979323846;
-const double nPi180=0.000174532925199432957692222; // Bei zuweing Stellen ist tan(4500*nPi180)!=1.0
+const double nPi180=0.000174532925199432957692222; // If we have too few digits, we get tan(4500*nPi180)!=1.0
 
-// Der maximale Shearwinkel
+// That maximum shear angle
 #define SDRMAXSHEAR 8900
 
 class XPolygon;
@@ -74,15 +76,21 @@ inline void ShearPoint(Point& rPnt, const Point& rRef, double tn, bool bVShear =
 SVX_DLLPUBLIC void ShearPoly(Polygon& rPoly, const Point& rRef, double tn, bool bVShear = false);
 void ShearXPoly(XPolygon& rPoly, const Point& rRef, double tn, bool bVShear = false);
 
-// rPnt.X bzw rPnt.Y wird auf rCenter.X bzw. rCenter.Y gesetzt!
-// anschliessend muss rPnt nur noch um rCenter gedreht werden.
-// Der Rueckgabewinkel ist ausnahmsweise in Rad.
+/**
+ * rPnt.X/rPnt.Y is set to rCenter.X or rCenter.Y!
+ * We then only need to rotate rPnt by rCenter.
+ *
+ * @return the returned angle is in rad
+ */
 inline double GetCrookAngle(Point& rPnt, const Point& rCenter, const Point& rRad, bool bVertical);
-// Die folgenden Methoden behandeln einen Punkt eines XPolygons, wobei die
-// benachbarten Kontrollpunkte des eigentlichen Punktes ggf. in pC1/pC2
-// uebergeben werden. Ueber rSin/rCos wird gleichzeitig sin(nAngle) und cos(nAngle)
-// zurueckgegeben.
-// Der Rueckgabewinkel ist hier ebenfalls in Rad.
+
+/**
+ * The following methods accept a point of an XPolygon, whereas the neighbouring
+ * control points of the actual point are passed in pC1/pC2.
+ * Via rSin/rCos, sin(nAngle) and cos(nAngle) are returned.
+ *
+ * @return the returned angle is in rad
+ */
 double CrookRotateXPoint(Point& rPnt, Point* pC1, Point* pC2, const Point& rCenter,
                          const Point& rRad, double& rSin, double& rCos, bool bVert);
 double CrookSlantXPoint(Point& rPnt, Point* pC1, Point* pC2, const Point& rCenter,
@@ -131,8 +139,8 @@ inline void ShearPoint(Point& rPnt, const Point& rRef, double tn, bool bVShear)
         if (rPnt.Y()!=rRef.Y()) { // sonst nicht noetig
             rPnt.X()-=Round((rPnt.Y()-rRef.Y())*tn);
         }
-    } else { // ansonsten vertikal
-        if (rPnt.X()!=rRef.X()) { // sonst nicht noetig
+    } else { // or else vertical
+        if (rPnt.X()!=rRef.X()) { // else not needed
             rPnt.Y()-=Round((rPnt.X()-rRef.X())*tn);
         }
     }
@@ -156,62 +164,75 @@ inline double GetCrookAngle(Point& rPnt, const Point& rCenter, const Point& rRad
 /**************************************************************************************************/
 /**************************************************************************************************/
 
-// Y-Achse zeigt nach unten! Die Funktion negiert bei der
-// Winkelberechnung die Y-Achse, sodass GetAngle(Point(0,-1))=90.00deg.
-// GetAngle(Point(0,0)) liefert 0.
-// Der Rueckgabewert liegt im Bereich -180.00..179.99 Degree und
-// ist in 1/100 Degree angegeben.
+/**
+ * The Y axis points down!
+ * The function negates the Y axis, when calculating the angle, such
+ * that GetAngle(Point(0,-1))=90 deg.
+ * GetAngle(Point(0,0)) returns 0.
+ *
+ * @return the returned value is in the range of -180.00..179.99 deg
+ * and is in 1/100 deg units
+ */
 SVX_DLLPUBLIC long GetAngle(const Point& rPnt);
-long NormAngle180(long a); // Winkel normalisieren auf -180.00..179.99
-SVX_DLLPUBLIC long NormAngle360(long a); // Winkel normalisieren auf    0.00..359.99
-sal_uInt16 GetAngleSector(long nAngle); // Sektor im kartesischen Koordinatensystem bestimmen
-// Berechnet die Laenge von (0,0) via a^2 + b^2 = c^2
-// Zur Vermeidung von Ueberlaeufen werden ggf. einige Stellen ignoriert.
+
+long NormAngle180(long a); /// Normalize angle to -180.00..179.99
+
+SVX_DLLPUBLIC long NormAngle360(long a); /// Normalize angle to 0.00..359.99
+
+sal_uInt16 GetAngleSector(long nAngle); /// Determine sector within the cartesian coordinate system
+
+/**
+ * Calculates the length of (0,0) via a^2 + b^2 = c^2
+ * In order to avoid overflows, we ignore some decimal places.
+ */
 long GetLen(const Point& rPnt);
 
-/*
-  Transformation eines Rechtecks in ein Polygon unter            ------------
-  Anwendung der Winkelparameter aus GeoStat.                    /1        2/
-  Referenzpunkt ist stets der Punkt 0, also die linke          /          /
-  obere Ecke des Ausgangsrects.                               /          /
-  Bei der Berechnung des Polygons ist die Reihenfolge        /          /
-  (erst Shear, dann Rotation vorgegeben).                   /          / \
-                                                           /          /   |
-  A) Ausgangsrechteck aRect  B) Nach Anwendung von Shear  /0        3/  Rot|
-  +------------------+       --------------------        ------------  ------
-  |0                1|        \0                1\       C) Nach Anwendung
-  |                  |         \                  \      von Rotate
-  |                  |       |  \                  \
-  |3                2|       |   \3                2\
-  +------------------+       |    --------------------
-                             |Shr |
-  Bei Rueckkonvertierung des        Polygons in ein Rect ist die Reihenfolge
-  zwangslaeufig umgekehrt:
-  - Berechnung des Drehwinkels: Winkel der Strecke 0-1 aus Abb. C) zum Horizont
-  - Rueckdrehung des geshearten Rects (man erhaelt Abb B))
-  - Bestimmung der Breite des Rects=Laenge der Strecke 0-1 aus Abb. B)
-  - Bestimmung der Hoehe des Rects=vertikaler Abstand zwischen den Punkten
-    0 und 3 aus Abb. B)
-  - Bestimmung des Shear-Winkels aus der Strecke 0-3 zur Senkrechten.
-  Es ist darauf zu achten, dass das Polygon bei einer zwischenzeitlichen
-  Transformation evtl. gespiegelt wurde (Mirror oder Resize mit neg. Faktor).
-  In diesem Fall muss zunaecht eine Normalisierung durch Vertauschung der
-  Punkte (z.B. 0 mit 3 und 1 mit 2) durchgefuehrt werden, damit der
-  Richtungssinn im Polygon wieder stimmig ist.
-  Hinweis: Positiver Shear-Winkel bedeutet Shear mit auf dem Bildschirm
-  sichtbarer positiver Kursivierung. Mathematisch waere dass eine negative
-  Kursivierung, da die Y-Achse auf dem Bildschirm von oben nach unten verlaeuft.
-  Drehwinkel: Positiv bedeutet auf dem Bildschirm sichtbare Linksdrehung.
-*/
-
-class GeoStat { // Geometrischer Status fuer ein Rect
+/**
+ * The transformation of a rectangle into a polygon, by
+ * using angle parameters from GeoStat.                          ------------
+ * The point of reference is always the Point 0, meaning        /1        2/
+ * the upper left corner of the initial rectangle.             /          /
+ * When calculating the polygon, the order is first           /          /
+ * shear and then the rotation.                              /          /
+ *                                                          /          / \
+ *                                                         /          /   |
+ * A) Inital rectangle aRect  B) After applying Shear      /0        3/ Rot|
+ * +------------------+       --------------------        ------------------
+ * |0                1|        \0                1\       C) After applying Rotate
+ * |                  |         \                  \
+ * |                  |       |  \                  \
+ * |3                2|       |   \3                2\
+ * +------------------+       |    --------------------
+ *                            |Shr
+ *
+ * When converting the polygon back into a rect, the order is necessarily the
+ * other way around:
+ *  - Calculating the rotation angle: angle of the line 0-1 in figure C) to the horizontal
+ *  - Turning the sheared rect back (we get figure B)
+ *  - Determining the width of the rect = length of the line 0-1 in figure B)
+ *  - Determining the height of the rect = vertical distance between the points 0 and 3
+ *    of figure B)
+ *  - Determining the shear angle from the line 0-3 to the perpendicular line.
+ *
+ * We need to keep in mind that the polygon can be mirrored when it was
+ * transformed in the mean time (e.g. mirror or resize with negative factor).
+ * In that case, we first need to normalize, by swapping points (0 with 3 and 1
+ * with 2), so that it has the right orientation.
+ *
+ * Note: a positive shear angle means a shear with a positive visible curvature
+ * on the screen. Mathematically, that would be a negative curvature, as the
+ * Y axis runs from top to bottom on the screen.
+ * Rotation angle: positive means a visible left rotation.
+ */
+
+class GeoStat { // Geometric state for a rect
 public:
     long     nRotationAngle;
     long     nShearAngle;
     double   nTan;      // tan(nShearAngle)
     double   nSin;      // sin(nRotationAngle)
     double   nCos;      // cos(nRotationAngle)
-    bool     bMirrored; // Horizontal gespiegelt? (ni)
+    bool     bMirrored; // Horizontally mirrored? (ni)
 public:
     GeoStat(): nRotationAngle(0),nShearAngle(0),nTan(0.0),nSin(0.0),nCos(1.0),bMirrored(false) {}
     void RecalcSinCos();
@@ -224,13 +245,13 @@ void Poly2Rect(const Polygon& rPol, Rectangle& rRect, GeoStat& rGeo);
 SVX_DLLPUBLIC void OrthoDistance8(const Point& rPt0, Point& rPt, bool bBigOrtho);
 SVX_DLLPUBLIC void OrthoDistance4(const Point& rPt0, Point& rPt, bool bBigOrtho);
 
-// Multiplikation und anschliessende Division.
-// Rechnung und Zwischenergebnis sind BigInt.
+// Multiplication and subsequent division
+// Calculation and intermediate values are in BigInt
 SVX_DLLPUBLIC long BigMulDiv(long nVal, long nMul, long nDiv);
 
-// Fehlerbehaftetes Kuerzen einer Fraction.
-// nDigits gibt an, wieviele signifikante Stellen in
-// Zaehler/Nenner mindestens erhalten bleiben sollen.
+// Lossy cancellation of a fraction
+// nDigits specifies, how many significant digits the numerator
+// and denominator should at least be retained
 void Kuerzen(Fraction& rF, unsigned nDigits);
 
 
@@ -249,7 +270,7 @@ public:
     Fraction& Y()             { return aY; }
 };
 
-// Fuer die Umrechnung von Masseinheiten
+// To convert units of measurement
 SVX_DLLPUBLIC FrPair GetMapFactor(MapUnit eS, MapUnit eD);
 FrPair GetMapFactor(FieldUnit eS, FieldUnit eD);
 
diff --git a/include/svx/svdxcgv.hxx b/include/svx/svdxcgv.hxx
index 114adfc..9f9d16e 100644
--- a/include/svx/svdxcgv.hxx
+++ b/include/svx/svdxcgv.hxx
@@ -35,7 +35,7 @@ protected:
     void                ImpPasteObject(SdrObject* pObj, SdrObjList& rLst, const Point& rCenter, const Size& rSiz, const MapMode& rMap, SdrInsertFlags nOptions);
     bool                ImpGetPasteLayer(const SdrObjList* pObjList, SdrLayerID& rLayer) const;
 
-    // liefert True, wenn rPt geaendert wurde
+    // Returns true if rPt has changed
     bool                ImpLimitToWorkArea(Point& rPt) const;
 
 protected:
@@ -43,30 +43,31 @@ protected:
     SdrExchangeView(SdrModel* pModel1, OutputDevice* pOut = 0L);
 
 public:
-    // Alle markierten Objekte auf dem angegebenen OutputDevice ausgeben.
+    // Output all marked objects on the specified OutputDevice
     ::std::vector< SdrObject* > GetMarkedObjects() const;
     virtual void        DrawMarkedObj(OutputDevice& rOut) const;
 
-    // Z.B. fuer's Clipboard, Drag&Drop, ...
-    // Alle markierten Objekte in ein Metafile stecken. Z.Zt. noch etwas
-    // buggee (Offset..., Fremdgrafikobjekte (SdrGrafObj), Virtuelle
-    // Objektkopien (SdrVirtObj) mit Ankerpos<>(0,0)).
+    // E.g. for Clipboard, Drag'n'Drop, ...
+    // Add all marked objects to a metafile.
+    // FIXME: This is known to be somewhat buggy still (Offset...,
+    // foreign graphics objects (SdrGrafObj), virutal object
+    // copies (SdrVirtObj) with anchor position <>(0,0)).
     GDIMetaFile GetMarkedObjMetaFile(bool bNoVDevIfOneMtfMarked = false) const;
 
-    // Alle markierten Objekte auf eine Bitmap malen. Diese hat die Farbtiefe
-    // und Aufloesung des Bildschirms.
+    // Draw all marked objects onto a bitmap, with the display's color depth
+    // and resolution
     BitmapEx GetMarkedObjBitmapEx(bool bNoVDevIfOneBmpMarked = false) const;
 
-    // Alle markierten Objekte in ein neues Model kopieren. Dieses neue Model
-    // hat dann genau eine Page. Das Flag PageNotValid an diesem Model ist
-    // gesetzt. Daran ist zu erkennen, dass nur die Objekte der Page Gueltikeit
-    // haben, die Page sebst jedoch nicht (Seitengroesse, Raender). Das neue
-    // Model wird auf dem Heap erzeugt und wird an den Aufrufer dieser Methode
-    // uebergeben. Dieser hat es dann spaeter zu entsorgen.
-    // Beim einfuegen der markierten Objekte in die eine Page des neuen Model
-    // findet ein Merging der seitenlokalen Layer statt. Sollte kein Platz mehr
-    // fuer weitere seitenlokale Layer sein, wird den entsprechenden Objekten
-    // der Default-Layer zugewiesen (Layer 0, (dokumentglobaler Standardlayer).
+    // Copy all marked objects to a new model, consisting of exactly one page,
+    // with the flag PageNotValid set. This means, that only the page's objects
+    // are valid and not the page itself (page size, margins).
+    // The new model is created on the free store and passed to the caller of
+    // this method, which is responsible to dispose it later on.
+    //
+    // When inserting the marked objects into the one page of the new model,
+    // the page-local layer is merged. If there's no more room left for
+    // additional page-local layers, the corresponding objects are assigned
+    // the default layer (layer 0, document-global standard layer).
     virtual SdrModel*   GetMarkedObjModel() const;
 
     Graphic         GetAllMarkedGraphic() const;
@@ -86,23 +87,25 @@ public:
      */
     static Graphic  GetObjGraphic( const SdrModel* pModel, const SdrObject* pObj );
 
-    // Bei allen Paste-Methoden werden die neuen Draw-Objekte markiert.
-    // Wird der Parameter bAddMark auf sal_True gesetzt, so werden die neuen
-    // DrawObjekte zu einer bereits bestehenden Selektion "hinzumarkiert".
-    // Dieser Fall ist fuer Drag&Drop mit mehreren Items gedacht.
-    // Die Methoden mit Point-Parameter fuegen neue Objekte zentriert an
-    // dieser Position ein, die anderen zentriert am 1.OutputDevice der View.
-    // Ist der Parameter pPg gesetzt, werden die Objekte and dieser Seite
-    // eingefuegt. Die Positionierung (rPos bzw. Zentrierung) bezieht sich
-    // dann nichtmehr auf die View sondern auf die Page.
-    // Hinweis: SdrObjList ist Basisklasse von SdrPage.
-    // Die Methoden liefern sal_True, wenn die Objekte erfolgreich erzeugt und
-    // eingefuegt wurden. Bei pLst=sal_False und kein TextEdit aktiv kann man
-    // sich dann auch darauf verlassen, dass diese an der View markiert sind.
-    // Andernfalls erfolgt die Markierung nur, wenn pLst z.Zt. auch an der
-    // View angezeigt wird.
-    // Gueltige Werte fuer nOptions sind SDRINSERT_DONTMARK und
-    // SDRINSERT_ADDMARK (siehe svdedtv.hxx).
+    // The new Draw objects are marked for all paste methods.
+    // If bAddMark is true, the new Draw objects are added to an existing
+    // selection, which is meant for Drag'n'Drop with multiple items.
+    //
+    // The methods with a point parameter insert objects centered at that
+    // position, all others are centered at the 1st OutputDevice of the View.
+    //
+    // If pPg is set, the objects are inserted at that page. The positioning
+    // (rPos or alignment) are not relative to the View, but to the Page.
+    //
+    // Note: SdrObjList is the base class of SdrPage.
+    // All methods return true, if the objects have been successfully created
+    // and inserted.
+    // If pLst = false and no TextEdit active, we can rely on the fact, that
+    // it is marked at the View. Or else the marking only happens if the pLst
+    // is also shown at the View at the moment.
+    //
+    // Valid values for nOptions are SDRINSERT_DONTMARK and SDRINSERT_ADDMARK
+    // (@see svdedtv.hxx).
     virtual bool Paste(
         const SdrModel& rMod, const Point& rPos, SdrObjList* pLst, SdrInsertFlags nOptions,
         const OUString& rSrcShellID, const OUString& rDestShellID );


More information about the Libreoffice-commits mailing list