• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 SkAutoKern_DEFINED
11 #define SkAutoKern_DEFINED
12 
13 #include "SkGlyph.h"
14 
15 #define SkAutoKern_AdjustF(prev, next)    (((next) - (prev) + 32) >> 6 << 16)
16 #define SkAutoKern_AdjustS(prev, next)    SkIntToScalar(((next) - (prev) + 32) >> 6)
17 
18 /* this is a helper class to perform auto-kerning
19  * the adjust() method returns a SkFixed corresponding
20  * to a +1/0/-1 pixel adjustment
21  */
22 
23 class SkAutoKern {
24 public:
SkAutoKern()25     SkAutoKern() : fPrevRsbDelta(0) {}
26 
adjust(const SkGlyph & glyph)27     SkFixed  adjust(const SkGlyph&  glyph)
28     {
29 //        if (SkAbs32(glyph.fLsbDelta) > 47 || SkAbs32(glyph.fRsbDelta) > 47)
30 //            printf("------- %d> L %d R %d\n", glyph.f_GlyphID, glyph.fLsbDelta, glyph.fRsbDelta);
31 
32 #if 0
33         int  distort = fPrevRsbDelta - glyph.fLsbDelta;
34 
35         fPrevRsbDelta = glyph.fRsbDelta;
36 
37         if (distort >= 32)
38             return -SK_Fixed1;
39         else if (distort < -32)
40             return +SK_Fixed1;
41         else
42             return 0;
43 #else
44         SkFixed adjust = SkAutoKern_AdjustF(fPrevRsbDelta, glyph.fLsbDelta);
45         fPrevRsbDelta = glyph.fRsbDelta;
46         return adjust;
47 #endif
48     }
49 private:
50     int   fPrevRsbDelta;
51 };
52 
53 #endif
54