/* * Copyright 2010 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrFontScaler_DEFINED #define GrFontScaler_DEFINED #include "GrGlyph.h" #include "GrTypes.h" #include "SkDescriptor.h" class SkPath; /* * Wrapper class to turn a font cache descriptor into a key * for GrFontScaler-related lookups */ class GrFontDescKey : public SkRefCnt { public: SK_DECLARE_INST_COUNT(GrFontDescKey) typedef uint32_t Hash; explicit GrFontDescKey(const SkDescriptor& desc); virtual ~GrFontDescKey(); Hash getHash() const { return fHash; } bool operator<(const GrFontDescKey& rh) const { return fHash < rh.fHash || (fHash == rh.fHash && this->lt(rh)); } bool operator==(const GrFontDescKey& rh) const { return fHash == rh.fHash && this->eq(rh); } private: // helper functions for comparisons bool lt(const GrFontDescKey& rh) const; bool eq(const GrFontDescKey& rh) const; SkDescriptor* fDesc; enum { kMaxStorageInts = 16 }; uint32_t fStorage[kMaxStorageInts]; const Hash fHash; typedef SkRefCnt INHERITED; }; /* * This is Gr's interface to the host platform's font scaler. * * The client is responsible for instantiating this. The instance is created * for a specific font+size+matrix. */ class GrFontScaler : public SkRefCnt { public: SK_DECLARE_INST_COUNT(GrFontScaler) explicit GrFontScaler(SkGlyphCache* strike); virtual ~GrFontScaler(); const GrFontDescKey* getKey(); GrMaskFormat getMaskFormat() const; GrMaskFormat getPackedGlyphMaskFormat(GrGlyph::PackedID) const; bool getPackedGlyphBounds(GrGlyph::PackedID, SkIRect* bounds); bool getPackedGlyphImage(GrGlyph::PackedID, int width, int height, int rowBytes, void* image); bool getPackedGlyphDFBounds(GrGlyph::PackedID, SkIRect* bounds); bool getPackedGlyphDFImage(GrGlyph::PackedID, int width, int height, void* image); bool getGlyphPath(uint16_t glyphID, SkPath*); private: SkGlyphCache* fStrike; GrFontDescKey* fKey; typedef SkRefCnt INHERITED; }; #endif