include/svx/svdtrans.hxx       |   14 +++++++++----
 svx/source/svdraw/svdtrans.cxx |   44 ++++++++++++++---------------------------
 2 files changed, 26 insertions(+), 32 deletions(-)

New commits:
commit 82aa4dbd8330eb446cdf535794c13185f0c0ca81
Author: Juan Picca <jumap...@gmail.com>
Date:   Mon Nov 3 22:33:52 2014 -0200

    Fraction: rewrite 'GetDenominator()==0' conditions
    
    Change-Id: Ie42972db98da48b60b3f5314e019046b2a2ee0e7
    Reviewed-on: https://gerrit.libreoffice.org/12238
    Reviewed-by: David Tardon <dtar...@redhat.com>
    Tested-by: David Tardon <dtar...@redhat.com>

diff --git a/include/svx/svdtrans.hxx b/include/svx/svdtrans.hxx
index 0dca975..f2e1591 100644
--- a/include/svx/svdtrans.hxx
+++ b/include/svx/svdtrans.hxx
@@ -104,10 +104,16 @@ void CrookStretchPoly(XPolyPolygon& rPoly, const Point& 
rCenter, const Point& rR
 
 inline void ResizePoint(Point& rPnt, const Point& rRef, Fraction xFact, 
Fraction yFact)
 {
-    if (xFact.GetDenominator()==0) xFact=Fraction(xFact.GetNumerator(),1); // 
DivZero abfangen
-    if (yFact.GetDenominator()==0) yFact=Fraction(yFact.GetNumerator(),1); // 
DivZero abfangen
-    rPnt.X()=rRef.X()+ 
Round(((double)(rPnt.X()-rRef.X())*xFact.GetNumerator())/xFact.GetDenominator());
-    rPnt.Y()=rRef.Y()+ 
Round(((double)(rPnt.Y()-rRef.Y())*yFact.GetNumerator())/yFact.GetDenominator());
+    if (!xFact.IsValid()) {
+        SAL_WARN( "svx.svdraw", "invalid fraction xFact, using Fraction(1,1)" 
);
+        xFact = Fraction(1,1);
+    }
+    if (!yFact.IsValid()) {
+        SAL_WARN( "svx.svdraw", "invalid fraction yFact, using Fraction(1,1)" 
);
+        yFact = Fraction(1,1);
+    }
+    rPnt.X() = rRef.X() + Round( (rPnt.X() - rRef.X()) * double(xFact) );
+    rPnt.Y() = rRef.Y() + Round( (rPnt.Y() - rRef.Y()) * double(yFact) );
 }
 
 inline void RotatePoint(Point& rPnt, const Point& rRef, double sn, double cs)
diff --git a/svx/source/svdraw/svdtrans.cxx b/svx/source/svdraw/svdtrans.cxx
index fea8637..4de3f70 100644
--- a/svx/source/svdraw/svdtrans.cxx
+++ b/svx/source/svdraw/svdtrans.cxx
@@ -37,36 +37,24 @@ void ResizeRect(Rectangle& rRect, const Point& rRef, const 
Fraction& rxFact, con
     Fraction xFact(rxFact);
     Fraction yFact(ryFact);
 
-    {
-        if (xFact.GetDenominator()==0) {
-            long nWdt=rRect.Right()-rRect.Left();
-            if (xFact.GetNumerator()>=0) { // catch divisions by zero
-                xFact=Fraction(xFact.GetNumerator(),1);
-                if (nWdt==0) rRect.Right()++;
-            } else {
-                xFact=Fraction(xFact.GetNumerator(),-1);
-                if (nWdt==0) rRect.Left()--;
-            }
-        }
-        rRect.Left()  =rRef.X()+Round(((double)(rRect.Left()  
-rRef.X())*xFact.GetNumerator())/xFact.GetDenominator());
-        rRect.Right() =rRef.X()+Round(((double)(rRect.Right() 
-rRef.X())*xFact.GetNumerator())/xFact.GetDenominator());
+    if (!xFact.IsValid()) {
+        SAL_WARN( "svx.svdraw", "invalid fraction xFract, using Fraction(1,1)" 
);
+        xFact = Fraction(1,1);
+        long nWdt = rRect.Right() - rRect.Left();
+        if (nWdt == 0) rRect.Right()++;
     }
-    {
-        if (yFact.GetDenominator()==0) {
-            long nHgt=rRect.Bottom()-rRect.Top();
-            if (yFact.GetNumerator()>=0) { // catch divisions by zero
-                yFact=Fraction(yFact.GetNumerator(),1);
-                if (nHgt==0) rRect.Bottom()++;
-            } else {
-                yFact=Fraction(yFact.GetNumerator(),-1);
-                if (nHgt==0) rRect.Top()--;
-            }
-
-            yFact=Fraction(yFact.GetNumerator(),1); // catch divisions by zero
-        }
-        rRect.Top()   =rRef.Y()+Round(((double)(rRect.Top()   
-rRef.Y())*yFact.GetNumerator())/yFact.GetDenominator());
-        
rRect.Bottom()=rRef.Y()+Round(((double)(rRect.Bottom()-rRef.Y())*yFact.GetNumerator())/yFact.GetDenominator());
+    rRect.Left()  = rRef.X() + Round( (rRect.Left()  - rRef.X()) * 
double(xFact) );
+    rRect.Right() = rRef.X() + Round( (rRect.Right() - rRef.X()) * 
double(xFact) );
+
+    if (!yFact.IsValid()) {
+        SAL_WARN( "svx.svdraw", "invalid fraction yFract, using Fraction(1,1)" 
);
+        yFact = Fraction(1,1);
+        long nHgt = rRect.Bottom() - rRect.Top();
+        if (nHgt == 0) rRect.Bottom()++;
     }
+    rRect.Top()    = rRef.Y() + Round( (rRect.Top()    - rRef.Y()) * 
double(yFact) );
+    rRect.Bottom() = rRef.Y() + Round( (rRect.Bottom() - rRef.Y()) * 
double(yFact) );
+
     if (!bNoJustify) rRect.Justify();
 }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to