Home | History | Annotate | Download | only in core
      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 
     21 class SkAutoKern {
     22 public:
     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     }
     47 private:
     48     int   fPrevRsbDelta;
     49 };
     50 
     51 #endif
     52