1 /* 2 * Copyright 2010 Google Inc. 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 #ifndef GrFontScaler_DEFINED 9 #define GrFontScaler_DEFINED 10 11 #include "GrGlyph.h" 12 #include "GrTypes.h" 13 14 #include "SkDescriptor.h" 15 16 class SkGlyph; 17 class SkPath; 18 19 /* 20 * Wrapper class to turn a font cache descriptor into a key 21 * for GrFontScaler-related lookups 22 */ 23 class GrFontDescKey : public SkRefCnt { 24 public: GrFontDescKey(const SkDescriptor & desc)25 explicit GrFontDescKey(const SkDescriptor& desc) : fDesc(desc), fHash(desc.getChecksum()) {} 26 getHash()27 uint32_t getHash() const { return fHash; } 28 29 bool operator==(const GrFontDescKey& rh) const { 30 return fHash == rh.fHash && fDesc.getDesc()->equals(*rh.fDesc.getDesc()); 31 } 32 33 private: 34 SkAutoDescriptor fDesc; 35 uint32_t fHash; 36 37 typedef SkRefCnt INHERITED; 38 }; 39 40 /* 41 * This is Gr's interface to the host platform's font scaler. 42 * 43 * The client is responsible for instantiating this. The instance is created 44 * for a specific font+size+matrix. 45 */ 46 class GrFontScaler : public SkRefCnt { 47 public: 48 explicit GrFontScaler(SkGlyphCache* strike); 49 virtual ~GrFontScaler(); 50 51 const GrFontDescKey* getKey(); 52 GrMaskFormat getMaskFormat() const; 53 GrMaskFormat getPackedGlyphMaskFormat(const SkGlyph&) const; 54 bool getPackedGlyphBounds(const SkGlyph&, SkIRect* bounds); 55 bool getPackedGlyphImage(const SkGlyph&, int width, int height, int rowBytes, 56 GrMaskFormat expectedMaskFormat, void* image); 57 bool getPackedGlyphDFBounds(const SkGlyph&, SkIRect* bounds); 58 bool getPackedGlyphDFImage(const SkGlyph&, int width, int height, void* image); 59 const SkPath* getGlyphPath(const SkGlyph&); 60 const SkGlyph& grToSkGlyph(GrGlyph::PackedID); 61 62 private: 63 SkGlyphCache* fStrike; 64 GrFontDescKey* fKey; 65 66 typedef SkRefCnt INHERITED; 67 }; 68 69 #endif 70