michael@0: michael@0: /* michael@0: * Copyright 2006 The Android Open Source Project michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: michael@0: #ifndef SkFDot6_DEFINED michael@0: #define SkFDot6_DEFINED michael@0: michael@0: #include "SkScalar.h" michael@0: #include "SkMath.h" michael@0: michael@0: typedef int32_t SkFDot6; michael@0: michael@0: #define SK_FDot6One (64) michael@0: #define SK_FDot6Half (32) michael@0: michael@0: #ifdef SK_DEBUG michael@0: inline SkFDot6 SkIntToFDot6(S16CPU x) { michael@0: SkASSERT(SkToS16(x) == x); michael@0: return x << 6; michael@0: } michael@0: #else michael@0: #define SkIntToFDot6(x) ((x) << 6) michael@0: #endif michael@0: michael@0: #define SkFDot6Floor(x) ((x) >> 6) michael@0: #define SkFDot6Ceil(x) (((x) + 63) >> 6) michael@0: #define SkFDot6Round(x) (((x) + 32) >> 6) michael@0: michael@0: #define SkFixedToFDot6(x) ((x) >> 10) michael@0: michael@0: inline SkFixed SkFDot6ToFixed(SkFDot6 x) { michael@0: SkASSERT((x << 10 >> 10) == x); michael@0: michael@0: return x << 10; michael@0: } michael@0: michael@0: #define SkScalarToFDot6(x) (SkFDot6)((x) * 64) michael@0: #define SkFDot6ToScalar(x) ((SkScalar)(x) * 0.015625f) michael@0: michael@0: inline SkFixed SkFDot6Div(SkFDot6 a, SkFDot6 b) { michael@0: SkASSERT(b != 0); michael@0: michael@0: if (a == (int16_t)a) { michael@0: return (a << 16) / b; michael@0: } else { michael@0: return SkFixedDiv(a, b); michael@0: } michael@0: } michael@0: michael@0: #endif