Home | History | Annotate | Download | only in core
      1 
      2 /*
      3  * Copyright 2006 The Android Open Source Project
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 #ifndef SkFDot6_DEFINED
     11 #define SkFDot6_DEFINED
     12 
     13 #include "SkScalar.h"
     14 #include "SkMath.h"
     15 
     16 typedef int32_t SkFDot6;
     17 
     18 #define SK_FDot6One         (64)
     19 #define SK_FDot6Half        (32)
     20 
     21 #ifdef SK_DEBUG
     22     inline SkFDot6 SkIntToFDot6(S16CPU x) {
     23         SkASSERT(SkToS16(x) == x);
     24         return x << 6;
     25     }
     26 #else
     27     #define SkIntToFDot6(x) ((x) << 6)
     28 #endif
     29 
     30 #define SkFDot6Floor(x)     ((x) >> 6)
     31 #define SkFDot6Ceil(x)      (((x) + 63) >> 6)
     32 #define SkFDot6Round(x)     (((x) + 32) >> 6)
     33 
     34 #define SkFixedToFDot6(x)   ((x) >> 10)
     35 
     36 inline SkFixed SkFDot6ToFixed(SkFDot6 x) {
     37     SkASSERT((x << 10 >> 10) == x);
     38 
     39     return x << 10;
     40 }
     41 
     42 #define SkScalarToFDot6(x)  (SkFDot6)((x) * 64)
     43 #define SkFDot6ToScalar(x)  ((SkScalar)(x) * 0.015625f)
     44 
     45 inline SkFixed SkFDot6Div(SkFDot6 a, SkFDot6 b) {
     46     SkASSERT(b != 0);
     47 
     48     if (a == (int16_t)a) {
     49         return (a << 16) / b;
     50     } else {
     51         return SkFixedDiv(a, b);
     52     }
     53 }
     54 
     55 #endif
     56