Index: src/core/SkGlyph.h |
diff --git a/src/core/SkGlyph.h b/src/core/SkGlyph.h |
index 9abefa84c7578f450cce93460a109e95e3f0bca4..25aaed77a6e3c459ccdcfba16d85fa6262ad6a3d 100644 |
--- a/src/core/SkGlyph.h |
+++ b/src/core/SkGlyph.h |
@@ -13,6 +13,7 @@ |
#include "SkMask.h" |
class SkPath; |
+class SkGlyphCache; |
// needs to be != to any valid SkMask::Format |
#define MASK_FORMAT_UNKNOWN (0xFF) |
@@ -20,12 +21,23 @@ class SkPath; |
#define kMaxGlyphWidth (1<<13) |
-struct SkGlyph { |
+class SkGlyph { |
+ enum { |
+ kSubBits = 2, |
+ kSubMask = ((1 << kSubBits) - 1), |
+ kSubShift = 24, // must be large enough for glyphs and unichars |
+ kCodeMask = ((1 << kSubShift) - 1), |
+ // relative offsets for X and Y subpixel bits |
+ kSubShiftX = kSubBits, |
+ kSubShiftY = 0 |
+ }; |
+ |
+ public: |
+ static const SkFixed kSubpixelRound = SK_FixedHalf >> SkGlyph::kSubBits; |
void* fImage; |
SkPath* fPath; |
SkFixed fAdvanceX, fAdvanceY; |
- uint32_t fID; |
uint16_t fWidth, fHeight; |
int16_t fTop, fLeft; |
@@ -33,12 +45,12 @@ struct SkGlyph { |
int8_t fRsbDelta, fLsbDelta; // used by auto-kerning |
int8_t fForceBW; |
- void init(uint32_t id) { |
- fID = id; |
- fImage = NULL; |
- fPath = NULL; |
- fMaskFormat = MASK_FORMAT_UNKNOWN; |
- fForceBW = 0; |
+ void initWithGlyphID(uint32_t glyph_id) { |
+ this->initCommon(MakeID(glyph_id)); |
+ } |
+ |
+ void initGlyphIdFrom(const SkGlyph& glyph) { |
+ this->initCommon(glyph.fID); |
} |
/** |
@@ -94,18 +106,22 @@ struct SkGlyph { |
*/ |
void zeroMetrics(); |
- enum { |
- kSubBits = 2, |
- kSubMask = ((1 << kSubBits) - 1), |
- kSubShift = 24, // must be large enough for glyphs and unichars |
- kCodeMask = ((1 << kSubShift) - 1), |
- // relative offsets for X and Y subpixel bits |
- kSubShiftX = kSubBits, |
- kSubShiftY = 0 |
- }; |
+ void toMask(SkMask* mask) const; |
+ |
+ private: |
+ // TODO(herb) remove friend statement after SkGlyphCache cleanup. |
+ friend class SkGlyphCache; |
+ |
+ void initCommon(uint32_t id) { |
+ fID = id; |
+ fImage = NULL; |
+ fPath = NULL; |
+ fMaskFormat = MASK_FORMAT_UNKNOWN; |
+ fForceBW = 0; |
+ } |
static unsigned ID2Code(uint32_t id) { |
- return id & kCodeMask; |
+ return (id & kCodeMask); |
} |
static unsigned ID2SubX(uint32_t id) { |
@@ -134,11 +150,16 @@ struct SkGlyph { |
x = FixedToSub(x); |
y = FixedToSub(y); |
return (x << (kSubShift + kSubShiftX)) | |
- (y << (kSubShift + kSubShiftY)) | |
- code; |
+ (y << (kSubShift + kSubShiftY)) | |
+ code; |
} |
- void toMask(SkMask* mask) const; |
+ // FIXME - This is needed because the Android frame work directly |
+ // accesses fID. Remove when fID accesses are cleaned up. |
mtklein
2015/02/24 23:33:48
As far as dirty hacks go, I don't think this makes
scroggo
2015/02/25 14:08:00
Android does not need a setter. That seems like th
|
+#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK |
+ public: |
+#endif |
+ uint32_t fID; |
}; |
#endif |