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