1/*
2 * Copyright 2006 The Android Open Source Project
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8
9#ifndef SkAutoKern_DEFINED
10#define SkAutoKern_DEFINED
11
12#include "SkGlyph.h"
13
14#define SkAutoKern_Adjust(prev, next)    SkIntToScalar(((next) - (prev) + 32) >> 6)
15
16/* this is a helper class to perform auto-kerning
17 * the adjust() method returns a SkScalar corresponding
18 * to a +1/0/-1 pixel adjustment
19 */
20
21class SkAutoKern {
22public:
23    SkAutoKern() : fPrevRsbDelta(0) {}
24
25    SkScalar  adjust(const SkGlyph&  glyph)
26    {
27//        if (SkAbs32(glyph.fLsbDelta) > 47 || SkAbs32(glyph.fRsbDelta) > 47)
28//            printf("------- %d> L %d R %d\n", glyph.f_GlyphID, glyph.fLsbDelta, glyph.fRsbDelta);
29
30#if 0
31        int  distort = fPrevRsbDelta - glyph.fLsbDelta;
32
33        fPrevRsbDelta = glyph.fRsbDelta;
34
35        if (distort >= 32)
36            return -SK_Scalar1;
37        else if (distort < -32)
38            return +SK_Scalar1;
39        else
40            return 0;
41#else
42        SkScalar adjust = SkAutoKern_Adjust(fPrevRsbDelta, glyph.fLsbDelta);
43        fPrevRsbDelta = glyph.fRsbDelta;
44        return adjust;
45#endif
46    }
47private:
48    int   fPrevRsbDelta;
49};
50
51#endif
52