Home | History | Annotate | Download | only in core
      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:
     25     SkAutoKern() : fPrevRsbDelta(0) {}
     26 
     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