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 "SkMath.h" 14 15typedef int32_t SkFDot6; 16 17#define SK_FDot6One (64) 18#define SK_FDot6Half (32) 19 20#ifdef SK_DEBUG 21 inline SkFDot6 SkIntToFDot6(S16CPU x) { 22 SkASSERT(SkToS16(x) == x); 23 return x << 6; 24 } 25#else 26 #define SkIntToFDot6(x) ((x) << 6) 27#endif 28 29#define SkFDot6Floor(x) ((x) >> 6) 30#define SkFDot6Ceil(x) (((x) + 63) >> 6) 31#define SkFDot6Round(x) (((x) + 32) >> 6) 32 33#define SkFixedToFDot6(x) ((x) >> 10) 34 35inline SkFixed SkFDot6ToFixed(SkFDot6 x) { 36 SkASSERT((x << 10 >> 10) == x); 37 38 return x << 10; 39} 40 41#ifdef SK_SCALAR_IS_FLOAT 42 #define SkScalarToFDot6(x) (SkFDot6)((x) * 64) 43#else 44 #define SkScalarToFDot6(x) ((x) >> 10) 45#endif 46 47inline SkFixed SkFDot6Div(SkFDot6 a, SkFDot6 b) { 48 SkASSERT(b != 0); 49 50 if (a == (int16_t)a) { 51 return (a << 16) / b; 52 } else { 53 return SkFixedDiv(a, b); 54 } 55} 56 57#endif 58 59