Author: alg
Date: Tue Oct  2 12:08:18 2012
New Revision: 1392873

URL: http://svn.apache.org/viewvc?rev=1392873&view=rev
Log:
#120604# Adapted back texture mapper for gradients for 3D usage

Modified:
    incubator/ooo/trunk/main/basegfx/source/tools/gradienttools.cxx

Modified: incubator/ooo/trunk/main/basegfx/source/tools/gradienttools.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/basegfx/source/tools/gradienttools.cxx?rev=1392873&r1=1392872&r2=1392873&view=diff
==============================================================================
--- incubator/ooo/trunk/main/basegfx/source/tools/gradienttools.cxx (original)
+++ incubator/ooo/trunk/main/basegfx/source/tools/gradienttools.cxx Tue Oct  2 
12:08:18 2012
@@ -361,42 +361,73 @@ namespace basegfx
         double getLinearGradientAlpha(const B2DPoint& rUV, const 
ODFGradientInfo& rGradInfo)
         {
             const B2DPoint aCoor(rGradInfo.getBackTextureTransform() * rUV);
-            const double t(clamp(aCoor.getY(), 0.0, 1.0));
+
+            if(aCoor.getX() < 0.0 || aCoor.getX() > 1.0)
+            {
+                return 0.0;
+            }
+
+            if(aCoor.getY() <= 0.0)
+            {
+                return 0.0;
+            }
+
+            if(aCoor.getY() >= 1.0)
+            {
+                return 1.0;
+            }
+
             const sal_uInt32 nSteps(rGradInfo.getSteps());
 
             if(nSteps)
             {
-                return floor(t * nSteps) / double(nSteps + 1L);
+                return floor(aCoor.getY() * nSteps) / double(nSteps - 1);
             }
 
-            return t;
+            return aCoor.getY();
         }
 
         double getAxialGradientAlpha(const B2DPoint& rUV, const 
ODFGradientInfo& rGradInfo)
         {
             const B2DPoint aCoor(rGradInfo.getBackTextureTransform() * rUV);
-            const double t(clamp(fabs(aCoor.getY()), 0.0, 1.0));
+
+            if(aCoor.getX() < 0.0 || aCoor.getX() > 1.0)
+            {
+                return 0.0;
+            }
+
+            const double fAbsY(fabs(aCoor.getY()));
+
+            if(fAbsY >= 1.0)
+            {
+                return 0.0;
+            }
+
             const sal_uInt32 nSteps(rGradInfo.getSteps());
-            const double fInternalSteps((nSteps * 2) - 1);
 
             if(nSteps)
             {
-                return floor(((t * fInternalSteps) + 1.0) / 2.0) / 
double(nSteps - 1L);
+                return floor(fAbsY * nSteps) / double(nSteps - 1);
             }
 
-            return t;
+            return fAbsY;
         }
 
         double getRadialGradientAlpha(const B2DPoint& rUV, const 
ODFGradientInfo& rGradInfo)
         {
             const B2DPoint aCoor(rGradInfo.getBackTextureTransform() * rUV);
-            const double fDist(clamp(aCoor.getX() * aCoor.getX() + 
aCoor.getY() * aCoor.getY(), 0.0, 1.0));
-            const double t(1.0 - sqrt(fDist));
+
+            if(aCoor.getX() < -1.0 || aCoor.getX() > 1.0 || aCoor.getY() < 
-1.0 || aCoor.getY() > 1.0)
+            {
+                return 0.0;
+            }
+
+            const double t(1.0 - sqrt(aCoor.getX() * aCoor.getX() + 
aCoor.getY() * aCoor.getY()));
             const sal_uInt32 nSteps(rGradInfo.getSteps());
 
-            if(nSteps)
+            if(nSteps && t < 1.0)
             {
-                return floor(t * nSteps) / double(nSteps - 1L);
+                return floor(t * nSteps) / double(nSteps - 1);
             }
 
             return t;
@@ -411,9 +442,15 @@ namespace basegfx
         {
             const B2DPoint aCoor(rGradInfo.getBackTextureTransform() * rUV);
             const double fAbsX(fabs(aCoor.getX()));
+
+            if(fAbsX >= 1.0)
+            {
+                return 0.0;
+            }
+
             const double fAbsY(fabs(aCoor.getY()));
 
-            if(fTools::moreOrEqual(fAbsX, 1.0) || fTools::moreOrEqual(fAbsY, 
1.0))
+            if(fAbsY >= 1.0)
             {
                 return 0.0;
             }
@@ -421,9 +458,9 @@ namespace basegfx
             const double t(1.0 - std::max(fAbsX, fAbsY));
             const sal_uInt32 nSteps(rGradInfo.getSteps());
 
-            if(nSteps)
+            if(nSteps && t < 1.0)
             {
-                return floor(t * nSteps) / double(nSteps - 1L);
+                return floor(t * nSteps) / double(nSteps - 1);
             }
 
             return t;


Reply via email to