diff options
-rw-r--r-- | src/effects/gradients/SkClampRange.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/effects/gradients/SkClampRange.h b/src/effects/gradients/SkClampRange.h index 91c259ae15..8a22e72d38 100644 --- a/src/effects/gradients/SkClampRange.h +++ b/src/effects/gradients/SkClampRange.h @@ -12,9 +12,18 @@ #include "SkScalar.h" #define SkGradFixed SkFixed3232 -#define SkScalarPinToGradFixed(x) SkScalarToFixed3232(SkTPin(x, \ - SkFixed3232ToFloat(SkFixed3232Min),\ - SkFixed3232ToFloat(SkFixed3232Max))) + +// We want the largest 32.32 value representable as a float. (float)0x7FFFFFFF +// becomes too big, due to limited mantissa on the float and its rounding rules, so +// we have to manually compute the next smaller value (aka nextafter). + +// #define SkGradFixedMaxScalar nextafterf(SkFixed3232ToFloat(SkFixed3232Max), 0) +// #define SkGradFixedMinScalar nextafterf(SkFixed3232ToFloat(SkFixed3232Min), 0) +#define SkGradFixedMaxScalar ( 2147483520.0f) +#define SkGradFixedMinScalar (-2147483520.0f) +#define SkScalarPinToGradFixed(x) SkScalarToFixed3232(SkTPin(x, \ + SkGradFixedMinScalar,\ + SkGradFixedMaxScalar)) #define SkFixedToGradFixed(x) SkFixedToFixed3232(x) #define SkGradFixedToFixed(x) (SkFixed)((x) >> 16) #define kFracMax_SkGradFixed 0xFFFFFFFFLL |