|  | /* | 
|  | * Copyright 2006 The Android Open Source Project | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  |  | 
|  | #ifndef SkAutoKern_DEFINED | 
|  | #define SkAutoKern_DEFINED | 
|  |  | 
|  | #include "SkGlyph.h" | 
|  |  | 
|  | #define SkAutoKern_Adjust(prev, next)    SkIntToScalar(((next) - (prev) + 32) >> 6) | 
|  |  | 
|  | /* this is a helper class to perform auto-kerning | 
|  | * the adjust() method returns a SkScalar corresponding | 
|  | * to a +1/0/-1 pixel adjustment | 
|  | */ | 
|  |  | 
|  | class SkAutoKern { | 
|  | public: | 
|  | SkAutoKern() : fPrevRsbDelta(0) {} | 
|  |  | 
|  | SkScalar  adjust(const SkGlyph&  glyph) | 
|  | { | 
|  | //        if (SkAbs32(glyph.fLsbDelta) > 47 || SkAbs32(glyph.fRsbDelta) > 47) | 
|  | //            printf("------- %d> L %d R %d\n", glyph.f_GlyphID, glyph.fLsbDelta, glyph.fRsbDelta); | 
|  |  | 
|  | #if 0 | 
|  | int  distort = fPrevRsbDelta - glyph.fLsbDelta; | 
|  |  | 
|  | fPrevRsbDelta = glyph.fRsbDelta; | 
|  |  | 
|  | if (distort >= 32) | 
|  | return -SK_Scalar1; | 
|  | else if (distort < -32) | 
|  | return +SK_Scalar1; | 
|  | else | 
|  | return 0; | 
|  | #else | 
|  | SkScalar adjust = SkAutoKern_Adjust(fPrevRsbDelta, glyph.fLsbDelta); | 
|  | fPrevRsbDelta = glyph.fRsbDelta; | 
|  | return adjust; | 
|  | #endif | 
|  | } | 
|  | private: | 
|  | int   fPrevRsbDelta; | 
|  | }; | 
|  |  | 
|  | #endif |