blob: 023cb6b2fea75beeb46b125e7b8218a48448aa02 [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001/* libs/graphics/sgl/SkAutoKern.h
2**
3** Copyright 2006, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9** http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18#ifndef SkAutoKern_DEFINED
19#define SkAutoKern_DEFINED
20
21#include "SkScalerContext.h"
22
23#define SkAutoKern_AdjustF(prev, next) (((next) - (prev) + 32) >> 6 << 16)
24#define SkAutoKern_AdjustS(prev, next) SkIntToScalar(((next) - (prev) + 32) >> 6)
25
26/* this is a helper class to perform auto-kerning
27 * the adjust() method returns a SkFixed corresponding
28 * to a +1/0/-1 pixel adjustment
29 */
30
31class SkAutoKern {
32public:
33 SkAutoKern() : fPrevRsbDelta(0) {}
34
35 SkFixed adjust(const SkGlyph& glyph)
36 {
37// if (SkAbs32(glyph.fLsbDelta) > 47 || SkAbs32(glyph.fRsbDelta) > 47)
38// printf("------- %d> L %d R %d\n", glyph.f_GlyphID, glyph.fLsbDelta, glyph.fRsbDelta);
39
40#if 0
41 int distort = fPrevRsbDelta - glyph.fLsbDelta;
42
43 fPrevRsbDelta = glyph.fRsbDelta;
44
45 if (distort >= 32)
46 return -SK_Fixed1;
47 else if (distort < -32)
48 return +SK_Fixed1;
49 else
50 return 0;
51#else
52 SkFixed adjust = SkAutoKern_AdjustF(fPrevRsbDelta, glyph.fLsbDelta);
53 fPrevRsbDelta = glyph.fRsbDelta;
54 return adjust;
55#endif
56 }
57private:
58 int fPrevRsbDelta;
59};
60
61#endif
62