-
/*
* Copyright 2006 The Android Open Source Project
*
* found in the LICENSE file.
*/
-
#ifndef SkFixed_DEFINED
#define SkFixed_DEFINED
#include "SkTypes.h"
+//#define SK_SUPPORTED_DEPRECATED_FIXEDROUND
+
/** \file SkFixed.h
Types and macros for 16.16 fixed point
#define SkFixedCeilToFixed(x) (((x) + SK_Fixed1 - 1) & 0xFFFF0000)
#define SkFixedFloorToFixed(x) ((x) & 0xFFFF0000)
-// DEPRECATED
-#define SkFixedFloor(x) SkFixedFloorToInt(x)
-#define SkFixedCeil(x) SkFixedCeilToInt(x)
-#define SkFixedRound(x) SkFixedRoundToInt(x)
+#ifdef SK_SUPPORTED_DEPRECATED_FIXEDROUND
+# define SkFixedFloor(x) SkFixedFloorToInt(x)
+# define SkFixedCeil(x) SkFixedCeilToInt(x)
+# define SkFixedRound(x) SkFixedRoundToInt(x)
+#endif
#define SkFixedAbs(x) SkAbs32(x)
#define SkFixedAve(a, b) (((a) + (b)) >> 1)
static void D1G_NoBounder_RectClip(const SkDraw1Glyph& state,
SkFixed fx, SkFixed fy,
const SkGlyph& glyph) {
- int left = SkFixedFloor(fx);
- int top = SkFixedFloor(fy);
+ int left = SkFixedFloorToInt(fx);
+ int top = SkFixedFloorToInt(fy);
SkASSERT(glyph.fWidth > 0 && glyph.fHeight > 0);
SkASSERT(NULL == state.fBounder);
SkASSERT((NULL == state.fClip && state.fAAClip) ||
static void D1G_NoBounder_RgnClip(const SkDraw1Glyph& state,
SkFixed fx, SkFixed fy,
const SkGlyph& glyph) {
- int left = SkFixedFloor(fx);
- int top = SkFixedFloor(fy);
+ int left = SkFixedFloorToInt(fx);
+ int top = SkFixedFloorToInt(fy);
SkASSERT(glyph.fWidth > 0 && glyph.fHeight > 0);
SkASSERT(!state.fClip->isRect());
SkASSERT(NULL == state.fBounder);
static void D1G_Bounder(const SkDraw1Glyph& state,
SkFixed fx, SkFixed fy,
const SkGlyph& glyph) {
- int left = SkFixedFloor(fx);
- int top = SkFixedFloor(fy);
+ int left = SkFixedFloorToInt(fx);
+ int top = SkFixedFloorToInt(fy);
SkASSERT(glyph.fWidth > 0 && glyph.fHeight > 0);
SkMask mask;
static void D1G_Bounder_AAClip(const SkDraw1Glyph& state,
SkFixed fx, SkFixed fy,
const SkGlyph& glyph) {
- int left = SkFixedFloor(fx);
- int top = SkFixedFloor(fy);
+ int left = SkFixedFloorToInt(fx);
+ int top = SkFixedFloorToInt(fy);
SkIRect bounds;
bounds.set(left, top, left + glyph.fWidth, top + glyph.fHeight);
/** Round the SkXRect coordinates, and store the result in the SkIRect.
*/
static inline void XRect_round(const SkXRect& xr, SkIRect* dst) {
- dst->fLeft = SkFixedRound(xr.fLeft);
- dst->fTop = SkFixedRound(xr.fTop);
- dst->fRight = SkFixedRound(xr.fRight);
- dst->fBottom = SkFixedRound(xr.fBottom);
+ dst->fLeft = SkFixedRoundToInt(xr.fLeft);
+ dst->fTop = SkFixedRoundToInt(xr.fTop);
+ dst->fRight = SkFixedRoundToInt(xr.fRight);
+ dst->fBottom = SkFixedRoundToInt(xr.fBottom);
}
/** Round the SkXRect coordinates out (i.e. use floor for left/top, and ceiling
for right/bottom), and store the result in the SkIRect.
*/
static inline void XRect_roundOut(const SkXRect& xr, SkIRect* dst) {
- dst->fLeft = SkFixedFloor(xr.fLeft);
- dst->fTop = SkFixedFloor(xr.fTop);
- dst->fRight = SkFixedCeil(xr.fRight);
- dst->fBottom = SkFixedCeil(xr.fBottom);
+ dst->fLeft = SkFixedFloorToInt(xr.fLeft);
+ dst->fTop = SkFixedFloorToInt(xr.fTop);
+ dst->fRight = SkFixedCeilToInt(xr.fRight);
+ dst->fBottom = SkFixedCeilToInt(xr.fBottom);
}
#endif
// now test if our Y values are completely inside the clip
int top, bottom;
if (slope >= 0) { // T2B
- top = SkFixedFloor(fstart - SK_FixedHalf);
- bottom = SkFixedCeil(fstart + (istop - istart - 1) * slope + SK_FixedHalf);
+ top = SkFixedFloorToInt(fstart - SK_FixedHalf);
+ bottom = SkFixedCeilToInt(fstart + (istop - istart - 1) * slope + SK_FixedHalf);
} else { // B2T
- bottom = SkFixedCeil(fstart + SK_FixedHalf);
- top = SkFixedFloor(fstart + (istop - istart - 1) * slope - SK_FixedHalf);
+ bottom = SkFixedCeilToInt(fstart + SK_FixedHalf);
+ top = SkFixedFloorToInt(fstart + (istop - istart - 1) * slope - SK_FixedHalf);
}
#ifdef OUTSET_BEFORE_CLIP_TEST
top -= 1;
// now test if our X values are completely inside the clip
int left, right;
if (slope >= 0) { // L2R
- left = SkFixedFloor(fstart - SK_FixedHalf);
- right = SkFixedCeil(fstart + (istop - istart - 1) * slope + SK_FixedHalf);
+ left = SkFixedFloorToInt(fstart - SK_FixedHalf);
+ right = SkFixedCeilToInt(fstart + (istop - istart - 1) * slope + SK_FixedHalf);
} else { // R2L
- right = SkFixedCeil(fstart + SK_FixedHalf);
- left = SkFixedFloor(fstart + (istop - istart - 1) * slope - SK_FixedHalf);
+ right = SkFixedCeilToInt(fstart + SK_FixedHalf);
+ left = SkFixedFloorToInt(fstart + (istop - istart - 1) * slope - SK_FixedHalf);
}
#ifdef OUTSET_BEFORE_CLIP_TEST
left -= 1;
static const uint16_t gTens[] = { 1000, 100, 10, 1 };
const uint16_t* tens = gTens;
- x = SkFixedRound(frac * 10000);
+ x = SkFixedRoundToInt(frac * 10000);
SkASSERT(x <= 10000);
if (x == 10000) {
x -= 1;
SkFixed scale = (1 << 16) * 255 / (max - min);
memset(table, 0, min + 1);
for (int i = min + 1; i < max; i++) {
- int value = SkFixedRound(scale * (i - min));
+ int value = SkFixedRoundToInt(scale * (i - min));
SkASSERT(value <= 255);
table[i] = value;
}