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: SkAutoKern()23 SkAutoKern() : fPrevRsbDelta(0) {} 24 adjust(const SkGlyph & glyph)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